Index: content/renderer/media/media_stream_audio_processor.cc |
diff --git a/content/renderer/media/media_stream_audio_processor.cc b/content/renderer/media/media_stream_audio_processor.cc |
index 46d742807bd5c20e4b6fba0bb13223cea158244d..d5314117518c5912fa0b06fb42fd0da7ce003909 100644 |
--- a/content/renderer/media/media_stream_audio_processor.cc |
+++ b/content/renderer/media/media_stream_audio_processor.cc |
@@ -323,6 +323,7 @@ MediaStreamAudioProcessor::MediaStreamAudioProcessor( |
const MediaStreamDevice::AudioDeviceParameters& input_params, |
WebRtcPlayoutDataSource* playout_data_source) |
: render_delay_ms_(0), |
+ has_echo_cancellation_(false), |
playout_data_source_(playout_data_source), |
main_thread_runner_(base::ThreadTaskRunnerHandle::Get()), |
audio_mirroring_(false), |
@@ -486,6 +487,25 @@ void MediaStreamAudioProcessor::OnDisableAecDump() { |
StopEchoCancellationDump(audio_processing_.get()); |
} |
+void MediaStreamAudioProcessor::OnAec3Enable(bool enable) { |
+ DCHECK(main_thread_runner_->BelongsToCurrentThread()); |
+ if (override_aec3_ == enable) |
+ return; |
+ |
+ override_aec3_ = enable; |
+ if (!has_echo_cancellation_) |
+ return; |
+ |
+ auto apm_config = audio_processing_->GetConfig(); |
+ if (apm_config.echo_canceller3.enabled == enable) |
+ return; |
+ |
+ apm_config.echo_canceller3.enabled = enable; |
+ audio_processing_->ApplyConfig(apm_config); |
+ DCHECK(echo_information_); |
+ echo_information_.reset(new EchoInformation()); |
+} |
+ |
void MediaStreamAudioProcessor::OnIpcClosing() { |
DCHECK(main_thread_runner_->BelongsToCurrentThread()); |
aec_dump_message_filter_ = NULL; |
@@ -596,6 +616,7 @@ void MediaStreamAudioProcessor::InitializeAudioProcessingModule( |
const bool echo_cancellation = |
audio_constraints.GetEchoCancellationProperty(); |
+ has_echo_cancellation_ = echo_cancellation; |
const bool goog_agc = audio_constraints.GetGoogAutoGainControl(); |
#if defined(OS_ANDROID) |
@@ -679,8 +700,8 @@ void MediaStreamAudioProcessor::InitializeAudioProcessingModule( |
// |echo_information_| we simply discard it. |
echo_information_.reset(new EchoInformation()); |
- apm_config.echo_canceller3.enabled = |
- base::FeatureList::IsEnabled(features::kWebRtcUseEchoCanceller3); |
+ apm_config.echo_canceller3.enabled = override_aec3_.value_or( |
+ base::FeatureList::IsEnabled(features::kWebRtcUseEchoCanceller3)); |
} else { |
apm_config.echo_canceller3.enabled = false; |
} |