Pass FecControllerOverride to Vp8FrameBufferControllerFactory::Create
Previously, FecControllerOverride was passed to
Vp8FrameBufferController::SetFecControllerOverride. Passing to
the factory is a more elegant way, since it's only used when
the controller is constructed.
TBR=kwiberg@webrtc.org
Bug: webrtc:10769
Change-Id: Iae599889e7ca9003e3200c2911239cbb763ee65a
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/144380
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Elad Alon <eladalon@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28443}
diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn
index 1646fe6..9d0c65b 100644
--- a/modules/video_coding/BUILD.gn
+++ b/modules/video_coding/BUILD.gn
@@ -848,6 +848,7 @@
"../../api:array_view",
"../../api:create_simulcast_test_fixture_api",
"../../api:fec_controller_api",
+ "../../api:mock_fec_controller_override",
"../../api:mock_video_decoder",
"../../api:mock_video_encoder",
"../../api:scoped_refptr",
diff --git a/modules/video_coding/codecs/vp8/default_temporal_layers.cc b/modules/video_coding/codecs/vp8/default_temporal_layers.cc
index 07d6c16..84e948e 100644
--- a/modules/video_coding/codecs/vp8/default_temporal_layers.cc
+++ b/modules/video_coding/codecs/vp8/default_temporal_layers.cc
@@ -257,11 +257,6 @@
// Ignore.
}
-void DefaultTemporalLayers::SetFecControllerOverride(
- FecControllerOverride* fec_controller_override) {
- // Ignore.
-}
-
size_t DefaultTemporalLayers::StreamCount() const {
return 1;
}
diff --git a/modules/video_coding/codecs/vp8/default_temporal_layers.h b/modules/video_coding/codecs/vp8/default_temporal_layers.h
index e8a1cee..9f86d40 100644
--- a/modules/video_coding/codecs/vp8/default_temporal_layers.h
+++ b/modules/video_coding/codecs/vp8/default_temporal_layers.h
@@ -22,7 +22,6 @@
#include <vector>
#include "absl/types/optional.h"
-#include "api/fec_controller_override.h"
#include "api/video_codecs/vp8_frame_config.h"
#include "api/video_codecs/vp8_temporal_layers.h"
#include "modules/video_coding/codecs/vp8/include/temporal_layers_checker.h"
@@ -37,9 +36,6 @@
void SetQpLimits(size_t stream_index, int min_qp, int max_qp) override;
- void SetFecControllerOverride(
- FecControllerOverride* fec_controller_override) override;
-
size_t StreamCount() const override;
bool SupportsEncoderFrameDropping(size_t stream_index) const override;
diff --git a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
index 9b984f7..c630e35 100644
--- a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
+++ b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
@@ -290,7 +290,8 @@
variable_framerate_experiment_(ParseVariableFramerateConfig(
"WebRTC-VP8VariableFramerateScreenshare")),
framerate_controller_(variable_framerate_experiment_.framerate_limit),
- num_steady_state_frames_(0) {
+ num_steady_state_frames_(0),
+ fec_controller_override_(nullptr) {
// TODO(eladalon/ilnik): These reservations might be wasting memory.
// InitEncode() is resizing to the actual size, which might be smaller.
raw_images_.reserve(kMaxSimulcastStreams);
@@ -452,8 +453,11 @@
void LibvpxVp8Encoder::SetFecControllerOverride(
FecControllerOverride* fec_controller_override) {
- RTC_DCHECK(fec_controller_override);
- // TODO(bugs.webrtc.og/10769): Pass on to the frame buffer controller.
+ // TODO(bugs.webrtc.org/10769): Update downstream and remove ability to
+ // pass nullptr.
+ // RTC_DCHECK(fec_controller_override);
+ RTC_DCHECK(!fec_controller_override_);
+ fec_controller_override_ = fec_controller_override;
}
// TODO(eladalon): s/inst/codec_settings/g.
@@ -491,11 +495,12 @@
RTC_DCHECK(!frame_buffer_controller_);
if (frame_buffer_controller_factory_) {
- frame_buffer_controller_ =
- frame_buffer_controller_factory_->Create(*inst, settings);
+ frame_buffer_controller_ = frame_buffer_controller_factory_->Create(
+ *inst, settings, fec_controller_override_);
} else {
Vp8TemporalLayersFactory factory;
- frame_buffer_controller_ = factory.Create(*inst, settings);
+ frame_buffer_controller_ =
+ factory.Create(*inst, settings, fec_controller_override_);
}
RTC_DCHECK(frame_buffer_controller_);
diff --git a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h
index 3caf3ab..49cf4cb 100644
--- a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h
+++ b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h
@@ -141,6 +141,8 @@
std::string group_name);
FramerateController framerate_controller_;
int num_steady_state_frames_;
+
+ FecControllerOverride* fec_controller_override_;
};
} // namespace webrtc
diff --git a/modules/video_coding/codecs/vp8/screenshare_layers.cc b/modules/video_coding/codecs/vp8/screenshare_layers.cc
index 84f3d11..b5b963e 100644
--- a/modules/video_coding/codecs/vp8/screenshare_layers.cc
+++ b/modules/video_coding/codecs/vp8/screenshare_layers.cc
@@ -87,11 +87,6 @@
}
}
-void ScreenshareLayers::SetFecControllerOverride(
- FecControllerOverride* fec_controller_override) {
- // Ignore.
-}
-
size_t ScreenshareLayers::StreamCount() const {
return 1;
}
diff --git a/modules/video_coding/codecs/vp8/screenshare_layers.h b/modules/video_coding/codecs/vp8/screenshare_layers.h
index 770ea01..5270ffe 100644
--- a/modules/video_coding/codecs/vp8/screenshare_layers.h
+++ b/modules/video_coding/codecs/vp8/screenshare_layers.h
@@ -14,7 +14,6 @@
#include <utility>
#include <vector>
-#include "api/fec_controller_override.h"
#include "api/video_codecs/vp8_frame_config.h"
#include "api/video_codecs/vp8_temporal_layers.h"
#include "modules/video_coding/codecs/vp8/include/temporal_layers_checker.h"
@@ -39,9 +38,6 @@
void SetQpLimits(size_t stream_index, int min_qp, int max_qp) override;
- void SetFecControllerOverride(
- FecControllerOverride* fec_controller_override) override;
-
size_t StreamCount() const override;
bool SupportsEncoderFrameDropping(size_t stream_index) const override;
diff --git a/modules/video_coding/video_codec_initializer_unittest.cc b/modules/video_coding/video_codec_initializer_unittest.cc
index 5cac795..36db33a 100644
--- a/modules/video_coding/video_codec_initializer_unittest.cc
+++ b/modules/video_coding/video_codec_initializer_unittest.cc
@@ -16,6 +16,7 @@
#include "absl/types/optional.h"
#include "api/scoped_refptr.h"
+#include "api/test/mock_fec_controller_override.h"
#include "api/video/builtin_video_bitrate_allocator_factory.h"
#include "api/video/video_bitrate_allocation.h"
#include "api/video/video_bitrate_allocator.h"
@@ -26,6 +27,7 @@
#include "modules/video_coding/codecs/vp9/include/vp9_globals.h"
#include "rtc_base/checks.h"
#include "rtc_base/ref_counted_object.h"
+#include "test/gmock.h"
#include "test/gtest.h"
namespace webrtc {
@@ -100,7 +102,8 @@
Vp8TemporalLayersFactory factory;
const VideoEncoder::Settings settings(VideoEncoder::Capabilities(false),
1, 1000);
- frame_buffer_controller_ = factory.Create(codec_out_, settings);
+ frame_buffer_controller_ =
+ factory.Create(codec_out_, settings, &fec_controller_override_);
}
return true;
}
@@ -130,6 +133,8 @@
return stream;
}
+ MockFecControllerOverride fec_controller_override_;
+
// Input settings.
VideoEncoderConfig config_;
std::vector<VideoStream> streams_;