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..69b9134d3a066322a19404e89db4d1e7155bdb5e 100644 |
| --- a/webrtc/media/engine/webrtcvoiceengine.cc |
| +++ b/webrtc/media/engine/webrtcvoiceengine.cc |
| @@ -277,6 +277,32 @@ void GetOpusConfig(const AudioCodec& codec, |
| voe_codec->rate = GetOpusBitrate(codec, *max_playback_rate); |
| } |
| +webrtc::Call::Config::BitrateConfig GetBitrateConfigForCodec( |
| + const AudioCodec& codec) { |
| + webrtc::Call::Config::BitrateConfig config; |
| + int bitrate_kbps; |
|
the sun
2016/11/30 11:22:27
nit: always default init
stefan-webrtc
2016/11/30 11:44:42
Done.
|
| + if (codec.GetParam(kCodecParamMinBitrate, &bitrate_kbps) && |
| + bitrate_kbps > 0) { |
| + config.min_bitrate_bps = bitrate_kbps * 1000; |
| + } else { |
| + config.min_bitrate_bps = 0; |
| + } |
| + if (codec.GetParam(kCodecParamStartBitrate, &bitrate_kbps) && |
| + bitrate_kbps > 0) { |
| + config.start_bitrate_bps = bitrate_kbps * 1000; |
| + } else { |
| + // Do not reconfigure start bitrate unless it's specified and positive. |
| + config.start_bitrate_bps = -1; |
|
the sun
2016/11/30 11:22:27
Change the optional fields in the config to use rt
stefan-webrtc
2016/11/30 11:44:42
I'd prefer making interface changes later.
|
| + } |
| + if (codec.GetParam(kCodecParamMaxBitrate, &bitrate_kbps) && |
| + bitrate_kbps > 0) { |
| + config.max_bitrate_bps = bitrate_kbps * 1000; |
| + } else { |
| + config.max_bitrate_bps = -1; |
| + } |
| + return config; |
| +} |
| + |
| webrtc::AudioState::Config MakeAudioStateConfig(VoEWrapper* voe_wrapper) { |
| webrtc::AudioState::Config config; |
| config.voice_engine = voe_wrapper->engine(); |
| @@ -1616,6 +1642,15 @@ bool WebRtcVoiceMediaChannel::SetSendParameters( |
| return false; |
| } |
| + if (params.max_bandwidth_bps >= 0) { |
|
the sun
2016/11/30 11:22:27
Is this logic the same for video? Does it make sen
stefan-webrtc
2016/11/30 11:44:43
It is the same, not sure about making it a util th
|
| + // Note that max_bandwidth_bps intentionally takes priority over the |
| + // bitrate config for the codec. This allows FEC to be applied above the |
|
minyue-webrtc
2016/11/29 22:10:55
Not sure about the reasoning on FEC in the comment
stefan-webrtc
2016/11/30 11:44:43
I made it a bit more generic.
|
| + // codec target bitrate. |
| + bitrate_config_.max_bitrate_bps = |
| + params.max_bandwidth_bps == 0 ? -1 : params.max_bandwidth_bps; |
| + } |
| + call_->SetBitrateConfig(bitrate_config_); |
| + |
| if (!ValidateRtpExtensions(params.extensions)) { |
| return false; |
| } |
| @@ -1933,6 +1968,13 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs( |
| &send_codec_spec.max_ptime_ms); |
| } |
| + bitrate_config_ = GetBitrateConfigForCodec(*codec); |
| + if (send_codec_spec_set_ && send_codec_spec == send_codec_spec_) { |
|
minyue-webrtc
2016/11/29 22:10:55
I don't think this is the place we reset codec. pl
the sun
2016/11/30 11:22:27
I don't get the logic involving send_codec_spec_se
stefan-webrtc
2016/11/30 11:44:42
I tried to the changes into WebRtcAudioSendStream
stefan-webrtc
2016/11/30 11:44:43
I don't think the send_codec_spec_set_ check is ne
|
| + // If the codec isn't changing, set the start bitrate to -1 which means |
| + // "unchanged" so that BWE isn't affected. |
| + bitrate_config_.start_bitrate_bps = -1; |
| + } |
| + |
| // Set packet size if the AudioCodec param kCodecParamPTime is set. |
| int ptime_ms = 0; |
| if (codec->GetParam(kCodecParamPTime, &ptime_ms)) { |
| @@ -1990,6 +2032,7 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs( |
| // Apply new settings to all streams. |
| if (send_codec_spec_ != send_codec_spec) { |
| send_codec_spec_ = std::move(send_codec_spec); |
| + send_codec_spec_set_ = true; |
| for (const auto& kv : send_streams_) { |
| kv.second->RecreateAudioSendStream(send_codec_spec_); |
| } |