blob: 9e16d7c4eea6c14ff4c12e7c28f4f080b2e9ba1e [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
pbos@webrtc.org12dc1a32013-08-05 16:22:53 +000013#include <assert.h>
niklase@google.com470e71d2011-07-07 08:21:25 +000014
andrew@webrtc.org56e4a052014-02-27 22:23:17 +000015#include "webrtc/modules/audio_processing/include/audio_processing.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000016
17namespace webrtc {
18
andrew@webrtc.org56e4a052014-02-27 22:23:17 +000019ProcessingComponent::ProcessingComponent()
20 : initialized_(false),
niklase@google.com470e71d2011-07-07 08:21:25 +000021 enabled_(false),
22 num_handles_(0) {}
23
24ProcessingComponent::~ProcessingComponent() {
25 assert(initialized_ == false);
26}
27
28int ProcessingComponent::Destroy() {
29 while (!handles_.empty()) {
30 DestroyHandle(handles_.back());
31 handles_.pop_back();
32 }
33 initialized_ = false;
34
andrew@webrtc.org56e4a052014-02-27 22:23:17 +000035 return AudioProcessing::kNoError;
niklase@google.com470e71d2011-07-07 08:21:25 +000036}
37
38int ProcessingComponent::EnableComponent(bool enable) {
39 if (enable && !enabled_) {
40 enabled_ = enable; // Must be set before Initialize() is called.
41
42 int err = Initialize();
andrew@webrtc.org56e4a052014-02-27 22:23:17 +000043 if (err != AudioProcessing::kNoError) {
niklase@google.com470e71d2011-07-07 08:21:25 +000044 enabled_ = false;
45 return err;
46 }
47 } else {
48 enabled_ = enable;
49 }
50
andrew@webrtc.org56e4a052014-02-27 22:23:17 +000051 return AudioProcessing::kNoError;
niklase@google.com470e71d2011-07-07 08:21:25 +000052}
53
54bool ProcessingComponent::is_component_enabled() const {
55 return enabled_;
56}
57
58void* ProcessingComponent::handle(int index) const {
59 assert(index < num_handles_);
60 return handles_[index];
61}
62
63int ProcessingComponent::num_handles() const {
64 return num_handles_;
65}
66
67int ProcessingComponent::Initialize() {
68 if (!enabled_) {
andrew@webrtc.org56e4a052014-02-27 22:23:17 +000069 return AudioProcessing::kNoError;
niklase@google.com470e71d2011-07-07 08:21:25 +000070 }
71
72 num_handles_ = num_handles_required();
73 if (num_handles_ > static_cast<int>(handles_.size())) {
74 handles_.resize(num_handles_, NULL);
75 }
76
77 assert(static_cast<int>(handles_.size()) >= num_handles_);
78 for (int i = 0; i < num_handles_; i++) {
79 if (handles_[i] == NULL) {
80 handles_[i] = CreateHandle();
81 if (handles_[i] == NULL) {
andrew@webrtc.org56e4a052014-02-27 22:23:17 +000082 return AudioProcessing::kCreationFailedError;
niklase@google.com470e71d2011-07-07 08:21:25 +000083 }
84 }
85
86 int err = InitializeHandle(handles_[i]);
andrew@webrtc.org56e4a052014-02-27 22:23:17 +000087 if (err != AudioProcessing::kNoError) {
niklase@google.com470e71d2011-07-07 08:21:25 +000088 return GetHandleError(handles_[i]);
89 }
90 }
91
92 initialized_ = true;
93 return Configure();
94}
95
96int ProcessingComponent::Configure() {
97 if (!initialized_) {
andrew@webrtc.org56e4a052014-02-27 22:23:17 +000098 return AudioProcessing::kNoError;
niklase@google.com470e71d2011-07-07 08:21:25 +000099 }
100
101 assert(static_cast<int>(handles_.size()) >= num_handles_);
102 for (int i = 0; i < num_handles_; i++) {
103 int err = ConfigureHandle(handles_[i]);
andrew@webrtc.org56e4a052014-02-27 22:23:17 +0000104 if (err != AudioProcessing::kNoError) {
niklase@google.com470e71d2011-07-07 08:21:25 +0000105 return GetHandleError(handles_[i]);
106 }
107 }
108
andrew@webrtc.org56e4a052014-02-27 22:23:17 +0000109 return AudioProcessing::kNoError;
niklase@google.com470e71d2011-07-07 08:21:25 +0000110}
111} // namespace webrtc