From e84978f3d8612e7e482791552b94e0847967d3ba Mon Sep 17 00:00:00 2001 From: "andrew@webrtc.org" Date: Sat, 25 Jan 2014 02:09:06 +0000 Subject: [PATCH] Add a Config parameter to AudioProcessing::Create(). Also add a parameter-less version; the (int) version is deprecated and should be removed. TBR=aluebs,bjornv BUG=2844 Review URL: https://webrtc-codereview.appspot.com/7609004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@5431 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../audio_processing/audio_processing_impl.cc | 16 ++++++++++++++-- .../audio_processing/audio_processing_impl.h | 2 +- .../audio_processing_impl_unittest.cc | 7 +++++-- .../audio_processing/include/audio_processing.h | 3 +++ 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/webrtc/modules/audio_processing/audio_processing_impl.cc b/webrtc/modules/audio_processing/audio_processing_impl.cc index 6a89b9cad..8b9044f85 100644 --- a/webrtc/modules/audio_processing/audio_processing_impl.cc +++ b/webrtc/modules/audio_processing/audio_processing_impl.cc @@ -53,7 +53,16 @@ namespace webrtc { COMPILE_ASSERT(AudioProcessing::kNoError == 0, no_error_must_be_zero); AudioProcessing* AudioProcessing::Create(int id) { - AudioProcessingImpl* apm = new AudioProcessingImpl(); + return Create(); +} + +AudioProcessing* AudioProcessing::Create() { + Config config; + return Create(config); +} + +AudioProcessing* AudioProcessing::Create(const Config& config) { + AudioProcessingImpl* apm = new AudioProcessingImpl(config); if (apm->Initialize() != kNoError) { delete apm; apm = NULL; @@ -65,7 +74,7 @@ AudioProcessing* AudioProcessing::Create(int id) { int32_t AudioProcessing::TimeUntilNextProcess() { return -1; } int32_t AudioProcessing::Process() { return -1; } -AudioProcessingImpl::AudioProcessingImpl() +AudioProcessingImpl::AudioProcessingImpl(const Config& config) : echo_cancellation_(NULL), echo_control_mobile_(NULL), gain_control_(NULL), @@ -109,6 +118,8 @@ AudioProcessingImpl::AudioProcessingImpl() voice_detection_ = new VoiceDetectionImpl(this); component_list_.push_back(voice_detection_); + + SetExtraOptions(config); } AudioProcessingImpl::~AudioProcessingImpl() { @@ -193,6 +204,7 @@ int AudioProcessingImpl::InitializeLocked() { } void AudioProcessingImpl::SetExtraOptions(const Config& config) { + CriticalSectionScoped crit_scoped(crit_); std::list::iterator it; for (it = component_list_.begin(); it != component_list_.end(); ++it) (*it)->SetExtraOptions(config); diff --git a/webrtc/modules/audio_processing/audio_processing_impl.h b/webrtc/modules/audio_processing/audio_processing_impl.h index caf93dc65..249b789d0 100644 --- a/webrtc/modules/audio_processing/audio_processing_impl.h +++ b/webrtc/modules/audio_processing/audio_processing_impl.h @@ -47,7 +47,7 @@ class AudioProcessingImpl : public AudioProcessing { kSampleRate32kHz = 32000 }; - AudioProcessingImpl(); + explicit AudioProcessingImpl(const Config& config); virtual ~AudioProcessingImpl(); CriticalSectionWrapper* crit() const; diff --git a/webrtc/modules/audio_processing/audio_processing_impl_unittest.cc b/webrtc/modules/audio_processing/audio_processing_impl_unittest.cc index 75b9230f1..a10fd5e29 100644 --- a/webrtc/modules/audio_processing/audio_processing_impl_unittest.cc +++ b/webrtc/modules/audio_processing/audio_processing_impl_unittest.cc @@ -22,13 +22,16 @@ namespace webrtc { class MockInitialize : public AudioProcessingImpl { public: - MOCK_METHOD0(InitializeLocked, int()); + explicit MockInitialize(const Config& config) : AudioProcessingImpl(config) { + } + MOCK_METHOD0(InitializeLocked, int()); int RealInitializeLocked() { return AudioProcessingImpl::InitializeLocked(); } }; TEST(AudioProcessingImplTest, AudioParameterChangeTriggersInit) { - MockInitialize mock; + Config config; + MockInitialize mock(config); ON_CALL(mock, InitializeLocked()) .WillByDefault(Invoke(&mock, &MockInitialize::RealInitializeLocked)); diff --git a/webrtc/modules/audio_processing/include/audio_processing.h b/webrtc/modules/audio_processing/include/audio_processing.h index 6ed23f43c..edb9962d7 100644 --- a/webrtc/modules/audio_processing/include/audio_processing.h +++ b/webrtc/modules/audio_processing/include/audio_processing.h @@ -134,6 +134,9 @@ class AudioProcessing : public Module { // typically be one instance for the near-end stream, and additional instances // for each far-end stream which requires processing. On the server-side, // this would typically be one instance for every incoming stream. + static AudioProcessing* Create(); + static AudioProcessing* Create(const Config& config); + // TODO(ajm): Deprecated; remove all calls to it. static AudioProcessing* Create(int id); virtual ~AudioProcessing() {}