1 /* 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "webrtc/modules/audio_processing/processing_component.h" 12 13 #include <assert.h> 14 15 #include "webrtc/modules/audio_processing/include/audio_processing.h" 16 17 namespace webrtc { 18 19 ProcessingComponent::ProcessingComponent() 20 : initialized_(false), 21 enabled_(false), 22 num_handles_(0) {} 23 24 ProcessingComponent::~ProcessingComponent() { 25 assert(initialized_ == false); 26 } 27 28 int ProcessingComponent::Destroy() { 29 while (!handles_.empty()) { 30 DestroyHandle(handles_.back()); 31 handles_.pop_back(); 32 } 33 initialized_ = false; 34 35 return AudioProcessing::kNoError; 36 } 37 38 int ProcessingComponent::EnableComponent(bool enable) { 39 if (enable && !enabled_) { 40 enabled_ = enable; // Must be set before Initialize() is called. 41 42 int err = Initialize(); 43 if (err != AudioProcessing::kNoError) { 44 enabled_ = false; 45 return err; 46 } 47 } else { 48 enabled_ = enable; 49 } 50 51 return AudioProcessing::kNoError; 52 } 53 54 bool ProcessingComponent::is_component_enabled() const { 55 return enabled_; 56 } 57 58 void* ProcessingComponent::handle(size_t index) const { 59 assert(index < num_handles_); 60 return handles_[index]; 61 } 62 63 size_t ProcessingComponent::num_handles() const { 64 return num_handles_; 65 } 66 67 int ProcessingComponent::Initialize() { 68 if (!enabled_) { 69 return AudioProcessing::kNoError; 70 } 71 72 num_handles_ = num_handles_required(); 73 if (num_handles_ > handles_.size()) { 74 handles_.resize(num_handles_, NULL); 75 } 76 77 assert(handles_.size() >= num_handles_); 78 for (size_t i = 0; i < num_handles_; i++) { 79 if (handles_[i] == NULL) { 80 handles_[i] = CreateHandle(); 81 if (handles_[i] == NULL) { 82 return AudioProcessing::kCreationFailedError; 83 } 84 } 85 86 int err = InitializeHandle(handles_[i]); 87 if (err != AudioProcessing::kNoError) { 88 return GetHandleError(handles_[i]); 89 } 90 } 91 92 initialized_ = true; 93 return Configure(); 94 } 95 96 int ProcessingComponent::Configure() { 97 if (!initialized_) { 98 return AudioProcessing::kNoError; 99 } 100 101 assert(handles_.size() >= num_handles_); 102 for (size_t i = 0; i < num_handles_; i++) { 103 int err = ConfigureHandle(handles_[i]); 104 if (err != AudioProcessing::kNoError) { 105 return GetHandleError(handles_[i]); 106 } 107 } 108 109 return AudioProcessing::kNoError; 110 } 111 } // namespace webrtc 112