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 Filename: /audio/gsm_amr/c/src/include/gc_pred.h
32
33------------------------------------------------------------------------------
34 REVISION HISTORY
35
36 Description:  Replaced "int" and/or "char" with OSCL defined types.
37
38 Description: Moved _cplusplus #ifdef after Include section.
39
40 Who:                       Date:
41 Description:
42
43------------------------------------------------------------------------------
44 INCLUDE DESCRIPTION
45
46      File             : gc_pred.h
47      Purpose          : codebook gain MA prediction
48
49------------------------------------------------------------------------------
50*/
51
52#ifndef _GC_PRED_H_
53#define _GC_PRED_H_
54#define gc_pred_h "$Id $"
55
56/*----------------------------------------------------------------------------
57; INCLUDES
58----------------------------------------------------------------------------*/
59#include "typedef.h"
60#include "mode.h"
61
62
63/*--------------------------------------------------------------------------*/
64#ifdef __cplusplus
65extern "C"
66{
67#endif
68
69    /*----------------------------------------------------------------------------
70    ; MACROS
71    ; [Define module specific macros here]
72    ----------------------------------------------------------------------------*/
73
74    /*----------------------------------------------------------------------------
75    ; DEFINES
76    ; [Include all pre-processor statements here.]
77    ----------------------------------------------------------------------------*/
78
79    /*----------------------------------------------------------------------------
80    ; EXTERNAL VARIABLES REFERENCES
81    ; [Declare variables used in this module but defined elsewhere]
82    ----------------------------------------------------------------------------*/
83
84    /*----------------------------------------------------------------------------
85    ; SIMPLE TYPEDEF'S
86    ----------------------------------------------------------------------------*/
87
88    /*----------------------------------------------------------------------------
89    ; ENUMERATED TYPEDEF'S
90    ----------------------------------------------------------------------------*/
91
92    /*----------------------------------------------------------------------------
93    ; STRUCTURES TYPEDEF'S
94    ----------------------------------------------------------------------------*/
95    typedef struct
96    {
97        Word16 past_qua_en[4];         /* normal MA predictor memory,         Q10 */
98        /* (contains 20*log10(qua_err))            */
99        Word16 past_qua_en_MR122[4];   /* MA predictor memory for MR122 mode, Q10 */
100        /* (contains log2(qua_err))                */
101    } gc_predState;
102
103    /*----------------------------------------------------------------------------
104    ; GLOBAL FUNCTION DEFINITIONS
105    ; [List function prototypes here]
106    ----------------------------------------------------------------------------*/
107
108    Word16 gc_pred_reset(gc_predState *st);
109    /* reset of codebook gain MA predictor state (i.e. set state memory to zero)
110       returns 0 on success
111     */
112    void gc_pred_exit(gc_predState **st);
113    /* de-initialize codebook gain MA predictor state (i.e. free state struct)
114       stores NULL in *st
115     */
116
117    void
118    gc_pred_copy(
119        gc_predState *st_src,  /* i : State struct                           */
120        gc_predState *st_dest  /* o : State struct                           */
121    );
122
123    /*
124     * FUNCTION:  gc_pred()
125     * PURPOSE: MA prediction of the innovation energy
126     *          (in dB/(20*log10(2))) with mean  removed).
127     */
128    void gc_pred(
129        gc_predState *st,   /* i/o: State struct                           */
130        enum Mode mode,     /* i  : AMR mode                               */
131        Word16 *code,       /* i  : innovative codebook vector (L_SUBFR)   */
132        /*      MR122: Q12, other modes: Q13           */
133        Word16 *exp_gcode0, /* o  : exponent of predicted gain factor, Q0  */
134        Word16 *frac_gcode0,/* o  : fraction of predicted gain factor  Q15 */
135        Word16 *exp_en,     /* o  : exponent of innovation energy,     Q0  */
136        /*      (only calculated for MR795)            */
137        Word16 *frac_en,    /* o  : fraction of innovation energy,     Q15 */
138        /*      (only calculated for MR795)            */
139        Flag   *pOverflow
140    );
141
142    /*
143     * FUNCTION:  gc_pred_update()
144     * PURPOSE: update MA predictor with last quantized energy
145     */
146    void gc_pred_update(
147        gc_predState *st,      /* i/o: State struct                     */
148        Word16 qua_ener_MR122, /* i  : quantized energy for update, Q10 */
149        /*      (log2(qua_err))                  */
150        Word16 qua_ener        /* i  : quantized energy for update, Q10 */
151        /*      (20*log10(qua_err))              */
152    );
153
154    /*
155     * FUNCTION:  gc_pred_average_limited()
156     * PURPOSE: get average of MA predictor state values (with a lower limit)
157     *          [used in error concealment]
158     */
159    void gc_pred_average_limited(
160        gc_predState *st,       /* i: State struct                    */
161        Word16 *ener_avg_MR122, /* o: averaged quantized energy,  Q10 */
162        /*    (log2(qua_err))                 */
163        Word16 *ener_avg,       /* o: averaged quantized energy,  Q10 */
164        /*    (20*log10(qua_err))             */
165        Flag   *pOverflow
166    );
167
168
169#ifdef __cplusplus
170}
171#endif
172
173#endif  /* _GC_PRED_H_ */
174
175
176
177