diff --git a/modules/audio_processing/aec3/aec_state.cc b/modules/audio_processing/aec3/aec_state.cc index 1e92a60e86..df56c3a433 100644 --- a/modules/audio_processing/aec3/aec_state.cc +++ b/modules/audio_processing/aec3/aec_state.cc @@ -350,8 +350,9 @@ void AecState::InitialState::InitialState::Update(bool active_render, AecState::FilterDelay::FilterDelay(const EchoCanceller3Config& config, size_t num_capture_channels) - : delay_headroom_samples_(config.delay.delay_headroom_samples), - filter_delays_blocks_(num_capture_channels, 0) {} + : delay_headroom_blocks_(config.delay.delay_headroom_samples / kBlockSize), + filter_delays_blocks_(num_capture_channels, delay_headroom_blocks_), + min_filter_delay_(delay_headroom_blocks_) {} void AecState::FilterDelay::Update( rtc::ArrayView analyzer_filter_delay_estimates_blocks, @@ -369,7 +370,7 @@ void AecState::FilterDelay::Update( const bool delay_estimator_may_not_have_converged = blocks_with_proper_filter_adaptation < 2 * kNumBlocksPerSecond; if (delay_estimator_may_not_have_converged && external_delay_) { - int delay_guess = delay_headroom_samples_ / kBlockSize; + const int delay_guess = delay_headroom_blocks_; std::fill(filter_delays_blocks_.begin(), filter_delays_blocks_.end(), delay_guess); } else { diff --git a/modules/audio_processing/aec3/aec_state.h b/modules/audio_processing/aec3/aec_state.h index 5d12226ff4..5b40e9513a 100644 --- a/modules/audio_processing/aec3/aec_state.h +++ b/modules/audio_processing/aec3/aec_state.h @@ -211,10 +211,10 @@ class AecState { size_t blocks_with_proper_filter_adaptation); private: - const int delay_headroom_samples_; + const int delay_headroom_blocks_; bool external_delay_reported_ = false; std::vector filter_delays_blocks_; - int min_filter_delay_ = 0; + int min_filter_delay_; absl::optional external_delay_; } delay_state_; diff --git a/modules/audio_processing/aec3/render_delay_buffer.cc b/modules/audio_processing/aec3/render_delay_buffer.cc index f5030e17b8..7bebc6fd47 100644 --- a/modules/audio_processing/aec3/render_delay_buffer.cc +++ b/modules/audio_processing/aec3/render_delay_buffer.cc @@ -385,9 +385,11 @@ void RenderDelayBufferImpl::ApplyTotalDelay(int delay) { void RenderDelayBufferImpl::AlignFromExternalDelay() { RTC_DCHECK(config_.delay.use_external_delay_estimator); if (external_audio_buffer_delay_) { - int64_t delay = render_call_counter_ - capture_call_counter_ + - *external_audio_buffer_delay_; - ApplyTotalDelay(delay); + const int64_t delay = render_call_counter_ - capture_call_counter_ + + *external_audio_buffer_delay_; + const int64_t delay_with_headroom = + delay - config_.delay.delay_headroom_samples / kBlockSize; + ApplyTotalDelay(delay_with_headroom); } }