AEC3: Fix render buffer headroom calculation on underruns The read and write pointers can meet. Currently, this causes an overflow in the headroom calculation (headroom == buffer size) which offsets the buffers needlessly. This causes a loss of transparency when using the neural residual echo estimation module. Tested: 1. audioproc_f is bitexact on a large set of aecdumps, without ML-REE 2. I see improved transparency on a dump with underruns, with ML-REE Bug: b:487988676, webrtc:442444736 Change-Id: I902a20f28c603f85a1c10ae5b525788e3a54c285 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/456301 Commit-Queue: Sam Zackrisson <saza@webrtc.org> Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org> Cr-Commit-Position: refs/heads/main@{#47153}
diff --git a/modules/audio_processing/aec3/render_buffer.h b/modules/audio_processing/aec3/render_buffer.h index f25416f..6fc0317 100644 --- a/modules/audio_processing/aec3/render_buffer.h +++ b/modules/audio_processing/aec3/render_buffer.h
@@ -88,12 +88,12 @@ int Headroom() const { // The write and read indices are decreased over time. int headroom = - fft_buffer_->write < fft_buffer_->read + fft_buffer_->write <= fft_buffer_->read ? fft_buffer_->read - fft_buffer_->write : fft_buffer_->size - fft_buffer_->write + fft_buffer_->read; RTC_DCHECK_LE(0, headroom); - RTC_DCHECK_GE(fft_buffer_->size, headroom); + RTC_DCHECK_GT(fft_buffer_->size, headroom); return headroom; }