This CL lowers the margins in the AEC3 conservative mode to increase the transparency when there are audio buffer issues, and during call startup. In particular, this CL adjusts the parameters and thresholds to -Make the requirements for filter divergence more strict, to minimize the transparency loss during minor filter divergence. -Decrease the echo power uncertainty used during initial filter convergence, to increase transparency after audio buffer issues. -Deactivate the enforcement of conservative suppressor gain after audio buffer. Bug: webrtc:9641,chromium:875611 Change-Id: Ie171bb411f17a1e8661c291118debd334f65c74f Reviewed-on: https://webrtc-review.googlesource.com/94776 Commit-Queue: Per Åhgren <peah@webrtc.org> Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org> Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org> Cr-Commit-Position: refs/heads/master@{#24333}
55 lines
1.8 KiB
C++
55 lines
1.8 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;
|
|
filter_severely_diverged_ =
|
|
min_e2 > 1.5f * y2 && y2 > 200.f * 200.f * kBlockSize;
|
|
}
|
|
|
|
void SubtractorOutputAnalyzer::HandleEchoPathChange() {
|
|
shadow_filter_converged_ = false;
|
|
main_filter_converged_ = false;
|
|
filter_diverged_ = false;
|
|
filter_severely_diverged_ = false;
|
|
}
|
|
|
|
} // namespace webrtc
|