Chromium Code Reviews| 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..dc78768fadfc5686960afb3af1c484b006050fc4 100644 |
| --- a/webrtc/modules/audio_processing/utility/delay_estimator.cc |
| +++ b/webrtc/modules/audio_processing/utility/delay_estimator.cc |
| @@ -10,6 +10,7 @@ |
| #include "webrtc/modules/audio_processing/utility/delay_estimator.h" |
| +#include <algorithm> |
|
hlundin-webrtc
2016/05/11 13:06:19
C system files go before C++ system files.
peah-webrtc
2016/05/11 13:16:08
Good catch!
Done.
|
| #include <assert.h> |
| #include <stdlib.h> |
| #include <string.h> |
| @@ -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 ? |