| Index: webrtc/modules/audio_processing/utility/delay_estimator.cc
|
| diff --git a/webrtc/modules/audio_processing/utility/delay_estimator.cc b/webrtc/modules/audio_processing/utility/delay_estimator.cc
|
| index 15a67472b176a0cd549c73db302bdc9b73eb3162..56bdde890c9348a0e2874950b15177a00ed72d0f 100644
|
| --- a/webrtc/modules/audio_processing/utility/delay_estimator.cc
|
| +++ b/webrtc/modules/audio_processing/utility/delay_estimator.cc
|
| @@ -13,6 +13,7 @@
|
| #include <assert.h>
|
| #include <stdlib.h>
|
| #include <string.h>
|
| +#include <algorithm>
|
|
|
| // Number of right shifts for scaling is linearly depending on number of bits in
|
| // the far-end binary spectrum.
|
| @@ -618,15 +619,29 @@ int WebRtc_ProcessBinarySpectrum(BinaryDelayEstimator* self,
|
| ((value_best_candidate < self->minimum_probability) ||
|
| (value_best_candidate < self->last_delay_probability)));
|
|
|
| - UpdateRobustValidationStatistics(self, candidate_delay, valley_depth,
|
| - value_best_candidate);
|
| + // Check for nonstationary farend signal.
|
| + const bool non_stationary_farend =
|
| + std::any_of(self->farend->far_bit_counts,
|
| + self->farend->far_bit_counts + self->history_size,
|
| + [](int a) { return a > 0; });
|
| +
|
| + if (non_stationary_farend) {
|
| + // Only update the validation statistics when the farend is nonstationary
|
| + // as the underlying estimates are otherwise frozen.
|
| + UpdateRobustValidationStatistics(self, candidate_delay, valley_depth,
|
| + value_best_candidate);
|
| + }
|
| +
|
| if (self->robust_validation_enabled) {
|
| int is_histogram_valid = HistogramBasedValidation(self, candidate_delay);
|
| valid_candidate = RobustValidation(self, candidate_delay, valid_candidate,
|
| is_histogram_valid);
|
|
|
| }
|
| - if (valid_candidate) {
|
| +
|
| + // Only update the delay estimate when the farend is nonstationary and when
|
| + // a valid delay candidate is available.
|
| + if (non_stationary_farend && valid_candidate) {
|
| if (candidate_delay != self->last_delay) {
|
| self->last_delay_histogram =
|
| (self->histogram[candidate_delay] > kLastHistogramMax ?
|
|
|