Chromium Code Reviews| Index: webrtc/media/engine/webrtcvoiceengine.cc |
| diff --git a/webrtc/media/engine/webrtcvoiceengine.cc b/webrtc/media/engine/webrtcvoiceengine.cc |
| index 96f9ed70d403c6c464cc9b015f83190630a0b331..9a447fe0b6f62da6b331b2fe96339c9c73d5d8e3 100644 |
| --- a/webrtc/media/engine/webrtcvoiceengine.cc |
| +++ b/webrtc/media/engine/webrtcvoiceengine.cc |
| @@ -399,6 +399,24 @@ class WebRtcVoiceCodecs final { |
| return 0; |
| } |
| + static rtc::ArrayView<const int> GetPacketSizesMs( |
| + const webrtc::CodecInst& codec) { |
| + for (size_t i = 0; i < arraysize(kCodecPrefs); ++i) { |
| + if (IsCodec(codec, kCodecPrefs[i].name)) { |
| + size_t num_packet_sizes = kMaxNumPacketSize; |
| + for (int index = 0; index < kMaxNumPacketSize; index++) { |
| + if (kCodecPrefs[i].packet_sizes_ms[index] == 0) { |
| + num_packet_sizes = index; |
| + break; |
| + } |
| + } |
| + return rtc::ArrayView<const int>(kCodecPrefs[i].packet_sizes_ms, |
| + num_packet_sizes); |
| + } |
| + } |
| + return rtc::ArrayView<const int>(); |
| + } |
| + |
| // If the AudioCodec param kCodecParamPTime is set, then we will set it to |
| // codec pacsize if it's valid, or we will pick the next smallest value we |
| // support. |
| @@ -1420,8 +1438,38 @@ class WebRtcVoiceMediaChannel::WebRtcAudioSendStream |
| "Enabled") { |
| // TODO(mflodman): Keep testing this and set proper values. |
| // Note: This is an early experiment currently only supported by Opus. |
| - config_.min_bitrate_bps = kOpusMinBitrateBps; |
| - config_.max_bitrate_bps = kOpusBitrateFbBps; |
| + if (webrtc::field_trial::FindFullName( |
| + "WebRTC-SendSideBwe-WithOverhead") == "Enabled") { |
| + auto packet_sizes_ms = WebRtcVoiceCodecs::GetPacketSizesMs( |
| + config_.send_codec_spec.codec_inst); |
| + if (packet_sizes_ms.size() > 0) { |
|
stefan-webrtc
2017/01/11 14:23:26
!packet_sizes_ms.empty() instead
michaelt
2017/01/11 15:30:51
Done.
|
| + int max_packet_size_ms = |
| + *std::max_element(packet_sizes_ms.begin(), packet_sizes_ms.end()); |
| + int min_packet_size_ms = |
| + *std::min_element(packet_sizes_ms.begin(), packet_sizes_ms.end()); |
| + |
| + if (config_.audio_network_adaptor_config && |
| + IsCodec(config_.send_codec_spec.codec_inst, kOpusCodecName)) { |
|
stefan-webrtc
2017/01/11 14:23:26
I still think we should have a comment here. To so
michaelt
2017/01/11 15:30:51
Done.
|
| + max_packet_size_ms = 60; |
| + min_packet_size_ms = 20; |
| + } |
| + |
| + // OverheadPerPacket = Ipv4(20B) + UDP(8B) + SRTP(10B) + RTP(12) |
| + constexpr int kOverheadPerPacket = 20 + 8 + 10 + 12; |
| + |
| + int min_overhead_bps = |
| + kOverheadPerPacket * 8 * 1000 / max_packet_size_ms; |
| + |
| + int max_overhead_bps = |
| + kOverheadPerPacket * 8 * 1000 / min_packet_size_ms; |
| + |
| + config_.min_bitrate_bps = kOpusMinBitrateBps + min_overhead_bps; |
| + config_.max_bitrate_bps = kOpusBitrateFbBps + max_overhead_bps; |
| + } |
| + } else { |
| + config_.min_bitrate_bps = kOpusMinBitrateBps; |
| + config_.max_bitrate_bps = kOpusBitrateFbBps; |
| + } |
| } |
| stream_ = call_->CreateAudioSendStream(config_); |
| RTC_CHECK(stream_); |