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}
diff --git a/modules/video_coding/codecs/av1/av1_svc_config.cc b/modules/video_coding/codecs/av1/av1_svc_config.cc
index 1e61477..b15443c 100644
--- a/modules/video_coding/codecs/av1/av1_svc_config.cc
+++ b/modules/video_coding/codecs/av1/av1_svc_config.cc
@@ -51,8 +51,9 @@
   if (info.num_spatial_layers == 1) {
     SpatialLayer& spatial_layer = video_codec.spatialLayers[0];
     spatial_layer.minBitrate = video_codec.minBitrate;
-    spatial_layer.targetBitrate = video_codec.startBitrate;
     spatial_layer.maxBitrate = video_codec.maxBitrate;
+    spatial_layer.targetBitrate =
+        (video_codec.minBitrate + video_codec.maxBitrate) / 2;
     return true;
   }
 
diff --git a/modules/video_coding/codecs/av1/av1_svc_config_unittest.cc b/modules/video_coding/codecs/av1/av1_svc_config_unittest.cc
index 02ded1c..e603532 100644
--- a/modules/video_coding/codecs/av1/av1_svc_config_unittest.cc
+++ b/modules/video_coding/codecs/av1/av1_svc_config_unittest.cc
@@ -97,19 +97,21 @@
   EXPECT_EQ(video_codec.spatialLayers[0].numberOfTemporalLayers, 3);
 }
 
-TEST(Av1SvcConfigTest, CopiesBitrateForSingleSpatialLayer) {
+TEST(Av1SvcConfigTest, CopiesMinMaxBitrateForSingleSpatialLayer) {
   VideoCodec video_codec;
   video_codec.codecType = kVideoCodecAV1;
   video_codec.SetScalabilityMode("L1T3");
   video_codec.minBitrate = 100;
-  video_codec.startBitrate = 200;
   video_codec.maxBitrate = 500;
 
   EXPECT_TRUE(SetAv1SvcConfig(video_codec));
 
   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_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) {
diff --git a/modules/video_coding/video_codec_initializer_unittest.cc b/modules/video_coding/video_codec_initializer_unittest.cc
index f7fde8d..da3d80d 100644
--- a/modules/video_coding/video_codec_initializer_unittest.cc
+++ b/modules/video_coding/video_codec_initializer_unittest.cc
@@ -426,4 +426,39 @@
   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