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_GAIN_CONTROL_IMPL_H_ 12e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#define WEBRTC_MODULES_AUDIO_PROCESSING_MAIN_SOURCE_GAIN_CONTROL_IMPL_H_ 13e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 14e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#include <vector> 15e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 16e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#include "audio_processing.h" 17e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#include "processing_component.h" 18e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 19e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentnamespace webrtc { 20e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentclass AudioProcessingImpl; 21e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentclass AudioBuffer; 22e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 23e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentclass GainControlImpl : public GainControl, 24e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent public ProcessingComponent { 25e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent public: 26e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent explicit GainControlImpl(const AudioProcessingImpl* apm); 27e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual ~GainControlImpl(); 28e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 29e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent int ProcessRenderAudio(AudioBuffer* audio); 30e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent int AnalyzeCaptureAudio(AudioBuffer* audio); 31e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent int ProcessCaptureAudio(AudioBuffer* audio); 32e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 33e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent // ProcessingComponent implementation. 34e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int Initialize(); 35e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int get_version(char* version, int version_len_bytes) const; 36e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 37e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent // GainControl implementation. 38e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual bool is_enabled() const; 39c55a96383497a772a307b346368133960b02ad03Eric Laurent virtual int stream_analog_level(); 40e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 41e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent private: 42e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent // GainControl implementation. 43e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int Enable(bool enable); 44e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int set_stream_analog_level(int level); 45e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int set_mode(Mode mode); 46e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual Mode mode() const; 47e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int set_target_level_dbfs(int level); 48e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int target_level_dbfs() const; 49e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int set_compression_gain_db(int gain); 50e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int compression_gain_db() const; 51e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int enable_limiter(bool enable); 52e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual bool is_limiter_enabled() const; 53e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int set_analog_level_limits(int minimum, int maximum); 54e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int analog_level_minimum() const; 55e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int analog_level_maximum() const; 56e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual bool stream_is_saturated() const; 57e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 58e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent // ProcessingComponent implementation. 59e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual void* CreateHandle() const; 60e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int InitializeHandle(void* handle) const; 61e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int ConfigureHandle(void* handle) const; 62e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int DestroyHandle(void* handle) const; 63e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int num_handles_required() const; 64e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual int GetHandleError(void* handle) const; 65e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 66e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent const AudioProcessingImpl* apm_; 67e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent Mode mode_; 68e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent int minimum_capture_level_; 69e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent int maximum_capture_level_; 70e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent bool limiter_enabled_; 71e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent int target_level_dbfs_; 72e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent int compression_gain_db_; 73e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent std::vector<int> capture_levels_; 74e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent int analog_capture_level_; 75e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent bool was_analog_level_set_; 76e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent bool stream_is_saturated_; 77e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent}; 78e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} // namespace webrtc 79e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 80e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#endif // WEBRTC_MODULES_AUDIO_PROCESSING_MAIN_SOURCE_GAIN_CONTROL_IMPL_H_ 81