From b3b47ad7e6e970056c1f045dcf911bb6c9f67bc0 Mon Sep 17 00:00:00 2001 From: Sam Zackrisson Date: Fri, 17 Aug 2018 16:26:14 +0200 Subject: [PATCH] Toggle AECs via AudioProcessing::Config This allows clients to stop using the old pointer-to-submodule interfaces for enabling/disabling AEC2 and AECM. The legacy suppression level flag for AEC2 is not yet activated. NoTry=TRUE Bug: webrtc:9535 Change-Id: Ie2c3378d832a6b393aec656d96597f85e299f500 Reviewed-on: https://webrtc-review.googlesource.com/94771 Commit-Queue: Sam Zackrisson Reviewed-by: Alex Loiko Cr-Commit-Position: refs/heads/master@{#24328} --- modules/audio_processing/audio_processing_impl.cc | 7 +++++++ .../audio_processing/audio_processing_unittest.cc | 7 ++++--- modules/audio_processing/test/debug_dump_replayer.cc | 12 ++++-------- modules/audio_processing/test/debug_dump_test.cc | 8 ++++++-- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/modules/audio_processing/audio_processing_impl.cc b/modules/audio_processing/audio_processing_impl.cc index 52693859ae..16053e60ec 100644 --- a/modules/audio_processing/audio_processing_impl.cc +++ b/modules/audio_processing/audio_processing_impl.cc @@ -677,6 +677,13 @@ void AudioProcessingImpl::ApplyConfig(const AudioProcessing::Config& config) { rtc::CritScope cs_render(&crit_render_); rtc::CritScope cs_capture(&crit_capture_); + static_cast(public_submodules_->echo_cancellation.get()) + ->Enable(config_.echo_canceller.enabled && + !config_.echo_canceller.mobile_mode); + static_cast(public_submodules_->echo_control_mobile.get()) + ->Enable(config_.echo_canceller.enabled && + config_.echo_canceller.mobile_mode); + InitializeLowCutFilter(); RTC_LOG(LS_INFO) << "Highpass filter activated: " diff --git a/modules/audio_processing/audio_processing_unittest.cc b/modules/audio_processing/audio_processing_unittest.cc index 346c2a2c40..198c66d1d8 100644 --- a/modules/audio_processing/audio_processing_unittest.cc +++ b/modules/audio_processing/audio_processing_unittest.cc @@ -178,25 +178,26 @@ bool FrameDataAreEqual(const AudioFrame& frame1, const AudioFrame& frame2) { } void EnableAllAPComponents(AudioProcessing* ap) { + AudioProcessing::Config apm_config = ap->GetConfig(); + apm_config.echo_canceller.enabled = true; #if defined(WEBRTC_AUDIOPROC_FIXED_PROFILE) - EXPECT_NOERR(ap->echo_control_mobile()->Enable(true)); + apm_config.echo_canceller.mobile_mode = true; EXPECT_NOERR(ap->gain_control()->set_mode(GainControl::kAdaptiveDigital)); EXPECT_NOERR(ap->gain_control()->Enable(true)); #elif defined(WEBRTC_AUDIOPROC_FLOAT_PROFILE) + apm_config.echo_canceller.mobile_mode = false; EXPECT_NOERR(ap->echo_cancellation()->enable_drift_compensation(true)); EXPECT_NOERR(ap->echo_cancellation()->enable_metrics(true)); EXPECT_NOERR(ap->echo_cancellation()->enable_delay_logging(true)); EXPECT_NOERR(ap->echo_cancellation()->set_suppression_level( EchoCancellation::SuppressionLevel::kModerateSuppression)); - EXPECT_NOERR(ap->echo_cancellation()->Enable(true)); EXPECT_NOERR(ap->gain_control()->set_mode(GainControl::kAdaptiveAnalog)); EXPECT_NOERR(ap->gain_control()->set_analog_level_limits(0, 255)); EXPECT_NOERR(ap->gain_control()->Enable(true)); #endif - AudioProcessing::Config apm_config; apm_config.high_pass_filter.enabled = true; ap->ApplyConfig(apm_config); diff --git a/modules/audio_processing/test/debug_dump_replayer.cc b/modules/audio_processing/test/debug_dump_replayer.cc index a06c76e32a..d88330a129 100644 --- a/modules/audio_processing/test/debug_dump_replayer.cc +++ b/modules/audio_processing/test/debug_dump_replayer.cc @@ -200,10 +200,11 @@ void DebugDumpReplayer::MaybeRecreateApm(const audioproc::Config& msg) { void DebugDumpReplayer::ConfigureApm(const audioproc::Config& msg) { AudioProcessing::Config apm_config; - // AEC configs. + // AEC2/AECM configs. RTC_CHECK(msg.has_aec_enabled()); - RTC_CHECK_EQ(AudioProcessing::kNoError, - apm_->echo_cancellation()->Enable(msg.aec_enabled())); + RTC_CHECK(msg.has_aecm_enabled()); + apm_config.echo_canceller.enabled = msg.aec_enabled() || msg.aecm_enabled(); + apm_config.echo_canceller.mobile_mode = msg.aecm_enabled(); RTC_CHECK(msg.has_aec_drift_compensation_enabled()); RTC_CHECK_EQ(AudioProcessing::kNoError, @@ -216,11 +217,6 @@ void DebugDumpReplayer::ConfigureApm(const audioproc::Config& msg) { static_cast( msg.aec_suppression_level()))); - // AECM configs. - RTC_CHECK(msg.has_aecm_enabled()); - RTC_CHECK_EQ(AudioProcessing::kNoError, - apm_->echo_control_mobile()->Enable(msg.aecm_enabled())); - RTC_CHECK(msg.has_aecm_comfort_noise_enabled()); RTC_CHECK_EQ(AudioProcessing::kNoError, apm_->echo_control_mobile()->enable_comfort_noise( diff --git a/modules/audio_processing/test/debug_dump_test.cc b/modules/audio_processing/test/debug_dump_test.cc index 4e2943395e..72cefdd791 100644 --- a/modules/audio_processing/test/debug_dump_test.cc +++ b/modules/audio_processing/test/debug_dump_test.cc @@ -403,6 +403,7 @@ TEST_F(DebugDumpTest, VerifyRefinedAdaptiveFilterExperimentalString) { TEST_F(DebugDumpTest, VerifyCombinedExperimentalStringInclusive) { Config config; AudioProcessing::Config apm_config; + apm_config.echo_canceller.enabled = true; config.Set(new RefinedAdaptiveFilter(true)); // Arbitrarily set clipping gain to 17, which will never be the default. config.Set(new ExperimentalAgc(true, 0, 17)); @@ -463,6 +464,7 @@ TEST_F(DebugDumpTest, VerifyCombinedExperimentalStringExclusive) { TEST_F(DebugDumpTest, VerifyAec3ExperimentalString) { Config config; AudioProcessing::Config apm_config; + apm_config.echo_canceller.enabled = true; DebugDumpGenerator generator(config, apm_config, true); generator.StartRecording(); generator.Process(100); @@ -533,9 +535,11 @@ TEST_F(DebugDumpTest, VerifyEmptyExperimentalString) { TEST_F(DebugDumpTest, ToggleAecLevel) { Config config; - DebugDumpGenerator generator(config, AudioProcessing::Config()); + AudioProcessing::Config apm_config; + apm_config.echo_canceller.enabled = true; + apm_config.echo_canceller.mobile_mode = false; + DebugDumpGenerator generator(config, apm_config); EchoCancellation* aec = generator.apm()->echo_cancellation(); - EXPECT_EQ(AudioProcessing::kNoError, aec->Enable(true)); EXPECT_EQ(AudioProcessing::kNoError, aec->set_suppression_level(EchoCancellation::kLowSuppression)); generator.StartRecording();