This CL makes the jump-starting of the shadow filter more extreme. It furthermore utilizes this to allow the AEC to rely further, and more quickly on its linear filter estimates. The result is mainly increased transparency but also some cases of fewer echo blips. Bug: webrtc:9612,chromium:873074 Change-Id: I90f7cfbff9acb9d0c36409593afbf476e7a830d3 Reviewed-on: https://webrtc-review.googlesource.com/93461 Reviewed-by: Sam Zackrisson <saza@webrtc.org> Commit-Queue: Per Åhgren <peah@webrtc.org> Cr-Commit-Position: refs/heads/master@{#24264}
52 lines
1.6 KiB
C++
52 lines
1.6 KiB
C++
/*
|
|
* Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#include "modules/audio_processing/aec3/subtractor_output_analyzer.h"
|
|
|
|
#include <array>
|
|
#include <numeric>
|
|
|
|
#include "system_wrappers/include/field_trial.h"
|
|
|
|
namespace webrtc {
|
|
namespace {
|
|
|
|
bool EnableStrictDivergenceCheck() {
|
|
return !field_trial::IsEnabled("WebRTC-Aec3StrictDivergenceCheckKillSwitch");
|
|
}
|
|
|
|
} // namespace
|
|
|
|
SubtractorOutputAnalyzer::SubtractorOutputAnalyzer()
|
|
: strict_divergence_check_(EnableStrictDivergenceCheck()) {}
|
|
|
|
void SubtractorOutputAnalyzer::Update(
|
|
const SubtractorOutput& subtractor_output) {
|
|
const float y2 = subtractor_output.y2;
|
|
const float e2_main = subtractor_output.e2_main;
|
|
const float e2_shadow = subtractor_output.e2_shadow;
|
|
|
|
constexpr float kConvergenceThreshold = 50 * 50 * kBlockSize;
|
|
main_filter_converged_ = e2_main < 0.5f * y2 && y2 > kConvergenceThreshold;
|
|
shadow_filter_converged_ =
|
|
e2_shadow < 0.05 * y2 && y2 > kConvergenceThreshold;
|
|
float min_e2 =
|
|
strict_divergence_check_ ? std::min(e2_main, e2_shadow) : e2_main;
|
|
filter_diverged_ = min_e2 > 1.5f * y2 && y2 > 30.f * 30.f * kBlockSize;
|
|
}
|
|
|
|
void SubtractorOutputAnalyzer::HandleEchoPathChange() {
|
|
shadow_filter_converged_ = false;
|
|
main_filter_converged_ = false;
|
|
filter_diverged_ = false;
|
|
}
|
|
|
|
} // namespace webrtc
|