From cd277b84dad534145445d3586145ff25aa5637ee Mon Sep 17 00:00:00 2001 From: Gustaf Ullberg Date: Mon, 19 Aug 2019 12:15:39 +0200 Subject: [PATCH] AEC3: Fix computation of audio buffer delay MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change fixes a bug where the initial delay could be set incorrectly. Bug: webrtc:10896 Change-Id: I66b2234b69c46639488f4561e973384001230861 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/149820 Commit-Queue: Gustaf Ullberg Reviewed-by: Per Ã…hgren Cr-Commit-Position: refs/heads/master@{#28894} --- .../aec3/adaptive_fir_filter_unittest.cc | 8 ++++---- .../aec3/aec_state_unittest.cc | 4 ++-- .../audio_processing/aec3/block_processor.cc | 2 +- .../aec3/echo_path_delay_estimator_unittest.cc | 10 +++++----- .../aec3/echo_remover_unittest.cc | 16 ++++++++-------- .../aec3/erle_estimator_unittest.cc | 4 ++-- .../aec3/main_filter_update_gain_unittest.cc | 2 +- .../aec3/matched_filter_unittest.cc | 6 +++--- .../aec3/render_delay_buffer.cc | 18 ++++++++++-------- .../aec3/render_delay_buffer.h | 2 +- .../aec3/render_delay_buffer_unittest.cc | 14 +++++++------- .../aec3/render_delay_controller_unittest.cc | 16 ++++++++-------- .../aec3/render_signal_analyzer_unittest.cc | 4 ++-- .../aec3/residual_echo_estimator_unittest.cc | 4 ++-- .../aec3/shadow_filter_update_gain_unittest.cc | 2 +- ...signal_dependent_erle_estimator_unittest.cc | 2 +- .../aec3/subtractor_unittest.cc | 6 +++--- .../aec3/suppression_gain_unittest.cc | 2 +- 18 files changed, 62 insertions(+), 60 deletions(-) diff --git a/modules/audio_processing/aec3/adaptive_fir_filter_unittest.cc b/modules/audio_processing/aec3/adaptive_fir_filter_unittest.cc index 4e13bd6077..2eff6a17ec 100644 --- a/modules/audio_processing/aec3/adaptive_fir_filter_unittest.cc +++ b/modules/audio_processing/aec3/adaptive_fir_filter_unittest.cc @@ -54,7 +54,7 @@ std::string ProduceDebugText(size_t delay) { // their reference counterparts. TEST(AdaptiveFirFilter, FilterAdaptationNeonOptimizations) { std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(EchoCanceller3Config(), 3)); + RenderDelayBuffer::Create(EchoCanceller3Config(), 48000)); Random random_generator(42U); std::vector> x(3, std::vector(kBlockSize, 0.f)); FftData S_C; @@ -165,7 +165,7 @@ TEST(AdaptiveFirFilter, FilterAdaptationSse2Optimizations) { bool use_sse2 = (WebRtc_GetCPUInfo(kSSE2) != 0); if (use_sse2) { std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(EchoCanceller3Config(), 3)); + RenderDelayBuffer::Create(EchoCanceller3Config(), 48000)); Random random_generator(42U); std::vector> x(3, std::vector(kBlockSize, 0.f)); FftData S_C; @@ -281,7 +281,7 @@ TEST(AdaptiveFirFilter, NullFilterOutput) { ApmDataDumper data_dumper(42); AdaptiveFirFilter filter(9, 9, 250, DetectOptimization(), &data_dumper); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(EchoCanceller3Config(), 3)); + RenderDelayBuffer::Create(EchoCanceller3Config(), 48000)); EXPECT_DEATH(filter.Filter(*render_delay_buffer->GetRenderBuffer(), nullptr), ""); } @@ -320,7 +320,7 @@ TEST(AdaptiveFirFilter, FilterAndAdapt) { Aec3Fft fft; config.delay.default_delay = 1; std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); ShadowFilterUpdateGain gain(config.filter.shadow, config.filter.config_change_duration_blocks); Random random_generator(42U); diff --git a/modules/audio_processing/aec3/aec_state_unittest.cc b/modules/audio_processing/aec3/aec_state_unittest.cc index 314d05fb25..bf47a05f30 100644 --- a/modules/audio_processing/aec3/aec_state_unittest.cc +++ b/modules/audio_processing/aec3/aec_state_unittest.cc @@ -25,7 +25,7 @@ TEST(AecState, NormalUsage) { absl::optional delay_estimate = DelayEstimate(DelayEstimate::Quality::kRefined, 10); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); std::array E2_main = {}; std::array Y2 = {}; std::vector> x(3, std::vector(kBlockSize, 0.f)); @@ -179,7 +179,7 @@ TEST(AecState, ConvergedFilterDelay) { EchoCanceller3Config config; AecState state(config); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); absl::optional delay_estimate; std::array E2_main; std::array Y2; diff --git a/modules/audio_processing/aec3/block_processor.cc b/modules/audio_processing/aec3/block_processor.cc index 49a9cfd6e3..184248fc23 100644 --- a/modules/audio_processing/aec3/block_processor.cc +++ b/modules/audio_processing/aec3/block_processor.cc @@ -232,7 +232,7 @@ void BlockProcessorImpl::SetAudioBufferDelay(size_t delay_ms) { BlockProcessor* BlockProcessor::Create(const EchoCanceller3Config& config, int sample_rate_hz) { std::unique_ptr render_buffer( - RenderDelayBuffer::Create(config, NumBandsForRate(sample_rate_hz))); + RenderDelayBuffer::Create(config, sample_rate_hz)); std::unique_ptr delay_controller; if (!config.delay.use_external_delay_estimator) { delay_controller.reset( diff --git a/modules/audio_processing/aec3/echo_path_delay_estimator_unittest.cc b/modules/audio_processing/aec3/echo_path_delay_estimator_unittest.cc index 3be82604dd..ddf6bc58de 100644 --- a/modules/audio_processing/aec3/echo_path_delay_estimator_unittest.cc +++ b/modules/audio_processing/aec3/echo_path_delay_estimator_unittest.cc @@ -39,7 +39,7 @@ TEST(EchoPathDelayEstimator, BasicApiCalls) { ApmDataDumper data_dumper(0); EchoCanceller3Config config; std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); EchoPathDelayEstimator estimator(&data_dumper, config); std::vector> render(3, std::vector(kBlockSize)); std::vector capture(kBlockSize); @@ -65,7 +65,7 @@ TEST(EchoPathDelayEstimator, DelayEstimation) { for (size_t delay_samples : {30, 64, 150, 200, 800, 4000}) { SCOPED_TRACE(ProduceDebugText(delay_samples, down_sampling_factor)); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); DelayBuffer signal_delay_buffer(delay_samples); EchoPathDelayEstimator estimator(&data_dumper, config); @@ -113,7 +113,7 @@ TEST(EchoPathDelayEstimator, NoDelayEstimatesForLowLevelRenderSignals) { ApmDataDumper data_dumper(0); EchoPathDelayEstimator estimator(&data_dumper, config); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(EchoCanceller3Config(), 3)); + RenderDelayBuffer::Create(EchoCanceller3Config(), 48000)); for (size_t k = 0; k < 100; ++k) { RandomizeSampleVector(&random_generator, render[0]); for (auto& render_k : render[0]) { @@ -137,7 +137,7 @@ TEST(EchoPathDelayEstimator, DISABLED_WrongRenderBlockSize) { EchoCanceller3Config config; EchoPathDelayEstimator estimator(&data_dumper, config); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); std::vector capture(kBlockSize); EXPECT_DEATH(estimator.EstimateDelay( render_delay_buffer->GetDownsampledRenderBuffer(), capture), @@ -152,7 +152,7 @@ TEST(EchoPathDelayEstimator, WrongCaptureBlockSize) { EchoCanceller3Config config; EchoPathDelayEstimator estimator(&data_dumper, config); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); std::vector capture(std::vector(kBlockSize - 1)); EXPECT_DEATH(estimator.EstimateDelay( render_delay_buffer->GetDownsampledRenderBuffer(), capture), diff --git a/modules/audio_processing/aec3/echo_remover_unittest.cc b/modules/audio_processing/aec3/echo_remover_unittest.cc index 92cc8902ef..abe43ae3a6 100644 --- a/modules/audio_processing/aec3/echo_remover_unittest.cc +++ b/modules/audio_processing/aec3/echo_remover_unittest.cc @@ -48,8 +48,8 @@ TEST(EchoRemover, BasicApiCalls) { SCOPED_TRACE(ProduceDebugText(rate)); std::unique_ptr remover( EchoRemover::Create(EchoCanceller3Config(), rate)); - std::unique_ptr render_buffer(RenderDelayBuffer::Create( - EchoCanceller3Config(), NumBandsForRate(rate))); + std::unique_ptr render_buffer( + RenderDelayBuffer::Create(EchoCanceller3Config(), rate)); std::vector> render(NumBandsForRate(rate), std::vector(kBlockSize, 0.f)); @@ -89,8 +89,8 @@ TEST(EchoRemover, WrongCaptureBlockSize) { SCOPED_TRACE(ProduceDebugText(rate)); std::unique_ptr remover( EchoRemover::Create(EchoCanceller3Config(), rate)); - std::unique_ptr render_buffer(RenderDelayBuffer::Create( - EchoCanceller3Config(), NumBandsForRate(rate))); + std::unique_ptr render_buffer( + RenderDelayBuffer::Create(EchoCanceller3Config(), rate)); std::vector> capture( NumBandsForRate(rate), std::vector(kBlockSize - 1, 0.f)); EchoPathVariability echo_path_variability( @@ -111,8 +111,8 @@ TEST(EchoRemover, DISABLED_WrongCaptureNumBands) { SCOPED_TRACE(ProduceDebugText(rate)); std::unique_ptr remover( EchoRemover::Create(EchoCanceller3Config(), rate)); - std::unique_ptr render_buffer(RenderDelayBuffer::Create( - EchoCanceller3Config(), NumBandsForRate(rate))); + std::unique_ptr render_buffer( + RenderDelayBuffer::Create(EchoCanceller3Config(), rate)); std::vector> capture( NumBandsForRate(rate == 48000 ? 16000 : rate + 16000), std::vector(kBlockSize, 0.f)); @@ -131,7 +131,7 @@ TEST(EchoRemover, NullCapture) { std::unique_ptr remover( EchoRemover::Create(EchoCanceller3Config(), 8000)); std::unique_ptr render_buffer( - RenderDelayBuffer::Create(EchoCanceller3Config(), 3)); + RenderDelayBuffer::Create(EchoCanceller3Config(), 8000)); EchoPathVariability echo_path_variability( false, EchoPathVariability::DelayAdjustment::kNone, false); EXPECT_DEATH( @@ -160,7 +160,7 @@ TEST(EchoRemover, BasicEchoRemoval) { EchoCanceller3Config config; std::unique_ptr remover(EchoRemover::Create(config, rate)); std::unique_ptr render_buffer( - RenderDelayBuffer::Create(config, NumBandsForRate(rate))); + RenderDelayBuffer::Create(config, rate)); render_buffer->AlignFromDelay(delay_samples / kBlockSize); std::vector>> delay_buffers(x.size()); diff --git a/modules/audio_processing/aec3/erle_estimator_unittest.cc b/modules/audio_processing/aec3/erle_estimator_unittest.cc index ac681b3619..31c550c37d 100644 --- a/modules/audio_processing/aec3/erle_estimator_unittest.cc +++ b/modules/audio_processing/aec3/erle_estimator_unittest.cc @@ -109,7 +109,7 @@ TEST(ErleEstimator, VerifyErleIncreaseAndHold) { std::vector> filter_frequency_response( config.filter.main.length_blocks); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); GetFilterFreq(filter_frequency_response, config.delay.delay_headroom_samples); @@ -153,7 +153,7 @@ TEST(ErleEstimator, VerifyErleTrackingOnOnsets) { config.filter.main.length_blocks); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); GetFilterFreq(filter_frequency_response, config.delay.delay_headroom_samples); diff --git a/modules/audio_processing/aec3/main_filter_update_gain_unittest.cc b/modules/audio_processing/aec3/main_filter_update_gain_unittest.cc index 46165e5b2e..34412b88d0 100644 --- a/modules/audio_processing/aec3/main_filter_update_gain_unittest.cc +++ b/modules/audio_processing/aec3/main_filter_update_gain_unittest.cc @@ -65,7 +65,7 @@ void RunFilterUpdateTest(int num_blocks_to_process, std::vector y(kBlockSize, 0.f); config.delay.default_delay = 1; std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); AecState aec_state(config); RenderSignalAnalyzer render_signal_analyzer(config); absl::optional delay_estimate; diff --git a/modules/audio_processing/aec3/matched_filter_unittest.cc b/modules/audio_processing/aec3/matched_filter_unittest.cc index bf650bc5b4..c204af4366 100644 --- a/modules/audio_processing/aec3/matched_filter_unittest.cc +++ b/modules/audio_processing/aec3/matched_filter_unittest.cc @@ -163,7 +163,7 @@ TEST(MatchedFilter, LagEstimation) { config.delay.delay_candidate_detection_threshold); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); // Analyze the correlation between render and capture. for (size_t k = 0; k < (600 + delay_samples / sub_block_size); ++k) { @@ -259,7 +259,7 @@ TEST(MatchedFilter, LagNotReliableForUncorrelatedRenderAndCapture) { std::fill(capture.begin(), capture.end(), 0.f); ApmDataDumper data_dumper(0); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); MatchedFilter filter(&data_dumper, DetectOptimization(), sub_block_size, kWindowSizeSubBlocks, kNumMatchedFilters, kAlignmentShiftSubBlocks, 150, @@ -304,7 +304,7 @@ TEST(MatchedFilter, LagNotUpdatedForLowLevelRender) { config.delay.delay_estimate_smoothing, config.delay.delay_candidate_detection_threshold); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(EchoCanceller3Config(), 3)); + RenderDelayBuffer::Create(EchoCanceller3Config(), 48000)); Decimator capture_decimator(down_sampling_factor); // Analyze the correlation between render and capture. diff --git a/modules/audio_processing/aec3/render_delay_buffer.cc b/modules/audio_processing/aec3/render_delay_buffer.cc index 92f2f65fe2..11fe4507cf 100644 --- a/modules/audio_processing/aec3/render_delay_buffer.cc +++ b/modules/audio_processing/aec3/render_delay_buffer.cc @@ -39,7 +39,7 @@ namespace { class RenderDelayBufferImpl final : public RenderDelayBuffer { public: - RenderDelayBufferImpl(const EchoCanceller3Config& config, size_t num_bands); + RenderDelayBufferImpl(const EchoCanceller3Config& config, int sample_rate_hz); RenderDelayBufferImpl() = delete; ~RenderDelayBufferImpl() override; @@ -90,7 +90,7 @@ class RenderDelayBufferImpl final : public RenderDelayBuffer { bool external_audio_buffer_delay_verified_after_reset_ = false; size_t min_latency_blocks_ = 0; size_t excess_render_detection_counter_ = 0; - size_t num_bands_; + int sample_rate_hz_; int MapDelayToTotalDelay(size_t delay) const; int ComputeDelay() const; @@ -109,7 +109,7 @@ class RenderDelayBufferImpl final : public RenderDelayBuffer { int RenderDelayBufferImpl::instance_count_ = 0; RenderDelayBufferImpl::RenderDelayBufferImpl(const EchoCanceller3Config& config, - size_t num_bands) + int sample_rate_hz) : data_dumper_( new ApmDataDumper(rtc::AtomicOps::Increment(&instance_count_))), optimization_(DetectOptimization()), @@ -121,7 +121,7 @@ RenderDelayBufferImpl::RenderDelayBufferImpl(const EchoCanceller3Config& config, blocks_(GetRenderDelayBufferSize(down_sampling_factor_, config.delay.num_filters, config.filter.main.length_blocks), - num_bands, + NumBandsForRate(sample_rate_hz), kBlockSize), spectra_(blocks_.buffer.size(), kFftLengthBy2Plus1), ffts_(blocks_.buffer.size()), @@ -133,7 +133,8 @@ RenderDelayBufferImpl::RenderDelayBufferImpl(const EchoCanceller3Config& config, fft_(), render_ds_(sub_block_size_, 0.f), buffer_headroom_(config.filter.main.length_blocks), - num_bands_(num_bands) { + sample_rate_hz_(sample_rate_hz) { + RTC_DCHECK_GE(sample_rate_hz, 8000); RTC_DCHECK_EQ(blocks_.buffer.size(), ffts_.buffer.size()); RTC_DCHECK_EQ(spectra_.buffer.size(), ffts_.buffer.size()); @@ -314,7 +315,8 @@ void RenderDelayBufferImpl::SetAudioBufferDelay(size_t delay_ms) { } // Convert delay from milliseconds to blocks (rounded down). - external_audio_buffer_delay_ = delay_ms >> ((num_bands_ == 1) ? 1 : 2); + external_audio_buffer_delay_ = + delay_ms >> ((sample_rate_hz_ == 8000) ? 1 : 2); } bool RenderDelayBufferImpl::HasReceivedBufferDelay() { @@ -455,8 +457,8 @@ bool RenderDelayBufferImpl::RenderUnderrun() { } // namespace RenderDelayBuffer* RenderDelayBuffer::Create(const EchoCanceller3Config& config, - size_t num_bands) { - return new RenderDelayBufferImpl(config, num_bands); + int sample_rate_hz) { + return new RenderDelayBufferImpl(config, sample_rate_hz); } } // namespace webrtc diff --git a/modules/audio_processing/aec3/render_delay_buffer.h b/modules/audio_processing/aec3/render_delay_buffer.h index 970cf91577..562d2c110d 100644 --- a/modules/audio_processing/aec3/render_delay_buffer.h +++ b/modules/audio_processing/aec3/render_delay_buffer.h @@ -33,7 +33,7 @@ class RenderDelayBuffer { }; static RenderDelayBuffer* Create(const EchoCanceller3Config& config, - size_t num_bands); + int sample_rate_hz); virtual ~RenderDelayBuffer() = default; // Resets the buffer alignment. diff --git a/modules/audio_processing/aec3/render_delay_buffer_unittest.cc b/modules/audio_processing/aec3/render_delay_buffer_unittest.cc index 21b7ffcdc2..143980ca42 100644 --- a/modules/audio_processing/aec3/render_delay_buffer_unittest.cc +++ b/modules/audio_processing/aec3/render_delay_buffer_unittest.cc @@ -38,7 +38,7 @@ TEST(RenderDelayBuffer, BufferOverflow) { for (auto rate : {8000, 16000, 32000, 48000}) { SCOPED_TRACE(ProduceDebugText(rate)); std::unique_ptr delay_buffer( - RenderDelayBuffer::Create(config, NumBandsForRate(rate))); + RenderDelayBuffer::Create(config, rate)); std::vector> block_to_insert( NumBandsForRate(rate), std::vector(kBlockSize, 0.f)); for (size_t k = 0; k < 10; ++k) { @@ -62,7 +62,7 @@ TEST(RenderDelayBuffer, BufferOverflow) { TEST(RenderDelayBuffer, AvailableBlock) { constexpr size_t kNumBands = 1; std::unique_ptr delay_buffer( - RenderDelayBuffer::Create(EchoCanceller3Config(), kNumBands)); + RenderDelayBuffer::Create(EchoCanceller3Config(), 16000)); std::vector> input_block( kNumBands, std::vector(kBlockSize, 1.f)); EXPECT_EQ(RenderDelayBuffer::BufferingEvent::kNone, @@ -74,7 +74,7 @@ TEST(RenderDelayBuffer, AvailableBlock) { TEST(RenderDelayBuffer, AlignFromDelay) { EchoCanceller3Config config; std::unique_ptr delay_buffer( - RenderDelayBuffer::Create(config, 1)); + RenderDelayBuffer::Create(config, 16000)); ASSERT_TRUE(delay_buffer->Delay()); delay_buffer->Reset(); size_t initial_internal_delay = 0; @@ -92,7 +92,7 @@ TEST(RenderDelayBuffer, AlignFromDelay) { // tests on test bots has been fixed. TEST(RenderDelayBuffer, DISABLED_WrongDelay) { std::unique_ptr delay_buffer( - RenderDelayBuffer::Create(EchoCanceller3Config(), 3)); + RenderDelayBuffer::Create(EchoCanceller3Config(), 48000)); EXPECT_DEATH(delay_buffer->AlignFromDelay(21), ""); } @@ -100,8 +100,8 @@ TEST(RenderDelayBuffer, DISABLED_WrongDelay) { TEST(RenderDelayBuffer, WrongNumberOfBands) { for (auto rate : {16000, 32000, 48000}) { SCOPED_TRACE(ProduceDebugText(rate)); - std::unique_ptr delay_buffer(RenderDelayBuffer::Create( - EchoCanceller3Config(), NumBandsForRate(rate))); + std::unique_ptr delay_buffer( + RenderDelayBuffer::Create(EchoCanceller3Config(), rate)); std::vector> block_to_insert( NumBandsForRate(rate < 48000 ? rate + 16000 : 16000), std::vector(kBlockSize, 0.f)); @@ -114,7 +114,7 @@ TEST(RenderDelayBuffer, WrongBlockLength) { for (auto rate : {8000, 16000, 32000, 48000}) { SCOPED_TRACE(ProduceDebugText(rate)); std::unique_ptr delay_buffer( - RenderDelayBuffer::Create(EchoCanceller3Config(), 3)); + RenderDelayBuffer::Create(EchoCanceller3Config(), 48000)); std::vector> block_to_insert( NumBandsForRate(rate), std::vector(kBlockSize - 1, 0.f)); EXPECT_DEATH(delay_buffer->Insert(block_to_insert), ""); diff --git a/modules/audio_processing/aec3/render_delay_controller_unittest.cc b/modules/audio_processing/aec3/render_delay_controller_unittest.cc index 96c62179a2..ff3fb7bc1e 100644 --- a/modules/audio_processing/aec3/render_delay_controller_unittest.cc +++ b/modules/audio_processing/aec3/render_delay_controller_unittest.cc @@ -56,7 +56,7 @@ TEST(RenderDelayController, NoRenderSignal) { for (auto rate : {8000, 16000, 32000, 48000}) { SCOPED_TRACE(ProduceDebugText(rate)); std::unique_ptr delay_buffer( - RenderDelayBuffer::Create(config, NumBandsForRate(rate))); + RenderDelayBuffer::Create(config, rate)); std::unique_ptr delay_controller( RenderDelayController::Create(config, rate)); for (size_t k = 0; k < 100; ++k) { @@ -84,7 +84,7 @@ TEST(RenderDelayController, BasicApiCalls) { std::vector> render_block( NumBandsForRate(rate), std::vector(kBlockSize, 0.f)); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, NumBandsForRate(rate))); + RenderDelayBuffer::Create(config, rate)); std::unique_ptr delay_controller( RenderDelayController::Create(EchoCanceller3Config(), rate)); for (size_t k = 0; k < 10; ++k) { @@ -122,7 +122,7 @@ TEST(RenderDelayController, Alignment) { absl::optional delay_blocks; SCOPED_TRACE(ProduceDebugText(rate, delay_samples)); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, NumBandsForRate(rate))); + RenderDelayBuffer::Create(config, rate)); std::unique_ptr delay_controller( RenderDelayController::Create(config, rate)); DelayBuffer signal_delay_buffer(delay_samples); @@ -169,7 +169,7 @@ TEST(RenderDelayController, NonCausalAlignment) { absl::optional delay_blocks; SCOPED_TRACE(ProduceDebugText(rate, -delay_samples)); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, NumBandsForRate(rate))); + RenderDelayBuffer::Create(config, rate)); std::unique_ptr delay_controller( RenderDelayController::Create(EchoCanceller3Config(), rate)); DelayBuffer signal_delay_buffer(-delay_samples); @@ -209,7 +209,7 @@ TEST(RenderDelayController, AlignmentWithJitter) { absl::optional delay_blocks; SCOPED_TRACE(ProduceDebugText(rate, delay_samples)); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, NumBandsForRate(rate))); + RenderDelayBuffer::Create(config, rate)); std::unique_ptr delay_controller( RenderDelayController::Create(config, rate)); DelayBuffer signal_delay_buffer(delay_samples); @@ -262,7 +262,7 @@ TEST(RenderDelayController, InitialHeadroom) { for (auto rate : {8000, 16000, 32000, 48000}) { SCOPED_TRACE(ProduceDebugText(rate)); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, NumBandsForRate(rate))); + RenderDelayBuffer::Create(config, rate)); std::unique_ptr delay_controller( RenderDelayController::Create(config, rate)); @@ -280,7 +280,7 @@ TEST(RenderDelayController, WrongCaptureSize) { for (auto rate : {8000, 16000, 32000, 48000}) { SCOPED_TRACE(ProduceDebugText(rate)); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, NumBandsForRate(rate))); + RenderDelayBuffer::Create(config, rate)); EXPECT_DEATH( std::unique_ptr( RenderDelayController::Create(EchoCanceller3Config(), rate)) @@ -298,7 +298,7 @@ TEST(RenderDelayController, DISABLED_WrongSampleRate) { SCOPED_TRACE(ProduceDebugText(rate)); EchoCanceller3Config config; std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, NumBandsForRate(rate))); + RenderDelayBuffer::Create(config, rate)); EXPECT_DEATH( std::unique_ptr( RenderDelayController::Create(EchoCanceller3Config(), rate)), diff --git a/modules/audio_processing/aec3/render_signal_analyzer_unittest.cc b/modules/audio_processing/aec3/render_signal_analyzer_unittest.cc index 1adfbfbd41..53a41b1768 100644 --- a/modules/audio_processing/aec3/render_signal_analyzer_unittest.cc +++ b/modules/audio_processing/aec3/render_signal_analyzer_unittest.cc @@ -61,7 +61,7 @@ TEST(RenderSignalAnalyzer, NoFalseDetectionOfNarrowBands) { std::vector> x(3, std::vector(kBlockSize, 0.f)); std::array x_old; std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(EchoCanceller3Config(), 3)); + RenderDelayBuffer::Create(EchoCanceller3Config(), 48000)); std::array mask; x_old.fill(0.f); @@ -94,7 +94,7 @@ TEST(RenderSignalAnalyzer, NarrowBandDetection) { Aec3Fft fft; EchoCanceller3Config config; std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); std::array mask; x_old.fill(0.f); diff --git a/modules/audio_processing/aec3/residual_echo_estimator_unittest.cc b/modules/audio_processing/aec3/residual_echo_estimator_unittest.cc index 6214025a0f..d277d42f3e 100644 --- a/modules/audio_processing/aec3/residual_echo_estimator_unittest.cc +++ b/modules/audio_processing/aec3/residual_echo_estimator_unittest.cc @@ -27,7 +27,7 @@ TEST(ResidualEchoEstimator, NullResidualEchoPowerOutput) { EchoCanceller3Config config; AecState aec_state(config); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); std::vector> H2; std::array S2_linear; std::array Y2; @@ -47,7 +47,7 @@ TEST(ResidualEchoEstimator, DISABLED_BasicTest) { ResidualEchoEstimator estimator(config); AecState aec_state(config); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); std::array E2_main; std::array E2_shadow; diff --git a/modules/audio_processing/aec3/shadow_filter_update_gain_unittest.cc b/modules/audio_processing/aec3/shadow_filter_update_gain_unittest.cc index 9d87cc82aa..7372e5eb28 100644 --- a/modules/audio_processing/aec3/shadow_filter_update_gain_unittest.cc +++ b/modules/audio_processing/aec3/shadow_filter_update_gain_unittest.cc @@ -52,7 +52,7 @@ void RunFilterUpdateTest(int num_blocks_to_process, config.delay.default_delay = 1; std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); std::array x_old; x_old.fill(0.f); diff --git a/modules/audio_processing/aec3/signal_dependent_erle_estimator_unittest.cc b/modules/audio_processing/aec3/signal_dependent_erle_estimator_unittest.cc index fa0be5cd24..f27c9051d0 100644 --- a/modules/audio_processing/aec3/signal_dependent_erle_estimator_unittest.cc +++ b/modules/audio_processing/aec3/signal_dependent_erle_estimator_unittest.cc @@ -62,7 +62,7 @@ class TestInputs { }; TestInputs::TestInputs(const EchoCanceller3Config& cfg) - : render_delay_buffer_(RenderDelayBuffer::Create(cfg, 1)), + : render_delay_buffer_(RenderDelayBuffer::Create(cfg, 16000)), H2_(cfg.filter.main.length_blocks), x_(1, std::vector(kBlockSize, 0.f)) { render_delay_buffer_->AlignFromDelay(4); diff --git a/modules/audio_processing/aec3/subtractor_unittest.cc b/modules/audio_processing/aec3/subtractor_unittest.cc index 99d8e1b9b3..bcf3b272f2 100644 --- a/modules/audio_processing/aec3/subtractor_unittest.cc +++ b/modules/audio_processing/aec3/subtractor_unittest.cc @@ -43,7 +43,7 @@ float RunSubtractorTest(int num_blocks_to_process, SubtractorOutput output; config.delay.default_delay = 1; std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); RenderSignalAnalyzer render_signal_analyzer(config); Random random_generator(42U); Aec3Fft fft; @@ -126,7 +126,7 @@ TEST(Subtractor, DISABLED_NullOutput) { EchoCanceller3Config config; Subtractor subtractor(config, &data_dumper, DetectOptimization()); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); RenderSignalAnalyzer render_signal_analyzer(config); std::vector y(kBlockSize, 0.f); @@ -142,7 +142,7 @@ TEST(Subtractor, WrongCaptureSize) { EchoCanceller3Config config; Subtractor subtractor(config, &data_dumper, DetectOptimization()); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); RenderSignalAnalyzer render_signal_analyzer(config); std::vector y(kBlockSize - 1, 0.f); SubtractorOutput output; diff --git a/modules/audio_processing/aec3/suppression_gain_unittest.cc b/modules/audio_processing/aec3/suppression_gain_unittest.cc index b110e0a00a..7d305f89ea 100644 --- a/modules/audio_processing/aec3/suppression_gain_unittest.cc +++ b/modules/audio_processing/aec3/suppression_gain_unittest.cc @@ -75,7 +75,7 @@ TEST(SuppressionGain, BasicGainComputation) { ApmDataDumper data_dumper(42); Subtractor subtractor(config, &data_dumper, DetectOptimization()); std::unique_ptr render_delay_buffer( - RenderDelayBuffer::Create(config, 3)); + RenderDelayBuffer::Create(config, 48000)); absl::optional delay_estimate; // Ensure that a strong noise is detected to mask any echoes.