| 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 | 
|---|