diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn index fbd66ddf7b..8e532d85ec 100644 --- a/modules/video_coding/BUILD.gn +++ b/modules/video_coding/BUILD.gn @@ -159,6 +159,7 @@ rtc_static_library("video_coding") { "../../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 b05f0a77c6..1ede93b679 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 @@ VideoCodec VideoCodecInitializer::VideoEncoderConfigToVideoCodec( break; } + const absl::optional experimental_min_bitrate = + GetExperimentalMinVideoBitrate(video_codec.codecType); + if (experimental_min_bitrate) { + const int experimental_min_bitrate_kbps = + rtc::saturated_cast(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 4b65ea884b..f1c2d3fbc1 100644 --- a/video/video_send_stream_impl.cc +++ b/video/video_send_stream_impl.cc @@ -506,13 +506,11 @@ void VideoSendStreamImpl::OnEncoderConfigurationChanged( const absl::optional experimental_min_bitrate = GetExperimentalMinVideoBitrate(codec_type); - const int min_bitrate_bps = - experimental_min_bitrate - ? rtc::saturated_cast(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) {