Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(261)

Unified Diff: webrtc/media/engine/webrtcvoiceengine.cc

Issue 2397573006: Using AudioOption to enable audio network adaptor. (Closed)
Patch Set: fixing a unittest Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/media/base/mediachannel.h ('k') | webrtc/media/engine/webrtcvoiceengine_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/media/engine/webrtcvoiceengine.cc
diff --git a/webrtc/media/engine/webrtcvoiceengine.cc b/webrtc/media/engine/webrtcvoiceengine.cc
index ebcd1613946cbf82b07fdbe1f1b36bffa885bcb4..21e7c8120fa2abb16a1ede757bfd659fef4e1db4 100644
--- a/webrtc/media/engine/webrtcvoiceengine.cc
+++ b/webrtc/media/engine/webrtcvoiceengine.cc
@@ -186,6 +186,29 @@ bool IsCodecFeatureEnabled(const AudioCodec& codec, const char* feature) {
return codec.GetParam(feature, &value) && value == 1;
}
+rtc::Optional<std::string> GetAudioNetworkAdaptorConfig(
+ const AudioOptions& options) {
+ if (options.audio_network_adaptor && *options.audio_network_adaptor &&
+ options.audio_network_adaptor_config) {
+ // Turn on audio network adaptor only when |options_.audio_network_adaptor|
+ // equals true and |options_.audio_network_adaptor_config| has a value.
+ return options.audio_network_adaptor_config;
+ }
+ return rtc::Optional<std::string>();
+}
+
+// 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 = 0;
+ 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 +244,33 @@ 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 (*max_ptime_ms < *min_ptime_ms) {
+ // If min ptime or max ptime defined by codec parameter is wrong, we use
+ // the default values.
+ *max_ptime_ms = kOpusDefaultMaxPTime;
+ *min_ptime_ms = 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);
}
@@ -897,7 +924,6 @@ bool WebRtcVoiceEngine::ApplyOptions(const AudioOptions& options_in) {
LOG_RTCERR1(SetPlayoutSampleRate, *options.playout_sample_rate);
}
}
-
return true;
}
@@ -1151,6 +1177,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),
@@ -1166,6 +1193,7 @@ class WebRtcVoiceMediaChannel::WebRtcAudioSendStream
config_.rtp.c_name = c_name;
config_.voe_channel_id = ch;
config_.rtp.extensions = extensions;
+ config_.audio_network_adaptor_config = audio_network_adaptor_config;
RecreateAudioSendStream(send_codec_spec);
}
@@ -1182,7 +1210,6 @@ class WebRtcVoiceMediaChannel::WebRtcAudioSendStream
config_.rtp.nack.rtp_history_ms =
send_codec_spec_.nack_enabled ? kNackRtpHistoryMs : 0;
config_.send_codec_spec = send_codec_spec_;
-
auto send_rate = ComputeSendBitrate(
max_send_bitrate_bps_, rtp_parameters_.encodings[0].max_bitrate_bps,
send_codec_spec.codec_inst);
@@ -1201,6 +1228,16 @@ class WebRtcVoiceMediaChannel::WebRtcAudioSendStream
RecreateAudioSendStream();
}
+ void RecreateAudioSendStream(
+ const rtc::Optional<std::string>& audio_network_adaptor_config) {
+ RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
+ if (config_.audio_network_adaptor_config == audio_network_adaptor_config) {
+ return;
+ }
+ config_.audio_network_adaptor_config = audio_network_adaptor_config;
+ RecreateAudioSendStream();
+ }
+
bool SetMaxSendBitrate(int bps) {
RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
auto send_rate =
@@ -1722,6 +1759,13 @@ bool WebRtcVoiceMediaChannel::SetOptions(const AudioOptions& options) {
"Failed to apply engine options during channel SetOptions.";
return false;
}
+
+ rtc::Optional<std::string> audio_network_adatptor_config =
+ GetAudioNetworkAdaptorConfig(options_);
+ for (auto& it : send_streams_) {
+ it.second->RecreateAudioSendStream(audio_network_adatptor_config);
+ }
+
LOG(LS_INFO) << "Set voice channel options. Current options: "
<< options_.ToString();
return true;
@@ -1835,7 +1879,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.
@@ -2011,9 +2057,12 @@ bool WebRtcVoiceMediaChannel::AddSendStream(const StreamParams& sp) {
webrtc::AudioTransport* audio_transport =
engine()->voe()->base()->audio_transport();
+ rtc::Optional<std::string> audio_network_adaptor_config =
+ GetAudioNetworkAdaptorConfig(options_);
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_, 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
« no previous file with comments | « webrtc/media/base/mediachannel.h ('k') | webrtc/media/engine/webrtcvoiceengine_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698