Set non-zero target bitrate for AV1 single spatial layer case
VideoCodecInitializer::SetupCodec never sets startBitrate, so SetAv1SvcConfig shouldn't use it. Bug: webrtc:12720 Change-Id: I04835dc27368f32c19132d93c72364173d7050fc Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/217382 Reviewed-by: Erik Språng <sprang@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/master@{#33915}
This commit is contained in:

committed by
WebRTC LUCI CQ

parent
5ae6c0da03
commit
c27c047e3e
@ -51,8 +51,9 @@ bool SetAv1SvcConfig(VideoCodec& video_codec) {
|
|||||||
if (info.num_spatial_layers == 1) {
|
if (info.num_spatial_layers == 1) {
|
||||||
SpatialLayer& spatial_layer = video_codec.spatialLayers[0];
|
SpatialLayer& spatial_layer = video_codec.spatialLayers[0];
|
||||||
spatial_layer.minBitrate = video_codec.minBitrate;
|
spatial_layer.minBitrate = video_codec.minBitrate;
|
||||||
spatial_layer.targetBitrate = video_codec.startBitrate;
|
|
||||||
spatial_layer.maxBitrate = video_codec.maxBitrate;
|
spatial_layer.maxBitrate = video_codec.maxBitrate;
|
||||||
|
spatial_layer.targetBitrate =
|
||||||
|
(video_codec.minBitrate + video_codec.maxBitrate) / 2;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,19 +97,21 @@ TEST(Av1SvcConfigTest, SetsNumberOfTemporalLayers) {
|
|||||||
EXPECT_EQ(video_codec.spatialLayers[0].numberOfTemporalLayers, 3);
|
EXPECT_EQ(video_codec.spatialLayers[0].numberOfTemporalLayers, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Av1SvcConfigTest, CopiesBitrateForSingleSpatialLayer) {
|
TEST(Av1SvcConfigTest, CopiesMinMaxBitrateForSingleSpatialLayer) {
|
||||||
VideoCodec video_codec;
|
VideoCodec video_codec;
|
||||||
video_codec.codecType = kVideoCodecAV1;
|
video_codec.codecType = kVideoCodecAV1;
|
||||||
video_codec.SetScalabilityMode("L1T3");
|
video_codec.SetScalabilityMode("L1T3");
|
||||||
video_codec.minBitrate = 100;
|
video_codec.minBitrate = 100;
|
||||||
video_codec.startBitrate = 200;
|
|
||||||
video_codec.maxBitrate = 500;
|
video_codec.maxBitrate = 500;
|
||||||
|
|
||||||
EXPECT_TRUE(SetAv1SvcConfig(video_codec));
|
EXPECT_TRUE(SetAv1SvcConfig(video_codec));
|
||||||
|
|
||||||
EXPECT_EQ(video_codec.spatialLayers[0].minBitrate, 100u);
|
EXPECT_EQ(video_codec.spatialLayers[0].minBitrate, 100u);
|
||||||
EXPECT_EQ(video_codec.spatialLayers[0].targetBitrate, 200u);
|
|
||||||
EXPECT_EQ(video_codec.spatialLayers[0].maxBitrate, 500u);
|
EXPECT_EQ(video_codec.spatialLayers[0].maxBitrate, 500u);
|
||||||
|
EXPECT_LE(video_codec.spatialLayers[0].minBitrate,
|
||||||
|
video_codec.spatialLayers[0].targetBitrate);
|
||||||
|
EXPECT_LE(video_codec.spatialLayers[0].targetBitrate,
|
||||||
|
video_codec.spatialLayers[0].maxBitrate);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Av1SvcConfigTest, SetsBitratesForMultipleSpatialLayers) {
|
TEST(Av1SvcConfigTest, SetsBitratesForMultipleSpatialLayers) {
|
||||||
|
@ -426,4 +426,39 @@ TEST_F(VideoCodecInitializerTest, Vp9DeactivateLayers) {
|
|||||||
EXPECT_FALSE(codec_out_.spatialLayers[2].active);
|
EXPECT_FALSE(codec_out_.spatialLayers[2].active);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(VideoCodecInitializerTest, Av1SingleSpatialLayerBitratesAreConsistent) {
|
||||||
|
VideoEncoderConfig config;
|
||||||
|
config.codec_type = VideoCodecType::kVideoCodecAV1;
|
||||||
|
std::vector<VideoStream> streams = {DefaultStream()};
|
||||||
|
streams[0].scalability_mode = "L1T2";
|
||||||
|
|
||||||
|
VideoCodec codec;
|
||||||
|
EXPECT_TRUE(VideoCodecInitializer::SetupCodec(config, streams, &codec));
|
||||||
|
|
||||||
|
EXPECT_GE(codec.spatialLayers[0].targetBitrate,
|
||||||
|
codec.spatialLayers[0].minBitrate);
|
||||||
|
EXPECT_LE(codec.spatialLayers[0].targetBitrate,
|
||||||
|
codec.spatialLayers[0].maxBitrate);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(VideoCodecInitializerTest, Av1TwoSpatialLayersBitratesAreConsistent) {
|
||||||
|
VideoEncoderConfig config;
|
||||||
|
config.codec_type = VideoCodecType::kVideoCodecAV1;
|
||||||
|
std::vector<VideoStream> streams = {DefaultStream()};
|
||||||
|
streams[0].scalability_mode = "L2T2";
|
||||||
|
|
||||||
|
VideoCodec codec;
|
||||||
|
EXPECT_TRUE(VideoCodecInitializer::SetupCodec(config, streams, &codec));
|
||||||
|
|
||||||
|
EXPECT_GE(codec.spatialLayers[0].targetBitrate,
|
||||||
|
codec.spatialLayers[0].minBitrate);
|
||||||
|
EXPECT_LE(codec.spatialLayers[0].targetBitrate,
|
||||||
|
codec.spatialLayers[0].maxBitrate);
|
||||||
|
|
||||||
|
EXPECT_GE(codec.spatialLayers[1].targetBitrate,
|
||||||
|
codec.spatialLayers[1].minBitrate);
|
||||||
|
EXPECT_LE(codec.spatialLayers[1].targetBitrate,
|
||||||
|
codec.spatialLayers[1].maxBitrate);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
Reference in New Issue
Block a user