Index: webrtc/modules/audio_processing/aec3/echo_path_delay_estimator_unittest.cc |
diff --git a/webrtc/modules/audio_processing/aec3/echo_path_delay_estimator_unittest.cc b/webrtc/modules/audio_processing/aec3/echo_path_delay_estimator_unittest.cc |
index 476362a8c29b9a81c82a4c352cd264789a5e573b..8e2d1e11a1126cddf98a56fc7499b09e1d04f8e6 100644 |
--- a/webrtc/modules/audio_processing/aec3/echo_path_delay_estimator_unittest.cc |
+++ b/webrtc/modules/audio_processing/aec3/echo_path_delay_estimator_unittest.cc |
@@ -16,6 +16,7 @@ |
#include "webrtc/base/random.h" |
#include "webrtc/modules/audio_processing/aec3/aec3_common.h" |
+#include "webrtc/modules/audio_processing/aec3/render_delay_buffer.h" |
#include "webrtc/modules/audio_processing/logging/apm_data_dumper.h" |
#include "webrtc/modules/audio_processing/test/echo_canceller_test_tools.h" |
#include "webrtc/test/gtest.h" |
@@ -34,11 +35,16 @@ std::string ProduceDebugText(size_t delay) { |
// Verifies that the basic API calls work. |
TEST(EchoPathDelayEstimator, BasicApiCalls) { |
ApmDataDumper data_dumper(0); |
+ std::unique_ptr<RenderDelayBuffer> render_delay_buffer( |
+ RenderDelayBuffer::Create(3)); |
EchoPathDelayEstimator estimator(&data_dumper); |
- std::vector<float> render(kBlockSize, 0.f); |
+ std::vector<std::vector<float>> render(3, |
+ std::vector<float>(kBlockSize, 0.f)); |
ivoc
2017/03/31 13:58:31
I think the second argument: ", 0.f" can be omitte
peah-webrtc
2017/04/03 08:02:32
Done.
|
std::vector<float> capture(kBlockSize, 0.f); |
for (size_t k = 0; k < 100; ++k) { |
- estimator.EstimateDelay(render, capture); |
+ render_delay_buffer->Insert(&render); |
+ estimator.EstimateDelay(render_delay_buffer->GetDownsampledRenderBuffer(), |
+ capture); |
} |
} |
@@ -46,19 +52,25 @@ TEST(EchoPathDelayEstimator, BasicApiCalls) { |
// delayed signals. |
TEST(EchoPathDelayEstimator, DelayEstimation) { |
Random random_generator(42U); |
- std::vector<float> render(kBlockSize, 0.f); |
+ std::vector<std::vector<float>> render(3, |
+ std::vector<float>(kBlockSize, 0.f)); |
std::vector<float> capture(kBlockSize, 0.f); |
ApmDataDumper data_dumper(0); |
for (size_t delay_samples : {15, 64, 150, 200, 800, 4000}) { |
SCOPED_TRACE(ProduceDebugText(delay_samples)); |
+ std::unique_ptr<RenderDelayBuffer> render_delay_buffer( |
+ RenderDelayBuffer::Create(3)); |
DelayBuffer<float> signal_delay_buffer(delay_samples); |
EchoPathDelayEstimator estimator(&data_dumper); |
rtc::Optional<size_t> estimated_delay_samples; |
for (size_t k = 0; k < (100 + delay_samples / kBlockSize); ++k) { |
- RandomizeSampleVector(&random_generator, render); |
- signal_delay_buffer.Delay(render, capture); |
- estimated_delay_samples = estimator.EstimateDelay(render, capture); |
+ RandomizeSampleVector(&random_generator, render[0]); |
+ signal_delay_buffer.Delay(render[0], capture); |
+ render_delay_buffer->Insert(&render); |
+ render_delay_buffer->UpdateBuffers(); |
+ estimated_delay_samples = estimator.EstimateDelay( |
+ render_delay_buffer->GetDownsampledRenderBuffer(), capture); |
} |
if (estimated_delay_samples) { |
// Due to the internal down-sampling by 4 done inside the delay estimator |
@@ -75,15 +87,21 @@ TEST(EchoPathDelayEstimator, DelayEstimation) { |
// quickly. |
TEST(EchoPathDelayEstimator, NoInitialDelayestimates) { |
Random random_generator(42U); |
- std::vector<float> render(kBlockSize, 0.f); |
+ std::vector<std::vector<float>> render(3, |
+ std::vector<float>(kBlockSize, 0.f)); |
std::vector<float> capture(kBlockSize, 0.f); |
ApmDataDumper data_dumper(0); |
+ std::unique_ptr<RenderDelayBuffer> render_delay_buffer( |
+ RenderDelayBuffer::Create(3)); |
EchoPathDelayEstimator estimator(&data_dumper); |
for (size_t k = 0; k < 19; ++k) { |
- RandomizeSampleVector(&random_generator, render); |
- std::copy(render.begin(), render.end(), capture.begin()); |
- EXPECT_FALSE(estimator.EstimateDelay(render, capture)); |
+ RandomizeSampleVector(&random_generator, render[0]); |
+ std::copy(render[0].begin(), render[0].end(), capture.begin()); |
+ render_delay_buffer->Insert(&render); |
+ render_delay_buffer->UpdateBuffers(); |
+ EXPECT_FALSE(estimator.EstimateDelay( |
+ render_delay_buffer->GetDownsampledRenderBuffer(), capture)); |
} |
} |
@@ -91,17 +109,23 @@ TEST(EchoPathDelayEstimator, NoInitialDelayestimates) { |
// signals of low level. |
TEST(EchoPathDelayEstimator, NoDelayEstimatesForLowLevelRenderSignals) { |
Random random_generator(42U); |
- std::vector<float> render(kBlockSize, 0.f); |
+ std::vector<std::vector<float>> render(3, |
+ std::vector<float>(kBlockSize, 0.f)); |
std::vector<float> capture(kBlockSize, 0.f); |
ApmDataDumper data_dumper(0); |
EchoPathDelayEstimator estimator(&data_dumper); |
+ std::unique_ptr<RenderDelayBuffer> render_delay_buffer( |
+ RenderDelayBuffer::Create(3)); |
for (size_t k = 0; k < 100; ++k) { |
- RandomizeSampleVector(&random_generator, render); |
- for (auto& render_k : render) { |
+ RandomizeSampleVector(&random_generator, render[0]); |
+ for (auto& render_k : render[0]) { |
render_k *= 100.f / 32767.f; |
} |
- std::copy(render.begin(), render.end(), capture.begin()); |
- EXPECT_FALSE(estimator.EstimateDelay(render, capture)); |
+ std::copy(render[0].begin(), render[0].end(), capture.begin()); |
+ render_delay_buffer->Insert(&render); |
+ render_delay_buffer->UpdateBuffers(); |
+ EXPECT_FALSE(estimator.EstimateDelay( |
+ render_delay_buffer->GetDownsampledRenderBuffer(), capture)); |
} |
} |
@@ -109,14 +133,20 @@ TEST(EchoPathDelayEstimator, NoDelayEstimatesForLowLevelRenderSignals) { |
// uncorrelated signals. |
TEST(EchoPathDelayEstimator, NoDelayEstimatesForUncorrelatedSignals) { |
Random random_generator(42U); |
- std::vector<float> render(kBlockSize, 0.f); |
+ std::vector<std::vector<float>> render(3, |
+ std::vector<float>(kBlockSize, 0.f)); |
std::vector<float> capture(kBlockSize, 0.f); |
ApmDataDumper data_dumper(0); |
EchoPathDelayEstimator estimator(&data_dumper); |
+ std::unique_ptr<RenderDelayBuffer> render_delay_buffer( |
+ RenderDelayBuffer::Create(3)); |
for (size_t k = 0; k < 100; ++k) { |
- RandomizeSampleVector(&random_generator, render); |
+ RandomizeSampleVector(&random_generator, render[0]); |
RandomizeSampleVector(&random_generator, capture); |
- EXPECT_FALSE(estimator.EstimateDelay(render, capture)); |
+ render_delay_buffer->Insert(&render); |
+ render_delay_buffer->UpdateBuffers(); |
+ EXPECT_FALSE(estimator.EstimateDelay( |
+ render_delay_buffer->GetDownsampledRenderBuffer(), capture)); |
} |
} |
@@ -128,9 +158,12 @@ TEST(EchoPathDelayEstimator, NoDelayEstimatesForUncorrelatedSignals) { |
TEST(EchoPathDelayEstimator, DISABLED_WrongRenderBlockSize) { |
ApmDataDumper data_dumper(0); |
EchoPathDelayEstimator estimator(&data_dumper); |
- std::vector<float> render(std::vector<float>(kBlockSize - 1, 0.f)); |
+ std::unique_ptr<RenderDelayBuffer> render_delay_buffer( |
+ RenderDelayBuffer::Create(3)); |
std::vector<float> capture(std::vector<float>(kBlockSize, 0.f)); |
- EXPECT_DEATH(estimator.EstimateDelay(render, capture), ""); |
+ EXPECT_DEATH(estimator.EstimateDelay( |
+ render_delay_buffer->GetDownsampledRenderBuffer(), capture), |
+ ""); |
} |
// Verifies the check for the capture blocksize. |
@@ -139,9 +172,12 @@ TEST(EchoPathDelayEstimator, DISABLED_WrongRenderBlockSize) { |
TEST(EchoPathDelayEstimator, WrongCaptureBlockSize) { |
ApmDataDumper data_dumper(0); |
EchoPathDelayEstimator estimator(&data_dumper); |
- std::vector<float> render(std::vector<float>(kBlockSize, 0.f)); |
+ std::unique_ptr<RenderDelayBuffer> render_delay_buffer( |
+ RenderDelayBuffer::Create(3)); |
std::vector<float> capture(std::vector<float>(kBlockSize - 1, 0.f)); |
- EXPECT_DEATH(estimator.EstimateDelay(render, capture), ""); |
+ EXPECT_DEATH(estimator.EstimateDelay( |
+ render_delay_buffer->GetDownsampledRenderBuffer(), capture), |
+ ""); |
} |
// Verifies the check for non-null data dumper. |