1b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/* ------------------------------------------------------------------
2b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * Copyright (C) 1998-2009 PacketVideo
3b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *
4b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * you may not use this file except in compliance with the License.
6b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * You may obtain a copy of the License at
7b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *
8b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *
10b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * Unless required by applicable law or agreed to in writing, software
11b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * express or implied.
14b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * See the License for the specific language governing permissions
15b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * and limitations under the License.
16b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * -------------------------------------------------------------------
17b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber */
18b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/****************************************************************************************
19b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas HuberPortions of this file are derived from the following 3GPP standard:
20b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
21b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    3GPP TS 26.073
22b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec
23b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Available from http://www.3gpp.org
24b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
25b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber(C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC)
26b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas HuberPermission to distribute, modify and use this file under the standard license
27b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huberterms listed above has been obtained from the copyright holder.
28b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber****************************************************************************************/
29b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*
30b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
31b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
32b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
33b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
34b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Pathname: ./audio/gsm-amr/c/src/g_adapt.c
35b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Functions:
36b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
37b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     Date: 02/04/2002
38b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
39b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
40b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REVISION HISTORY
41b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
42b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Updated template used to PV coding template.
43b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Changed to accept the pOverflow flag for EPOC compatibility.
44b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
45b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description:  Replaced OSCL mem type functions and eliminated include
46b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber               files that now are chosen by OSCL definitions
47b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
48b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description:  Replaced "int" and/or "char" with OSCL defined types.
49b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
50b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description:
51b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
52b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
53b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MODULE DESCRIPTION
54b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
55b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
56b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
57b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/
58b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
59b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*----------------------------------------------------------------------------
60b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; INCLUDES
61b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/
62b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include <stdlib.h>
63b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
64b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "g_adapt.h"
65b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "typedef.h"
66b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "basic_op.h"
67b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "oper_32b.h"
68b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "cnst.h"
69b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "gmed_n.h"
70b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
71b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*----------------------------------------------------------------------------
72b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; MACROS
73b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; Define module specific macros here
74b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/
75b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
76b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*----------------------------------------------------------------------------
77b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; DEFINES
78b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; Include all pre-processor statements here. Include conditional
79b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; compile variables also.
80b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/
81b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#define LTP_GAIN_THR1 2721 /* 2721 Q13 = 0.3322 ~= 1.0 / (10*log10(2)) */
82b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#define LTP_GAIN_THR2 5443 /* 5443 Q13 = 0.6644 ~= 2.0 / (10*log10(2)) */
83b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
84b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*----------------------------------------------------------------------------
85b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; LOCAL FUNCTION DEFINITIONS
86b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; Function Prototype declaration
87b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/
88b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
89b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*----------------------------------------------------------------------------
90b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; LOCAL VARIABLE DEFINITIONS
91b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; Variable declaration - defined here and used outside this module
92b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/
93b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
94b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
95b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*
96b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
97b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION NAME: gain_adapt_init
98b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
99b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber INPUT AND OUTPUT DEFINITIONS
100b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
101b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Inputs:
102b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    st -- double pointer to GainAdaptState
103b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
104b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Outputs:
105b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    st -- double ponter to GainAdaptState
106b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
107b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Returns:
108b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    -1 if an error occurs during memory initialization
109b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     0 if OK
110b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
111b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Global Variables Used:
112b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None
113b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
114b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Local Variables Needed:
115b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None
116b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
117b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
118b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION DESCRIPTION
119b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
120b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Allocates state memory and initializes state memory
121b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
122b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
123b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REQUIREMENTS
124b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
125b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None
126b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
127b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
128b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REFERENCES
129b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
130b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber g_adapt.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001
131b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
132b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
133b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber PSEUDO-CODE
134b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
135b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
136b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
137b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RESOURCES USED [optional]
138b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
139b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber When the code is written for a specific target processor the
140b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the resources used should be documented below.
141b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
142b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber HEAP MEMORY USED: x bytes
143b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
144b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber STACK MEMORY USED: x bytes
145b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
146b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable
147b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                used to represent cycle count for each subroutine
148b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                called)
149b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     where: (cycle count variable) = cycle count for [subroutine
150b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                                     name]
151b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
152b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
153b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CAUTION [optional]
154b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber [State any special notes, constraints or cautions for users of this function]
155b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
156b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
157b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/
158b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
159b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas HuberWord16 gain_adapt_init(GainAdaptState **st)
160b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber{
161b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    GainAdaptState* s;
162b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
163b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    if (st == (GainAdaptState **) NULL)
164b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
165b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        /* fprintf(stderr, "gain_adapt_init: invalid parameter\n"); */
166b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        return -1;
167b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    }
168b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    *st = NULL;
169b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
170b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /* allocate memory */
171b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    if ((s = (GainAdaptState *) malloc(sizeof(GainAdaptState))) == NULL)
172b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
173b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        /* fprintf(stderr, "gain_adapt_init: can't malloc state structure\n"); */
174b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        return -1;
175b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    }
176b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    gain_adapt_reset(s);
177b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    *st = s;
178b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
179b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    return 0;
180b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber}
181b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
182b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*
183b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
184b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION NAME: gain_adapt_reset
185b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
186b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber INPUT AND OUTPUT DEFINITIONS
187b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
188b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Inputs:
189b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    st -- double pointer to GainAdaptState
190b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
191b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Outputs:
192b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    st -- double ponter to GainAdaptState
193b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
194b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Returns:
195b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    -1 if an error occurs
196b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     0 if OK
197b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
198b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Global Variables Used:
199b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None
200b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
201b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Local Variables Needed:
202b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None
203b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
204b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
205b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION DESCRIPTION
206b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
207b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Initializes state memory to zero
208b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
209b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REQUIREMENTS
210b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
211b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None
212b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
213b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
214b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REFERENCES
215b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
216b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber g_adapt.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001
217b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
218b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
219b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber PSEUDO-CODE
220b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
221b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
222b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
223b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RESOURCES USED [optional]
224b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
225b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber When the code is written for a specific target processor the
226b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the resources used should be documented below.
227b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
228b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber HEAP MEMORY USED: x bytes
229b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
230b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber STACK MEMORY USED: x bytes
231b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
232b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable
233b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                used to represent cycle count for each subroutine
234b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                called)
235b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     where: (cycle count variable) = cycle count for [subroutine
236b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                                     name]
237b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
238b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
239b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CAUTION [optional]
240b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber [State any special notes, constraints or cautions for users of this function]
241b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
242b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
243b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/
244b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
245b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas HuberWord16 gain_adapt_reset(GainAdaptState *st)
246b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber{
247b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Word16 i;
248b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
249b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    if (st == (GainAdaptState *) NULL)
250b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
251b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        /* fprintf(stderr, "gain_adapt_reset: invalid parameter\n"); */
252b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        return -1;
253b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    }
254b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
255b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    st->onset = 0;
256b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    st->prev_alpha = 0;
257b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    st->prev_gc = 0;
258b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
259b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    for (i = 0; i < LTPG_MEM_SIZE; i++)
260b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
261b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        st->ltpg_mem[i] = 0;
262b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    }
263b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
264b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    return 0;
265b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber}
266b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
267b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
268b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*
269b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
270b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION NAME: gain_adapt_exit
271b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
272b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber INPUT AND OUTPUT DEFINITIONS
273b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
274b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Inputs:
275b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    st -- double pointer to GainAdaptState
276b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
277b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Outputs:
278b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None
279b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
280b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Returns:
281b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None
282b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
283b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Global Variables Used:
284b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None
285b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
286b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Local Variables Needed:
287b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None
288b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
289b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
290b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION DESCRIPTION
291b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
292b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    The memory used for state memory is freed
293b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
294b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REQUIREMENTS
295b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
296b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None
297b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
298b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
299b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REFERENCES
300b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
301b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber g_adapt.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001
302b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
303b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
304b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber PSEUDO-CODE
305b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
306b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
307b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
308b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RESOURCES USED [optional]
309b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
310b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber When the code is written for a specific target processor the
311b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the resources used should be documented below.
312b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
313b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber HEAP MEMORY USED: x bytes
314b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
315b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber STACK MEMORY USED: x bytes
316b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
317b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable
318b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                used to represent cycle count for each subroutine
319b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                called)
320b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     where: (cycle count variable) = cycle count for [subroutine
321b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                                     name]
322b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
323b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
324b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CAUTION [optional]
325b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber [State any special notes, constraints or cautions for users of this function]
326b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
327b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
328b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/
329b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
330b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Hubervoid gain_adapt_exit(GainAdaptState **st)
331b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber{
332b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    if (st == NULL || *st == NULL)
333b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        return;
334b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
335b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /* deallocate memory */
336b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    free(*st);
337b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    *st = NULL;
338b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
339b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    return;
340b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber}
341b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
342b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*
343b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
344b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION NAME: gain_adapt
345b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
346b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber INPUT AND OUTPUT DEFINITIONS
347b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
348b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Inputs:
349b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    st -- double pointer to GainAdaptState
350b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    ltpg -- Word16 -- ltp coding gain (log2()), Q13
351b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    gain_cod -- Word16 -- code gain, Q1
352b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
353b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Outputs:
354b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    alpha -- Pointer to Word16 --  gain adaptation factor,   Q15
355b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    pOverflow -- Pointer to Flag -- overflow indicator
356b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
357b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Returns:
358b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None
359b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
360b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Global Variables Used:
361b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None
362b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
363b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Local Variables Needed:
364b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None
365b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
366b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
367b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION DESCRIPTION
368b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
369b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Purpose:    calculate pitch/codebook gain adaptation factor alpha
370b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber             (and update the adaptor state)
371b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
372b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
373b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REQUIREMENTS
374b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
375b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None
376b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
377b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
378b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REFERENCES
379b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
380b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber g_adapt.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001
381b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
382b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
383b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber PSEUDO-CODE
384b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
385b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
386b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
387b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RESOURCES USED [optional]
388b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
389b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber When the code is written for a specific target processor the
390b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the resources used should be documented below.
391b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
392b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber HEAP MEMORY USED: x bytes
393b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
394b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber STACK MEMORY USED: x bytes
395b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
396b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable
397b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                used to represent cycle count for each subroutine
398b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                called)
399b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     where: (cycle count variable) = cycle count for [subroutine
400b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                                     name]
401b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
402b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
403b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CAUTION [optional]
404b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber [State any special notes, constraints or cautions for users of this function]
405b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
406b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
407b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/
408b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
409b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Hubervoid gain_adapt(
410b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    GainAdaptState *st,  /* i  : state struct                  */
411b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Word16 ltpg,         /* i  : ltp coding gain (log2()), Q13 */
412b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Word16 gain_cod,     /* i  : code gain,                Q1  */
413b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Word16 *alpha,       /* o  : gain adaptation factor,   Q15 */
414b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Flag   *pOverflow
415b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber)
416b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber{
417b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Word16 adapt;      /* adaptdation status; 0, 1, or 2       */
418b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Word16 result;     /* alpha factor, Q13                    */
419b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Word16 filt;       /* median-filtered LTP coding gain, Q13 */
420b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Word16 tmp;
421b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Word16 i;
422b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
423b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /* basic adaptation */
424b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    if (ltpg <= LTP_GAIN_THR1)
425b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
426b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        adapt = 0;
427b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    }
428b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    else
429b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
430b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        if (ltpg <= LTP_GAIN_THR2)
431b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        {
432b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber            adapt = 1;
433b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        }
434b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        else
435b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        {
436b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber            adapt = 2;
437b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        }
438b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    }
439b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
440b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /*
441b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     * // onset indicator
442b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     * if ((cbGain > onFact * cbGainMem[0]) && (cbGain > 100.0))
443b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     *     onset = 8;
444b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     * else
445b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     *     if (onset)
446b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     *         onset--;
447b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     */
448b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /* tmp = cbGain / onFact; onFact = 2.0; 200 Q1 = 100.0 */
449b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    tmp = shr_r(gain_cod, 1, pOverflow);
450b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
451b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    if ((tmp > st->prev_gc) && (gain_cod > 200))
452b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
453b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        st->onset = 8;
454b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    }
455b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    else
456b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
457b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        if (st->onset != 0)
458b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        {
459b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber            st->onset = sub(st->onset, 1, pOverflow);
460b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        }
461b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    }
462b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
463b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /*
464b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     *  // if onset, increase adaptor state
465b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     *  if (onset && (gainAdapt < 2)) gainAdapt++;
466b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     */
467b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    if ((st->onset != 0) && (adapt < 2))
468b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
469b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        adapt = add(adapt, 1, pOverflow);
470b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    }
471b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
472b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    st->ltpg_mem[0] = ltpg;
473b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    filt = gmed_n(st->ltpg_mem, 5);  /* function result */
474b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
475b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    if (adapt == 0)
476b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
477b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        if (filt > 5443) /* 5443 Q13 = 0.66443... */
478b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        {
479b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber            result = 0;
480b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        }
481b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        else
482b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        {
483b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber            if (filt < 0)
484b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber            {
485b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                result = 16384;  /* 16384 Q15 = 0.5 */
486b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber            }
487b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber            else
488b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber            {   /* result       =   0.5 - 0.75257499*filt     */
489b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                /* result (Q15) = 16384 - 24660 * (filt << 2) */
490b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                filt = shl(filt, 2, pOverflow);  /* Q15 */
491b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                result = mult(24660, filt, pOverflow);
492b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                result = sub(16384, result, pOverflow);
493b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber            }
494b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        }
495b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    }
496b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    else
497b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
498b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        result = 0;
499b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    }
500b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /*
501b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     *  if (prevAlpha == 0.0) result = 0.5 * (result + prevAlpha);
502b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     */
503b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    if (st->prev_alpha == 0)
504b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
505b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        result = shr(result, 1, pOverflow);
506b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    }
507b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
508b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /* store the result */
509b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    *alpha = result;
510b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
511b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /* update adapter state memory */
512b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    st->prev_alpha = result;
513b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    st->prev_gc = gain_cod;
514b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
515b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    for (i = LTPG_MEM_SIZE - 1; i > 0; i--)
516b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
517b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        st->ltpg_mem[i] = st->ltpg_mem[i-1];
518b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    }
519b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /* mem[0] is just present for convenience in calling the gmed_n[5]
520b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     * function above. The memory depth is really LTPG_MEM_SIZE-1.
521b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     */
522b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber}
523