Make AEC3 the default desktop AEC option in WebRTC
Bug: webrtc:10366 Change-Id: I854ed62df1da489fdab43e9157dff79b7287cacb Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/125081 Reviewed-by: Sam Zackrisson <saza@webrtc.org> Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Commit-Queue: Per Åhgren <peah@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26983}
This commit is contained in:
@ -16,10 +16,12 @@
|
||||
#include <type_traits>
|
||||
#include <utility>
|
||||
|
||||
#include "absl/memory/memory.h"
|
||||
#include "absl/types/optional.h"
|
||||
#include "api/array_view.h"
|
||||
#include "common_audio/audio_converter.h"
|
||||
#include "common_audio/include/audio_util.h"
|
||||
#include "modules/audio_processing/aec3/echo_canceller3.h"
|
||||
#include "modules/audio_processing/agc/agc_manager_direct.h"
|
||||
#include "modules/audio_processing/agc2/gain_applier.h"
|
||||
#include "modules/audio_processing/audio_buffer.h"
|
||||
@ -669,17 +671,20 @@ void AudioProcessingImpl::ApplyConfig(const AudioProcessing::Config& config) {
|
||||
rtc::CritScope cs_render(&crit_render_);
|
||||
rtc::CritScope cs_capture(&crit_capture_);
|
||||
|
||||
const bool aec_config_changed =
|
||||
config_.echo_canceller.enabled != config.echo_canceller.enabled ||
|
||||
config_.echo_canceller.use_legacy_aec !=
|
||||
config.echo_canceller.use_legacy_aec ||
|
||||
config_.echo_canceller.mobile_mode != config.echo_canceller.mobile_mode ||
|
||||
(config_.echo_canceller.enabled && config.echo_canceller.use_legacy_aec &&
|
||||
config_.echo_canceller.legacy_moderate_suppression_level !=
|
||||
config.echo_canceller.legacy_moderate_suppression_level);
|
||||
|
||||
config_ = config;
|
||||
|
||||
private_submodules_->echo_cancellation->Enable(
|
||||
config_.echo_canceller.enabled && !config_.echo_canceller.mobile_mode);
|
||||
private_submodules_->echo_control_mobile->Enable(
|
||||
config_.echo_canceller.enabled && config_.echo_canceller.mobile_mode);
|
||||
|
||||
private_submodules_->echo_cancellation->set_suppression_level(
|
||||
config.echo_canceller.legacy_moderate_suppression_level
|
||||
? EchoCancellationImpl::SuppressionLevel::kModerateSuppression
|
||||
: EchoCancellationImpl::SuppressionLevel::kHighSuppression);
|
||||
if (aec_config_changed) {
|
||||
InitializeEchoController();
|
||||
}
|
||||
|
||||
public_submodules_->noise_suppression->Enable(
|
||||
config.noise_suppression.enabled);
|
||||
@ -1342,6 +1347,7 @@ int AudioProcessingImpl::ProcessCaptureStreamLocked() {
|
||||
capture_buffer->split_bands_const(0)[kBand0To8kHz],
|
||||
capture_buffer->num_frames_per_band(), capture_nonlocked_.split_rate);
|
||||
}
|
||||
// TODO(peah): Add reporting from AEC3 whether there is echo.
|
||||
RETURN_ON_ERR(public_submodules_->gain_control->ProcessCaptureAudio(
|
||||
capture_buffer,
|
||||
private_submodules_->echo_cancellation->stream_has_echo()));
|
||||
@ -1770,11 +1776,31 @@ void AudioProcessingImpl::InitializeLowCutFilter() {
|
||||
}
|
||||
|
||||
void AudioProcessingImpl::InitializeEchoController() {
|
||||
if (echo_control_factory_) {
|
||||
private_submodules_->echo_controller =
|
||||
echo_control_factory_->Create(proc_sample_rate_hz());
|
||||
if (echo_control_factory_ ||
|
||||
(config_.echo_canceller.enabled && !config_.echo_canceller.mobile_mode &&
|
||||
!config_.echo_canceller.use_legacy_aec)) {
|
||||
if (echo_control_factory_) {
|
||||
private_submodules_->echo_controller =
|
||||
echo_control_factory_->Create(proc_sample_rate_hz());
|
||||
} else {
|
||||
private_submodules_->echo_controller = absl::make_unique<EchoCanceller3>(
|
||||
EchoCanceller3Config(), proc_sample_rate_hz(), true);
|
||||
}
|
||||
|
||||
capture_nonlocked_.echo_controller_enabled = true;
|
||||
} else {
|
||||
private_submodules_->echo_cancellation->Enable(
|
||||
config_.echo_canceller.enabled && !config_.echo_canceller.mobile_mode);
|
||||
private_submodules_->echo_control_mobile->Enable(
|
||||
config_.echo_canceller.enabled && config_.echo_canceller.mobile_mode);
|
||||
|
||||
private_submodules_->echo_cancellation->set_suppression_level(
|
||||
config_.echo_canceller.legacy_moderate_suppression_level
|
||||
? EchoCancellationImpl::SuppressionLevel::kModerateSuppression
|
||||
: EchoCancellationImpl::SuppressionLevel::kHighSuppression);
|
||||
|
||||
private_submodules_->echo_controller.reset();
|
||||
capture_nonlocked_.echo_controller_enabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1915,7 +1941,7 @@ void AudioProcessingImpl::WriteAecDumpConfigMessage(bool forced) {
|
||||
|
||||
InternalAPMConfig apm_config;
|
||||
|
||||
apm_config.aec_enabled = private_submodules_->echo_cancellation->is_enabled();
|
||||
apm_config.aec_enabled = config_.echo_canceller.enabled;
|
||||
apm_config.aec_delay_agnostic_enabled =
|
||||
private_submodules_->echo_cancellation->is_delay_agnostic_enabled();
|
||||
apm_config.aec_drift_compensation_enabled =
|
||||
|
||||
Reference in New Issue
Block a user