1e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/* 2e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 4e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Use of this source code is governed by a BSD-style license 5e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * that can be found in the LICENSE file in the root of the source 6e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * tree. An additional intellectual property rights grant can be found 7e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * in the file PATENTS. All contributing project authors may 8e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * be found in the AUTHORS file in the root of the source tree. 9e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */ 10e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 11e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#ifndef WEBRTC_MODULES_AUDIO_PROCESSING_MAIN_SOURCE_PROCESSING_COMPONENT_H_ 12e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#define WEBRTC_MODULES_AUDIO_PROCESSING_MAIN_SOURCE_PROCESSING_COMPONENT_H_ 13e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 14e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#include <vector> 15e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 16e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#include "audio_processing.h" 17e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 18e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentnamespace webrtc { 19e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentclass AudioProcessingImpl; 20e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 21e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentclass ProcessingComponent { 22e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent public: 23e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent explicit ProcessingComponent(const AudioProcessingImpl* apm); 24e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual ~ProcessingComponent(); 25e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 26e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int Initialize(); 27e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int Destroy(); 28e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int get_version(char* version, int version_len_bytes) const = 0; 29e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 30c55a96383497a772a307b346368133960b02ad03Eric Laurent bool is_component_enabled() const; 31c55a96383497a772a307b346368133960b02ad03Eric Laurent 32e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent protected: 33e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int Configure(); 34e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent int EnableComponent(bool enable); 35e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent void* handle(int index) const; 36e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent int num_handles() const; 37e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 38e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent private: 39e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual void* CreateHandle() const = 0; 40e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int InitializeHandle(void* handle) const = 0; 41e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int ConfigureHandle(void* handle) const = 0; 42e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int DestroyHandle(void* handle) const = 0; 43e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int num_handles_required() const = 0; 44e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int GetHandleError(void* handle) const = 0; 45e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 46e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent const AudioProcessingImpl* apm_; 47e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent std::vector<void*> handles_; 48e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent bool initialized_; 49e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent bool enabled_; 50e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent int num_handles_; 51e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent}; 52e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} // namespace webrtc 53e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 54e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#endif // WEBRTC_MODULES_AUDIO_PROCESSING_MAIN_SOURCE_PROCESSING_COMPONENT_H__ 55