Only reinitialize AudioProcessing when needed.
This takes away the burden from the user, resulting in cleaner code.
Review URL: https://webrtc-codereview.appspot.com/941005
git-svn-id: http://webrtc.googlecode.com/svn/trunk@3010 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/modules/audio_processing/audio_processing_impl.cc b/webrtc/modules/audio_processing/audio_processing_impl.cc
index 2f488c8..3877a38 100644
--- a/webrtc/modules/audio_processing/audio_processing_impl.cc
+++ b/webrtc/modules/audio_processing/audio_processing_impl.cc
@@ -100,31 +100,32 @@
}
AudioProcessingImpl::~AudioProcessingImpl() {
- crit_->Enter();
- while (!component_list_.empty()) {
- ProcessingComponent* component = component_list_.front();
- component->Destroy();
- delete component;
- component_list_.pop_front();
- }
+ {
+ CriticalSectionScoped crit_scoped(crit_);
+ while (!component_list_.empty()) {
+ ProcessingComponent* component = component_list_.front();
+ component->Destroy();
+ delete component;
+ component_list_.pop_front();
+ }
#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
- if (debug_file_->Open()) {
- debug_file_->CloseFile();
- }
+ if (debug_file_->Open()) {
+ debug_file_->CloseFile();
+ }
#endif
- if (render_audio_) {
- delete render_audio_;
- render_audio_ = NULL;
+ if (render_audio_) {
+ delete render_audio_;
+ render_audio_ = NULL;
+ }
+
+ if (capture_audio_) {
+ delete capture_audio_;
+ capture_audio_ = NULL;
+ }
}
- if (capture_audio_) {
- delete capture_audio_;
- capture_audio_ = NULL;
- }
-
- crit_->Leave();
delete crit_;
crit_ = NULL;
}
@@ -162,7 +163,7 @@
// Initialize all components.
std::list<ProcessingComponent*>::iterator it;
- for (it = component_list_.begin(); it != component_list_.end(); it++) {
+ for (it = component_list_.begin(); it != component_list_.end(); ++it) {
int err = (*it)->Initialize();
if (err != kNoError) {
return err;
@@ -183,6 +184,9 @@
int AudioProcessingImpl::set_sample_rate_hz(int rate) {
CriticalSectionScoped crit_scoped(crit_);
+ if (rate == sample_rate_hz_) {
+ return kNoError;
+ }
if (rate != kSampleRate8kHz &&
rate != kSampleRate16kHz &&
rate != kSampleRate32kHz) {
@@ -207,6 +211,9 @@
int AudioProcessingImpl::set_num_reverse_channels(int channels) {
CriticalSectionScoped crit_scoped(crit_);
+ if (channels == num_reverse_channels_) {
+ return kNoError;
+ }
// Only stereo supported currently.
if (channels > 2 || channels < 1) {
return kBadParameterError;
@@ -225,16 +232,16 @@
int input_channels,
int output_channels) {
CriticalSectionScoped crit_scoped(crit_);
+ if (input_channels == num_input_channels_ &&
+ output_channels == num_output_channels_) {
+ return kNoError;
+ }
if (output_channels > input_channels) {
return kBadParameterError;
}
-
// Only stereo supported currently.
- if (input_channels > 2 || input_channels < 1) {
- return kBadParameterError;
- }
-
- if (output_channels > 2 || output_channels < 1) {
+ if (input_channels > 2 || input_channels < 1 ||
+ output_channels > 2 || output_channels < 1) {
return kBadParameterError;
}