xref: /aosp_15_r20/external/webrtc/modules/audio_processing/agc/legacy/digital_agc.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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 #ifndef MODULES_AUDIO_PROCESSING_AGC_LEGACY_DIGITAL_AGC_H_
12 #define MODULES_AUDIO_PROCESSING_AGC_LEGACY_DIGITAL_AGC_H_
13 
14 #include "common_audio/signal_processing/include/signal_processing_library.h"
15 
16 namespace webrtc {
17 
18 typedef struct {
19   int32_t downState[8];
20   int16_t HPstate;
21   int16_t counter;
22   int16_t logRatio;           // log( P(active) / P(inactive) ) (Q10)
23   int16_t meanLongTerm;       // Q10
24   int32_t varianceLongTerm;   // Q8
25   int16_t stdLongTerm;        // Q10
26   int16_t meanShortTerm;      // Q10
27   int32_t varianceShortTerm;  // Q8
28   int16_t stdShortTerm;       // Q10
29 } AgcVad;                     // total = 54 bytes
30 
31 typedef struct {
32   int32_t capacitorSlow;
33   int32_t capacitorFast;
34   int32_t gain;
35   int32_t gainTable[32];
36   int16_t gatePrevious;
37   int16_t agcMode;
38   AgcVad vadNearend;
39   AgcVad vadFarend;
40 } DigitalAgc;
41 
42 int32_t WebRtcAgc_InitDigital(DigitalAgc* digitalAgcInst, int16_t agcMode);
43 
44 int32_t WebRtcAgc_ComputeDigitalGains(DigitalAgc* digitalAgcInst,
45                                       const int16_t* const* inNear,
46                                       size_t num_bands,
47                                       uint32_t FS,
48                                       int16_t lowLevelSignal,
49                                       int32_t gains[11]);
50 
51 int32_t WebRtcAgc_ApplyDigitalGains(const int32_t gains[11],
52                                     size_t num_bands,
53                                     uint32_t FS,
54                                     const int16_t* const* in_near,
55                                     int16_t* const* out);
56 
57 int32_t WebRtcAgc_AddFarendToDigital(DigitalAgc* digitalAgcInst,
58                                      const int16_t* inFar,
59                                      size_t nrSamples);
60 
61 void WebRtcAgc_InitVad(AgcVad* vadInst);
62 
63 int16_t WebRtcAgc_ProcessVad(AgcVad* vadInst,    // (i) VAD state
64                              const int16_t* in,  // (i) Speech signal
65                              size_t nrSamples);  // (i) number of samples
66 
67 int32_t WebRtcAgc_CalculateGainTable(int32_t* gainTable,         // Q16
68                                      int16_t compressionGaindB,  // Q0 (in dB)
69                                      int16_t targetLevelDbfs,    // Q0 (in dB)
70                                      uint8_t limiterEnable,
71                                      int16_t analogTarget);
72 
73 }  // namespace webrtc
74 
75 #endif  // MODULES_AUDIO_PROCESSING_AGC_LEGACY_DIGITAL_AGC_H_
76