/* * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef MODULES_AUDIO_PROCESSING_AGC_LEGACY_GAIN_CONTROL_H_ #define MODULES_AUDIO_PROCESSING_AGC_LEGACY_GAIN_CONTROL_H_ #include <stddef.h> #include <stdint.h> namespace webrtc { enum { … }; enum { … }; WebRtcAgcConfig; /* * This function analyses the number of samples passed to * farend and produces any error code that could arise. * * Input: * - agcInst : AGC instance. * - samples : Number of samples in input vector. * * Return value: * : 0 - Normal operation. * : -1 - Error. */ int WebRtcAgc_GetAddFarendError(void* state, size_t samples); /* * This function processes a 10 ms frame of far-end speech to determine * if there is active speech. The length of the input speech vector must be * given in samples (80 when FS=8000, and 160 when FS=16000, FS=32000 or * FS=48000). * * Input: * - agcInst : AGC instance. * - inFar : Far-end input speech vector * - samples : Number of samples in input vector * * Return value: * : 0 - Normal operation. * : -1 - Error */ int WebRtcAgc_AddFarend(void* agcInst, const int16_t* inFar, size_t samples); /* * This function processes a 10 ms frame of microphone speech to determine * if there is active speech. The length of the input speech vector must be * given in samples (80 when FS=8000, and 160 when FS=16000, FS=32000 or * FS=48000). For very low input levels, the input signal is increased in level * by multiplying and overwriting the samples in inMic[]. * * This function should be called before any further processing of the * near-end microphone signal. * * Input: * - agcInst : AGC instance. * - inMic : Microphone input speech vector for each band * - num_bands : Number of bands in input vector * - samples : Number of samples in input vector * * Return value: * : 0 - Normal operation. * : -1 - Error */ int WebRtcAgc_AddMic(void* agcInst, int16_t* const* inMic, size_t num_bands, size_t samples); /* * This function replaces the analog microphone with a virtual one. * It is a digital gain applied to the input signal and is used in the * agcAdaptiveDigital mode where no microphone level is adjustable. The length * of the input speech vector must be given in samples (80 when FS=8000, and 160 * when FS=16000, FS=32000 or FS=48000). * * Input: * - agcInst : AGC instance. * - inMic : Microphone input speech vector for each band * - num_bands : Number of bands in input vector * - samples : Number of samples in input vector * - micLevelIn : Input level of microphone (static) * * Output: * - inMic : Microphone output after processing (L band) * - inMic_H : Microphone output after processing (H band) * - micLevelOut : Adjusted microphone level after processing * * Return value: * : 0 - Normal operation. * : -1 - Error */ int WebRtcAgc_VirtualMic(void* agcInst, int16_t* const* inMic, size_t num_bands, size_t samples, int32_t micLevelIn, int32_t* micLevelOut); /* * This function analyses a 10 ms frame and produces the analog and digital * gains required to normalize the signal. The gain adjustments are done only * during active periods of speech. The length of the speech vectors must be * given in samples (80 when FS=8000, and 160 when FS=16000, FS=32000 or * FS=48000). The echo parameter can be used to ensure the AGC will not adjust * upward in the presence of echo. * * This function should be called after processing the near-end microphone * signal, in any case after any echo cancellation. * * Input: * - agcInst : AGC instance * - inNear : Near-end input speech vector for each band * - num_bands : Number of bands in input/output vector * - samples : Number of samples in input/output vector * - inMicLevel : Current microphone volume level * - echo : Set to 0 if the signal passed to add_mic is * almost certainly free of echo; otherwise set * to 1. If you have no information regarding echo * set to 0. * * Output: * - outMicLevel : Adjusted microphone volume level * - saturationWarning : A returned value of 1 indicates a saturation event * has occurred and the volume cannot be further * reduced. Otherwise will be set to 0. * - gains : Vector of gains to apply for digital normalization * * Return value: * : 0 - Normal operation. * : -1 - Error */ int WebRtcAgc_Analyze(void* agcInst, const int16_t* const* inNear, size_t num_bands, size_t samples, int32_t inMicLevel, int32_t* outMicLevel, int16_t echo, uint8_t* saturationWarning, int32_t gains[11]); /* * This function processes a 10 ms frame by applying precomputed digital gains. * * Input: * - agcInst : AGC instance * - gains : Vector of gains to apply for digital normalization * - in_near : Near-end input speech vector for each band * - num_bands : Number of bands in input/output vector * * Output: * - out : Gain-adjusted near-end speech vector * : May be the same vector as the input. * * Return value: * : 0 - Normal operation. * : -1 - Error */ int WebRtcAgc_Process(const void* agcInst, const int32_t gains[11], const int16_t* const* in_near, size_t num_bands, int16_t* const* out); /* * This function sets the config parameters (targetLevelDbfs, * compressionGaindB and limiterEnable). * * Input: * - agcInst : AGC instance * - config : config struct * * Output: * * Return value: * : 0 - Normal operation. * : -1 - Error */ int WebRtcAgc_set_config(void* agcInst, WebRtcAgcConfig config); /* * This function returns the config parameters (targetLevelDbfs, * compressionGaindB and limiterEnable). * * Input: * - agcInst : AGC instance * * Output: * - config : config struct * * Return value: * : 0 - Normal operation. * : -1 - Error */ int WebRtcAgc_get_config(void* agcInst, WebRtcAgcConfig* config); /* * This function creates and returns an AGC instance, which will contain the * state information for one (duplex) channel. */ void* WebRtcAgc_Create(void); /* * This function frees the AGC instance created at the beginning. * * Input: * - agcInst : AGC instance. */ void WebRtcAgc_Free(void* agcInst); /* * This function initializes an AGC instance. * * Input: * - agcInst : AGC instance. * - minLevel : Minimum possible mic level * - maxLevel : Maximum possible mic level * - agcMode : 0 - Unchanged * : 1 - Adaptive Analog Automatic Gain Control -3dBOv * : 2 - Adaptive Digital Automatic Gain Control -3dBOv * : 3 - Fixed Digital Gain 0dB * - fs : Sampling frequency * * Return value : 0 - Ok * -1 - Error */ int WebRtcAgc_Init(void* agcInst, int32_t minLevel, int32_t maxLevel, int16_t agcMode, uint32_t fs); } // namespace webrtc #endif // MODULES_AUDIO_PROCESSING_AGC_LEGACY_GAIN_CONTROL_H_