mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 05:40:42 +01:00
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:
parent
00e71ef49e
commit
a27958421c
7 changed files with 23 additions and 8 deletions
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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_);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue