Inform FrameBufferController of encoder capabilities
Bug: webrtc:10720
Change-Id: I958b83e29e8e87252e08419b8e16d554983a1a63
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/140941
Commit-Queue: Elad Alon <eladalon@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28242}
diff --git a/api/video_codecs/vp8_frame_buffer_controller.h b/api/video_codecs/vp8_frame_buffer_controller.h
index bcfbd97..a0e1c78 100644
--- a/api/video_codecs/vp8_frame_buffer_controller.h
+++ b/api/video_codecs/vp8_frame_buffer_controller.h
@@ -174,8 +174,18 @@
public:
virtual ~Vp8FrameBufferControllerFactory() = default;
+ // TODO(bugs.webrtc.org/10720): Update downstream and remove.
virtual std::unique_ptr<Vp8FrameBufferController> Create(
- const VideoCodec& codec) = 0;
+ const VideoCodec& codec) {
+ return nullptr;
+ }
+
+ // TODO(bugs.webrtc.org/10720): Update downstream and make pure-virtual.
+ virtual std::unique_ptr<Vp8FrameBufferController> Create(
+ const VideoCodec& codec,
+ const VideoEncoder::Settings& settings) {
+ return nullptr;
+ }
};
} // namespace webrtc
diff --git a/api/video_codecs/vp8_temporal_layers_factory.cc b/api/video_codecs/vp8_temporal_layers_factory.cc
index 2eb7bb9..878fa79 100644
--- a/api/video_codecs/vp8_temporal_layers_factory.cc
+++ b/api/video_codecs/vp8_temporal_layers_factory.cc
@@ -23,7 +23,8 @@
namespace webrtc {
std::unique_ptr<Vp8FrameBufferController> Vp8TemporalLayersFactory::Create(
- const VideoCodec& codec) {
+ const VideoCodec& codec,
+ const VideoEncoder::Settings& settings) {
std::vector<std::unique_ptr<Vp8FrameBufferController>> controllers;
const int num_streams = SimulcastUtility::NumberOfSimulcastStreams(codec);
RTC_DCHECK_GE(num_streams, 1);
diff --git a/api/video_codecs/vp8_temporal_layers_factory.h b/api/video_codecs/vp8_temporal_layers_factory.h
index 9c65d4c..fd5e5d6 100644
--- a/api/video_codecs/vp8_temporal_layers_factory.h
+++ b/api/video_codecs/vp8_temporal_layers_factory.h
@@ -22,7 +22,8 @@
~Vp8TemporalLayersFactory() override = default;
std::unique_ptr<Vp8FrameBufferController> Create(
- const VideoCodec& codec) override;
+ const VideoCodec& codec,
+ const VideoEncoder::Settings& settings) override;
};
} // namespace webrtc
diff --git a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
index 06cf870..70a00d2 100644
--- a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
+++ b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
@@ -486,10 +486,11 @@
RTC_DCHECK(!frame_buffer_controller_);
if (frame_buffer_controller_factory_) {
- frame_buffer_controller_ = frame_buffer_controller_factory_->Create(*inst);
+ frame_buffer_controller_ =
+ frame_buffer_controller_factory_->Create(*inst, settings);
} else {
Vp8TemporalLayersFactory factory;
- frame_buffer_controller_ = factory.Create(*inst);
+ frame_buffer_controller_ = factory.Create(*inst, settings);
}
RTC_DCHECK(frame_buffer_controller_);
diff --git a/modules/video_coding/video_codec_initializer_unittest.cc b/modules/video_coding/video_codec_initializer_unittest.cc
index 09b01f6..5cac795 100644
--- a/modules/video_coding/video_codec_initializer_unittest.cc
+++ b/modules/video_coding/video_codec_initializer_unittest.cc
@@ -98,7 +98,9 @@
// Make sure temporal layers instances have been created.
if (codec_out_.codecType == VideoCodecType::kVideoCodecVP8) {
Vp8TemporalLayersFactory factory;
- frame_buffer_controller_ = factory.Create(codec_out_);
+ const VideoEncoder::Settings settings(VideoEncoder::Capabilities(false),
+ 1, 1000);
+ frame_buffer_controller_ = factory.Create(codec_out_, settings);
}
return true;
}
diff --git a/test/fake_vp8_encoder.cc b/test/fake_vp8_encoder.cc
index ee7a7ab..9d8d510 100644
--- a/test/fake_vp8_encoder.cc
+++ b/test/fake_vp8_encoder.cc
@@ -58,7 +58,7 @@
}
Vp8TemporalLayersFactory factory;
- frame_buffer_controller_ = factory.Create(*config);
+ frame_buffer_controller_ = factory.Create(*config, settings);
return WEBRTC_VIDEO_CODEC_OK;
}
diff --git a/video/video_stream_encoder_unittest.cc b/video/video_stream_encoder_unittest.cc
index 1486606d..12e2163 100644
--- a/video/video_stream_encoder_unittest.cc
+++ b/video/video_stream_encoder_unittest.cc
@@ -726,7 +726,7 @@
// Simulate setting up temporal layers, in order to validate the life
// cycle of these objects.
Vp8TemporalLayersFactory factory;
- frame_buffer_controller_ = factory.Create(*config);
+ frame_buffer_controller_ = factory.Create(*config, settings);
}
if (force_init_encode_failed_) {
initialized_ = EncoderState::kInitializationFailed;