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}
This commit is contained in:
Elad Alon 2019-06-07 23:10:00 +02:00 committed by Commit Bot
parent 00e71ef49e
commit a27958421c
7 changed files with 23 additions and 8 deletions

View file

@ -174,8 +174,18 @@ class Vp8FrameBufferControllerFactory {
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

View file

@ -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);

View file

@ -22,7 +22,8 @@ class Vp8TemporalLayersFactory : public Vp8FrameBufferControllerFactory {
~Vp8TemporalLayersFactory() override = default;
std::unique_ptr<Vp8FrameBufferController> Create(
const VideoCodec& codec) override;
const VideoCodec& codec,
const VideoEncoder::Settings& settings) override;
};
} // namespace webrtc

View file

@ -486,10 +486,11 @@ int LibvpxVp8Encoder::InitEncode(const VideoCodec* inst,
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_);

View file

@ -98,7 +98,9 @@ class VideoCodecInitializerTest : public ::testing::Test {
// 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;
}

View file

@ -58,7 +58,7 @@ int32_t FakeVP8Encoder::InitEncode(const VideoCodec* config,
}
Vp8TemporalLayersFactory factory;
frame_buffer_controller_ = factory.Create(*config);
frame_buffer_controller_ = factory.Create(*config, settings);
return WEBRTC_VIDEO_CODEC_OK;
}

View file

@ -726,7 +726,7 @@ class VideoStreamEncoderTest : public ::testing::Test {
// 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;