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/****************************************************************************************
19Portions of this file are derived from the following 3GPP standard:
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)
26Permission to distribute, modify and use this file under the standard license
27terms listed above has been obtained from the copyright holder.
28****************************************************************************************/
29/*
30------------------------------------------------------------------------------
31
32
33
34 Filename: /audio/gsm-amr/c/include/qgain475.h
35
36     Date: 01/04/2002
37
38------------------------------------------------------------------------------
39 REVISION HISTORY
40
41 Description: Updated template and copied #defines from qgain475.c file.
42
43 Description: Changed to include pOverflow as a function parameter for all
44 functions in qgain475.c
45
46 Description: Moved _cplusplus #ifdef after Include section.
47
48 Description:
49
50------------------------------------------------------------------------------
51 INCLUDE DESCRIPTION
52
53 This file contains the defines and function prototypes used in the
54 quantization of pitch and codebook gains for MR475.
55
56------------------------------------------------------------------------------
57*/
58#ifndef _QGAIN475_H_
59#define _QGAIN475_H_
60#define qgain475_h "$Id $"
61
62/*----------------------------------------------------------------------------
63; INCLUDES
64----------------------------------------------------------------------------*/
65#include "typedef.h"
66#include "gc_pred.h"
67#include "mode.h"
68
69/*--------------------------------------------------------------------------*/
70#ifdef __cplusplus
71extern "C"
72{
73#endif
74
75    /*----------------------------------------------------------------------------
76    ; MACROS
77    ; [Define module specific macros here]
78    ----------------------------------------------------------------------------*/
79
80    /*----------------------------------------------------------------------------
81    ; DEFINES
82    ; [Include all pre-processor statements here.]
83    ----------------------------------------------------------------------------*/
84    /* minimum allowed gain code prediction error: 102.887/4096 = 0.0251189 */
85#define MIN_QUA_ENER         ( -5443) /* Q10 <->    log2 (0.0251189) */
86#define MIN_QUA_ENER_MR122   (-32768) /* Q10 <-> 20*log10(0.0251189) */
87
88    /* minimum allowed gain code prediction error: 32000/4096 = 7.8125 */
89#define MAX_QUA_ENER         (  3037) /* Q10 <->    log2 (7.8125)    */
90#define MAX_QUA_ENER_MR122   ( 18284) /* Q10 <-> 20*log10(7.8125)    */
91
92    /*----------------------------------------------------------------------------
93    ; EXTERNAL VARIABLES REFERENCES
94    ; [Declare variables used in this module but defined elsewhere]
95    ----------------------------------------------------------------------------*/
96
97    /*----------------------------------------------------------------------------
98    ; SIMPLE TYPEDEF'S
99    ----------------------------------------------------------------------------*/
100
101    /*----------------------------------------------------------------------------
102    ; ENUMERATED TYPEDEF'S
103    ----------------------------------------------------------------------------*/
104
105    /*----------------------------------------------------------------------------
106    ; STRUCTURES TYPEDEF'S
107    ----------------------------------------------------------------------------*/
108
109    /*----------------------------------------------------------------------------
110    ; GLOBAL FUNCTION DEFINITIONS
111    ; [List function prototypes here]
112    ----------------------------------------------------------------------------*/
113
114    /*************************************************************************
115     *
116     * FUNCTION:  MR475_update_unq_pred()
117     *
118     * PURPOSE:   use optimum codebook gain and update "unquantized"
119     *            gain predictor with the (bounded) prediction error
120     *
121     *************************************************************************/
122    void
123    MR475_update_unq_pred(
124        gc_predState *pred_st, /* i/o: gain predictor state struct            */
125        Word16 exp_gcode0,     /* i  : predicted CB gain (exponent),      Q0  */
126        Word16 frac_gcode0,    /* i  : predicted CB gain (fraction),      Q15 */
127        Word16 cod_gain_exp,   /* i  : optimum codebook gain (exponent),  Q0  */
128        Word16 cod_gain_frac,  /* i  : optimum codebook gain (fraction),  Q15 */
129        Flag   *pOverflow      /* o  : overflow indicator                     */
130    );
131
132    /*************************************************************************
133     *
134     * FUNCTION:  MR475_gain_quant()
135     *
136     * PURPOSE: Quantization of pitch and codebook gains for two subframes
137     *          (using predicted codebook gain)
138     *
139     *************************************************************************/
140
141    Word16
142    MR475_gain_quant(              /* o  : index of quantization.                 */
143        gc_predState *pred_st,     /* i/o: gain predictor state struct            */
144
145        /* data from subframe 0 (or 2) */
146        Word16 sf0_exp_gcode0,     /* i  : predicted CB gain (exponent),      Q0  */
147        Word16 sf0_frac_gcode0,    /* i  : predicted CB gain (fraction),      Q15 */
148        Word16 sf0_exp_coeff[],    /* i  : energy coeff. (5), exponent part,  Q0  */
149        Word16 sf0_frac_coeff[],   /* i  : energy coeff. (5), fraction part,  Q15 */
150        /*      (frac_coeff and exp_coeff computed in  */
151        /*       calc_filt_energies())                 */
152        Word16 sf0_exp_target_en,  /* i  : exponent of target energy,         Q0  */
153        Word16 sf0_frac_target_en, /* i  : fraction of target energy,         Q15 */
154
155        /* data from subframe 1 (or 3) */
156        Word16 sf1_code_nosharp[], /* i  : innovative codebook vector (L_SUBFR)   */
157        /*      (whithout pitch sharpening)            */
158        Word16 sf1_exp_gcode0,     /* i  : predicted CB gain (exponent),      Q0  */
159        Word16 sf1_frac_gcode0,    /* i  : predicted CB gain (fraction),      Q15 */
160        Word16 sf1_exp_coeff[],    /* i  : energy coeff. (5), exponent part,  Q0  */
161        Word16 sf1_frac_coeff[],   /* i  : energy coeff. (5), fraction part,  Q15 */
162        /*      (frac_coeff and exp_coeff computed in  */
163        /*       calc_filt_energies())                 */
164        Word16 sf1_exp_target_en,  /* i  : exponent of target energy,         Q0  */
165        Word16 sf1_frac_target_en, /* i  : fraction of target energy,         Q15 */
166
167        Word16 gp_limit,           /* i  : pitch gain limit                       */
168
169        Word16 *sf0_gain_pit,      /* o  : Pitch gain,                        Q14 */
170        Word16 *sf0_gain_cod,      /* o  : Code gain,                         Q1  */
171
172        Word16 *sf1_gain_pit,      /* o  : Pitch gain,                        Q14 */
173        Word16 *sf1_gain_cod,      /* o  : Code gain,                         Q1  */
174        Flag   *pOverflow          /* o  : overflow indicator                     */
175    );
176#ifdef __cplusplus
177}
178#endif
179
180#endif  /* _QGAIN475_H_ */
181