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}
This commit is contained in:
parent
b6477858ac
commit
1710706db8
@ -417,33 +417,6 @@ class VideoStreamEncoderUnderTest : public VideoStreamEncoder {
|
||||
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 @@ class VideoStreamEncoderTest : public ::testing::Test {
|
||||
|
||||
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 @@ class VideoStreamEncoderTest : public ::testing::Test {
|
||||
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 @@ TEST_F(VideoStreamEncoderTest, OveruseDetectorUpdatedOnReconfigureAndAdaption) {
|
||||
|
||||
// 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 @@ TEST_F(VideoStreamEncoderTest,
|
||||
|
||||
// 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 @@ TEST_F(VideoStreamEncoderTest,
|
||||
|
||||
// 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 @@ TEST_F(VideoStreamEncoderTest,
|
||||
|
||||
// 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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user