mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-14 14:20:45 +01:00
AEC3: Ensure that the high-pass filter effect is on when AEC3 is active
This CL ensures that the high-pass filter is on whenever the echo controller is on. This is important as the echo controller code assumes that the external high-pass filter is active. The CL also corrects the ToggleAec unit test (which started failing after this code change). Bug: webrtc:11159,chromium:1030179 Change-Id: Ie29db74bf3de6279a08564398d32d67d5e1569db Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/161222 Reviewed-by: Sam Zackrisson <saza@webrtc.org> Commit-Queue: Per Åhgren <peah@webrtc.org> Cr-Commit-Position: refs/heads/master@{#29979}
This commit is contained in:
parent
014dd3c9f7
commit
3a77f93589
3 changed files with 13 additions and 10 deletions
|
@ -247,7 +247,8 @@ bool AudioProcessingImpl::SubmoduleStates::RenderMultiBandProcessingActive()
|
||||||
|
|
||||||
bool AudioProcessingImpl::SubmoduleStates::HighPassFilteringRequired() const {
|
bool AudioProcessingImpl::SubmoduleStates::HighPassFilteringRequired() const {
|
||||||
return high_pass_filter_enabled_ || echo_canceller_enabled_ ||
|
return high_pass_filter_enabled_ || echo_canceller_enabled_ ||
|
||||||
mobile_echo_controller_enabled_ || noise_suppressor_enabled_;
|
mobile_echo_controller_enabled_ || noise_suppressor_enabled_ ||
|
||||||
|
echo_controller_enabled_;
|
||||||
}
|
}
|
||||||
|
|
||||||
AudioProcessingBuilder::AudioProcessingBuilder() = default;
|
AudioProcessingBuilder::AudioProcessingBuilder() = default;
|
||||||
|
@ -513,7 +514,7 @@ int AudioProcessingImpl::InitializeLocked() {
|
||||||
submodules_.agc_manager->SetCaptureMuted(capture_.output_will_be_muted);
|
submodules_.agc_manager->SetCaptureMuted(capture_.output_will_be_muted);
|
||||||
}
|
}
|
||||||
InitializeTransient();
|
InitializeTransient();
|
||||||
InitializeHighPassFilter();
|
InitializeHighPassFilter(false);
|
||||||
InitializeVoiceDetector();
|
InitializeVoiceDetector();
|
||||||
InitializeResidualEchoDetector();
|
InitializeResidualEchoDetector();
|
||||||
InitializeEchoController();
|
InitializeEchoController();
|
||||||
|
@ -676,7 +677,8 @@ void AudioProcessingImpl::ApplyConfig(const AudioProcessing::Config& config) {
|
||||||
InitializeNoiseSuppressor();
|
InitializeNoiseSuppressor();
|
||||||
}
|
}
|
||||||
|
|
||||||
InitializeHighPassFilter();
|
InitializeHighPassFilter(config_.echo_canceller.enabled &&
|
||||||
|
!config.echo_canceller.mobile_mode);
|
||||||
|
|
||||||
if (agc1_config_changed) {
|
if (agc1_config_changed) {
|
||||||
ApplyAgc1Config(config_.gain_controller1);
|
ApplyAgc1Config(config_.gain_controller1);
|
||||||
|
@ -1788,7 +1790,7 @@ AudioProcessing::Config AudioProcessingImpl::GetConfig() const {
|
||||||
|
|
||||||
bool AudioProcessingImpl::UpdateActiveSubmoduleStates() {
|
bool AudioProcessingImpl::UpdateActiveSubmoduleStates() {
|
||||||
return submodule_states_.Update(
|
return submodule_states_.Update(
|
||||||
config_.high_pass_filter.enabled, !!submodules_.echo_cancellation,
|
config_.high_pass_filter.enabled, config_.echo_canceller.enabled,
|
||||||
!!submodules_.echo_control_mobile, config_.residual_echo_detector.enabled,
|
!!submodules_.echo_control_mobile, config_.residual_echo_detector.enabled,
|
||||||
!!submodules_.legacy_noise_suppressor || !!submodules_.noise_suppressor,
|
!!submodules_.legacy_noise_suppressor || !!submodules_.noise_suppressor,
|
||||||
submodules_.gain_control->is_enabled(), config_.gain_controller2.enabled,
|
submodules_.gain_control->is_enabled(), config_.gain_controller2.enabled,
|
||||||
|
@ -1807,8 +1809,8 @@ void AudioProcessingImpl::InitializeTransient() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioProcessingImpl::InitializeHighPassFilter() {
|
void AudioProcessingImpl::InitializeHighPassFilter(bool force_activation) {
|
||||||
if (submodule_states_.HighPassFilteringRequired()) {
|
if (force_activation || submodule_states_.HighPassFilteringRequired()) {
|
||||||
submodules_.high_pass_filter.reset(new HighPassFilter(num_proc_channels()));
|
submodules_.high_pass_filter.reset(new HighPassFilter(num_proc_channels()));
|
||||||
} else {
|
} else {
|
||||||
submodules_.high_pass_filter.reset();
|
submodules_.high_pass_filter.reset();
|
||||||
|
|
|
@ -232,7 +232,8 @@ class AudioProcessingImpl : public AudioProcessing {
|
||||||
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_);
|
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_);
|
||||||
void InitializeResidualEchoDetector()
|
void InitializeResidualEchoDetector()
|
||||||
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_);
|
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_);
|
||||||
void InitializeHighPassFilter() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
|
void InitializeHighPassFilter(bool force_activation)
|
||||||
|
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
|
||||||
void InitializeVoiceDetector() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
|
void InitializeVoiceDetector() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
|
||||||
void InitializeEchoController()
|
void InitializeEchoController()
|
||||||
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_);
|
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_);
|
||||||
|
|
|
@ -51,8 +51,8 @@ class DebugDumpGenerator {
|
||||||
bool enable_pre_amplifier);
|
bool enable_pre_amplifier);
|
||||||
|
|
||||||
// Constructor that uses default input files.
|
// Constructor that uses default input files.
|
||||||
explicit DebugDumpGenerator(const Config& config,
|
DebugDumpGenerator(const Config& config,
|
||||||
const AudioProcessing::Config& apm_config);
|
const AudioProcessing::Config& apm_config);
|
||||||
|
|
||||||
~DebugDumpGenerator();
|
~DebugDumpGenerator();
|
||||||
|
|
||||||
|
@ -346,7 +346,7 @@ TEST_F(DebugDumpTest, ToggleAec) {
|
||||||
generator.StartRecording();
|
generator.StartRecording();
|
||||||
generator.Process(100);
|
generator.Process(100);
|
||||||
|
|
||||||
apm_config.echo_canceller.enabled = true;
|
apm_config.echo_canceller.enabled = false;
|
||||||
generator.apm()->ApplyConfig(apm_config);
|
generator.apm()->ApplyConfig(apm_config);
|
||||||
|
|
||||||
generator.Process(100);
|
generator.Process(100);
|
||||||
|
|
Loading…
Reference in a new issue