diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc index ef1938eb9e..481567f6b6 100644 --- a/media/engine/webrtc_video_engine.cc +++ b/media/engine/webrtc_video_engine.cc @@ -328,10 +328,13 @@ absl::optional GetFallbackMinBpsFromFieldTrial( } int GetMinVideoBitrateBps(webrtc::VideoCodecType type) { + if (GetFallbackMinBpsFromFieldTrial(type).has_value()) { + return GetFallbackMinBpsFromFieldTrial(type).value(); + } if (webrtc::field_trial::IsEnabled(kMinVideoBitrateExperiment)) { return MinVideoBitrateConfig().min_video_bitrate->bps(); } - return GetFallbackMinBpsFromFieldTrial(type).value_or(kMinVideoBitrateBps); + return kMinVideoBitrateBps; } } // namespace diff --git a/media/engine/webrtc_video_engine.h b/media/engine/webrtc_video_engine.h index 50467cd804..f8d92d4d21 100644 --- a/media/engine/webrtc_video_engine.h +++ b/media/engine/webrtc_video_engine.h @@ -55,7 +55,7 @@ struct MinVideoBitrateConfig { webrtc::FieldTrialParameter min_video_bitrate; MinVideoBitrateConfig() - : min_video_bitrate("br", webrtc::DataRate::KilobitsPerSec<30>()) { + : min_video_bitrate("br", webrtc::DataRate::bps(kMinVideoBitrateBps)) { webrtc::ParseFieldTrial( {&min_video_bitrate}, webrtc::field_trial::FindFullName(kMinVideoBitrateExperiment)); diff --git a/video/video_send_stream_impl.cc b/video/video_send_stream_impl.cc index 50bbb1f978..76caeecdca 100644 --- a/video/video_send_stream_impl.cc +++ b/video/video_send_stream_impl.cc @@ -27,6 +27,7 @@ #include "rtc_base/atomic_ops.h" #include "rtc_base/checks.h" #include "rtc_base/experiments/alr_experiment.h" +#include "rtc_base/experiments/field_trial_parser.h" #include "rtc_base/experiments/rate_control_settings.h" #include "rtc_base/logging.h" #include "rtc_base/numerics/safe_conversions.h" @@ -57,6 +58,21 @@ bool TransportSeqNumExtensionConfigured(const VideoSendStream::Config& config) { const char kForcedFallbackFieldTrial[] = "WebRTC-VP8-Forced-Fallback-Encoder-v2"; +const int kDefaultEncoderMinBitrateBps = 30000; +const char kMinVideoBitrateExperiment[] = "WebRTC-Video-MinVideoBitrate"; + +struct MinVideoBitrateConfig { + webrtc::FieldTrialParameter min_video_bitrate; + + MinVideoBitrateConfig() + : min_video_bitrate("br", + webrtc::DataRate::bps(kDefaultEncoderMinBitrateBps)) { + webrtc::ParseFieldTrial( + {&min_video_bitrate}, + webrtc::field_trial::FindFullName(kMinVideoBitrateExperiment)); + } +}; + absl::optional GetFallbackMinBpsFromFieldTrial(VideoCodecType type) { if (type != kVideoCodecVP8) return absl::nullopt; @@ -84,9 +100,13 @@ absl::optional GetFallbackMinBpsFromFieldTrial(VideoCodecType type) { } int GetEncoderMinBitrateBps(VideoCodecType type) { - const int kDefaultEncoderMinBitrateBps = 30000; - return GetFallbackMinBpsFromFieldTrial(type).value_or( - kDefaultEncoderMinBitrateBps); + if (GetFallbackMinBpsFromFieldTrial(type).has_value()) { + return GetFallbackMinBpsFromFieldTrial(type).value(); + } + if (webrtc::field_trial::IsEnabled(kMinVideoBitrateExperiment)) { + return MinVideoBitrateConfig().min_video_bitrate->bps(); + } + return kDefaultEncoderMinBitrateBps; } // Calculate max padding bitrate for a multi layer codec.