1 /* ------------------------------------------------------------------ 2 * Copyright (C) 1998-2009 PacketVideo 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13 * express or implied. 14 * See the License for the specific language governing permissions 15 * and limitations under the License. 16 * ------------------------------------------------------------------- 17 */ 18 /**************************************************************************************** 19 Portions of this file are derived from the following 3GPP standard: main(int,char **)20 21 3GPP TS 26.073 22 ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec 23 Available from http://www.3gpp.org 24 25 (C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC) 26 Permission to distribute, modify and use this file under the standard license 27 terms listed above has been obtained from the copyright holder. 28 ****************************************************************************************/ 29 /* 30 ------------------------------------------------------------------------------ 31 32 33 34 Filename: agc.h 35 36 ------------------------------------------------------------------------------ 37 INCLUDE DESCRIPTION 38 39 File : agc.h 40 Purpose : Scales the postfilter output on a subframe basis 41 : by automatic control of the subframe gain. 42 43 ------------------------------------------------------------------------------ 44 */ 45 46 #ifndef _AGC_H_ 47 #define _AGC_H_ 48 49 /*---------------------------------------------------------------------------- 50 ; INCLUDES 51 ----------------------------------------------------------------------------*/ 52 #include "typedef.h" 53 54 /*--------------------------------------------------------------------------*/ 55 #ifdef __cplusplus 56 extern "C" 57 { 58 #endif 59 60 /*---------------------------------------------------------------------------- 61 ; MACROS 62 ; [Define module specific macros here] 63 ----------------------------------------------------------------------------*/ 64 65 /*---------------------------------------------------------------------------- 66 ; DEFINES 67 ; [Include all pre-processor statements here.] 68 ----------------------------------------------------------------------------*/ 69 70 /*---------------------------------------------------------------------------- 71 ; EXTERNAL VARIABLES REFERENCES 72 ; [Declare variables used in this module but defined elsewhere] 73 ----------------------------------------------------------------------------*/ 74 75 /*---------------------------------------------------------------------------- 76 ; SIMPLE TYPEDEF'S 77 ----------------------------------------------------------------------------*/ 78 79 /*---------------------------------------------------------------------------- 80 ; ENUMERATED TYPEDEF'S 81 ----------------------------------------------------------------------------*/ 82 83 /*---------------------------------------------------------------------------- 84 ; STRUCTURES TYPEDEF'S 85 ----------------------------------------------------------------------------*/ 86 typedef struct 87 { 88 Word16 past_gain; 89 } agcState; 90 91 /*---------------------------------------------------------------------------- 92 ; GLOBAL FUNCTION DEFINITIONS 93 ; [List function prototypes here] 94 ----------------------------------------------------------------------------*/ 95 /*---------------------------------------------------------------------------- 96 ; 97 ; Function : agc_reset 98 ; Purpose : Reset of agc (i.e. set state memory to 1.0) 99 ; Returns : 0 on success 100 ; 101 ----------------------------------------------------------------------------*/ 102 Word16 agc_reset(agcState *st); 103 104 105 /*---------------------------------------------------------------------------- 106 ; 107 ; Function : agc 108 ; Purpose : Scales the postfilter output on a subframe basis 109 ; Description : sig_out[n] = sig_out[n] * gain[n]; 110 ; where gain[n] is the gain at the nth sample given by 111 ; gain[n] = agc_fac * gain[n-1] + (1 - agc_fac) g_in/g_out 112 ; g_in/g_out is the square root of the ratio of energy at 113 ; the input and output of the postfilter. 114 ; 115 ----------------------------------------------------------------------------*/ 116 void agc( 117 agcState *st, /* i/o : agc state */ 118 Word16 *sig_in, /* i : postfilter input signal, (l_trm) */ 119 Word16 *sig_out, /* i/o : postfilter output signal, (l_trm) */ 120 Word16 agc_fac, /* i : AGC factor */ 121 Word16 l_trm, /* i : subframe size */ 122 Flag *pOverflow /* i : overflow flag */ 123 ); 124 125 /*---------------------------------------------------------------------------- 126 ; 127 ; Function: agc2 128 ; Purpose: Scales the excitation on a subframe basis 129 ; 130 ----------------------------------------------------------------------------*/ 131 void agc2( 132 Word16 *sig_in, /* i : postfilter input signal */ 133 Word16 *sig_out, /* i/o : postfilter output signal */ 134 Word16 l_trm, /* i : subframe size */ 135 Flag *pOverflow /* i : overflow flag */ 136 ); 137 138 #ifdef __cplusplus 139 } 140 #endif 141 142 #endif /* _AGC_H_ */ 143 144 145