| Index: webrtc/modules/audio_processing/audio_processing_impl_locking_unittest.cc
|
| diff --git a/webrtc/modules/audio_processing/audio_processing_impl_locking_unittest.cc b/webrtc/modules/audio_processing/audio_processing_impl_locking_unittest.cc
|
| index dcbaa28541c3065f758ceeb759fddf62d0500569..b82643057d65ec85adb26615411dd24ac032606b 100644
|
| --- a/webrtc/modules/audio_processing/audio_processing_impl_locking_unittest.cc
|
| +++ b/webrtc/modules/audio_processing/audio_processing_impl_locking_unittest.cc
|
| @@ -30,41 +30,6 @@ namespace {
|
|
|
| class AudioProcessingImplLockTest;
|
|
|
| -// Sleeps a random time between 0 and max_sleep milliseconds.
|
| -void SleepRandomMs(int max_sleep, test::Random* rand_gen) {
|
| - int sleeptime = rand_gen->Rand(0, max_sleep);
|
| - SleepMs(sleeptime);
|
| -}
|
| -
|
| -// Populates a float audio frame with random data.
|
| -void PopulateAudioFrame(float** frame,
|
| - float amplitude,
|
| - size_t num_channels,
|
| - size_t samples_per_channel,
|
| - test::Random* rand_gen) {
|
| - for (size_t ch = 0; ch < num_channels; ch++) {
|
| - for (size_t k = 0; k < samples_per_channel; k++) {
|
| - // Store random 16 bit quantized float number between +-amplitude.
|
| - frame[ch][k] = amplitude * (2 * rand_gen->Rand<float>() - 1);
|
| - }
|
| - }
|
| -}
|
| -
|
| -// Populates an audioframe frame of AudioFrame type with random data.
|
| -void PopulateAudioFrame(AudioFrame* frame,
|
| - int16_t amplitude,
|
| - test::Random* rand_gen) {
|
| - ASSERT_GT(amplitude, 0);
|
| - ASSERT_LE(amplitude, 32767);
|
| - for (int ch = 0; ch < frame->num_channels_; ch++) {
|
| - for (int k = 0; k < static_cast<int>(frame->samples_per_channel_); k++) {
|
| - // Store random 16 bit number between -(amplitude+1) and
|
| - // amplitude.
|
| - frame->data_[k * ch] = rand_gen->Rand(2 * amplitude + 1) - amplitude - 1;
|
| - }
|
| - }
|
| -}
|
| -
|
| // Type of the render thread APM API call to use in the test.
|
| enum class RenderApiImpl {
|
| ProcessReverseStreamImpl1,
|
| @@ -97,6 +62,31 @@ enum class AecType {
|
| BasicWebRtcAecSettingsWithAecMobile
|
| };
|
|
|
| +// Thread-safe random number generator wrapper.
|
| +class RandomGenerator {
|
| + public:
|
| + RandomGenerator() : rand_gen_(42U) {}
|
| +
|
| + int RandInt(int min, int max) {
|
| + rtc::CritScope cs(&crit_);
|
| + return rand_gen_.Rand(min, max);
|
| + }
|
| +
|
| + int RandInt(int max) {
|
| + rtc::CritScope cs(&crit_);
|
| + return rand_gen_.Rand(max);
|
| + }
|
| +
|
| + float RandFloat() {
|
| + rtc::CritScope cs(&crit_);
|
| + return rand_gen_.Rand<float>();
|
| + }
|
| +
|
| + private:
|
| + rtc::CriticalSection crit_;
|
| + test::Random rand_gen_ GUARDED_BY(crit_);
|
| +};
|
| +
|
| // Variables related to the audio data and formats.
|
| struct AudioFrameData {
|
| explicit AudioFrameData(int max_frame_size) {
|
| @@ -331,7 +321,7 @@ class CaptureSideCalledChecker {
|
| class CaptureProcessor {
|
| public:
|
| CaptureProcessor(int max_frame_size,
|
| - test::Random* rand_gen,
|
| + RandomGenerator* rand_gen,
|
| FrameCounters* shared_counters_state,
|
| CaptureSideCalledChecker* capture_call_checker,
|
| AudioProcessingImplLockTest* test_framework,
|
| @@ -348,7 +338,7 @@ class CaptureProcessor {
|
| void CallApmCaptureSide();
|
| void ApplyRuntimeSettingScheme();
|
|
|
| - test::Random* rand_gen_ = nullptr;
|
| + RandomGenerator* rand_gen_ = nullptr;
|
| FrameCounters* frame_counters_ = nullptr;
|
| CaptureSideCalledChecker* capture_call_checker_ = nullptr;
|
| AudioProcessingImplLockTest* test_ = nullptr;
|
| @@ -360,13 +350,13 @@ class CaptureProcessor {
|
| // Class for handling the stats processing.
|
| class StatsProcessor {
|
| public:
|
| - StatsProcessor(test::Random* rand_gen,
|
| + StatsProcessor(RandomGenerator* rand_gen,
|
| TestConfig* test_config,
|
| AudioProcessing* apm);
|
| bool Process();
|
|
|
| private:
|
| - test::Random* rand_gen_ = nullptr;
|
| + RandomGenerator* rand_gen_ = nullptr;
|
| TestConfig* test_config_ = nullptr;
|
| AudioProcessing* apm_ = nullptr;
|
| };
|
| @@ -375,7 +365,7 @@ class StatsProcessor {
|
| class RenderProcessor {
|
| public:
|
| RenderProcessor(int max_frame_size,
|
| - test::Random* rand_gen,
|
| + RandomGenerator* rand_gen,
|
| FrameCounters* shared_counters_state,
|
| CaptureSideCalledChecker* capture_call_checker,
|
| AudioProcessingImplLockTest* test_framework,
|
| @@ -392,7 +382,7 @@ class RenderProcessor {
|
| void CallApmRenderSide();
|
| void ApplyRuntimeSettingScheme();
|
|
|
| - test::Random* rand_gen_ = nullptr;
|
| + RandomGenerator* rand_gen_ = nullptr;
|
| FrameCounters* frame_counters_ = nullptr;
|
| CaptureSideCalledChecker* capture_call_checker_ = nullptr;
|
| AudioProcessingImplLockTest* test_ = nullptr;
|
| @@ -459,7 +449,7 @@ class AudioProcessingImplLockTest
|
| rtc::PlatformThread render_thread_;
|
| rtc::PlatformThread capture_thread_;
|
| rtc::PlatformThread stats_thread_;
|
| - mutable test::Random rand_gen_;
|
| + mutable RandomGenerator rand_gen_;
|
|
|
| rtc::scoped_ptr<AudioProcessing> apm_;
|
| TestConfig test_config_;
|
| @@ -470,12 +460,47 @@ class AudioProcessingImplLockTest
|
| StatsProcessor stats_thread_state_;
|
| };
|
|
|
| +// Sleeps a random time between 0 and max_sleep milliseconds.
|
| +void SleepRandomMs(int max_sleep, RandomGenerator* rand_gen) {
|
| + int sleeptime = rand_gen->RandInt(0, max_sleep);
|
| + SleepMs(sleeptime);
|
| +}
|
| +
|
| +// Populates a float audio frame with random data.
|
| +void PopulateAudioFrame(float** frame,
|
| + float amplitude,
|
| + size_t num_channels,
|
| + size_t samples_per_channel,
|
| + RandomGenerator* rand_gen) {
|
| + for (size_t ch = 0; ch < num_channels; ch++) {
|
| + for (size_t k = 0; k < samples_per_channel; k++) {
|
| + // Store random 16 bit quantized float number between +-amplitude.
|
| + frame[ch][k] = amplitude * (2 * rand_gen->RandFloat() - 1);
|
| + }
|
| + }
|
| +}
|
| +
|
| +// Populates an audioframe frame of AudioFrame type with random data.
|
| +void PopulateAudioFrame(AudioFrame* frame,
|
| + int16_t amplitude,
|
| + RandomGenerator* rand_gen) {
|
| + ASSERT_GT(amplitude, 0);
|
| + ASSERT_LE(amplitude, 32767);
|
| + for (int ch = 0; ch < frame->num_channels_; ch++) {
|
| + for (int k = 0; k < static_cast<int>(frame->samples_per_channel_); k++) {
|
| + // Store random 16 bit number between -(amplitude+1) and
|
| + // amplitude.
|
| + frame->data_[k * ch] =
|
| + rand_gen->RandInt(2 * amplitude + 1) - amplitude - 1;
|
| + }
|
| + }
|
| +}
|
| +
|
| AudioProcessingImplLockTest::AudioProcessingImplLockTest()
|
| : test_complete_(EventWrapper::Create()),
|
| render_thread_(RenderProcessorThreadFunc, this, "render"),
|
| capture_thread_(CaptureProcessorThreadFunc, this, "capture"),
|
| stats_thread_(StatsProcessorThreadFunc, this, "stats"),
|
| - rand_gen_(42U),
|
| apm_(AudioProcessingImpl::Create()),
|
| render_thread_state_(kMaxFrameSize,
|
| &rand_gen_,
|
| @@ -513,7 +538,7 @@ void AudioProcessingImplLockTest::SetUp() {
|
| ASSERT_EQ(apm_->kNoError, apm_->gain_control()->Enable(true));
|
|
|
| ASSERT_EQ(apm_->kNoError,
|
| - apm_->gain_control()->set_mode(GainControl::kAdaptiveAnalog));
|
| + apm_->gain_control()->set_mode(GainControl::kAdaptiveDigital));
|
| ASSERT_EQ(apm_->kNoError, apm_->gain_control()->Enable(true));
|
|
|
| ASSERT_EQ(apm_->kNoError, apm_->noise_suppression()->Enable(true));
|
| @@ -552,7 +577,7 @@ void AudioProcessingImplLockTest::TearDown() {
|
| stats_thread_.Stop();
|
| }
|
|
|
| -StatsProcessor::StatsProcessor(test::Random* rand_gen,
|
| +StatsProcessor::StatsProcessor(RandomGenerator* rand_gen,
|
| TestConfig* test_config,
|
| AudioProcessing* apm)
|
| : rand_gen_(rand_gen), test_config_(test_config), apm_(apm) {}
|
| @@ -586,7 +611,7 @@ const float CaptureProcessor::kCaptureInputFloatLevel = 0.03125f;
|
|
|
| CaptureProcessor::CaptureProcessor(
|
| int max_frame_size,
|
| - test::Random* rand_gen,
|
| + RandomGenerator* rand_gen,
|
| FrameCounters* shared_counters_state,
|
| CaptureSideCalledChecker* capture_call_checker,
|
| AudioProcessingImplLockTest* test_framework,
|
| @@ -824,8 +849,6 @@ void CaptureProcessor::ApplyRuntimeSettingScheme() {
|
| apm_->set_stream_key_pressed(true);
|
| apm_->set_delay_offset_ms(15);
|
| EXPECT_EQ(apm_->delay_offset_ms(), 15);
|
| - EXPECT_GE(apm_->num_reverse_channels(), 0);
|
| - EXPECT_LE(apm_->num_reverse_channels(), 2);
|
| } else {
|
| ASSERT_EQ(AudioProcessing::Error::kNoError,
|
| apm_->set_stream_delay_ms(50));
|
| @@ -833,9 +856,6 @@ void CaptureProcessor::ApplyRuntimeSettingScheme() {
|
| apm_->set_delay_offset_ms(20);
|
| EXPECT_EQ(apm_->delay_offset_ms(), 20);
|
| apm_->delay_offset_ms();
|
| - apm_->num_reverse_channels();
|
| - EXPECT_GE(apm_->num_reverse_channels(), 0);
|
| - EXPECT_LE(apm_->num_reverse_channels(), 2);
|
| }
|
| break;
|
| default:
|
| @@ -852,7 +872,7 @@ void CaptureProcessor::ApplyRuntimeSettingScheme() {
|
| const float RenderProcessor::kRenderInputFloatLevel = 0.5f;
|
|
|
| RenderProcessor::RenderProcessor(int max_frame_size,
|
| - test::Random* rand_gen,
|
| + RandomGenerator* rand_gen,
|
| FrameCounters* shared_counters_state,
|
| CaptureSideCalledChecker* capture_call_checker,
|
| AudioProcessingImplLockTest* test_framework,
|
| @@ -1104,7 +1124,7 @@ INSTANTIATE_TEST_CASE_P(
|
| ::testing::ValuesIn(TestConfig::GenerateExtensiveTestConfigs()));
|
|
|
| INSTANTIATE_TEST_CASE_P(
|
| - DISABLED_AudioProcessingImplLockBrief,
|
| + AudioProcessingImplLockBrief,
|
| AudioProcessingImplLockTest,
|
| ::testing::ValuesIn(TestConfig::GenerateBriefTestConfigs()));
|
|
|
|
|