From 7f8dbe18ea76ca89f752545f777c4f330d663fed Mon Sep 17 00:00:00 2001 From: Christoffer Rodbro Date: Wed, 17 Jul 2019 15:54:51 +0200 Subject: [PATCH] Add config to specify raw audio priority bitrate including overhead. Bug: webrtc:10815 Change-Id: I6a498d6c6bcd4fe4ba6ccc4d6f407d686528d946 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/145333 Commit-Queue: Christoffer Rodbro Reviewed-by: Sebastian Jansson Cr-Commit-Position: refs/heads/master@{#28590} --- .../experiments/audio_allocation_settings.cc | 16 +++++++++++++--- rtc_base/experiments/audio_allocation_settings.h | 3 +++ 2 files changed, 16 insertions(+), 3 deletions(-) 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