Use RtpEncodingParameters min bitrate on lowest spatial layer if set.
Bug: b/299588022 Change-Id: I32dcf6763dbea184faf40cf743a9370073761762 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/355864 Reviewed-by: Erik Språng <sprang@webrtc.org> Commit-Queue: Åsa Persson <asapersson@webrtc.org> Cr-Commit-Position: refs/heads/main@{#42572}
This commit is contained in:
parent
a58047d4e9
commit
445d403eca
@ -301,6 +301,14 @@ VideoCodec VideoCodecInitializer::SetupCodec(
|
||||
streams.back().num_temporal_layers.value_or(1),
|
||||
/*num_spatial_layers=*/
|
||||
std::max<int>(config.spatial_layers.size(), 1))) {
|
||||
// If min bitrate is set via RtpEncodingParameters, use this value on
|
||||
// lowest spatial layer.
|
||||
if (!config.simulcast_layers.empty() &&
|
||||
config.simulcast_layers[0].min_bitrate_bps > 0) {
|
||||
video_codec.spatialLayers[0].minBitrate = std::min(
|
||||
config.simulcast_layers[0].min_bitrate_bps / 1000,
|
||||
static_cast<int>(video_codec.spatialLayers[0].targetBitrate));
|
||||
}
|
||||
for (size_t i = 0; i < config.spatial_layers.size(); ++i) {
|
||||
video_codec.spatialLayers[i].active = config.spatial_layers[i].active;
|
||||
}
|
||||
|
||||
@ -535,6 +535,51 @@ TEST_F(VideoCodecInitializerTest, Av1TwoSpatialLayersBitratesAreConsistent) {
|
||||
codec.spatialLayers[1].maxBitrate);
|
||||
}
|
||||
|
||||
TEST_F(VideoCodecInitializerTest, Av1ConfiguredMinBitrateApplied) {
|
||||
VideoEncoderConfig config;
|
||||
config.simulcast_layers.resize(1);
|
||||
config.simulcast_layers[0].min_bitrate_bps = 28000;
|
||||
config.codec_type = VideoCodecType::kVideoCodecAV1;
|
||||
std::vector<VideoStream> streams = {DefaultStream()};
|
||||
streams[0].scalability_mode = ScalabilityMode::kL3T2;
|
||||
|
||||
VideoCodec codec =
|
||||
VideoCodecInitializer::SetupCodec(env_.field_trials(), config, streams);
|
||||
|
||||
EXPECT_EQ(codec.spatialLayers[0].minBitrate, 28u);
|
||||
EXPECT_GE(codec.spatialLayers[0].targetBitrate,
|
||||
codec.spatialLayers[0].minBitrate);
|
||||
}
|
||||
|
||||
TEST_F(VideoCodecInitializerTest,
|
||||
Av1ConfiguredMinBitrateLimitedByDefaultTargetBitrate) {
|
||||
VideoEncoderConfig config;
|
||||
config.simulcast_layers.resize(1);
|
||||
config.simulcast_layers[0].min_bitrate_bps = 2228000;
|
||||
config.codec_type = VideoCodecType::kVideoCodecAV1;
|
||||
std::vector<VideoStream> streams = {DefaultStream()};
|
||||
streams[0].scalability_mode = ScalabilityMode::kL3T2;
|
||||
|
||||
VideoCodec codec =
|
||||
VideoCodecInitializer::SetupCodec(env_.field_trials(), config, streams);
|
||||
|
||||
EXPECT_GE(codec.spatialLayers[0].targetBitrate,
|
||||
codec.spatialLayers[0].minBitrate);
|
||||
}
|
||||
|
||||
TEST_F(VideoCodecInitializerTest, Av1ConfiguredMinBitrateNotAppliedIfUnset) {
|
||||
VideoEncoderConfig config;
|
||||
config.simulcast_layers.resize(1);
|
||||
config.codec_type = VideoCodecType::kVideoCodecAV1;
|
||||
std::vector<VideoStream> streams = {DefaultStream()};
|
||||
streams[0].scalability_mode = ScalabilityMode::kL3T2;
|
||||
|
||||
VideoCodec codec =
|
||||
VideoCodecInitializer::SetupCodec(env_.field_trials(), config, streams);
|
||||
|
||||
EXPECT_GT(codec.spatialLayers[0].minBitrate, 0u);
|
||||
}
|
||||
|
||||
TEST_F(VideoCodecInitializerTest, Av1TwoSpatialLayersActiveByDefault) {
|
||||
VideoEncoderConfig config;
|
||||
config.codec_type = VideoCodecType::kVideoCodecAV1;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user