Home | History | Annotate | Download | only in src
      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:
     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: /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
     71 extern "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