| Index: webrtc/modules/audio_processing/aec3/residual_echo_estimator_unittest.cc
|
| diff --git a/webrtc/modules/audio_processing/aec3/residual_echo_estimator_unittest.cc b/webrtc/modules/audio_processing/aec3/residual_echo_estimator_unittest.cc
|
| index 79e6ff0a483cfa8ecefeabb4b4df6b1ce57afb9e..824467d9dd3241a66a50d81e53ed59eae18b35bc 100644
|
| --- a/webrtc/modules/audio_processing/aec3/residual_echo_estimator_unittest.cc
|
| +++ b/webrtc/modules/audio_processing/aec3/residual_echo_estimator_unittest.cc
|
| @@ -10,8 +10,6 @@
|
|
|
| #include "webrtc/modules/audio_processing/aec3/residual_echo_estimator.h"
|
|
|
| -// TODO(peah): Reactivate once the next CL has landed.
|
| -#if 0
|
| #include "webrtc/base/random.h"
|
| #include "webrtc/modules/audio_processing/aec3/aec_state.h"
|
| #include "webrtc/modules/audio_processing/aec3/aec3_fft.h"
|
| @@ -22,20 +20,16 @@ namespace webrtc {
|
|
|
| #if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
|
|
|
| -// Verifies that the check for non-null output gains works.
|
| -TEST(ResidualEchoEstimator, NullOutputGains) {
|
| +// Verifies that the check for non-null output residual echo power works.
|
| +TEST(ResidualEchoEstimator, NullResidualEchoPowerOutput) {
|
| AecState aec_state;
|
| - FftBuffer X_buffer(Aec3Optimization::kNone, 10, std::vector<size_t>(1, 10));
|
| + RenderBuffer render_buffer(Aec3Optimization::kNone, 3, 10,
|
| + std::vector<size_t>(1, 10));
|
| std::vector<std::array<float, kFftLengthBy2Plus1>> H2;
|
| - std::array<float, kFftLengthBy2Plus1> E2_main;
|
| - std::array<float, kFftLengthBy2Plus1> E2_shadow;
|
| std::array<float, kFftLengthBy2Plus1> S2_linear;
|
| - std::array<float, kFftLengthBy2Plus1> S2_fallback;
|
| std::array<float, kFftLengthBy2Plus1> Y2;
|
| -
|
| - EXPECT_DEATH(ResidualEchoEstimator().Estimate(true, aec_state, X_buffer, H2,
|
| - E2_main, E2_shadow, S2_linear,
|
| - S2_fallback, Y2, nullptr),
|
| + EXPECT_DEATH(ResidualEchoEstimator().Estimate(true, aec_state, render_buffer,
|
| + S2_linear, Y2, nullptr),
|
| "");
|
| }
|
|
|
| @@ -44,7 +38,8 @@ TEST(ResidualEchoEstimator, NullOutputGains) {
|
| TEST(ResidualEchoEstimator, BasicTest) {
|
| ResidualEchoEstimator estimator;
|
| AecState aec_state;
|
| - FftBuffer X_buffer(Aec3Optimization::kNone, 10, std::vector<size_t>(1, 10));
|
| + RenderBuffer render_buffer(Aec3Optimization::kNone, 3, 10,
|
| + std::vector<size_t>(1, 10));
|
| std::array<float, kFftLengthBy2Plus1> E2_main;
|
| std::array<float, kFftLengthBy2Plus1> E2_shadow;
|
| std::array<float, kFftLengthBy2Plus1> S2_linear;
|
| @@ -52,7 +47,7 @@ TEST(ResidualEchoEstimator, BasicTest) {
|
| std::array<float, kFftLengthBy2Plus1> Y2;
|
| std::array<float, kFftLengthBy2Plus1> R2;
|
| EchoPathVariability echo_path_variability(false, false);
|
| - std::array<float, kBlockSize> x;
|
| + std::vector<std::vector<float>> x(3, std::vector<float>(kBlockSize, 0.f));
|
| std::vector<std::array<float, kFftLengthBy2Plus1>> H2(10);
|
| Random random_generator(42U);
|
| FftData X;
|
| @@ -63,6 +58,7 @@ TEST(ResidualEchoEstimator, BasicTest) {
|
| H2_k.fill(0.01f);
|
| }
|
| H2[2].fill(10.f);
|
| + H2[2][0] = 0.1f;
|
|
|
| constexpr float kLevel = 10.f;
|
| E2_shadow.fill(kLevel);
|
| @@ -71,21 +67,20 @@ TEST(ResidualEchoEstimator, BasicTest) {
|
| S2_fallback.fill(kLevel);
|
| Y2.fill(kLevel);
|
|
|
| - for (int k = 0; k < 100; ++k) {
|
| - RandomizeSampleVector(&random_generator, x);
|
| - fft.PaddedFft(x, x_old, &X);
|
| - X_buffer.Insert(X);
|
| + for (int k = 0; k < 2000; ++k) {
|
| + RandomizeSampleVector(&random_generator, x[0]);
|
| + std::for_each(x[0].begin(), x[0].end(), [](float& a) { a /= 30.f; });
|
| + fft.PaddedFft(x[0], x_old, &X);
|
| + render_buffer.Insert(x);
|
|
|
| - aec_state.Update(H2, rtc::Optional<size_t>(2), X_buffer, E2_main, E2_shadow,
|
| - Y2, x, echo_path_variability, false);
|
| + aec_state.HandleEchoPathChange(echo_path_variability);
|
| + aec_state.Update(H2, rtc::Optional<size_t>(2), render_buffer, E2_main, Y2,
|
| + x[0], false);
|
|
|
| - estimator.Estimate(true, aec_state, X_buffer, H2, E2_main, E2_shadow,
|
| - S2_linear, S2_fallback, Y2, &R2);
|
| + estimator.Estimate(true, aec_state, render_buffer, S2_linear, Y2, &R2);
|
| }
|
| std::for_each(R2.begin(), R2.end(),
|
| [&](float a) { EXPECT_NEAR(kLevel, a, 0.1f); });
|
| }
|
|
|
| } // namespace webrtc
|
| -
|
| -#endif
|
|
|