Configure framerate/temporal layers via VideoEncoderConfig.
Bug: none
Change-Id: Ia8d350a8a71ce21691eba38db71248c10a7728a7
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/186663
Commit-Queue: Åsa Persson <asapersson@webrtc.org>
Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32350}
diff --git a/video/video_stream_encoder_unittest.cc b/video/video_stream_encoder_unittest.cc
index 5b144b1..0fe4869 100644
--- a/video/video_stream_encoder_unittest.cc
+++ b/video/video_stream_encoder_unittest.cc
@@ -417,33 +417,6 @@
FakeAdaptationConstraint fake_adaptation_constraint_;
};
-class VideoStreamFactory
- : public VideoEncoderConfig::VideoStreamFactoryInterface {
- public:
- explicit VideoStreamFactory(size_t num_temporal_layers, int framerate)
- : num_temporal_layers_(num_temporal_layers), framerate_(framerate) {
- EXPECT_GT(num_temporal_layers, 0u);
- EXPECT_GT(framerate, 0);
- }
-
- private:
- std::vector<VideoStream> CreateEncoderStreams(
- int width,
- int height,
- const VideoEncoderConfig& encoder_config) override {
- std::vector<VideoStream> streams =
- test::CreateVideoStreams(width, height, encoder_config);
- for (VideoStream& stream : streams) {
- stream.num_temporal_layers = num_temporal_layers_;
- stream.max_framerate = framerate_;
- }
- return streams;
- }
-
- const size_t num_temporal_layers_;
- const int framerate_;
-};
-
// Simulates simulcast behavior and makes highest stream resolutions divisible
// by 4.
class CroppingVideoStreamFactory
@@ -651,16 +624,11 @@
VideoEncoderConfig video_encoder_config;
test::FillEncoderConfiguration(kVideoCodecVP8, 1, &video_encoder_config);
- video_encoder_config.video_stream_factory =
- new rtc::RefCountedObject<VideoStreamFactory>(1, max_framerate_);
+ EXPECT_EQ(1u, video_encoder_config.simulcast_layers.size());
+ video_encoder_config.simulcast_layers[0].num_temporal_layers = 1;
+ video_encoder_config.simulcast_layers[0].max_framerate = max_framerate_;
video_encoder_config_ = video_encoder_config.Copy();
- // Framerate limit is specified by the VideoStreamFactory.
- std::vector<VideoStream> streams =
- video_encoder_config.video_stream_factory->CreateEncoderStreams(
- codec_width_, codec_height_, video_encoder_config);
- max_framerate_ = streams[0].max_framerate;
-
ConfigureEncoder(std::move(video_encoder_config));
}
@@ -693,13 +661,14 @@
video_send_config_.encoder_settings.allocation_cb_type = allocation_cb_type;
VideoEncoderConfig video_encoder_config;
- video_encoder_config.codec_type = PayloadStringToCodecType(payload_name);
- video_encoder_config.number_of_streams = num_streams;
+ test::FillEncoderConfiguration(PayloadStringToCodecType(payload_name),
+ num_streams, &video_encoder_config);
+ for (auto& layer : video_encoder_config.simulcast_layers) {
+ layer.num_temporal_layers = num_temporal_layers;
+ layer.max_framerate = kDefaultFramerate;
+ }
video_encoder_config.max_bitrate_bps =
num_streams == 1 ? kTargetBitrateBps : kSimulcastTargetBitrateBps;
- video_encoder_config.video_stream_factory =
- new rtc::RefCountedObject<VideoStreamFactory>(num_temporal_layers,
- kDefaultFramerate);
video_encoder_config.content_type =
screenshare ? VideoEncoderConfig::ContentType::kScreen
: VideoEncoderConfig::ContentType::kRealtimeVideo;
@@ -4074,11 +4043,9 @@
// Trigger reconfigure encoder (without resetting the entire instance).
VideoEncoderConfig video_encoder_config;
- video_encoder_config.codec_type = kVideoCodecVP8;
+ test::FillEncoderConfiguration(kVideoCodecVP8, 1, &video_encoder_config);
+ video_encoder_config.simulcast_layers[0].max_framerate = kFramerate;
video_encoder_config.max_bitrate_bps = kTargetBitrateBps;
- video_encoder_config.number_of_streams = 1;
- video_encoder_config.video_stream_factory =
- new rtc::RefCountedObject<VideoStreamFactory>(1, kFramerate);
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
kMaxPayloadLength);
video_stream_encoder_->WaitUntilTaskQueueIsIdle();
@@ -4129,13 +4096,11 @@
// Trigger initial configuration.
VideoEncoderConfig video_encoder_config;
- video_encoder_config.codec_type = kVideoCodecVP8;
+ test::FillEncoderConfiguration(kVideoCodecVP8, 1, &video_encoder_config);
+ video_encoder_config.simulcast_layers[0].max_framerate = kLowFramerate;
video_encoder_config.max_bitrate_bps = kTargetBitrateBps;
- video_encoder_config.number_of_streams = 1;
- video_encoder_config.video_stream_factory =
- new rtc::RefCountedObject<VideoStreamFactory>(1, kLowFramerate);
source.IncomingCapturedFrame(CreateFrame(1, kFrameWidth, kFrameHeight));
- video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
+ video_stream_encoder_->ConfigureEncoder(video_encoder_config.Copy(),
kMaxPayloadLength);
video_stream_encoder_->WaitUntilTaskQueueIsIdle();
@@ -4155,8 +4120,7 @@
// Reconfigure the encoder with a new (higher max framerate), max fps should
// still respect the adaptation.
- video_encoder_config.video_stream_factory =
- new rtc::RefCountedObject<VideoStreamFactory>(1, kHighFramerate);
+ video_encoder_config.simulcast_layers[0].max_framerate = kHighFramerate;
source.IncomingCapturedFrame(CreateFrame(1, kFrameWidth, kFrameHeight));
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
kMaxPayloadLength);
@@ -4195,11 +4159,9 @@
// Trigger initial configuration.
VideoEncoderConfig video_encoder_config;
- video_encoder_config.codec_type = kVideoCodecVP8;
+ test::FillEncoderConfiguration(kVideoCodecVP8, 1, &video_encoder_config);
+ video_encoder_config.simulcast_layers[0].max_framerate = kFramerate;
video_encoder_config.max_bitrate_bps = kTargetBitrateBps;
- video_encoder_config.number_of_streams = 1;
- video_encoder_config.video_stream_factory =
- new rtc::RefCountedObject<VideoStreamFactory>(1, kFramerate);
source.IncomingCapturedFrame(CreateFrame(1, kFrameWidth, kFrameHeight));
video_stream_encoder_->ConfigureEncoder(std::move(video_encoder_config),
kMaxPayloadLength);