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/src/include/cod_amr.h
     35 
     36      Date: 02/07/2002
     37 
     38 ------------------------------------------------------------------------------
     39  REVISION HISTORY
     40 
     41  Description: Added overflow flag as an element to the cod_amrState data
     42               structure. Corrected the function prototype declaration for
     43               cod_amr().
     44 
     45  Description:  Replaced "int" and/or "char" with OSCL defined types.
     46 
     47  Description: Moved _cplusplus #ifdef after Include section.
     48 
     49  Description:
     50 
     51 ------------------------------------------------------------------------------
     52  INCLUDE DESCRIPTION
     53 
     54        File             : cod_amr.h
     55        Purpose          : Main encoder routine operating on a frame basis.
     56 
     57 ------------------------------------------------------------------------------
     58 */
     59 
     60 #ifndef cod_amr_h
     61 #define cod_amr_h "$Id $"
     62 
     63 /*----------------------------------------------------------------------------
     64 ; INCLUDES
     65 ----------------------------------------------------------------------------*/
     66 #include "typedef.h"
     67 #include "cnst.h"
     68 #include "mode.h"
     69 #include "lpc.h"
     70 #include "lsp.h"
     71 #include "cl_ltp.h"
     72 #include "gain_q.h"
     73 #include "p_ol_wgh.h"
     74 #include "ton_stab.h"
     75 #include "vad.h"
     76 #include "dtx_enc.h"
     77 
     78 /*--------------------------------------------------------------------------*/
     79 #ifdef __cplusplus
     80 extern "C"
     81 {
     82 #endif
     83 
     84     /*----------------------------------------------------------------------------
     85     ; MACROS
     86     ; [Define module specific macros here]
     87     ----------------------------------------------------------------------------*/
     88 
     89     /*----------------------------------------------------------------------------
     90     ; DEFINES
     91     ; [Include all pre-processor statements here.]
     92     ----------------------------------------------------------------------------*/
     93 
     94 
     95     /*----------------------------------------------------------------------------
     96     ; EXTERNAL VARIABLES REFERENCES
     97     ; [Declare variables used in this module but defined elsewhere]
     98     ----------------------------------------------------------------------------*/
     99 
    100     /*----------------------------------------------------------------------------
    101     ; SIMPLE TYPEDEF'S
    102     ----------------------------------------------------------------------------*/
    103 
    104     /*----------------------------------------------------------------------------
    105     ; ENUMERATED TYPEDEF'S
    106     ----------------------------------------------------------------------------*/
    107 
    108     /*----------------------------------------------------------------------------
    109     ; STRUCTURES TYPEDEF'S
    110     ----------------------------------------------------------------------------*/
    111     /*-----------------------------------------------------------*
    112      *    Coder constant parameters (defined in "cnst.h")        *
    113      *-----------------------------------------------------------*
    114      *   L_WINDOW    : LPC analysis window size.                 *
    115      *   L_NEXT      : Samples of next frame needed for autocor. *
    116      *   L_FRAME     : Frame size.                               *
    117      *   L_FRAME_BY2 : Half the frame size.                      *
    118      *   L_SUBFR     : Sub-frame size.                           *
    119      *   M           : LPC order.                                *
    120      *   MP1         : LPC order+1                               *
    121      *   L_TOTAL7k4  : Total size of speech buffer.              *
    122      *   PIT_MIN7k4  : Minimum pitch lag.                        *
    123      *   PIT_MAX     : Maximum pitch lag.                        *
    124      *   L_INTERPOL  : Length of filter for interpolation        *
    125      *-----------------------------------------------------------*/
    126     typedef struct
    127     {
    128         /* Speech vector */
    129         Word16 old_speech[L_TOTAL];
    130         Word16 *speech, *p_window, *p_window_12k2;
    131         Word16 *new_speech;             /* Global variable */
    132 
    133         /* Weight speech vector */
    134         Word16 old_wsp[L_FRAME + PIT_MAX];
    135         Word16 *wsp;
    136 
    137         /* OL LTP states */
    138         Word16 old_lags[5];
    139         Word16 ol_gain_flg[2];
    140 
    141         /* Excitation vector */
    142         Word16 old_exc[L_FRAME + PIT_MAX + L_INTERPOL];
    143         Word16 *exc;
    144 
    145         /* Zero vector */
    146         Word16 ai_zero[L_SUBFR + MP1];
    147         Word16 *zero;
    148 
    149         /* Impulse response vector */
    150         Word16 *h1;
    151         Word16 hvec[L_SUBFR * 2];
    152 
    153         /* Substates */
    154         lpcState   *lpcSt;
    155         lspState   *lspSt;
    156         clLtpState *clLtpSt;
    157         gainQuantState  *gainQuantSt;
    158         pitchOLWghtState *pitchOLWghtSt;
    159         tonStabState *tonStabSt;
    160         vadState *vadSt;
    161         Flag dtx;
    162         dtx_encState *dtx_encSt;
    163 
    164         /* Filter's memory */
    165         Word16 mem_syn[M], mem_w0[M], mem_w[M];
    166         Word16 mem_err[M + L_SUBFR], *error;
    167 
    168         Word16 sharp;
    169 
    170         /* Overflow flag */
    171         Flag   overflow;
    172 
    173     } cod_amrState;
    174 
    175 
    176     /*----------------------------------------------------------------------------
    177     ; GLOBAL FUNCTION DEFINITIONS
    178     ; [List function prototypes here]
    179     ----------------------------------------------------------------------------*/
    180     /*
    181     **************************************************************************
    182     *
    183     *  Function    : cod_amr_init
    184     *  Purpose     : Allocates memory and initializes state variables
    185     *  Description : Stores pointer to filter status struct in *st. This
    186     *                pointer has to be passed to cod_amr in each call.
    187     *                 - initilize pointers to speech buffer
    188     *                 - initialize static  pointers
    189     *                 - set static vectors to zero
    190     *  Returns     : 0 on success
    191     *
    192     **************************************************************************
    193     */
    194     Word16 cod_amr_init(cod_amrState **st, Flag dtx);
    195 
    196     /*
    197     **************************************************************************
    198     *
    199     *  Function    : cod_amr_reset
    200     *  Purpose     : Resets state memory
    201     *  Returns     : 0 on success
    202     *
    203     **************************************************************************
    204     */
    205     Word16 cod_amr_reset(cod_amrState *st);
    206 
    207     /*
    208     **************************************************************************
    209     *
    210     *  Function    : cod_amr_exit
    211     *  Purpose     : The memory used for state memory is freed
    212     *  Description : Stores NULL in *st
    213     *
    214     **************************************************************************
    215     */
    216     void cod_amr_exit(cod_amrState **st);
    217 
    218     /***************************************************************************
    219      *   FUNCTION:   cod_amr_first
    220      *
    221      *   PURPOSE:  Copes with look-ahead.
    222      *
    223      *   INPUTS:
    224      *       No input argument are passed to this function. However, before
    225      *       calling this function, 40 new speech data should be copied to the
    226      *       vector new_speech[]. This is a global pointer which is declared in
    227      *       this file (it points to the end of speech buffer minus 200).
    228      *
    229      ***************************************************************************/
    230 
    231     Word16 cod_amr_first(cod_amrState *st,     /* i/o : State struct            */
    232                          Word16 new_speech[]   /* i   : speech input (L_FRAME)  */
    233                         );
    234 
    235     /***************************************************************************
    236      *   FUNCTION:   cod_amr
    237      *
    238      *   PURPOSE:  Main encoder routine.
    239      *
    240      *   DESCRIPTION: This function is called every 20 ms speech frame,
    241      *       operating on the newly read 160 speech samples. It performs the
    242      *       principle encoding functions to produce the set of encoded parameters
    243      *       which include the LSP, adaptive codebook, and fixed codebook
    244      *       quantization indices (addresses and gains).
    245      *
    246      *   INPUTS:
    247      *       No input argument are passed to this function. However, before
    248      *       calling this function, 160 new speech data should be copied to the
    249      *       vector new_speech[]. This is a global pointer which is declared in
    250      *       this file (it points to the end of speech buffer minus 160).
    251      *
    252      *   OUTPUTS:
    253      *
    254      *       ana[]:     vector of analysis parameters.
    255      *       synth[]:   Local synthesis speech (for debugging purposes)
    256      *
    257      ***************************************************************************/
    258 
    259     Word16 cod_amr(cod_amrState *st,         /* i/o : State struct                 */
    260                    enum Mode mode,           /* i   : AMR mode                     */
    261                    Word16 new_speech[],      /* i   : speech input (L_FRAME)       */
    262                    Word16 ana[],             /* o   : Analysis parameters          */
    263                    enum Mode *usedMode,      /* o   : used mode                    */
    264                    Word16 synth[]            /* o   : Local synthesis              */
    265                   );
    266 
    267 
    268 #ifdef __cplusplus
    269 }
    270 #endif
    271 
    272 #endif  /* _cod_amr_h_ */
    273 
    274 
    275 
    276