From 8c5520cfcaf9e869c83b83ec84bc5c507c8e349f Mon Sep 17 00:00:00 2001 From: Ying Wang Date: Tue, 3 Sep 2019 15:25:21 +0000 Subject: [PATCH] Reland "Make the min video bitrate in VideoSendStream configurable." MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 1d2149c59c2c1b2834b8cb7983ad56b213129a42. Reason for revert: The failed test is flaky recently. Original change's description: > Revert "Make the min video bitrate in VideoSendStream configurable." > > This reverts commit b2fb0b937ce97b4ccf6363d4f91620a7ab02e87e. > > Reason for revert: breaking downstream projects > > Original change's description: > > Make the min video bitrate in VideoSendStream configurable. > > > > "WebRTC-VP8-Forced-Fallback-Encoder-v2" affect VP8 only, "WebRTC-Video-MinVideoBitrate" apply to all codec. When both field trial string are set, the bitrate set by "WebRTC-VP8-Forced-Fallback-Encoder-v2" will be used. > > > > Bug: webrtc:10915 > > Change-Id: I63da5909c04ecfad99e93a535fbf71293890fd11 > > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/151135 > > Commit-Queue: Ying Wang > > Reviewed-by: Åsa Persson > > Reviewed-by: Ilya Nikolaevskiy > > Reviewed-by: Christoffer Rodbro > > Cr-Commit-Position: refs/heads/master@{#29047} > > TBR=ilnik@webrtc.org,asapersson@webrtc.org,crodbro@webrtc.org,yinwa@webrtc.org > > Change-Id: If61c18a36ac2778226da4d2631da1c18e7d4ef81 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: webrtc:10915 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/151240 > Reviewed-by: Alessio Bazzica > Commit-Queue: Alessio Bazzica > Cr-Commit-Position: refs/heads/master@{#29049} TBR=ilnik@webrtc.org,alessiob@webrtc.org,asapersson@webrtc.org,crodbro@webrtc.org,yinwa@webrtc.org Change-Id: I8df97f7b8ecbea1215eef44d485c179dc4e6246c No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: webrtc:10915 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/151241 Reviewed-by: Ying Wang Commit-Queue: Ying Wang Cr-Commit-Position: refs/heads/master@{#29050} --- media/engine/webrtc_video_engine.cc | 5 ++++- media/engine/webrtc_video_engine.h | 2 +- video/video_send_stream_impl.cc | 26 +++++++++++++++++++++++--- 3 files changed, 28 insertions(+), 5 deletions(-) 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.