From f4cf64ec066953d7b175b124a7617557d0c7f27c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20=C3=85hgren?= Date: Sun, 12 Aug 2018 21:46:17 +0200 Subject: [PATCH] AEC3: Enforcing nonlinear mode when transparent mode is active MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This CL ensures that the linear echo prediction mode is not used when the transparent mode is active. TBR: saza@webrtc.org,gustaf@webrtc.org Bug: webrtc:9612,chromium:873074 Change-Id: I25cda5226251df769b6524594ea8a2b78532aaec Reviewed-on: https://webrtc-review.googlesource.com/93740 Reviewed-by: Per Åhgren Commit-Queue: Per Åhgren Cr-Commit-Position: refs/heads/master@{#24268} --- modules/audio_processing/aec3/aec_state.cc | 10 ++++++++++ modules/audio_processing/aec3/aec_state.h | 1 + 2 files changed, 11 insertions(+) diff --git a/modules/audio_processing/aec3/aec_state.cc b/modules/audio_processing/aec3/aec_state.cc index 84328acd6b..0ca8618bee 100644 --- a/modules/audio_processing/aec3/aec_state.cc +++ b/modules/audio_processing/aec3/aec_state.cc @@ -67,6 +67,11 @@ bool EnableUncertaintyUntilSufficientAdapted() { "WebRTC-Aec3ErleUncertaintyUntilSufficientlyAdaptedKillSwitch"); } +bool TreatTransparentModeAsNonlinear() { + return !field_trial::IsEnabled( + "WebRTC-Aec3TreatTransparentModeAsNonlinearKillSwitch"); +} + float ComputeGainRampupIncrease(const EchoCanceller3Config& config) { const auto& c = config.echo_removal_control.gain_rampup; return powf(1.f / c.first_non_zero_gain, 1.f / c.non_zero_gain_blocks); @@ -96,6 +101,8 @@ AecState::AecState(const EchoCanceller3Config& config) no_alignment_required_for_linear_mode_(EnableNoWaitForAlignment()), use_uncertainty_until_sufficiently_adapted_( EnableUncertaintyUntilSufficientAdapted()), + transparent_mode_enforces_nonlinear_mode_( + TreatTransparentModeAsNonlinear()), erle_estimator_(config.erle.min, config.erle.max_l, config.erle.max_h), max_render_(config_.filter.main.length_blocks, 0.f), gain_rampup_increase_(ComputeGainRampupIncrease(config_)), @@ -323,6 +330,9 @@ void AecState::Update( usable_linear_estimate_ = usable_linear_estimate_ && !diverged_filter; } } + if (transparent_mode_enforces_nonlinear_mode_) { + usable_linear_estimate_ = usable_linear_estimate_ && !TransparentMode(); + } use_linear_filter_output_ = usable_linear_estimate_ && !TransparentMode(); diverged_linear_filter_ = diverged_filter; diff --git a/modules/audio_processing/aec3/aec_state.h b/modules/audio_processing/aec3/aec_state.h index 3fd3328c5d..99353b34a0 100644 --- a/modules/audio_processing/aec3/aec_state.h +++ b/modules/audio_processing/aec3/aec_state.h @@ -181,6 +181,7 @@ class AecState { const bool convergence_trigger_linear_mode_; const bool no_alignment_required_for_linear_mode_; const bool use_uncertainty_until_sufficiently_adapted_; + const bool transparent_mode_enforces_nonlinear_mode_; ErlEstimator erl_estimator_; ErleEstimator erle_estimator_; size_t capture_block_counter_ = 0;