Chromium Code Reviews| Index: webrtc/modules/audio_processing/aec3/echo_remover.cc |
| diff --git a/webrtc/modules/audio_processing/aec3/echo_remover.cc b/webrtc/modules/audio_processing/aec3/echo_remover.cc |
| index a0e03fbeabc538fe696a372042fe3dda122f7175..41e954652a7ec9581cdc8115dee526575961af55 100644 |
| --- a/webrtc/modules/audio_processing/aec3/echo_remover.cc |
| +++ b/webrtc/modules/audio_processing/aec3/echo_remover.cc |
| @@ -22,10 +22,10 @@ |
| #include "webrtc/modules/audio_processing/aec3/comfort_noise_generator.h" |
| #include "webrtc/modules/audio_processing/aec3/echo_path_variability.h" |
| #include "webrtc/modules/audio_processing/aec3/echo_remover_metrics.h" |
| -#include "webrtc/modules/audio_processing/aec3/fft_buffer.h" |
| #include "webrtc/modules/audio_processing/aec3/fft_data.h" |
| #include "webrtc/modules/audio_processing/aec3/output_selector.h" |
| #include "webrtc/modules/audio_processing/aec3/power_echo_model.h" |
| +#include "webrtc/modules/audio_processing/aec3/render_buffer.h" |
| #include "webrtc/modules/audio_processing/aec3/render_delay_buffer.h" |
| #include "webrtc/modules/audio_processing/aec3/residual_echo_estimator.h" |
| #include "webrtc/modules/audio_processing/aec3/subtractor.h" |
| @@ -60,11 +60,11 @@ class EchoRemoverImpl final : public EchoRemover { |
| // Removes the echo from a block of samples from the capture signal. The |
| // supplied render signal is assumed to be pre-aligned with the capture |
| // signal. |
| - void ProcessBlock( |
| + void ProcessCapture( |
| const rtc::Optional<size_t>& external_echo_path_delay_estimate, |
| const EchoPathVariability& echo_path_variability, |
| bool capture_signal_saturation, |
| - const std::vector<std::vector<float>>& render, |
| + const RenderBuffer& render_buffer, |
| std::vector<std::vector<float>>* capture) override; |
| // Updates the status on whether echo leakage is detected in the output of the |
| @@ -84,12 +84,11 @@ class EchoRemoverImpl final : public EchoRemover { |
| ComfortNoiseGenerator cng_; |
| SuppressionFilter suppression_filter_; |
| PowerEchoModel power_echo_model_; |
| - FftBuffer X_buffer_; |
| + RenderBuffer X_buffer_; |
| RenderSignalAnalyzer render_signal_analyzer_; |
| OutputSelector output_selector_; |
| ResidualEchoEstimator residual_echo_estimator_; |
| bool echo_leakage_detected_ = false; |
| - std::array<float, kBlockSize> x_old_; |
| AecState aec_state_; |
| EchoRemoverMetrics metrics_; |
| @@ -109,22 +108,22 @@ EchoRemoverImpl::EchoRemoverImpl(int sample_rate_hz) |
| cng_(optimization_), |
| suppression_filter_(sample_rate_hz_), |
| X_buffer_(optimization_, |
| + NumBandsForRate(sample_rate_hz_), |
| std::max(subtractor_.MinFarendBufferLength(), |
| power_echo_model_.MinFarendBufferLength()), |
| subtractor_.NumBlocksInRenderSums()) { |
| RTC_DCHECK(ValidFullBandRate(sample_rate_hz)); |
| - x_old_.fill(0.f); |
| } |
| EchoRemoverImpl::~EchoRemoverImpl() = default; |
| -void EchoRemoverImpl::ProcessBlock( |
| +void EchoRemoverImpl::ProcessCapture( |
| const rtc::Optional<size_t>& echo_path_delay_samples, |
| const EchoPathVariability& echo_path_variability, |
| bool capture_signal_saturation, |
| - const std::vector<std::vector<float>>& render, |
| + const RenderBuffer& render_buffer, |
| std::vector<std::vector<float>>* capture) { |
| - const std::vector<std::vector<float>>& x = render; |
| + const std::vector<std::vector<float>>& x = render_buffer.MostRecentBlock(); |
| std::vector<std::vector<float>>* y = capture; |
| RTC_DCHECK(y); |
| @@ -144,7 +143,6 @@ void EchoRemoverImpl::ProcessBlock( |
| if (echo_path_variability.AudioPathChanged()) { |
| subtractor_.HandleEchoPathChange(echo_path_variability); |
| - power_echo_model_.HandleEchoPathChange(echo_path_variability); |
|
peah-webrtc
2017/03/30 05:36:56
I removed this since it caused a build error, and
|
| residual_echo_estimator_.HandleEchoPathChange(echo_path_variability); |
| } |
| @@ -153,7 +151,6 @@ void EchoRemoverImpl::ProcessBlock( |
| std::array<float, kFftLengthBy2Plus1> R2; |
| std::array<float, kFftLengthBy2Plus1> S2_linear; |
| std::array<float, kFftLengthBy2Plus1> G; |
| - FftData X; |
| FftData Y; |
| FftData comfort_noise; |
| FftData high_band_comfort_noise; |
| @@ -164,15 +161,11 @@ void EchoRemoverImpl::ProcessBlock( |
| auto& e_main = subtractor_output.e_main; |
| auto& e_shadow = subtractor_output.e_shadow; |
| - // Update the render signal buffer. |
| - fft_.PaddedFft(x0, x_old_, &X); |
| - X_buffer_.Insert(X); |
| - |
| // Analyze the render signal. |
| - render_signal_analyzer_.Update(X_buffer_, aec_state_.FilterDelay()); |
| + render_signal_analyzer_.Update(render_buffer, aec_state_.FilterDelay()); |
| // Perform linear echo cancellation. |
| - subtractor_.Process(X_buffer_, y0, render_signal_analyzer_, |
| + subtractor_.Process(render_buffer, y0, render_signal_analyzer_, |
| aec_state_.SaturatedCapture(), &subtractor_output); |
| // Compute spectra. |
| @@ -182,11 +175,12 @@ void EchoRemoverImpl::ProcessBlock( |
| // Update the AEC state information. |
| aec_state_.Update(subtractor_.FilterFrequencyResponse(), |
| - echo_path_delay_samples, X_buffer_, E2_main, E2_shadow, Y2, |
| - x0, echo_path_variability, echo_leakage_detected_); |
| + echo_path_delay_samples, render_buffer, E2_main, E2_shadow, |
| + Y2, x0, echo_path_variability, echo_leakage_detected_); |
| // Use the power model to estimate the echo. |
| - power_echo_model_.EstimateEcho(X_buffer_, Y2, aec_state_, &S2_power); |
| + // TODO(peah): Remove in upcoming CL. |
| + // power_echo_model_.EstimateEcho(render_buffer, Y2, aec_state_, &S2_power); |
|
peah-webrtc
2017/03/30 05:36:56
This will be removed in the next CL.
|
| // Choose the linear output. |
| output_selector_.FormLinearOutput(e_main, y0); |
| @@ -196,7 +190,7 @@ void EchoRemoverImpl::ProcessBlock( |
| // Estimate the residual echo power. |
| residual_echo_estimator_.Estimate( |
| - output_selector_.UseSubtractorOutput(), aec_state_, X_buffer_, |
| + output_selector_.UseSubtractorOutput(), aec_state_, render_buffer, |
| subtractor_.FilterFrequencyResponse(), E2_main, E2_shadow, S2_linear, |
| S2_power, Y2, &R2); |