diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc index 4561c7f62e..393fbc5345 100644 --- a/media/engine/webrtc_video_engine.cc +++ b/media/engine/webrtc_video_engine.cc @@ -20,6 +20,7 @@ #include "absl/strings/match.h" #include "api/datagram_transport_interface.h" #include "api/video/video_codec_constants.h" +#include "api/video/video_codec_type.h" #include "api/video_codecs/sdp_video_format.h" #include "api/video_codecs/video_decoder_factory.h" #include "api/video_codecs/video_encoder.h" @@ -294,7 +295,11 @@ absl::optional GetVp9TemporalLayersFromFieldTrial() { const char kForcedFallbackFieldTrial[] = "WebRTC-VP8-Forced-Fallback-Encoder-v2"; -absl::optional GetFallbackMinBpsFromFieldTrial() { +absl::optional GetFallbackMinBpsFromFieldTrial( + webrtc::VideoCodecType type) { + if (type != webrtc::kVideoCodecVP8) + return absl::nullopt; + if (!webrtc::field_trial::IsEnabled(kForcedFallbackFieldTrial)) return absl::nullopt; @@ -317,8 +322,8 @@ absl::optional GetFallbackMinBpsFromFieldTrial() { return min_bps; } -int GetMinVideoBitrateBps() { - return GetFallbackMinBpsFromFieldTrial().value_or(kMinVideoBitrateBps); +int GetMinVideoBitrateBps(webrtc::VideoCodecType type) { + return GetFallbackMinBpsFromFieldTrial(type).value_or(kMinVideoBitrateBps); } } // namespace @@ -3041,7 +3046,7 @@ std::vector EncoderStreamFactory::CreateEncoderStreams( : GetMaxDefaultVideoBitrateKbps(width, height, is_screenshare_) * 1000; - int min_bitrate_bps = GetMinVideoBitrateBps(); + int min_bitrate_bps = GetMinVideoBitrateBps(encoder_config.codec_type); if (encoder_config.simulcast_layers[0].min_bitrate_bps > 0) { // Use set min bitrate. min_bitrate_bps = encoder_config.simulcast_layers[0].min_bitrate_bps; diff --git a/video/video_send_stream_impl.cc b/video/video_send_stream_impl.cc index 058686905b..dc52b86e30 100644 --- a/video/video_send_stream_impl.cc +++ b/video/video_send_stream_impl.cc @@ -56,7 +56,10 @@ bool TransportSeqNumExtensionConfigured(const VideoSendStream::Config& config) { const char kForcedFallbackFieldTrial[] = "WebRTC-VP8-Forced-Fallback-Encoder-v2"; -absl::optional GetFallbackMinBpsFromFieldTrial() { +absl::optional GetFallbackMinBpsFromFieldTrial(VideoCodecType type) { + if (type != kVideoCodecVP8) + return absl::nullopt; + if (!webrtc::field_trial::IsEnabled(kForcedFallbackFieldTrial)) return absl::nullopt; @@ -79,9 +82,9 @@ absl::optional GetFallbackMinBpsFromFieldTrial() { return min_bps; } -int GetEncoderMinBitrateBps() { +int GetEncoderMinBitrateBps(VideoCodecType type) { const int kDefaultEncoderMinBitrateBps = 30000; - return GetFallbackMinBpsFromFieldTrial().value_or( + return GetFallbackMinBpsFromFieldTrial(type).value_or( kDefaultEncoderMinBitrateBps); } @@ -532,7 +535,9 @@ void VideoSendStreamImpl::OnEncoderConfigurationChanged( RTC_DCHECK_RUN_ON(worker_queue_); encoder_min_bitrate_bps_ = - std::max(streams[0].min_bitrate_bps, GetEncoderMinBitrateBps()); + std::max(streams[0].min_bitrate_bps, + GetEncoderMinBitrateBps( + PayloadStringToCodecType(config_->rtp.payload_name))); encoder_max_bitrate_bps_ = 0; double stream_bitrate_priority_sum = 0; for (const auto& stream : streams) {