Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1167)

Unified Diff: webrtc/modules/audio_processing/aec3/echo_canceller3_unittest.cc

Issue 2678423005: Finalization of the first version of EchoCanceller 3 (Closed)
Patch Set: Fixed compilation error Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 8ccaa51e52cd11c17f3d70c3fba65ad393d71800..1162f70e2b72eaef9fb7997a2de1029c279423a4 100644
--- a/webrtc/modules/audio_processing/aec3/echo_canceller3_unittest.cc
+++ b/webrtc/modules/audio_processing/aec3/echo_canceller3_unittest.cc
@@ -17,7 +17,7 @@
#include <utility>
#include <vector>
-#include "webrtc/modules/audio_processing/aec3/aec3_constants.h"
+#include "webrtc/modules/audio_processing/aec3/aec3_common.h"
#include "webrtc/modules/audio_processing/aec3/block_processor.h"
#include "webrtc/modules/audio_processing/aec3/frame_blocker.h"
#include "webrtc/modules/audio_processing/aec3/mock/mock_block_processor.h"
@@ -48,6 +48,17 @@ void PopulateInputFrame(size_t frame_length,
}
}
+// Populates the frame with linearly increasing sample values.
+void PopulateInputFrame(size_t frame_length,
+ size_t frame_index,
+ float* frame,
+ int offset) {
+ for (size_t i = 0; i < frame_length; ++i) {
+ float value = static_cast<int>(frame_index * frame_length + i) + offset;
+ frame[i] = std::max(value, 0.f);
+ }
+}
+
// 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.
@@ -75,6 +86,25 @@ 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.
@@ -159,8 +189,8 @@ class EchoCanceller3Tester {
OptionalBandSplit();
PopulateInputFrame(frame_length_, num_bands_, frame_index,
&capture_buffer_.split_bands_f(0)[0], 0);
- PopulateInputFrame(frame_length_, num_bands_, frame_index,
- &render_buffer_.split_bands_f(0)[0], 100);
+ PopulateInputFrame(frame_length_, frame_index,
+ &render_buffer_.channels_f()[0][0], 0);
EXPECT_TRUE(aec3.AnalyzeRender(&render_buffer_));
aec3.ProcessCapture(&capture_buffer_, false);
@@ -184,14 +214,14 @@ class EchoCanceller3Tester {
OptionalBandSplit();
PopulateInputFrame(frame_length_, num_bands_, frame_index,
&capture_buffer_.split_bands_f(0)[0], 100);
- PopulateInputFrame(frame_length_, num_bands_, frame_index,
- &render_buffer_.split_bands_f(0)[0], 0);
+ PopulateInputFrame(frame_length_, frame_index,
+ &render_buffer_.channels_f()[0][0], 0);
EXPECT_TRUE(aec3.AnalyzeRender(&render_buffer_));
aec3.ProcessCapture(&capture_buffer_, false);
EXPECT_TRUE(VerifyOutputFrameBitexactness(
- frame_length_, num_bands_, frame_index,
- &capture_buffer_.split_bands_f(0)[0], -64));
+ frame_length_, frame_index, &capture_buffer_.split_bands_f(0)[0],
+ -64));
}
}
@@ -263,8 +293,8 @@ class EchoCanceller3Tester {
PopulateInputFrame(frame_length_, num_bands_, frame_index,
&capture_buffer_.split_bands_f(0)[0], 0);
- PopulateInputFrame(frame_length_, num_bands_, frame_index,
- &render_buffer_.split_bands_f(0)[0], 0);
+ PopulateInputFrame(frame_length_, frame_index,
+ &render_buffer_.channels_f()[0][0], 0);
EXPECT_TRUE(aec3.AnalyzeRender(&render_buffer_));
aec3.ProcessCapture(&capture_buffer_, echo_path_change);
@@ -354,8 +384,8 @@ class EchoCanceller3Tester {
PopulateInputFrame(frame_length_, num_bands_, frame_index,
&capture_buffer_.split_bands_f(0)[0], 0);
- PopulateInputFrame(frame_length_, num_bands_, frame_index,
- &render_buffer_.split_bands_f(0)[0], 0);
+ PopulateInputFrame(frame_length_, frame_index,
+ &render_buffer_.channels_f()[0][0], 0);
EXPECT_TRUE(aec3.AnalyzeRender(&render_buffer_));
aec3.ProcessCapture(&capture_buffer_, false);
@@ -414,7 +444,6 @@ class EchoCanceller3Tester {
EchoCanceller3 aec3(sample_rate_hz_, false,
std::move(block_processor_mock));
-
for (size_t frame_index = 0; frame_index < kNumFramesToProcess;
++frame_index) {
for (int k = 0; k < fullband_frame_length_; ++k) {
@@ -440,8 +469,8 @@ class EchoCanceller3Tester {
PopulateInputFrame(frame_length_, num_bands_, frame_index,
&capture_buffer_.split_bands_f(0)[0], 0);
- PopulateInputFrame(frame_length_, num_bands_, frame_index,
- &render_buffer_.split_bands_f(0)[0], 0);
+ PopulateInputFrame(frame_length_, frame_index,
+ &render_buffer_.channels_f()[0][0], 0);
EXPECT_TRUE(aec3.AnalyzeRender(&render_buffer_));
aec3.ProcessCapture(&capture_buffer_, false);
@@ -462,8 +491,8 @@ class EchoCanceller3Tester {
if (sample_rate_hz_ > 16000) {
render_buffer_.SplitIntoFrequencyBands();
}
- PopulateInputFrame(frame_length_, num_bands_, frame_index,
- &render_buffer_.split_bands_f(0)[0], 0);
+ PopulateInputFrame(frame_length_, frame_index,
+ &render_buffer_.channels_f()[0][0], 0);
EXPECT_TRUE(aec3.AnalyzeRender(&render_buffer_));
}
@@ -480,8 +509,8 @@ class EchoCanceller3Tester {
aec3.ProcessCapture(&capture_buffer_, false);
EXPECT_TRUE(VerifyOutputFrameBitexactness(
- frame_length_, num_bands_, frame_index,
- &capture_buffer_.split_bands_f(0)[0], -64));
+ frame_length_, frame_index, &capture_buffer_.split_bands_f(0)[0],
+ -64));
}
}
@@ -497,8 +526,8 @@ class EchoCanceller3Tester {
if (sample_rate_hz_ > 16000) {
render_buffer_.SplitIntoFrequencyBands();
}
- PopulateInputFrame(frame_length_, num_bands_, frame_index,
- &render_buffer_.split_bands_f(0)[0], 0);
+ PopulateInputFrame(frame_length_, frame_index,
+ &render_buffer_.channels_f()[0][0], 0);
if (k == 0) {
EXPECT_TRUE(aec3.AnalyzeRender(&render_buffer_));
@@ -518,8 +547,7 @@ class EchoCanceller3Tester {
// way that the number of bands for the rates are different.
const int aec3_sample_rate_hz = sample_rate_hz_ == 48000 ? 32000 : 48000;
EchoCanceller3 aec3(aec3_sample_rate_hz, false);
- PopulateInputFrame(frame_length_, num_bands_, 0,
- &render_buffer_.split_bands_f(0)[0], 0);
+ PopulateInputFrame(frame_length_, 0, &render_buffer_.channels_f()[0][0], 0);
EXPECT_DEATH(aec3.AnalyzeRender(&render_buffer_), "");
}
@@ -547,8 +575,7 @@ class EchoCanceller3Tester {
EchoCanceller3 aec3(aec3_sample_rate_hz, false);
OptionalBandSplit();
- PopulateInputFrame(frame_length_, num_bands_, 0,
- &render_buffer_.split_bands_f(0)[0], 0);
+ PopulateInputFrame(frame_length_, 0, &render_buffer_.channels_f()[0][0], 0);
EXPECT_DEATH(aec3.AnalyzeRender(&render_buffer_), "");
}
@@ -673,12 +700,6 @@ TEST(EchoCanceller3Messaging, EchoLeakage) {
}
#if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
-TEST(EchoCanceller3InputCheck, WrongRenderNumBandsCheckVerification) {
- for (auto rate : {8000, 16000, 32000, 48000}) {
- SCOPED_TRACE(ProduceDebugText(rate));
- EchoCanceller3Tester(rate).RunAnalyzeRenderNumBandsCheckVerification();
- }
-}
TEST(EchoCanceller3InputCheck, WrongCaptureNumBandsCheckVerification) {
for (auto rate : {8000, 16000, 32000, 48000}) {
@@ -687,7 +708,10 @@ TEST(EchoCanceller3InputCheck, WrongCaptureNumBandsCheckVerification) {
}
}
-TEST(EchoCanceller3InputCheck, WrongRenderFrameLengthCheckVerification) {
+// TODO(peah): Re-enable the test once the issue with memory leaks during DEATH
+// tests on test bots has been fixed.
+TEST(EchoCanceller3InputCheck,
+ DISABLED_WrongRenderFrameLengthCheckVerification) {
for (auto rate : {8000, 16000}) {
SCOPED_TRACE(ProduceDebugText(rate));
EchoCanceller3Tester(rate).RunAnalyzeRenderFrameLengthCheckVerification();

Powered by Google App Engine
This is Rietveld 408576698