| Index: webrtc/modules/audio_processing/residual_echo_detector.h
|
| diff --git a/webrtc/modules/audio_processing/residual_echo_detector.h b/webrtc/modules/audio_processing/residual_echo_detector.h
|
| index 723371c7ce68c57756420ed7b1cf7aa21a31e2ae..37aa283b0869487e08a498961e292667f458c71e 100644
|
| --- a/webrtc/modules/audio_processing/residual_echo_detector.h
|
| +++ b/webrtc/modules/audio_processing/residual_echo_detector.h
|
| @@ -11,10 +11,12 @@
|
| #ifndef WEBRTC_MODULES_AUDIO_PROCESSING_RESIDUAL_ECHO_DETECTOR_H_
|
| #define WEBRTC_MODULES_AUDIO_PROCESSING_RESIDUAL_ECHO_DETECTOR_H_
|
|
|
| -#include <memory>
|
| #include <vector>
|
|
|
| #include "webrtc/base/array_view.h"
|
| +#include "webrtc/modules/audio_processing/echo_detector/circular_buffer.h"
|
| +#include "webrtc/modules/audio_processing/echo_detector/mean_variance_estimator.h"
|
| +#include "webrtc/modules/audio_processing/echo_detector/normalized_covariance_estimator.h"
|
|
|
| namespace webrtc {
|
|
|
| @@ -27,7 +29,7 @@ class ResidualEchoDetector {
|
| ~ResidualEchoDetector();
|
|
|
| // This function should be called while holding the render lock.
|
| - void AnalyzeRenderAudio(rtc::ArrayView<const float> render_audio) const;
|
| + void AnalyzeRenderAudio(rtc::ArrayView<const float> render_audio);
|
|
|
| // This function should be called while holding the capture lock.
|
| void AnalyzeCaptureAudio(rtc::ArrayView<const float> capture_audio);
|
| @@ -39,7 +41,36 @@ class ResidualEchoDetector {
|
| std::vector<float>* packed_buffer);
|
|
|
| // This function should be called while holding the capture lock.
|
| - float get_echo_likelihood() const;
|
| + float echo_likelihood() const { return echo_likelihood_; }
|
| +
|
| + private:
|
| + // Keep track if the |Process| function has been previously called.
|
| + bool first_process_call_ = true;
|
| + // Buffer for storing the power of incoming farend buffers. This is needed for
|
| + // cases where calls to BufferFarend and Process are jittery.
|
| + CircularBuffer render_buffer_;
|
| + // Count how long ago it was that the size of |render_buffer_| was zero. This
|
| + // value is also reset to zero when clock drift is detected and a value from
|
| + // the renderbuffer is discarded, even though the buffer is not actually zero
|
| + // at that point. This is done to avoid repeatedly removing elements in this
|
| + // situation.
|
| + size_t frames_since_zero_buffer_size_ = 0;
|
| +
|
| + // Circular buffers containing delayed versions of the power, mean and
|
| + // standard deviation, for calculating the delayed covariance values.
|
| + std::vector<float> render_power_;
|
| + std::vector<float> render_power_mean_;
|
| + std::vector<float> render_power_std_dev_;
|
| + // Covariance estimates for different delay values.
|
| + std::vector<NormalizedCovarianceEstimator> covariances_;
|
| + // Index where next element should be inserted in all of the above circular
|
| + // buffers.
|
| + size_t next_insertion_index_ = 0;
|
| +
|
| + MeanVarianceEstimator render_statistics_;
|
| + MeanVarianceEstimator capture_statistics_;
|
| + // Current echo likelihood.
|
| + float echo_likelihood_ = 0.f;
|
| };
|
|
|
| } // namespace webrtc
|
|
|