blob: 37721c06615273ad174ed322f1f00d8f22aaaea7 [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
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
pbos@webrtc.org7fad4b82013-05-28 08:11:59 +000011#include "webrtc/modules/audio_processing/processing_component.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000012
13#include <cassert>
14
pbos@webrtc.org7fad4b82013-05-28 08:11:59 +000015#include "webrtc/modules/audio_processing/audio_processing_impl.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000016
17namespace webrtc {
18
19ProcessingComponent::ProcessingComponent(const AudioProcessingImpl* apm)
20 : apm_(apm),
21 initialized_(false),
22 enabled_(false),
23 num_handles_(0) {}
24
25ProcessingComponent::~ProcessingComponent() {
26 assert(initialized_ == false);
27}
28
29int ProcessingComponent::Destroy() {
30 while (!handles_.empty()) {
31 DestroyHandle(handles_.back());
32 handles_.pop_back();
33 }
34 initialized_ = false;
35
36 return apm_->kNoError;
37}
38
39int ProcessingComponent::EnableComponent(bool enable) {
40 if (enable && !enabled_) {
41 enabled_ = enable; // Must be set before Initialize() is called.
42
43 int err = Initialize();
44 if (err != apm_->kNoError) {
45 enabled_ = false;
46 return err;
47 }
48 } else {
49 enabled_ = enable;
50 }
51
52 return apm_->kNoError;
53}
54
55bool ProcessingComponent::is_component_enabled() const {
56 return enabled_;
57}
58
59void* ProcessingComponent::handle(int index) const {
60 assert(index < num_handles_);
61 return handles_[index];
62}
63
64int ProcessingComponent::num_handles() const {
65 return num_handles_;
66}
67
68int ProcessingComponent::Initialize() {
69 if (!enabled_) {
70 return apm_->kNoError;
71 }
72
73 num_handles_ = num_handles_required();
74 if (num_handles_ > static_cast<int>(handles_.size())) {
75 handles_.resize(num_handles_, NULL);
76 }
77
78 assert(static_cast<int>(handles_.size()) >= num_handles_);
79 for (int i = 0; i < num_handles_; i++) {
80 if (handles_[i] == NULL) {
81 handles_[i] = CreateHandle();
82 if (handles_[i] == NULL) {
83 return apm_->kCreationFailedError;
84 }
85 }
86
87 int err = InitializeHandle(handles_[i]);
88 if (err != apm_->kNoError) {
89 return GetHandleError(handles_[i]);
90 }
91 }
92
93 initialized_ = true;
94 return Configure();
95}
96
97int ProcessingComponent::Configure() {
98 if (!initialized_) {
99 return apm_->kNoError;
100 }
101
102 assert(static_cast<int>(handles_.size()) >= num_handles_);
103 for (int i = 0; i < num_handles_; i++) {
104 int err = ConfigureHandle(handles_[i]);
105 if (err != apm_->kNoError) {
106 return GetHandleError(handles_[i]);
107 }
108 }
109
110 return apm_->kNoError;
111}
112} // namespace webrtc