Fix WebRTC-Video-MinVideoBitrate for VP9

Make sure the experiment-derived value is used for VP9.

Bug: webrtc:11024
Change-Id: I80b6d388486f2dec793bc8ca872babe6165dcfb2
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/156562
Commit-Queue: Elad Alon <eladalon@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29453}
diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn
index fbd66dd..8e532d8 100644
--- a/modules/video_coding/BUILD.gn
+++ b/modules/video_coding/BUILD.gn
@@ -159,6 +159,7 @@
     "../../rtc_base/experiments:alr_experiment",
     "../../rtc_base/experiments:field_trial_parser",
     "../../rtc_base/experiments:jitter_upper_bound_experiment",
+    "../../rtc_base/experiments:min_video_bitrate_experiment",
     "../../rtc_base/experiments:rtt_mult_experiment",
     "../../rtc_base/synchronization:sequence_checker",
     "../../rtc_base/system:fallthrough",
diff --git a/modules/video_coding/video_codec_initializer.cc b/modules/video_coding/video_codec_initializer.cc
index b05f0a7..1ede93b 100644
--- a/modules/video_coding/video_codec_initializer.cc
+++ b/modules/video_coding/video_codec_initializer.cc
@@ -17,12 +17,15 @@
 
 #include "absl/types/optional.h"
 #include "api/scoped_refptr.h"
+#include "api/units/data_rate.h"
 #include "api/video/video_bitrate_allocation.h"
 #include "api/video_codecs/video_encoder.h"
 #include "modules/video_coding/codecs/vp9/svc_config.h"
 #include "modules/video_coding/include/video_coding_defines.h"
 #include "rtc_base/checks.h"
+#include "rtc_base/experiments/min_video_bitrate_experiment.h"
 #include "rtc_base/logging.h"
+#include "rtc_base/numerics/safe_conversions.h"
 
 namespace webrtc {
 
@@ -241,6 +244,18 @@
       break;
   }
 
+  const absl::optional<DataRate> experimental_min_bitrate =
+      GetExperimentalMinVideoBitrate(video_codec.codecType);
+  if (experimental_min_bitrate) {
+    const int experimental_min_bitrate_kbps =
+        rtc::saturated_cast<int>(experimental_min_bitrate->kbps());
+    video_codec.minBitrate = experimental_min_bitrate_kbps;
+    video_codec.simulcastStream[0].minBitrate = experimental_min_bitrate_kbps;
+    if (video_codec.codecType == kVideoCodecVP9) {
+      video_codec.spatialLayers[0].minBitrate = experimental_min_bitrate_kbps;
+    }
+  }
+
   return video_codec;
 }
 
diff --git a/video/video_send_stream_impl.cc b/video/video_send_stream_impl.cc
index 4b65ea8..f1c2d3f 100644
--- a/video/video_send_stream_impl.cc
+++ b/video/video_send_stream_impl.cc
@@ -506,13 +506,11 @@
 
   const absl::optional<DataRate> experimental_min_bitrate =
       GetExperimentalMinVideoBitrate(codec_type);
-  const int min_bitrate_bps =
-      experimental_min_bitrate
-          ? rtc::saturated_cast<int>(experimental_min_bitrate->bps())
-          : kDefaultMinVideoBitrateBps;
-
   encoder_min_bitrate_bps_ =
-      std::max(streams[0].min_bitrate_bps, min_bitrate_bps);
+      experimental_min_bitrate
+          ? experimental_min_bitrate->bps()
+          : std::max(streams[0].min_bitrate_bps, kDefaultMinVideoBitrateBps);
+
   encoder_max_bitrate_bps_ = 0;
   double stream_bitrate_priority_sum = 0;
   for (const auto& stream : streams) {