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

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

Issue 2603293002: Revert of Added first layer of the echo canceller 3 functionality (Closed)
Patch Set: Created 3 years, 12 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
deleted file mode 100644
index 8baa45606f5474c598ada890a2a4fb2a276e0540..0000000000000000000000000000000000000000
--- a/webrtc/modules/audio_processing/aec3/echo_canceller3_unittest.cc
+++ /dev/null
@@ -1,717 +0,0 @@
-/*
- * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#include "webrtc/modules/audio_processing/aec3/echo_canceller3.h"
-
-#include <deque>
-#include <memory>
-#include <sstream>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "webrtc/modules/audio_processing/aec3/aec3_constants.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"
-#include "webrtc/modules/audio_processing/audio_buffer.h"
-#include "webrtc/test/gmock.h"
-#include "webrtc/test/gtest.h"
-
-namespace webrtc {
-namespace {
-
-using testing::StrictMock;
-using testing::_;
-
-// Populates the frame with linearly increasing sample values for each band,
-// with a band-specific offset, in order to allow simple bitexactness
-// verification for each band.
-void PopulateInputFrame(size_t frame_length,
- size_t num_bands,
- size_t frame_index,
- float* const* frame,
- int offset) {
- for (size_t k = 0; k < num_bands; ++k) {
- for (size_t i = 0; i < frame_length; ++i) {
- float value = static_cast<int>(frame_index * frame_length + i) + offset;
- frame[k][i] = (value > 0 ? 5000 * k + value : 0);
- }
- }
-}
-
-// 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 num_bands,
- size_t frame_index,
- const float* const* frame,
- int offset) {
- float reference_frame_data[kMaxNumBands][2 * kSubFrameLength];
- float* reference_frame[kMaxNumBands];
- for (size_t k = 0; k < num_bands; ++k) {
- reference_frame[k] = &reference_frame_data[k][0];
- }
-
- PopulateInputFrame(frame_length, num_bands, frame_index, reference_frame,
- offset);
- for (size_t k = 0; k < num_bands; ++k) {
- for (size_t i = 0; i < frame_length; ++i) {
- if (reference_frame[k][i] != frame[k][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.
-class CaptureTransportVerificationProcessor : public BlockProcessor {
- public:
- explicit CaptureTransportVerificationProcessor(size_t num_bands) {}
- ~CaptureTransportVerificationProcessor() override = default;
-
- void ProcessCapture(bool known_echo_path_change,
- bool saturated_microphone_signal,
- std::vector<std::vector<float>>* capture_block) override {
- }
-
- bool BufferRender(std::vector<std::vector<float>>* block) override {
- return false;
- }
-
- void ReportEchoLeakage(bool leakage_detected) override {}
-
- private:
- RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(CaptureTransportVerificationProcessor);
-};
-
-// Class for testing that the render data is properly received by the block
-// processor.
-class RenderTransportVerificationProcessor : public BlockProcessor {
- public:
- explicit RenderTransportVerificationProcessor(size_t num_bands) {}
- ~RenderTransportVerificationProcessor() override = default;
-
- void ProcessCapture(bool known_echo_path_change,
- bool saturated_microphone_signal,
- std::vector<std::vector<float>>* capture_block) override {
- std::vector<std::vector<float>> render_block =
- received_render_blocks_.front();
- received_render_blocks_.pop_front();
- capture_block->swap(render_block);
- }
-
- bool BufferRender(std::vector<std::vector<float>>* block) override {
- received_render_blocks_.push_back(*block);
- return false;
- }
-
- void ReportEchoLeakage(bool leakage_detected) override {}
-
- private:
- std::deque<std::vector<std::vector<float>>> received_render_blocks_;
- RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(RenderTransportVerificationProcessor);
-};
-
-class EchoCanceller3Tester {
- public:
- explicit EchoCanceller3Tester(int sample_rate_hz)
- : sample_rate_hz_(sample_rate_hz),
- num_bands_(NumBandsForRate(sample_rate_hz_)),
- frame_length_(sample_rate_hz_ == 8000 ? 80 : 160),
- fullband_frame_length_(rtc::CheckedDivExact(sample_rate_hz_, 100)),
- capture_buffer_(fullband_frame_length_,
- 1,
- fullband_frame_length_,
- 1,
- fullband_frame_length_),
- render_buffer_(fullband_frame_length_,
- 1,
- fullband_frame_length_,
- 1,
- fullband_frame_length_) {}
-
- // Verifies that the capture data is properly received by the block processor
- // and that the processor data is properly passed to the EchoCanceller3
- // output.
- void RunCaptureTransportVerificationTest() {
- EchoCanceller3 aec3(
- sample_rate_hz_, false,
- std::unique_ptr<BlockProcessor>(
- new CaptureTransportVerificationProcessor(num_bands_)));
-
- for (size_t frame_index = 0; frame_index < kNumFramesToProcess;
- ++frame_index) {
- aec3.AnalyzeCapture(&capture_buffer_);
- 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);
-
- 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));
- }
- }
-
- // Test method for testing that the render data is properly received by the
- // block processor.
- void RunRenderTransportVerificationTest() {
- EchoCanceller3 aec3(
- sample_rate_hz_, false,
- std::unique_ptr<BlockProcessor>(
- new RenderTransportVerificationProcessor(num_bands_)));
-
- for (size_t frame_index = 0; frame_index < kNumFramesToProcess;
- ++frame_index) {
- aec3.AnalyzeCapture(&capture_buffer_);
- 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);
-
- 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));
- }
- }
-
- // Verifies that information about echo path changes are properly propagated
- // to the block processor.
- // The cases tested are:
- // -That no set echo path change flags are received when there is no echo path
- // change.
- // -That set echo path change flags are received and continues to be received
- // as long as echo path changes are flagged.
- // -That set echo path change flags are no longer received when echo path
- // change events stop being flagged.
- enum class EchoPathChangeTestVariant { kNone, kOneSticky, kOneNonSticky };
-
- void RunEchoPathChangeVerificationTest(
- EchoPathChangeTestVariant echo_path_change_test_variant) {
- const size_t num_full_blocks_per_frame =
- rtc::CheckedDivExact(LowestBandRate(sample_rate_hz_), 100) / kBlockSize;
- const size_t expected_num_block_to_process =
- (kNumFramesToProcess *
- rtc::CheckedDivExact(LowestBandRate(sample_rate_hz_), 100)) /
- kBlockSize;
- std::unique_ptr<testing::StrictMock<webrtc::test::MockBlockProcessor>>
- block_processor_mock(
- new StrictMock<webrtc::test::MockBlockProcessor>());
- EXPECT_CALL(*block_processor_mock, BufferRender(_))
- .Times(expected_num_block_to_process);
- EXPECT_CALL(*block_processor_mock, ReportEchoLeakage(_)).Times(0);
-
- switch (echo_path_change_test_variant) {
- case EchoPathChangeTestVariant::kNone:
- EXPECT_CALL(*block_processor_mock, ProcessCapture(false, _, _))
- .Times(expected_num_block_to_process);
- break;
- case EchoPathChangeTestVariant::kOneSticky:
- EXPECT_CALL(*block_processor_mock, ProcessCapture(true, _, _))
- .Times(expected_num_block_to_process);
- break;
- case EchoPathChangeTestVariant::kOneNonSticky:
- EXPECT_CALL(*block_processor_mock, ProcessCapture(true, _, _))
- .Times(num_full_blocks_per_frame);
- EXPECT_CALL(*block_processor_mock, ProcessCapture(false, _, _))
- .Times(expected_num_block_to_process - num_full_blocks_per_frame);
- break;
- }
-
- EchoCanceller3 aec3(sample_rate_hz_, false,
- std::move(block_processor_mock));
-
- for (size_t frame_index = 0; frame_index < kNumFramesToProcess;
- ++frame_index) {
- bool echo_path_change = false;
- switch (echo_path_change_test_variant) {
- case EchoPathChangeTestVariant::kNone:
- break;
- case EchoPathChangeTestVariant::kOneSticky:
- echo_path_change = true;
- break;
- case EchoPathChangeTestVariant::kOneNonSticky:
- if (frame_index == 0) {
- echo_path_change = true;
- }
- break;
- }
-
- aec3.AnalyzeCapture(&capture_buffer_);
- 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], 0);
-
- EXPECT_TRUE(aec3.AnalyzeRender(&render_buffer_));
- aec3.ProcessCapture(&capture_buffer_, echo_path_change);
- }
- }
-
- // Test for verifying that echo leakage information is being properly passed
- // to the processor.
- // The cases tested are:
- // -That no method calls are received when they should not.
- // -That false values are received each time they are flagged.
- // -That true values are received each time they are flagged.
- // -That a false value is received when flagged after a true value has been
- // flagged.
- enum class EchoLeakageTestVariant {
- kNone,
- kFalseSticky,
- kTrueSticky,
- kTrueNonSticky
- };
-
- void RunEchoLeakageVerificationTest(
- EchoLeakageTestVariant leakage_report_variant) {
- const size_t expected_num_block_to_process =
- (kNumFramesToProcess *
- rtc::CheckedDivExact(LowestBandRate(sample_rate_hz_), 100)) /
- kBlockSize;
- std::unique_ptr<testing::StrictMock<webrtc::test::MockBlockProcessor>>
- block_processor_mock(
- new StrictMock<webrtc::test::MockBlockProcessor>());
- EXPECT_CALL(*block_processor_mock, BufferRender(_))
- .Times(expected_num_block_to_process);
- EXPECT_CALL(*block_processor_mock, ProcessCapture(_, _, _))
- .Times(expected_num_block_to_process);
-
- switch (leakage_report_variant) {
- case EchoLeakageTestVariant::kNone:
- EXPECT_CALL(*block_processor_mock, ReportEchoLeakage(_)).Times(0);
- break;
- case EchoLeakageTestVariant::kFalseSticky:
- EXPECT_CALL(*block_processor_mock, ReportEchoLeakage(false)).Times(1);
- break;
- case EchoLeakageTestVariant::kTrueSticky:
- EXPECT_CALL(*block_processor_mock, ReportEchoLeakage(true)).Times(1);
- break;
- case EchoLeakageTestVariant::kTrueNonSticky: {
- testing::InSequence s;
- EXPECT_CALL(*block_processor_mock, ReportEchoLeakage(true)).Times(1);
- EXPECT_CALL(*block_processor_mock, ReportEchoLeakage(false))
- .Times(kNumFramesToProcess - 1);
- } break;
- }
-
- EchoCanceller3 aec3(sample_rate_hz_, false,
- std::move(block_processor_mock));
-
- for (size_t frame_index = 0; frame_index < kNumFramesToProcess;
- ++frame_index) {
- switch (leakage_report_variant) {
- case EchoLeakageTestVariant::kNone:
- break;
- case EchoLeakageTestVariant::kFalseSticky:
- if (frame_index == 0) {
- aec3.ReportEchoLeakage(false);
- }
- break;
- case EchoLeakageTestVariant::kTrueSticky:
- if (frame_index == 0) {
- aec3.ReportEchoLeakage(true);
- }
- break;
- case EchoLeakageTestVariant::kTrueNonSticky:
- if (frame_index == 0) {
- aec3.ReportEchoLeakage(true);
- } else {
- aec3.ReportEchoLeakage(false);
- }
- break;
- }
-
- aec3.AnalyzeCapture(&capture_buffer_);
- 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], 0);
-
- EXPECT_TRUE(aec3.AnalyzeRender(&render_buffer_));
- aec3.ProcessCapture(&capture_buffer_, false);
- }
- }
-
- // This verifies that saturation information is properly passed to the
- // BlockProcessor.
- // The cases tested are:
- // -That no saturation event is passed to the processor if there is no
- // saturation.
- // -That one frame with one negative saturated sample value is reported to be
- // saturated and that following non-saturated frames are properly reported as
- // not being saturated.
- // -That one frame with one positive saturated sample value is reported to be
- // saturated and that following non-saturated frames are properly reported as
- // not being saturated.
- enum class SaturationTestVariant { kNone, kOneNegative, kOnePositive };
-
- void RunCaptureSaturationVerificationTest(
- SaturationTestVariant saturation_variant) {
- const size_t num_full_blocks_per_frame =
- rtc::CheckedDivExact(LowestBandRate(sample_rate_hz_), 100) / kBlockSize;
- const size_t expected_num_block_to_process =
- (kNumFramesToProcess *
- rtc::CheckedDivExact(LowestBandRate(sample_rate_hz_), 100)) /
- kBlockSize;
- std::unique_ptr<testing::StrictMock<webrtc::test::MockBlockProcessor>>
- block_processor_mock(
- new StrictMock<webrtc::test::MockBlockProcessor>());
- EXPECT_CALL(*block_processor_mock, BufferRender(_))
- .Times(expected_num_block_to_process);
- EXPECT_CALL(*block_processor_mock, ReportEchoLeakage(_)).Times(0);
-
- switch (saturation_variant) {
- case SaturationTestVariant::kNone:
- EXPECT_CALL(*block_processor_mock, ProcessCapture(_, false, _))
- .Times(expected_num_block_to_process);
- break;
- case SaturationTestVariant::kOneNegative: {
- testing::InSequence s;
- EXPECT_CALL(*block_processor_mock, ProcessCapture(_, true, _))
- .Times(num_full_blocks_per_frame);
- EXPECT_CALL(*block_processor_mock, ProcessCapture(_, false, _))
- .Times(expected_num_block_to_process - num_full_blocks_per_frame);
- } break;
- case SaturationTestVariant::kOnePositive: {
- testing::InSequence s;
- EXPECT_CALL(*block_processor_mock, ProcessCapture(_, true, _))
- .Times(num_full_blocks_per_frame);
- EXPECT_CALL(*block_processor_mock, ProcessCapture(_, false, _))
- .Times(expected_num_block_to_process - num_full_blocks_per_frame);
- } break;
- }
-
- 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) {
- capture_buffer_.channels_f()[0][k] = 0.f;
- }
- switch (saturation_variant) {
- case SaturationTestVariant::kNone:
- break;
- case SaturationTestVariant::kOneNegative:
- if (frame_index == 0) {
- capture_buffer_.channels_f()[0][10] = -32768.f;
- }
- break;
- case SaturationTestVariant::kOnePositive:
- if (frame_index == 0) {
- capture_buffer_.channels_f()[0][10] = 32767.f;
- }
- break;
- }
-
- aec3.AnalyzeCapture(&capture_buffer_);
- 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], 0);
-
- EXPECT_TRUE(aec3.AnalyzeRender(&render_buffer_));
- aec3.ProcessCapture(&capture_buffer_, false);
- }
- }
-
- // This test verifies that the swapqueue is able to handle jitter in the
- // capture and render API calls.
- void RunRenderSwapQueueVerificationTest() {
- EchoCanceller3 aec3(
- sample_rate_hz_, false,
- std::unique_ptr<BlockProcessor>(
- new RenderTransportVerificationProcessor(num_bands_)));
-
- constexpr size_t kSwapQueueLength = 30;
- for (size_t frame_index = 0; frame_index < kSwapQueueLength;
- ++frame_index) {
- if (sample_rate_hz_ > 16000) {
- render_buffer_.SplitIntoFrequencyBands();
- }
- PopulateInputFrame(frame_length_, num_bands_, frame_index,
- &render_buffer_.split_bands_f(0)[0], 0);
-
- EXPECT_TRUE(aec3.AnalyzeRender(&render_buffer_));
- }
-
- for (size_t frame_index = 0; frame_index < kSwapQueueLength;
- ++frame_index) {
- aec3.AnalyzeCapture(&capture_buffer_);
- if (sample_rate_hz_ > 16000) {
- capture_buffer_.SplitIntoFrequencyBands();
- }
-
- PopulateInputFrame(frame_length_, num_bands_, frame_index,
- &capture_buffer_.split_bands_f(0)[0], 0);
-
- aec3.ProcessCapture(&capture_buffer_, false);
- EXPECT_TRUE(VerifyOutputFrameBitexactness(
- frame_length_, num_bands_, frame_index,
- &capture_buffer_.split_bands_f(0)[0], -64));
- }
- }
-
- // This test verifies that a buffer overrun in the render swapqueue is
- // properly reported.
- void RunRenderPipelineSwapQueueOverrunReturnValueTest() {
- EchoCanceller3 aec3(sample_rate_hz_, false);
-
- constexpr size_t kSwapQueueLength = 30;
- for (size_t k = 0; k < 2; ++k) {
- for (size_t frame_index = 0; frame_index < kSwapQueueLength;
- ++frame_index) {
- if (sample_rate_hz_ > 16000) {
- render_buffer_.SplitIntoFrequencyBands();
- }
- PopulateInputFrame(frame_length_, num_bands_, frame_index,
- &render_buffer_.split_bands_f(0)[0], 0);
-
- if (k == 0) {
- EXPECT_TRUE(aec3.AnalyzeRender(&render_buffer_));
- } else {
- EXPECT_FALSE(aec3.AnalyzeRender(&render_buffer_));
- }
- }
- }
- }
-
-#if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
- // Verifies the that the check for the number of bands in the AnalyzeRender
- // input is correct by adjusting the sample rates of EchoCanceller3 and the
- // input AudioBuffer to have a different number of bands.
- void RunAnalyzeRenderNumBandsCheckVerification() {
- // Set aec3_sample_rate_hz to be different from sample_rate_hz_ in such a
- // 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);
-
- EXPECT_DEATH(aec3.AnalyzeRender(&render_buffer_), "");
- }
-
- // Verifies the that the check for the number of bands in the ProcessCapture
- // input is correct by adjusting the sample rates of EchoCanceller3 and the
- // input AudioBuffer to have a different number of bands.
- void RunProcessCaptureNumBandsCheckVerification() {
- // Set aec3_sample_rate_hz to be different from sample_rate_hz_ in such a
- // 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,
- &capture_buffer_.split_bands_f(0)[0], 100);
- EXPECT_DEATH(aec3.ProcessCapture(&capture_buffer_, false), "");
- }
-
- // Verifies the that the check for the frame length in the AnalyzeRender input
- // is correct by adjusting the sample rates of EchoCanceller3 and the input
- // AudioBuffer to have a different frame lengths.
- void RunAnalyzeRenderFrameLengthCheckVerification() {
- // Set aec3_sample_rate_hz to be different from sample_rate_hz_ in such a
- // way that the band frame lengths are different.
- const int aec3_sample_rate_hz = sample_rate_hz_ == 8000 ? 16000 : 8000;
- EchoCanceller3 aec3(aec3_sample_rate_hz, false);
-
- OptionalBandSplit();
- PopulateInputFrame(frame_length_, num_bands_, 0,
- &render_buffer_.split_bands_f(0)[0], 0);
-
- EXPECT_DEATH(aec3.AnalyzeRender(&render_buffer_), "");
- }
-
- // Verifies the that the check for the frame length in the AnalyzeRender input
- // is correct by adjusting the sample rates of EchoCanceller3 and the input
- // AudioBuffer to have a different frame lengths.
- void RunProcessCaptureFrameLengthCheckVerification() {
- // Set aec3_sample_rate_hz to be different from sample_rate_hz_ in such a
- // way that the band frame lengths are different.
- const int aec3_sample_rate_hz = sample_rate_hz_ == 8000 ? 16000 : 8000;
- EchoCanceller3 aec3(aec3_sample_rate_hz, false);
-
- OptionalBandSplit();
- PopulateInputFrame(frame_length_, num_bands_, 0,
- &capture_buffer_.split_bands_f(0)[0], 100);
-
- EXPECT_DEATH(aec3.ProcessCapture(&capture_buffer_, false), "");
- }
-
-#endif
-
- private:
- void OptionalBandSplit() {
- if (sample_rate_hz_ > 16000) {
- capture_buffer_.SplitIntoFrequencyBands();
- render_buffer_.SplitIntoFrequencyBands();
- }
- }
-
- static constexpr size_t kNumFramesToProcess = 20;
- const int sample_rate_hz_;
- const size_t num_bands_;
- const size_t frame_length_;
- const int fullband_frame_length_;
- AudioBuffer capture_buffer_;
- AudioBuffer render_buffer_;
-
- RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(EchoCanceller3Tester);
-};
-
-std::string ProduceDebugText(int sample_rate_hz) {
- std::ostringstream ss;
- ss << "Sample rate: " << sample_rate_hz;
- return ss.str();
-}
-
-std::string ProduceDebugText(int sample_rate_hz, int variant) {
- std::ostringstream ss;
- ss << "Sample rate: " << sample_rate_hz << ", variant: " << variant;
- return ss.str();
-}
-
-} // namespace
-
-TEST(EchoCanceller3Buffering, CaptureBitexactness) {
- for (auto rate : {8000, 16000, 32000, 48000}) {
- SCOPED_TRACE(ProduceDebugText(rate));
- EchoCanceller3Tester(rate).RunCaptureTransportVerificationTest();
- }
-}
-
-TEST(EchoCanceller3Buffering, RenderBitexactness) {
- for (auto rate : {8000, 16000, 32000, 48000}) {
- SCOPED_TRACE(ProduceDebugText(rate));
- EchoCanceller3Tester(rate).RunRenderTransportVerificationTest();
- }
-}
-
-TEST(EchoCanceller3Buffering, RenderSwapQueue) {
- for (auto rate : {8000, 16000, 32000, 48000}) {
- SCOPED_TRACE(ProduceDebugText(rate));
- EchoCanceller3Tester(rate).RunRenderSwapQueueVerificationTest();
- }
-}
-
-TEST(EchoCanceller3Buffering, RenderSwapQueueOverrunReturnValue) {
- for (auto rate : {8000, 16000, 32000, 48000}) {
- SCOPED_TRACE(ProduceDebugText(rate));
- EchoCanceller3Tester(rate)
- .RunRenderPipelineSwapQueueOverrunReturnValueTest();
- }
-}
-
-TEST(EchoCanceller3Messaging, CaptureSaturation) {
- auto variants = {EchoCanceller3Tester::SaturationTestVariant::kNone,
- EchoCanceller3Tester::SaturationTestVariant::kOneNegative,
- EchoCanceller3Tester::SaturationTestVariant::kOnePositive};
- for (auto rate : {8000, 16000, 32000, 48000}) {
- for (auto variant : variants) {
- SCOPED_TRACE(ProduceDebugText(rate, static_cast<int>(variant)));
- EchoCanceller3Tester(rate).RunCaptureSaturationVerificationTest(variant);
- }
- }
-}
-
-TEST(EchoCanceller3Messaging, EchoPathChange) {
- auto variants = {
- EchoCanceller3Tester::EchoPathChangeTestVariant::kNone,
- EchoCanceller3Tester::EchoPathChangeTestVariant::kOneSticky,
- EchoCanceller3Tester::EchoPathChangeTestVariant::kOneNonSticky};
- for (auto rate : {8000, 16000, 32000, 48000}) {
- for (auto variant : variants) {
- SCOPED_TRACE(ProduceDebugText(rate, static_cast<int>(variant)));
- EchoCanceller3Tester(rate).RunEchoPathChangeVerificationTest(variant);
- }
- }
-}
-
-TEST(EchoCanceller3Messaging, EchoLeakage) {
- auto variants = {
- EchoCanceller3Tester::EchoLeakageTestVariant::kNone,
- EchoCanceller3Tester::EchoLeakageTestVariant::kFalseSticky,
- EchoCanceller3Tester::EchoLeakageTestVariant::kTrueSticky,
- EchoCanceller3Tester::EchoLeakageTestVariant::kTrueNonSticky};
- for (auto rate : {8000, 16000, 32000, 48000}) {
- for (auto variant : variants) {
- SCOPED_TRACE(ProduceDebugText(rate, static_cast<int>(variant)));
- EchoCanceller3Tester(rate).RunEchoLeakageVerificationTest(variant);
- }
- }
-}
-
-#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}) {
- SCOPED_TRACE(ProduceDebugText(rate));
- EchoCanceller3Tester(rate).RunProcessCaptureNumBandsCheckVerification();
- }
-}
-
-TEST(EchoCanceller3InputCheck, WrongRenderFrameLengthCheckVerification) {
- for (auto rate : {8000, 16000}) {
- SCOPED_TRACE(ProduceDebugText(rate));
- EchoCanceller3Tester(rate).RunAnalyzeRenderFrameLengthCheckVerification();
- }
-}
-
-TEST(EchoCanceller3InputCheck, WrongCaptureFrameLengthCheckVerification) {
- for (auto rate : {8000, 16000}) {
- SCOPED_TRACE(ProduceDebugText(rate));
- EchoCanceller3Tester(rate).RunProcessCaptureFrameLengthCheckVerification();
- }
-}
-
-// Verifiers that the verification for null input to the render analysis api
-// call works.
-TEST(EchoCanceller3InputCheck, NullRenderAnalysisParameter) {
- EXPECT_DEATH(EchoCanceller3(8000, false).AnalyzeRender(nullptr), "");
-}
-
-// Verifiers that the verification for null input to the capture analysis api
-// call works.
-TEST(EchoCanceller3InputCheck, NullCaptureAnalysisParameter) {
- EXPECT_DEATH(EchoCanceller3(8000, false).AnalyzeCapture(nullptr), "");
-}
-
-// Verifiers that the verification for null input to the capture processing api
-// call works.
-TEST(EchoCanceller3InputCheck, NullCaptureProcessingParameter) {
- EXPECT_DEATH(EchoCanceller3(8000, false).ProcessCapture(nullptr, false), "");
-}
-
-#endif
-
-} // namespace webrtc
« no previous file with comments | « webrtc/modules/audio_processing/aec3/echo_canceller3.cc ('k') | webrtc/modules/audio_processing/aec3/frame_blocker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698