gain_control.h revision e48d5845c8b35de2ab73ea055c18a61fa3a9f0be
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_AGC_MAIN_INTERFACE_GAIN_CONTROL_H_ 12e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#define WEBRTC_MODULES_AUDIO_PROCESSING_AGC_MAIN_INTERFACE_GAIN_CONTROL_H_ 13e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 14e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#include "typedefs.h" 15e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 16e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent// Errors 17e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#define AGC_UNSPECIFIED_ERROR 18000 18e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#define AGC_UNSUPPORTED_FUNCTION_ERROR 18001 19e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#define AGC_UNINITIALIZED_ERROR 18002 20e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#define AGC_NULL_POINTER_ERROR 18003 21e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#define AGC_BAD_PARAMETER_ERROR 18004 22e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 23e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent// Warnings 24e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#define AGC_BAD_PARAMETER_WARNING 18050 25e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 26e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentenum 27e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 28e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent kAgcModeUnchanged, 29e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent kAgcModeAdaptiveAnalog, 30e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent kAgcModeAdaptiveDigital, 31e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent kAgcModeFixedDigital 32e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent}; 33e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 34e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentenum 35e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 36e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent kAgcFalse = 0, 37e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent kAgcTrue 38e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent}; 39e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 40e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurenttypedef struct 41e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 42e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word16 targetLevelDbfs; // default 3 (-3 dBOv) 43e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word16 compressionGaindB; // default 9 dB 44e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_UWord8 limiterEnable; // default kAgcTrue (on) 45e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} WebRtcAgc_config_t; 46e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 47e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#if defined(__cplusplus) 48e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentextern "C" 49e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 50e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#endif 51e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 52e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/* 53e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * This function processes a 10/20ms frame of far-end speech to determine 54e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * if there is active speech. Far-end speech length can be either 10ms or 55e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 20ms. The length of the input speech vector must be given in samples 56e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * (80/160 when FS=8000, and 160/320 when FS=16000 or FS=32000). 57e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 58e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Input: 59e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - agcInst : AGC instance. 60e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - inFar : Far-end input speech vector (10 or 20ms) 61e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - samples : Number of samples in input vector 62e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 63e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Return value: 64e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * : 0 - Normal operation. 65e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * : -1 - Error 66e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */ 67e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint WebRtcAgc_AddFarend(void* agcInst, 68e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent const WebRtc_Word16* inFar, 69e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word16 samples); 70e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 71e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/* 72e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * This function processes a 10/20ms frame of microphone speech to determine 73e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * if there is active speech. Microphone speech length can be either 10ms or 74e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 20ms. The length of the input speech vector must be given in samples 75e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * (80/160 when FS=8000, and 160/320 when FS=16000 or FS=32000). For very low 76e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * input levels, the input signal is increased in level by multiplying and 77e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * overwriting the samples in inMic[]. 78e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 79e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * This function should be called before any further processing of the 80e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * near-end microphone signal. 81e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 82e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Input: 83e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - agcInst : AGC instance. 84e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - inMic : Microphone input speech vector (10 or 20 ms) for 85e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * L band 86e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - inMic_H : Microphone input speech vector (10 or 20 ms) for 87e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * H band 88e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - samples : Number of samples in input vector 89e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 90e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Return value: 91e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * : 0 - Normal operation. 92e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * : -1 - Error 93e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */ 94e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint WebRtcAgc_AddMic(void* agcInst, 95e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word16* inMic, 96e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word16* inMic_H, 97e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word16 samples); 98e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 99e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/* 100e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * This function replaces the analog microphone with a virtual one. 101e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * It is a digital gain applied to the input signal and is used in the 102e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * agcAdaptiveDigital mode where no microphone level is adjustable. 103e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Microphone speech length can be either 10ms or 20ms. The length of the 104e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * input speech vector must be given in samples (80/160 when FS=8000, and 105e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 160/320 when FS=16000 or FS=32000). 106e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 107e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Input: 108e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - agcInst : AGC instance. 109e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - inMic : Microphone input speech vector for (10 or 20 ms) 110e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * L band 111e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - inMic_H : Microphone input speech vector for (10 or 20 ms) 112e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * H band 113e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - samples : Number of samples in input vector 114e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - micLevelIn : Input level of microphone (static) 115e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 116e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Output: 117e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - inMic : Microphone output after processing (L band) 118e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - inMic_H : Microphone output after processing (H band) 119e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - micLevelOut : Adjusted microphone level after processing 120e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 121e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Return value: 122e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * : 0 - Normal operation. 123e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * : -1 - Error 124e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */ 125e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint WebRtcAgc_VirtualMic(void* agcInst, 126e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word16* inMic, 127e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word16* inMic_H, 128e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word16 samples, 129e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word32 micLevelIn, 130e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word32* micLevelOut); 131e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 132e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/* 133e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * This function processes a 10/20ms frame and adjusts (normalizes) the gain 134e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * both analog and digitally. The gain adjustments are done only during 135e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * active periods of speech. The input speech length can be either 10ms or 136e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 20ms and the output is of the same length. The length of the speech 137e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * vectors must be given in samples (80/160 when FS=8000, and 160/320 when 138e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * FS=16000 or FS=32000). The echo parameter can be used to ensure the AGC will 139e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * not adjust upward in the presence of echo. 140e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 141e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * This function should be called after processing the near-end microphone 142e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * signal, in any case after any echo cancellation. 143e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 144e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Input: 145e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - agcInst : AGC instance 146e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - inNear : Near-end input speech vector (10 or 20 ms) for 147e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * L band 148e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - inNear_H : Near-end input speech vector (10 or 20 ms) for 149e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * H band 150e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - samples : Number of samples in input/output vector 151e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - inMicLevel : Current microphone volume level 152e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - echo : Set to 0 if the signal passed to add_mic is 153e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * almost certainly free of echo; otherwise set 154e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * to 1. If you have no information regarding echo 155e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * set to 0. 156e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 157e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Output: 158e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - outMicLevel : Adjusted microphone volume level 159e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - out : Gain-adjusted near-end speech vector (L band) 160e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * : May be the same vector as the input. 161e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - out_H : Gain-adjusted near-end speech vector (H band) 162e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - saturationWarning : A returned value of 1 indicates a saturation event 163e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * has occurred and the volume cannot be further 164e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * reduced. Otherwise will be set to 0. 165e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 166e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Return value: 167e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * : 0 - Normal operation. 168e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * : -1 - Error 169e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */ 170e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint WebRtcAgc_Process(void* agcInst, 171e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent const WebRtc_Word16* inNear, 172e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent const WebRtc_Word16* inNear_H, 173e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word16 samples, 174e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word16* out, 175e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word16* out_H, 176e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word32 inMicLevel, 177e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word32* outMicLevel, 178e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word16 echo, 179e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_UWord8* saturationWarning); 180e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 181e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/* 182e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * This function sets the config parameters (targetLevelDbfs, 183e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * compressionGaindB and limiterEnable). 184e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 185e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Input: 186e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - agcInst : AGC instance 187e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - config : config struct 188e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 189e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Output: 190e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 191e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Return value: 192e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * : 0 - Normal operation. 193e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * : -1 - Error 194e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */ 195e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint WebRtcAgc_set_config(void* agcInst, WebRtcAgc_config_t config); 196e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 197e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/* 198e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * This function returns the config parameters (targetLevelDbfs, 199e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * compressionGaindB and limiterEnable). 200e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 201e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Input: 202e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - agcInst : AGC instance 203e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 204e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Output: 205e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - config : config struct 206e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 207e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Return value: 208e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * : 0 - Normal operation. 209e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * : -1 - Error 210e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */ 211e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint WebRtcAgc_get_config(void* agcInst, WebRtcAgc_config_t* config); 212e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 213e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/* 214e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * This function creates an AGC instance, which will contain the state 215e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * information for one (duplex) channel. 216e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 217e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Return value : AGC instance if successful 218e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * : 0 (i.e., a NULL pointer) if unsuccessful 219e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */ 220e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint WebRtcAgc_Create(void **agcInst); 221e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 222e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/* 223e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * This function frees the AGC instance created at the beginning. 224e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 225e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Input: 226e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - agcInst : AGC instance. 227e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 228e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Return value : 0 - Ok 229e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -1 - Error 230e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */ 231e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint WebRtcAgc_Free(void *agcInst); 232e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 233e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/* 234e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * This function initializes an AGC instance. 235e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 236e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Input: 237e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - agcInst : AGC instance. 238e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - minLevel : Minimum possible mic level 239e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - maxLevel : Maximum possible mic level 240e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - agcMode : 0 - Unchanged 241e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * : 1 - Adaptive Analog Automatic Gain Control -3dBOv 242e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * : 2 - Adaptive Digital Automatic Gain Control -3dBOv 243e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * : 3 - Fixed Digital Gain 0dB 244e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - fs : Sampling frequency 245e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 246e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Return value : 0 - Ok 247e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -1 - Error 248e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */ 249e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint WebRtcAgc_Init(void *agcInst, 250e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word32 minLevel, 251e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word32 maxLevel, 252e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_Word16 agcMode, 253e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WebRtc_UWord32 fs); 254e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 255e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/* 256e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * This function returns a text string containing the version. 257e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 258e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Input: 259e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - length : Length of the char array pointed to by version 260e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Output: 261e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * - version : Pointer to a char array of to which the version 262e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * : string will be copied. 263e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 264e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Return value : 0 - OK 265e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -1 - Error 266e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */ 267e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint WebRtcAgc_Version(WebRtc_Word8 *versionStr, WebRtc_Word16 length); 268e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 269e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#if defined(__cplusplus) 270e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 271e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#endif 272e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 273e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#endif // WEBRTC_MODULES_AUDIO_PROCESSING_AGC_MAIN_INTERFACE_GAIN_CONTROL_H_ 274