| Index: webrtc/media/engine/webrtcvoiceengine.cc
|
| diff --git a/webrtc/media/engine/webrtcvoiceengine.cc b/webrtc/media/engine/webrtcvoiceengine.cc
|
| index 954008cfa1c69ed7a9f3864928cf8eb95842f76f..dd3b1727529643e64d365b9464abc3f49395fc29 100644
|
| --- a/webrtc/media/engine/webrtcvoiceengine.cc
|
| +++ b/webrtc/media/engine/webrtcvoiceengine.cc
|
| @@ -186,6 +186,18 @@ bool IsCodecFeatureEnabled(const AudioCodec& codec, const char* feature) {
|
| return codec.GetParam(feature, &value) && value == 1;
|
| }
|
|
|
| +// Returns integer parameter params[feature] if it is defined. Returns
|
| +// |default_value| otherwise.
|
| +int GetCodecFeatureInt(const AudioCodec& codec,
|
| + const char* feature,
|
| + int default_value) {
|
| + int value;
|
| + if (codec.GetParam(feature, &value)) {
|
| + return value;
|
| + }
|
| + return default_value;
|
| +}
|
| +
|
| // Use params[kCodecParamMaxAverageBitrate] if it is defined, use codec.bitrate
|
| // otherwise. If the value (either from params or codec.bitrate) <=0, use the
|
| // default configuration. If the value is beyond feasible bit rate of Opus,
|
| @@ -221,29 +233,27 @@ int GetOpusBitrate(const AudioCodec& codec, int max_playback_rate) {
|
| return bitrate;
|
| }
|
|
|
| -// Returns kOpusDefaultPlaybackRate if params[kCodecParamMaxPlaybackRate] is not
|
| -// defined. Returns the value of params[kCodecParamMaxPlaybackRate] otherwise.
|
| -int GetOpusMaxPlaybackRate(const AudioCodec& codec) {
|
| - int value;
|
| - if (codec.GetParam(kCodecParamMaxPlaybackRate, &value)) {
|
| - return value;
|
| - }
|
| - return kOpusDefaultMaxPlaybackRate;
|
| -}
|
| -
|
| -void GetOpusConfig(const AudioCodec& codec, webrtc::CodecInst* voe_codec,
|
| - bool* enable_codec_fec, int* max_playback_rate,
|
| - bool* enable_codec_dtx) {
|
| +void GetOpusConfig(const AudioCodec& codec,
|
| + webrtc::CodecInst* voe_codec,
|
| + bool* enable_codec_fec,
|
| + int* max_playback_rate,
|
| + bool* enable_codec_dtx,
|
| + int* min_ptime_ms,
|
| + int* max_ptime_ms) {
|
| *enable_codec_fec = IsCodecFeatureEnabled(codec, kCodecParamUseInbandFec);
|
| *enable_codec_dtx = IsCodecFeatureEnabled(codec, kCodecParamUseDtx);
|
| - *max_playback_rate = GetOpusMaxPlaybackRate(codec);
|
| + *max_playback_rate = GetCodecFeatureInt(codec, kCodecParamMaxPlaybackRate,
|
| + kOpusDefaultMaxPlaybackRate);
|
| + *max_ptime_ms =
|
| + GetCodecFeatureInt(codec, kCodecParamMaxPTime, kOpusDefaultMaxPTime);
|
| + *min_ptime_ms =
|
| + GetCodecFeatureInt(codec, kCodecParamMinPTime, kOpusDefaultMinPTime);
|
|
|
| // If OPUS, change what we send according to the "stereo" codec
|
| // parameter, and not the "channels" parameter. We set
|
| // voe_codec.channels to 2 if "stereo=1" and 1 otherwise. If
|
| // the bitrate is not specified, i.e. is <= zero, we set it to the
|
| // appropriate default value for mono or stereo Opus.
|
| -
|
| voe_codec->channels = IsCodecFeatureEnabled(codec, kCodecParamStereo) ? 2 : 1;
|
| voe_codec->rate = GetOpusBitrate(codec, *max_playback_rate);
|
| }
|
| @@ -898,7 +908,6 @@ bool WebRtcVoiceEngine::ApplyOptions(const AudioOptions& options_in) {
|
| LOG_RTCERR1(SetPlayoutSampleRate, *options.playout_sample_rate);
|
| }
|
| }
|
| -
|
| return true;
|
| }
|
|
|
| @@ -1150,6 +1159,7 @@ class WebRtcVoiceMediaChannel::WebRtcAudioSendStream
|
| const webrtc::AudioSendStream::Config::SendCodecSpec& send_codec_spec,
|
| const std::vector<webrtc::RtpExtension>& extensions,
|
| int max_send_bitrate_bps,
|
| + const rtc::Optional<std::string>& audio_network_adaptor_config,
|
| webrtc::Call* call,
|
| webrtc::Transport* send_transport)
|
| : voe_audio_transport_(voe_audio_transport),
|
| @@ -1165,6 +1175,12 @@ class WebRtcVoiceMediaChannel::WebRtcAudioSendStream
|
| config_.rtp.c_name = c_name;
|
| config_.voe_channel_id = ch;
|
| config_.rtp.extensions = extensions;
|
| + if (audio_network_adaptor_config) {
|
| + config_.enable_audio_network_adaptor = true;
|
| + config_.audio_network_adaptor_config = *audio_network_adaptor_config;
|
| + } else {
|
| + config_.enable_audio_network_adaptor = false;
|
| + }
|
| RecreateAudioSendStream(send_codec_spec);
|
| }
|
|
|
| @@ -1830,7 +1846,9 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs(
|
| GetOpusConfig(*codec, &send_codec_spec.codec_inst,
|
| &send_codec_spec.enable_codec_fec,
|
| &send_codec_spec.opus_max_playback_rate,
|
| - &send_codec_spec.enable_opus_dtx);
|
| + &send_codec_spec.enable_opus_dtx,
|
| + &send_codec_spec.min_ptime_ms,
|
| + &send_codec_spec.max_ptime_ms);
|
| }
|
|
|
| // Set packet size if the AudioCodec param kCodecParamPTime is set.
|
| @@ -2008,7 +2026,8 @@ bool WebRtcVoiceMediaChannel::AddSendStream(const StreamParams& sp) {
|
|
|
| WebRtcAudioSendStream* stream = new WebRtcAudioSendStream(
|
| channel, audio_transport, ssrc, sp.cname, send_codec_spec_,
|
| - send_rtp_extensions_, max_send_bitrate_bps_, call_, this);
|
| + send_rtp_extensions_, max_send_bitrate_bps_,
|
| + options_.audio_network_adaptor_config, call_, this);
|
| send_streams_.insert(std::make_pair(ssrc, stream));
|
|
|
| // At this point the stream's local SSRC has been updated. If it is the first
|
|
|