| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 } // namespace | 43 } // namespace |
| 44 | 44 |
| 45 // Verifies the output of GetDelay when there are no AnalyzeRender calls. | 45 // Verifies the output of GetDelay when there are no AnalyzeRender calls. |
| 46 TEST(RenderDelayController, NoRenderSignal) { | 46 TEST(RenderDelayController, NoRenderSignal) { |
| 47 std::vector<float> block(kBlockSize, 0.f); | 47 std::vector<float> block(kBlockSize, 0.f); |
| 48 for (auto rate : {8000, 16000, 32000, 48000}) { | 48 for (auto rate : {8000, 16000, 32000, 48000}) { |
| 49 SCOPED_TRACE(ProduceDebugText(rate)); | 49 SCOPED_TRACE(ProduceDebugText(rate)); |
| 50 std::unique_ptr<RenderDelayBuffer> delay_buffer( | 50 std::unique_ptr<RenderDelayBuffer> delay_buffer( |
| 51 RenderDelayBuffer::Create(NumBandsForRate(rate))); | 51 RenderDelayBuffer::Create(NumBandsForRate(rate))); |
| 52 std::unique_ptr<RenderDelayController> delay_controller( | 52 std::unique_ptr<RenderDelayController> delay_controller( |
| 53 RenderDelayController::Create(rate)); | 53 RenderDelayController::Create(AudioProcessing::Config::EchoCanceller3(), |
| 54 rate)); |
| 54 for (size_t k = 0; k < 100; ++k) { | 55 for (size_t k = 0; k < 100; ++k) { |
| 55 EXPECT_EQ(0u, delay_controller->GetDelay( | 56 EXPECT_EQ(0u, delay_controller->GetDelay( |
| 56 delay_buffer->GetDownsampledRenderBuffer(), block)); | 57 delay_buffer->GetDownsampledRenderBuffer(), block)); |
| 57 } | 58 } |
| 58 } | 59 } |
| 59 } | 60 } |
| 60 | 61 |
| 61 // Verifies the basic API call sequence. | 62 // Verifies the basic API call sequence. |
| 62 TEST(RenderDelayController, BasicApiCalls) { | 63 TEST(RenderDelayController, BasicApiCalls) { |
| 63 std::vector<float> capture_block(kBlockSize, 0.f); | 64 std::vector<float> capture_block(kBlockSize, 0.f); |
| 64 size_t delay_blocks = 0; | 65 size_t delay_blocks = 0; |
| 65 for (auto rate : {8000, 16000, 32000, 48000}) { | 66 for (auto rate : {8000, 16000, 32000, 48000}) { |
| 66 std::vector<std::vector<float>> render_block( | 67 std::vector<std::vector<float>> render_block( |
| 67 NumBandsForRate(rate), std::vector<float>(kBlockSize, 0.f)); | 68 NumBandsForRate(rate), std::vector<float>(kBlockSize, 0.f)); |
| 68 std::unique_ptr<RenderDelayBuffer> render_delay_buffer( | 69 std::unique_ptr<RenderDelayBuffer> render_delay_buffer( |
| 69 RenderDelayBuffer::Create(NumBandsForRate(rate))); | 70 RenderDelayBuffer::Create(NumBandsForRate(rate))); |
| 70 std::unique_ptr<RenderDelayController> delay_controller( | 71 std::unique_ptr<RenderDelayController> delay_controller( |
| 71 RenderDelayController::Create(rate)); | 72 RenderDelayController::Create(AudioProcessing::Config::EchoCanceller3(), |
| 73 rate)); |
| 72 for (size_t k = 0; k < 10; ++k) { | 74 for (size_t k = 0; k < 10; ++k) { |
| 73 render_delay_buffer->Insert(render_block); | 75 render_delay_buffer->Insert(render_block); |
| 74 render_delay_buffer->UpdateBuffers(); | 76 render_delay_buffer->UpdateBuffers(); |
| 75 delay_blocks = delay_controller->GetDelay( | 77 delay_blocks = delay_controller->GetDelay( |
| 76 render_delay_buffer->GetDownsampledRenderBuffer(), capture_block); | 78 render_delay_buffer->GetDownsampledRenderBuffer(), capture_block); |
| 77 } | 79 } |
| 78 EXPECT_FALSE(delay_controller->AlignmentHeadroomSamples()); | 80 EXPECT_FALSE(delay_controller->AlignmentHeadroomSamples()); |
| 79 EXPECT_EQ(0u, delay_blocks); | 81 EXPECT_EQ(0u, delay_blocks); |
| 80 } | 82 } |
| 81 } | 83 } |
| 82 | 84 |
| 83 // Verifies that the RenderDelayController is able to align the signals for | 85 // Verifies that the RenderDelayController is able to align the signals for |
| 84 // simple timeshifts between the signals. | 86 // simple timeshifts between the signals. |
| 85 TEST(RenderDelayController, Alignment) { | 87 TEST(RenderDelayController, Alignment) { |
| 86 Random random_generator(42U); | 88 Random random_generator(42U); |
| 87 std::vector<float> capture_block(kBlockSize, 0.f); | 89 std::vector<float> capture_block(kBlockSize, 0.f); |
| 88 size_t delay_blocks = 0; | 90 size_t delay_blocks = 0; |
| 89 for (auto rate : {8000, 16000, 32000, 48000}) { | 91 for (auto rate : {8000, 16000, 32000, 48000}) { |
| 90 std::vector<std::vector<float>> render_block( | 92 std::vector<std::vector<float>> render_block( |
| 91 NumBandsForRate(rate), std::vector<float>(kBlockSize, 0.f)); | 93 NumBandsForRate(rate), std::vector<float>(kBlockSize, 0.f)); |
| 92 | 94 |
| 93 for (size_t delay_samples : {15, 50, 150, 200, 800, 4000}) { | 95 for (size_t delay_samples : {15, 50, 150, 200, 800, 4000}) { |
| 94 SCOPED_TRACE(ProduceDebugText(rate, delay_samples)); | 96 SCOPED_TRACE(ProduceDebugText(rate, delay_samples)); |
| 95 std::unique_ptr<RenderDelayBuffer> render_delay_buffer( | 97 std::unique_ptr<RenderDelayBuffer> render_delay_buffer( |
| 96 RenderDelayBuffer::Create(NumBandsForRate(rate))); | 98 RenderDelayBuffer::Create(NumBandsForRate(rate))); |
| 97 std::unique_ptr<RenderDelayController> delay_controller( | 99 std::unique_ptr<RenderDelayController> delay_controller( |
| 98 RenderDelayController::Create(rate)); | 100 RenderDelayController::Create( |
| 101 AudioProcessing::Config::EchoCanceller3(), rate)); |
| 99 DelayBuffer<float> signal_delay_buffer(delay_samples); | 102 DelayBuffer<float> signal_delay_buffer(delay_samples); |
| 100 for (size_t k = 0; k < (400 + delay_samples / kBlockSize); ++k) { | 103 for (size_t k = 0; k < (400 + delay_samples / kBlockSize); ++k) { |
| 101 RandomizeSampleVector(&random_generator, render_block[0]); | 104 RandomizeSampleVector(&random_generator, render_block[0]); |
| 102 signal_delay_buffer.Delay(render_block[0], capture_block); | 105 signal_delay_buffer.Delay(render_block[0], capture_block); |
| 103 render_delay_buffer->Insert(render_block); | 106 render_delay_buffer->Insert(render_block); |
| 104 render_delay_buffer->UpdateBuffers(); | 107 render_delay_buffer->UpdateBuffers(); |
| 105 delay_blocks = delay_controller->GetDelay( | 108 delay_blocks = delay_controller->GetDelay( |
| 106 render_delay_buffer->GetDownsampledRenderBuffer(), capture_block); | 109 render_delay_buffer->GetDownsampledRenderBuffer(), capture_block); |
| 107 } | 110 } |
| 108 | 111 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 132 std::vector<float> capture_block(kBlockSize, 0.f); | 135 std::vector<float> capture_block(kBlockSize, 0.f); |
| 133 for (auto rate : {8000, 16000, 32000, 48000}) { | 136 for (auto rate : {8000, 16000, 32000, 48000}) { |
| 134 std::vector<std::vector<float>> render_block( | 137 std::vector<std::vector<float>> render_block( |
| 135 NumBandsForRate(rate), std::vector<float>(kBlockSize, 0.f)); | 138 NumBandsForRate(rate), std::vector<float>(kBlockSize, 0.f)); |
| 136 for (size_t delay_samples : {15, 50, 300, 800}) { | 139 for (size_t delay_samples : {15, 50, 300, 800}) { |
| 137 size_t delay_blocks = 0; | 140 size_t delay_blocks = 0; |
| 138 SCOPED_TRACE(ProduceDebugText(rate, delay_samples)); | 141 SCOPED_TRACE(ProduceDebugText(rate, delay_samples)); |
| 139 std::unique_ptr<RenderDelayBuffer> render_delay_buffer( | 142 std::unique_ptr<RenderDelayBuffer> render_delay_buffer( |
| 140 RenderDelayBuffer::Create(NumBandsForRate(rate))); | 143 RenderDelayBuffer::Create(NumBandsForRate(rate))); |
| 141 std::unique_ptr<RenderDelayController> delay_controller( | 144 std::unique_ptr<RenderDelayController> delay_controller( |
| 142 RenderDelayController::Create(rate)); | 145 RenderDelayController::Create( |
| 146 AudioProcessing::Config::EchoCanceller3(), rate)); |
| 143 DelayBuffer<float> signal_delay_buffer(delay_samples); | 147 DelayBuffer<float> signal_delay_buffer(delay_samples); |
| 144 for (size_t j = 0; | 148 for (size_t j = 0; |
| 145 j < | 149 j < |
| 146 (1000 + delay_samples / kBlockSize) / kMaxApiCallsJitterBlocks + 1; | 150 (1000 + delay_samples / kBlockSize) / kMaxApiCallsJitterBlocks + 1; |
| 147 ++j) { | 151 ++j) { |
| 148 std::vector<std::vector<float>> capture_block_buffer; | 152 std::vector<std::vector<float>> capture_block_buffer; |
| 149 for (size_t k = 0; k < (kMaxApiCallsJitterBlocks - 1); ++k) { | 153 for (size_t k = 0; k < (kMaxApiCallsJitterBlocks - 1); ++k) { |
| 150 RandomizeSampleVector(&random_generator, render_block[0]); | 154 RandomizeSampleVector(&random_generator, render_block[0]); |
| 151 signal_delay_buffer.Delay(render_block[0], capture_block); | 155 signal_delay_buffer.Delay(render_block[0], capture_block); |
| 152 capture_block_buffer.push_back(capture_block); | 156 capture_block_buffer.push_back(capture_block); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 181 | 185 |
| 182 // Verifies the initial value for the AlignmentHeadroomSamples. | 186 // Verifies the initial value for the AlignmentHeadroomSamples. |
| 183 TEST(RenderDelayController, InitialHeadroom) { | 187 TEST(RenderDelayController, InitialHeadroom) { |
| 184 std::vector<float> render_block(kBlockSize, 0.f); | 188 std::vector<float> render_block(kBlockSize, 0.f); |
| 185 std::vector<float> capture_block(kBlockSize, 0.f); | 189 std::vector<float> capture_block(kBlockSize, 0.f); |
| 186 for (auto rate : {8000, 16000, 32000, 48000}) { | 190 for (auto rate : {8000, 16000, 32000, 48000}) { |
| 187 SCOPED_TRACE(ProduceDebugText(rate)); | 191 SCOPED_TRACE(ProduceDebugText(rate)); |
| 188 std::unique_ptr<RenderDelayBuffer> render_delay_buffer( | 192 std::unique_ptr<RenderDelayBuffer> render_delay_buffer( |
| 189 RenderDelayBuffer::Create(NumBandsForRate(rate))); | 193 RenderDelayBuffer::Create(NumBandsForRate(rate))); |
| 190 std::unique_ptr<RenderDelayController> delay_controller( | 194 std::unique_ptr<RenderDelayController> delay_controller( |
| 191 RenderDelayController::Create(rate)); | 195 RenderDelayController::Create(AudioProcessing::Config::EchoCanceller3(), |
| 196 rate)); |
| 192 EXPECT_FALSE(delay_controller->AlignmentHeadroomSamples()); | 197 EXPECT_FALSE(delay_controller->AlignmentHeadroomSamples()); |
| 193 } | 198 } |
| 194 } | 199 } |
| 195 | 200 |
| 196 #if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) | 201 #if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) |
| 197 | 202 |
| 198 // Verifies the check for the capture signal block size. | 203 // Verifies the check for the capture signal block size. |
| 199 TEST(RenderDelayController, WrongCaptureSize) { | 204 TEST(RenderDelayController, WrongCaptureSize) { |
| 200 std::vector<float> block(kBlockSize - 1, 0.f); | 205 std::vector<float> block(kBlockSize - 1, 0.f); |
| 201 for (auto rate : {8000, 16000, 32000, 48000}) { | 206 for (auto rate : {8000, 16000, 32000, 48000}) { |
| 202 SCOPED_TRACE(ProduceDebugText(rate)); | 207 SCOPED_TRACE(ProduceDebugText(rate)); |
| 203 std::unique_ptr<RenderDelayBuffer> render_delay_buffer( | 208 std::unique_ptr<RenderDelayBuffer> render_delay_buffer( |
| 204 RenderDelayBuffer::Create(NumBandsForRate(rate))); | 209 RenderDelayBuffer::Create(NumBandsForRate(rate))); |
| 205 EXPECT_DEATH( | 210 EXPECT_DEATH( |
| 206 std::unique_ptr<RenderDelayController>( | 211 std::unique_ptr<RenderDelayController>( |
| 207 RenderDelayController::Create(rate)) | 212 RenderDelayController::Create( |
| 213 AudioProcessing::Config::EchoCanceller3(), rate)) |
| 208 ->GetDelay(render_delay_buffer->GetDownsampledRenderBuffer(), | 214 ->GetDelay(render_delay_buffer->GetDownsampledRenderBuffer(), |
| 209 block), | 215 block), |
| 210 ""); | 216 ""); |
| 211 } | 217 } |
| 212 } | 218 } |
| 213 | 219 |
| 214 // Verifies the check for correct sample rate. | 220 // Verifies the check for correct sample rate. |
| 215 // TODO(peah): Re-enable the test once the issue with memory leaks during DEATH | 221 // TODO(peah): Re-enable the test once the issue with memory leaks during DEATH |
| 216 // tests on test bots has been fixed. | 222 // tests on test bots has been fixed. |
| 217 TEST(RenderDelayController, DISABLED_WrongSampleRate) { | 223 TEST(RenderDelayController, DISABLED_WrongSampleRate) { |
| 218 for (auto rate : {-1, 0, 8001, 16001}) { | 224 for (auto rate : {-1, 0, 8001, 16001}) { |
| 219 SCOPED_TRACE(ProduceDebugText(rate)); | 225 SCOPED_TRACE(ProduceDebugText(rate)); |
| 220 std::unique_ptr<RenderDelayBuffer> render_delay_buffer( | 226 std::unique_ptr<RenderDelayBuffer> render_delay_buffer( |
| 221 RenderDelayBuffer::Create(NumBandsForRate(rate))); | 227 RenderDelayBuffer::Create(NumBandsForRate(rate))); |
| 222 EXPECT_DEATH(std::unique_ptr<RenderDelayController>( | 228 EXPECT_DEATH( |
| 223 RenderDelayController::Create(rate)), | 229 std::unique_ptr<RenderDelayController>(RenderDelayController::Create( |
| 224 ""); | 230 AudioProcessing::Config::EchoCanceller3(), rate)), |
| 231 ""); |
| 225 } | 232 } |
| 226 } | 233 } |
| 227 | 234 |
| 228 #endif | 235 #endif |
| 229 | 236 |
| 230 } // namespace webrtc | 237 } // namespace webrtc |
| OLD | NEW |