Home | History | Annotate | Download | only in include
      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  Filename: /audio/gsm_amr/c/include/vad_1.h
     32 
     33 ------------------------------------------------------------------------------
     34  REVISION HISTORY
     35 
     36  Description: Placed header file in the proper template format.  Added
     37  parameter pOverflow for the basic math ops.
     38 
     39  Description:  Replaced "int" and/or "char" with OSCL defined types.
     40 
     41  Description: Moved _cplusplus #ifdef after Include section.
     42 
     43  Description:
     44 
     45 ------------------------------------------------------------------------------
     46  INCLUDE DESCRIPTION
     47 
     48  This file contains all the constant definitions, prototype and structure
     49  definitions needed by vad_1.c
     50 
     51 ------------------------------------------------------------------------------
     52 */
     53 
     54 /*----------------------------------------------------------------------------
     55 ; CONTINUE ONLY IF NOT ALREADY DEFINED
     56 ----------------------------------------------------------------------------*/
     57 #ifndef vad_1_h
     58 #define vad_1_h "$Id $"
     59 
     60 /*----------------------------------------------------------------------------
     61 ; INCLUDES
     62 ----------------------------------------------------------------------------*/
     63 #include "typedef.h"
     64 #include "cnst_vad.h"
     65 
     66 /*--------------------------------------------------------------------------*/
     67 #ifdef __cplusplus
     68 extern "C"
     69 {
     70 #endif
     71 
     72     /*----------------------------------------------------------------------------
     73     ; MACROS
     74     ; Define module specific macros here
     75     ----------------------------------------------------------------------------*/
     76 
     77     /*----------------------------------------------------------------------------
     78     ; DEFINES
     79     ; Include all pre-processor statements here.
     80     ----------------------------------------------------------------------------*/
     81 
     82     /*----------------------------------------------------------------------------
     83     ; EXTERNAL VARIABLES REFERENCES
     84     ; Declare variables used in this module but defined elsewhere
     85     ----------------------------------------------------------------------------*/
     86 
     87     /*----------------------------------------------------------------------------
     88     ; SIMPLE TYPEDEF'S
     89     ----------------------------------------------------------------------------*/
     90 
     91     /*----------------------------------------------------------------------------
     92     ; ENUMERATED TYPEDEF'S
     93     ----------------------------------------------------------------------------*/
     94 
     95     /*----------------------------------------------------------------------------
     96     ; STRUCTURES TYPEDEF'S
     97     ----------------------------------------------------------------------------*/
     98     /* state variable */
     99     typedef struct
    100     {
    101 
    102         Word16 bckr_est[COMPLEN];    /* background noise estimate                */
    103         Word16 ave_level[COMPLEN];   /* averaged input components for stationary */
    104         /*    estimation                            */
    105         Word16 old_level[COMPLEN];   /* input levels of the previous frame       */
    106         Word16 sub_level[COMPLEN];   /* input levels calculated at the end of
    107                                       a frame (lookahead)                   */
    108         Word16 a_data5[3][2];        /* memory for the filter bank               */
    109         Word16 a_data3[5];           /* memory for the filter bank               */
    110 
    111         Word16 burst_count;          /* counts length of a speech burst          */
    112         Word16 hang_count;           /* hangover counter                         */
    113         Word16 stat_count;           /* stationary counter                       */
    114 
    115         /* Note that each of the following three variables (vadreg, pitch and tone)
    116            holds 15 flags. Each flag reserves 1 bit of the variable. The newest
    117            flag is in the bit 15 (assuming that LSB is bit 1 and MSB is bit 16). */
    118         Word16 vadreg;               /* flags for intermediate VAD decisions     */
    119         Word16 pitch;                /* flags for pitch detection                */
    120         Word16 tone;                 /* flags for tone detection                 */
    121         Word16 complex_high;         /* flags for complex detection              */
    122         Word16 complex_low;          /* flags for complex detection              */
    123 
    124         Word16 oldlag_count, oldlag; /* variables for pitch detection            */
    125 
    126         Word16 complex_hang_count;   /* complex hangover counter, used by VAD    */
    127         Word16 complex_hang_timer;   /* hangover initiator, used by CAD          */
    128 
    129         Word16 best_corr_hp;         /* FIP filtered value Q15                   */
    130 
    131         Word16 speech_vad_decision;  /* final decision                           */
    132         Word16 complex_warning;      /* complex background warning               */
    133 
    134         Word16 sp_burst_count;       /* counts length of a speech burst incl     */
    135         Word16 corr_hp_fast;         /* filtered value                           */
    136     } vadState1;
    137     /*----------------------------------------------------------------------------
    138     ; GLOBAL FUNCTION DEFINITIONS
    139     ; Function Prototype declaration
    140     ----------------------------------------------------------------------------*/
    141     Word16 vad1_init(vadState1 **st);
    142     /* initialize one instance of the pre processing state.
    143        Stores pointer to filter status struct in *st. This pointer has to
    144        be passed to vad in each call.
    145        returns 0 on success
    146      */
    147 
    148     Word16 vad1_reset(vadState1 *st);
    149     /* reset of pre processing state (i.e. set state memory to zero)
    150        returns 0 on success
    151      */
    152 
    153     void vad1_exit(vadState1 **st);
    154     /* de-initialize pre processing state (i.e. free status struct)
    155        stores NULL in *st
    156      */
    157 
    158     void vad_complex_detection_update(vadState1 *st,       /* i/o : State struct     */
    159                                       Word16 best_corr_hp /* i   : best Corr Q15    */
    160                                      );
    161 
    162     void vad_tone_detection(vadState1 *st,  /* i/o : State struct            */
    163                             Word32 t0,     /* i   : autocorrelation maxima  */
    164                             Word32 t1,     /* i   : energy                  */
    165                             Flag   *pOverflow
    166                            );
    167 
    168     void vad_tone_detection_update(
    169         vadState1 *st,             /* i/o : State struct              */
    170         Word16 one_lag_per_frame,  /* i   : 1 if one open-loop lag is
    171                                               calculated per each frame,
    172                                               otherwise 0                     */
    173         Flag *pOverflow
    174     );
    175 
    176     void vad_pitch_detection(vadState1 *st,   /* i/o : State struct                  */
    177                              Word16 lags[],  /* i   : speech encoder open loop lags */
    178                              Flag   *pOverflow
    179                             );
    180 
    181     Word16 vad1(vadState1 *st,   /* i/o : State struct                      */
    182                 Word16 in_buf[], /* i   : samples of the input frame
    183                                 inbuf[159] is the very last sample,
    184                                 incl lookahead                          */
    185                 Flag *pOverflow
    186                );
    187 
    188     /*----------------------------------------------------------------------------
    189     ; END
    190     ----------------------------------------------------------------------------*/
    191 #ifdef __cplusplus
    192 }
    193 #endif
    194 
    195 #endif /* _VAD1_H_ */
    196 
    197 
    198