Chromium Code Reviews| Index: webrtc/media/engine/webrtcvoiceengine.cc |
| diff --git a/webrtc/media/engine/webrtcvoiceengine.cc b/webrtc/media/engine/webrtcvoiceengine.cc |
| index 7c6d7940f685cd9e11aa4f90227b93582ccf6ce0..e8c4ed4bb5e5ef8dcb419a254aefbf01a86766ab 100644 |
| --- a/webrtc/media/engine/webrtcvoiceengine.cc |
| +++ b/webrtc/media/engine/webrtcvoiceengine.cc |
| @@ -1353,10 +1353,12 @@ class WebRtcVoiceMediaChannel::WebRtcAudioSendStream |
| return false; |
| } |
| + const rtc::Optional<int> old_rtp_max_bitrate = |
| + rtp_parameters_.encodings[0].max_bitrate_bps; |
| + |
| rtp_parameters_ = parameters; |
| - // parameters.encodings[0].encodings[0].max_bitrate_bps could have changed. |
| - if (config_.send_codec_spec.codec_inst.rate != *send_rate) { |
| + if (parameters_.encodings[0].max_bitrate_bps != old_rtp_max_bitrate) { |
| // Recreate AudioSendStream with new bit rate. |
| config_.send_codec_spec.codec_inst.rate = *send_rate; |
| RecreateAudioSendStream(); |
| @@ -1388,7 +1390,17 @@ class WebRtcVoiceMediaChannel::WebRtcAudioSendStream |
| RTC_DCHECK(!stream_); |
| if (webrtc::field_trial::IsEnabled("WebRTC-Audio-SendSideBwe")) { |
| config_.min_bitrate_bps = kOpusMinBitrateBps; |
| - config_.max_bitrate_bps = kOpusBitrateFbBps; |
| + |
| + // This means that when RtpParameters is reset, we may change the |
| + // encoder's bit rate immediately (through call_->CreateAudioSendStream), |
| + // meanwhile change the cap to the output of BWE. |
| + // TODO(minyue): remove dependency on RtpParameters when the signaling to |
|
minyue-webrtc
2017/03/27 13:29:01
I did not change the TODO here since we may need t
stefan-webrtc
2017/03/27 14:04:42
I still think it makes sense to have this wired up
|
| + // BWE is done through a dedicated API. |
| + config_.max_bitrate_bps = |
| + rtp_parameters_.encodings[0].max_bitrate_bps |
| + ? *rtp_parameters_.encodings[0].max_bitrate_bps |
| + : kOpusBitrateFbBps; |
| + |
| // TODO(mflodman): Keep testing this and set proper values. |
| // Note: This is an early experiment currently only supported by Opus. |
| if (send_side_bwe_with_overhead_) { |
| @@ -1397,8 +1409,6 @@ class WebRtcVoiceMediaChannel::WebRtcAudioSendStream |
| if (!packet_sizes_ms.empty()) { |
| 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()); |
| // Audio network adaptor will just use 20ms and 60ms frame lengths. |
| // The adaptor will only be active for the Opus encoder. |
| @@ -1409,7 +1419,6 @@ class WebRtcVoiceMediaChannel::WebRtcAudioSendStream |
| #else |
| max_packet_size_ms = 60; |
| #endif |
| - min_packet_size_ms = 20; |
| } |
| // OverheadPerPacket = Ipv4(20B) + UDP(8B) + SRTP(10B) + RTP(12) |
| @@ -1418,11 +1427,17 @@ class WebRtcVoiceMediaChannel::WebRtcAudioSendStream |
| 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; |
| + // We assume that |config_.max_bitrate_bps| before the next line is |
| + // a hard limit on the payload bitrate, so we add min_overhead_bps to |
| + // it to ensure that, when overhead is deducted, the payload rate |
| + // never goes beyond the limit. |
| + // Note: this also means that if a higher overhead is forced, we |
| + // cannot reach the limit. We need to investigate this. |
| + config_.max_bitrate_bps += min_overhead_bps; |
| + |
| + // In contrast to max_bitrate_bps, we let min_bitrate_bps be always |
|
stefan-webrtc
2017/03/27 14:04:42
always be reachable
|
| + // reachable. |
| + config_.min_bitrate_bps += min_overhead_bps; |
| } |
| } |
| } |