From 6799553a2cbe2470115a7db01ed14f4a4c593d88 Mon Sep 17 00:00:00 2001 From: peah Date: Mon, 10 Apr 2017 14:12:41 -0700 Subject: [PATCH] Add information about microphone gain changes to AEC3 Changes in the microphone gain are effecting the AEC in the sense that each change in the microphone gain is a change in the echo path seen by the AEC. This CL utilizes the ability of AEC3 to leverage information about known changes in the analog microphone gain. BUG=webrtc:6018 Review-Url: https://codereview.webrtc.org/2808073002 Cr-Commit-Position: refs/heads/master@{#17625} --- .../modules/audio_processing/audio_processing_impl.cc | 11 +++++++++-- .../modules/audio_processing/audio_processing_impl.h | 2 ++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/webrtc/modules/audio_processing/audio_processing_impl.cc b/webrtc/modules/audio_processing/audio_processing_impl.cc index 636d6ca5f0..af5e94b602 100644 --- a/webrtc/modules/audio_processing/audio_processing_impl.cc +++ b/webrtc/modules/audio_processing/audio_processing_impl.cc @@ -1145,6 +1145,10 @@ int AudioProcessingImpl::ProcessCaptureStreamLocked() { } if (private_submodules_->echo_canceller3) { + const int new_agc_level = gain_control()->stream_analog_level(); + capture_.echo_path_gain_change = + (capture_.previous_agc_level != new_agc_level); + capture_.previous_agc_level = new_agc_level; private_submodules_->echo_canceller3->AnalyzeCapture(capture_buffer); } @@ -1193,7 +1197,8 @@ int AudioProcessingImpl::ProcessCaptureStreamLocked() { } if (private_submodules_->echo_canceller3) { - private_submodules_->echo_canceller3->ProcessCapture(capture_buffer, false); + private_submodules_->echo_canceller3->ProcessCapture( + capture_buffer, capture_.echo_path_gain_change); } else { RETURN_ON_ERR(public_submodules_->echo_cancellation->ProcessCaptureAudio( capture_buffer, stream_delay_ms())); @@ -1993,7 +1998,9 @@ AudioProcessingImpl::ApmCaptureState::ApmCaptureState( array_geometry(array_geometry), target_direction(target_direction), capture_processing_format(kSampleRate16kHz), - split_rate(kSampleRate16kHz) {} + split_rate(kSampleRate16kHz), + previous_agc_level(0), + echo_path_gain_change(false) {} AudioProcessingImpl::ApmCaptureState::~ApmCaptureState() = default; diff --git a/webrtc/modules/audio_processing/audio_processing_impl.h b/webrtc/modules/audio_processing/audio_processing_impl.h index 4e25f15e36..37b15c2893 100644 --- a/webrtc/modules/audio_processing/audio_processing_impl.h +++ b/webrtc/modules/audio_processing/audio_processing_impl.h @@ -366,6 +366,8 @@ class AudioProcessingImpl : public AudioProcessing { // tracked by the capture_audio_. StreamConfig capture_processing_format; int split_rate; + int previous_agc_level; + bool echo_path_gain_change; } capture_ GUARDED_BY(crit_capture_); struct ApmCaptureNonLockedState {