Index: webrtc/modules/audio_processing/aec3/echo_canceller3_unittest.cc |
diff --git a/webrtc/modules/audio_processing/aec3/echo_canceller3_unittest.cc b/webrtc/modules/audio_processing/aec3/echo_canceller3_unittest.cc |
index 1162f70e2b72eaef9fb7997a2de1029c279423a4..4be8185d94988d1afcd20501fa6a7b87172a5063 100644 |
--- a/webrtc/modules/audio_processing/aec3/echo_canceller3_unittest.cc |
+++ b/webrtc/modules/audio_processing/aec3/echo_canceller3_unittest.cc |
@@ -86,25 +86,6 @@ bool VerifyOutputFrameBitexactness(size_t frame_length, |
return true; |
} |
-// Verifies the that samples in the output frame are identical to the samples |
-// that were produced for the input frame, with an offset in order to compensate |
-// for buffering delays. |
-bool VerifyOutputFrameBitexactness(size_t frame_length, |
- size_t frame_index, |
- const float* const* frame, |
- int offset) { |
- float reference_frame[480]; |
- |
- PopulateInputFrame(frame_length, frame_index, reference_frame, offset); |
- for (size_t i = 0; i < frame_length; ++i) { |
- if (reference_frame[i] != frame[0][i]) { |
- return false; |
- } |
- } |
- |
- return true; |
-} |
- |
// Class for testing that the capture data is properly received by the block |
// processor and that the processor data is properly passed to the |
// EchoCanceller3 output. |
@@ -118,9 +99,7 @@ class CaptureTransportVerificationProcessor : public BlockProcessor { |
std::vector<std::vector<float>>* capture_block) override { |
} |
- bool BufferRender(std::vector<std::vector<float>>* block) override { |
- return true; |
- } |
+ void BufferRender(std::vector<std::vector<float>>* block) override {} |
void UpdateEchoLeakageStatus(bool leakage_detected) override {} |
@@ -144,9 +123,8 @@ class RenderTransportVerificationProcessor : public BlockProcessor { |
capture_block->swap(render_block); |
} |
- bool BufferRender(std::vector<std::vector<float>>* block) override { |
+ void BufferRender(std::vector<std::vector<float>>* block) override { |
received_render_blocks_.push_back(*block); |
- return true; |
} |
void UpdateEchoLeakageStatus(bool leakage_detected) override {} |
@@ -192,7 +170,7 @@ class EchoCanceller3Tester { |
PopulateInputFrame(frame_length_, frame_index, |
&render_buffer_.channels_f()[0][0], 0); |
- EXPECT_TRUE(aec3.AnalyzeRender(&render_buffer_)); |
+ aec3.AnalyzeRender(&render_buffer_); |
aec3.ProcessCapture(&capture_buffer_, false); |
EXPECT_TRUE(VerifyOutputFrameBitexactness( |
frame_length_, num_bands_, frame_index, |
@@ -214,14 +192,14 @@ class EchoCanceller3Tester { |
OptionalBandSplit(); |
PopulateInputFrame(frame_length_, num_bands_, frame_index, |
&capture_buffer_.split_bands_f(0)[0], 100); |
- PopulateInputFrame(frame_length_, frame_index, |
- &render_buffer_.channels_f()[0][0], 0); |
+ PopulateInputFrame(frame_length_, num_bands_, frame_index, |
+ &render_buffer_.split_bands_f(0)[0], 0); |
- EXPECT_TRUE(aec3.AnalyzeRender(&render_buffer_)); |
+ aec3.AnalyzeRender(&render_buffer_); |
aec3.ProcessCapture(&capture_buffer_, false); |
EXPECT_TRUE(VerifyOutputFrameBitexactness( |
- frame_length_, frame_index, &capture_buffer_.split_bands_f(0)[0], |
- -64)); |
+ frame_length_, num_bands_, frame_index, |
+ &capture_buffer_.split_bands_f(0)[0], -64)); |
} |
} |
@@ -248,8 +226,7 @@ class EchoCanceller3Tester { |
block_processor_mock( |
new StrictMock<webrtc::test::MockBlockProcessor>()); |
EXPECT_CALL(*block_processor_mock, BufferRender(_)) |
- .Times(expected_num_block_to_process) |
- .WillRepeatedly(Return(true)); |
+ .Times(expected_num_block_to_process); |
EXPECT_CALL(*block_processor_mock, UpdateEchoLeakageStatus(_)).Times(0); |
switch (echo_path_change_test_variant) { |
@@ -296,7 +273,7 @@ class EchoCanceller3Tester { |
PopulateInputFrame(frame_length_, frame_index, |
&render_buffer_.channels_f()[0][0], 0); |
- EXPECT_TRUE(aec3.AnalyzeRender(&render_buffer_)); |
+ aec3.AnalyzeRender(&render_buffer_); |
aec3.ProcessCapture(&capture_buffer_, echo_path_change); |
} |
} |
@@ -326,8 +303,7 @@ class EchoCanceller3Tester { |
block_processor_mock( |
new StrictMock<webrtc::test::MockBlockProcessor>()); |
EXPECT_CALL(*block_processor_mock, BufferRender(_)) |
- .Times(expected_num_block_to_process) |
- .WillRepeatedly(Return(true)); |
+ .Times(expected_num_block_to_process); |
EXPECT_CALL(*block_processor_mock, ProcessCapture(_, _, _)) |
.Times(expected_num_block_to_process); |
@@ -387,7 +363,7 @@ class EchoCanceller3Tester { |
PopulateInputFrame(frame_length_, frame_index, |
&render_buffer_.channels_f()[0][0], 0); |
- EXPECT_TRUE(aec3.AnalyzeRender(&render_buffer_)); |
+ aec3.AnalyzeRender(&render_buffer_); |
aec3.ProcessCapture(&capture_buffer_, false); |
} |
} |
@@ -417,8 +393,7 @@ class EchoCanceller3Tester { |
block_processor_mock( |
new StrictMock<webrtc::test::MockBlockProcessor>()); |
EXPECT_CALL(*block_processor_mock, BufferRender(_)) |
- .Times(expected_num_block_to_process) |
- .WillRepeatedly(Return(true)); |
+ .Times(expected_num_block_to_process); |
EXPECT_CALL(*block_processor_mock, UpdateEchoLeakageStatus(_)).Times(0); |
switch (saturation_variant) { |
@@ -469,10 +444,10 @@ class EchoCanceller3Tester { |
PopulateInputFrame(frame_length_, num_bands_, frame_index, |
&capture_buffer_.split_bands_f(0)[0], 0); |
- PopulateInputFrame(frame_length_, frame_index, |
- &render_buffer_.channels_f()[0][0], 0); |
+ PopulateInputFrame(frame_length_, num_bands_, frame_index, |
+ &render_buffer_.split_bands_f(0)[0], 0); |
- EXPECT_TRUE(aec3.AnalyzeRender(&render_buffer_)); |
+ aec3.AnalyzeRender(&render_buffer_); |
aec3.ProcessCapture(&capture_buffer_, false); |
} |
} |
@@ -485,19 +460,22 @@ class EchoCanceller3Tester { |
std::unique_ptr<BlockProcessor>( |
new RenderTransportVerificationProcessor(num_bands_))); |
- constexpr size_t kSwapQueueLength = 30; |
- for (size_t frame_index = 0; frame_index < kSwapQueueLength; |
+ for (size_t frame_index = 0; frame_index < kRenderTransferQueueSize; |
++frame_index) { |
if (sample_rate_hz_ > 16000) { |
render_buffer_.SplitIntoFrequencyBands(); |
} |
- PopulateInputFrame(frame_length_, frame_index, |
- &render_buffer_.channels_f()[0][0], 0); |
+ PopulateInputFrame(frame_length_, num_bands_, frame_index, |
+ &render_buffer_.split_bands_f(0)[0], 0); |
+ |
+ if (sample_rate_hz_ > 16000) { |
+ render_buffer_.SplitIntoFrequencyBands(); |
+ } |
- EXPECT_TRUE(aec3.AnalyzeRender(&render_buffer_)); |
+ aec3.AnalyzeRender(&render_buffer_); |
} |
- for (size_t frame_index = 0; frame_index < kSwapQueueLength; |
+ for (size_t frame_index = 0; frame_index < kRenderTransferQueueSize; |
++frame_index) { |
aec3.AnalyzeCapture(&capture_buffer_); |
if (sample_rate_hz_ > 16000) { |
@@ -509,8 +487,8 @@ class EchoCanceller3Tester { |
aec3.ProcessCapture(&capture_buffer_, false); |
EXPECT_TRUE(VerifyOutputFrameBitexactness( |
- frame_length_, frame_index, &capture_buffer_.split_bands_f(0)[0], |
- -64)); |
+ frame_length_, num_bands_, frame_index, |
+ &capture_buffer_.split_bands_f(0)[0], -64)); |
} |
} |
@@ -519,9 +497,9 @@ class EchoCanceller3Tester { |
void RunRenderPipelineSwapQueueOverrunReturnValueTest() { |
EchoCanceller3 aec3(sample_rate_hz_, false); |
- constexpr size_t kSwapQueueLength = 30; |
+ constexpr size_t kRenderTransferQueueSize = 30; |
for (size_t k = 0; k < 2; ++k) { |
- for (size_t frame_index = 0; frame_index < kSwapQueueLength; |
+ for (size_t frame_index = 0; frame_index < kRenderTransferQueueSize; |
++frame_index) { |
if (sample_rate_hz_ > 16000) { |
render_buffer_.SplitIntoFrequencyBands(); |
@@ -530,9 +508,9 @@ class EchoCanceller3Tester { |
&render_buffer_.channels_f()[0][0], 0); |
if (k == 0) { |
- EXPECT_TRUE(aec3.AnalyzeRender(&render_buffer_)); |
+ aec3.AnalyzeRender(&render_buffer_); |
} else { |
- EXPECT_FALSE(aec3.AnalyzeRender(&render_buffer_)); |
+ aec3.AnalyzeRender(&render_buffer_); |
} |
} |
} |
@@ -646,7 +624,7 @@ TEST(EchoCanceller3Buffering, RenderBitexactness) { |
} |
TEST(EchoCanceller3Buffering, RenderSwapQueue) { |
- for (auto rate : {8000, 16000, 32000, 48000}) { |
+ for (auto rate : {8000, 16000}) { |
SCOPED_TRACE(ProduceDebugText(rate)); |
EchoCanceller3Tester(rate).RunRenderSwapQueueVerificationTest(); |
} |