diff --git a/rtc_base/experiments/audio_allocation_settings.cc b/rtc_base/experiments/audio_allocation_settings.cc index 034bcbb442..dff1aae461 100644 --- a/rtc_base/experiments/audio_allocation_settings.cc +++ b/rtc_base/experiments/audio_allocation_settings.cc @@ -9,6 +9,7 @@ */ #include "rtc_base/experiments/audio_allocation_settings.h" +#include "rtc_base/logging.h" #include "system_wrappers/include/field_trial.h" namespace webrtc { @@ -29,10 +30,11 @@ AudioAllocationSettings::AudioAllocationSettings() min_bitrate_("min"), max_bitrate_("max"), priority_bitrate_("prio_rate", DataRate::Zero()), + priority_bitrate_raw_("prio_rate_raw"), bitrate_priority_("rate_prio") { - ParseFieldTrial( - {&min_bitrate_, &max_bitrate_, &priority_bitrate_, &bitrate_priority_}, - field_trial::FindFullName("WebRTC-Audio-Allocation")); + ParseFieldTrial({&min_bitrate_, &max_bitrate_, &priority_bitrate_, + &priority_bitrate_raw_, &bitrate_priority_}, + field_trial::FindFullName("WebRTC-Audio-Allocation")); // TODO(mflodman): Keep testing this and set proper values. // Note: This is an early experiment currently only supported by Opus. @@ -40,6 +42,11 @@ AudioAllocationSettings::AudioAllocationSettings() constexpr int kMaxPacketSizeMs = WEBRTC_OPUS_SUPPORT_120MS_PTIME ? 120 : 60; min_overhead_bps_ = kOverheadPerPacket * 8 * 1000 / kMaxPacketSizeMs; } + // priority_bitrate_raw will override priority_bitrate. + if (priority_bitrate_raw_ && !priority_bitrate_->IsZero()) { + RTC_LOG(LS_WARNING) << "'priority_bitrate' and '_raw' are mutually " + "exclusive but both were configured."; + } } AudioAllocationSettings::~AudioAllocationSettings() {} @@ -111,6 +118,9 @@ absl::optional AudioAllocationSettings::MaxBitrate() const { } DataRate AudioAllocationSettings::DefaultPriorityBitrate() const { DataRate max_overhead = DataRate::Zero(); + if (priority_bitrate_raw_) { + return *priority_bitrate_raw_; + } if (send_side_bwe_with_overhead_) { const TimeDelta kMinPacketDuration = TimeDelta::ms(20); max_overhead = DataSize::bytes(kOverheadPerPacket) / kMinPacketDuration; diff --git a/rtc_base/experiments/audio_allocation_settings.h b/rtc_base/experiments/audio_allocation_settings.h index 6c655b8a24..8c5259b036 100644 --- a/rtc_base/experiments/audio_allocation_settings.h +++ b/rtc_base/experiments/audio_allocation_settings.h @@ -90,6 +90,9 @@ class AudioAllocationSettings { FieldTrialOptional min_bitrate_; FieldTrialOptional max_bitrate_; FieldTrialParameter priority_bitrate_; + // By default the priority_bitrate is compensated for packet overhead. + // Use this flag to configure a raw value instead. + FieldTrialOptional priority_bitrate_raw_; FieldTrialOptional bitrate_priority_; }; } // namespace webrtc