| 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);
|
|
|
|
|