Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(330)

Unified Diff: webrtc/modules/audio_processing/aec3/block_processor.cc

Issue 2998223002: Make AEC3 recover more quickly for lost capture data (Closed)
Patch Set: Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/audio_processing/aec3/block_processor.cc
diff --git a/webrtc/modules/audio_processing/aec3/block_processor.cc b/webrtc/modules/audio_processing/aec3/block_processor.cc
index 3a32f3c80b9369b642b0bcf4c173fa7ebd485ce9..52bc4ef1a30838e7d8772cab0b69310b9dc214cd 100644
--- a/webrtc/modules/audio_processing/aec3/block_processor.cc
+++ b/webrtc/modules/audio_processing/aec3/block_processor.cc
@@ -112,20 +112,27 @@ void BlockProcessorImpl::ProcessCapture(
const size_t old_delay = render_buffer_->Delay();
const size_t new_delay = delay_controller_->GetDelay(
render_buffer_->GetDownsampledRenderBuffer(), (*capture_block)[0]);
- render_buffer_->SetDelay(new_delay);
- const size_t achieved_delay = render_buffer_->Delay();
- // Inform the delay controller of the actually set delay to allow it to
- // properly react to a non-feasible delay.
- delay_controller_->SetDelay(achieved_delay);
+ bool delay_change;
+ if (new_delay >= kMinEchoPathDelayBlocks) {
+ render_buffer_->SetDelay(new_delay);
+ const size_t achieved_delay = render_buffer_->Delay();
+ delay_change = old_delay != achieved_delay || old_delay != new_delay ||
+ render_buffer_overrun_occurred_;
+
+ // Inform the delay controller of the actually set delay to allow it to
+ // properly react to a non-feasible delay.
+ delay_controller_->SetDelay(achieved_delay);
+ } else {
+ delay_controller_->Reset();
+ render_buffer_->Reset();
+ delay_change = true;
+ }
// Remove the echo from the capture signal.
echo_remover_->ProcessCapture(
delay_controller_->AlignmentHeadroomSamples(),
- EchoPathVariability(echo_path_gain_change,
- old_delay != achieved_delay ||
- old_delay != new_delay ||
- render_buffer_overrun_occurred_),
+ EchoPathVariability(echo_path_gain_change, delay_change),
capture_signal_saturation, render_buffer_->GetRenderBuffer(),
capture_block);
« no previous file with comments | « webrtc/modules/audio_processing/aec3/aec3_common.h ('k') | webrtc/modules/audio_processing/aec3/render_delay_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698