Home | History | Annotate | Download | only in audio_processing
      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