Index: webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc |
diff --git a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc |
index 40ad595e5c2b76b4a35236d1cfd34a267caabc48..af66cd3634ee1cdabcfab57f18c80c953a0a9391 100644 |
--- a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc |
+++ b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc |
@@ -15,12 +15,14 @@ |
#include "webrtc/base/analytics/exp_filter.h" |
#include "webrtc/base/checks.h" |
+#include "webrtc/base/logging.h" |
#include "webrtc/base/safe_conversions.h" |
#include "webrtc/common_types.h" |
#include "webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.h" |
#include "webrtc/modules/audio_coding/audio_network_adaptor/controller_manager.h" |
#include "webrtc/modules/audio_coding/codecs/opus/opus_interface.h" |
#include "webrtc/system_wrappers/include/clock.h" |
+#include "webrtc/system_wrappers/include/field_trial.h" |
namespace webrtc { |
@@ -291,10 +293,25 @@ void AudioEncoderOpus::OnReceivedUplinkPacketLossFraction( |
void AudioEncoderOpus::OnReceivedTargetAudioBitrate( |
int target_audio_bitrate_bps) { |
- if (!audio_network_adaptor_) |
- return SetTargetBitrate(target_audio_bitrate_bps); |
- audio_network_adaptor_->SetTargetAudioBitrate(target_audio_bitrate_bps); |
- ApplyAudioNetworkAdaptor(); |
+ if (audio_network_adaptor_) { |
+ audio_network_adaptor_->SetTargetAudioBitrate(target_audio_bitrate_bps); |
+ ApplyAudioNetworkAdaptor(); |
+ } else if (webrtc::field_trial::FindFullName( |
+ "WebRTC-SendSideBwe-WithOverhead") == "Enabled") { |
+ if (!overhead_bytes_per_packet_) { |
+ LOG(LS_INFO) |
+ << "AudioEncoderOpus: Overhead unknown, target audio bitrate " |
+ << target_audio_bitrate_bps << " bps is ignored."; |
+ return; |
+ } |
+ const int overhead_bps = static_cast<int>( |
+ *overhead_bytes_per_packet_ * 8 * 100 / Num10MsFramesInNextPacket()); |
+ SetTargetBitrate(std::min( |
+ kMaxBitrateBps, |
+ std::max(kMinBitrateBps, target_audio_bitrate_bps - overhead_bps))); |
+ } else { |
+ SetTargetBitrate(target_audio_bitrate_bps); |
+ } |
} |
void AudioEncoderOpus::OnReceivedRtt(int rtt_ms) { |
@@ -304,6 +321,16 @@ void AudioEncoderOpus::OnReceivedRtt(int rtt_ms) { |
ApplyAudioNetworkAdaptor(); |
} |
+void AudioEncoderOpus::OnReceivedOverhead(size_t overhead_bytes_per_packet) { |
+ if (audio_network_adaptor_) { |
+ audio_network_adaptor_->SetOverhead(overhead_bytes_per_packet); |
+ ApplyAudioNetworkAdaptor(); |
+ } else { |
+ overhead_bytes_per_packet_ = |
+ rtc::Optional<size_t>(overhead_bytes_per_packet); |
+ } |
+} |
+ |
void AudioEncoderOpus::SetReceiverFrameLengthRange(int min_frame_length_ms, |
int max_frame_length_ms) { |
// Ensure that |SetReceiverFrameLengthRange| is called before |