Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (C) 2004-2010 NXP Software
      3  * Copyright (C) 2010 The Android Open Source Project
      4  *
      5  * Licensed under the Apache License, Version 2.0 (the "License");
      6  * you may not use this file except in compliance with the License.
      7  * You may obtain a copy of the License at
      8  *
      9  *      http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  * Unless required by applicable law or agreed to in writing, software
     12  * distributed under the License is distributed on an "AS IS" BASIS,
     13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  * See the License for the specific language governing permissions and
     15  * limitations under the License.
     16  */
     17 
     18 #ifndef _LVPSA_QPD_H_
     19 #define _LVPSA_QPD_H_
     20 
     21 #include "LVM_Types.h"
     22 
     23 
     24 #ifdef __cplusplus
     25 extern "C" {
     26 #endif /* __cplusplus */
     27 
     28 typedef struct
     29 {
     30   LVM_INT32                            *pDelay;        /* pointer to the delayed samples (data of 32 bits)   */
     31   LVM_INT32                            Coefs[2];       /* pointer to the filter coefficients */
     32 }QPD_State_t, *pQPD_State_t;
     33 
     34 #ifdef BUILD_FLOAT
     35 typedef struct
     36 {
     37     /* pointer to the delayed samples (data of 32 bits)   */
     38     LVM_FLOAT                            *pDelay;
     39     LVM_FLOAT                            Coefs[2];       /* pointer to the filter coefficients */
     40 }QPD_FLOAT_State_t, *pQPD_FLOAT_State_t;
     41 #endif
     42 
     43 typedef struct
     44 {
     45     LVM_INT32 KP;    /*should store a0*/
     46     LVM_INT32 KM;    /*should store b2*/
     47 
     48 } QPD_C32_Coefs, *PQPD_C32_Coefs;
     49 
     50 #ifdef BUILD_FLOAT
     51 typedef struct
     52 {
     53     LVM_FLOAT KP;    /*should store a0*/
     54     LVM_FLOAT KM;    /*should store b2*/
     55 
     56 } QPD_FLOAT_Coefs, *PQPD_FLOAT_Coefs;
     57 #endif
     58 
     59 
     60 typedef struct
     61 {
     62     LVM_INT32 Storage[1];
     63 
     64 } QPD_Taps_t, *pQPD_Taps_t;
     65 
     66 #ifdef BUILD_FLOAT
     67 typedef struct
     68 {
     69     LVM_FLOAT Storage[1];
     70 
     71 } QPD_FLOAT_Taps_t, *pQPD_FLOAT_Taps_t;
     72 
     73 #endif
     74 /************************************************************************************/
     75 /*                                                                                  */
     76 /* FUNCTION:            LVPSA_QPD_Process                                           */
     77 /*                                                                                  */
     78 /* DESCRIPTION:                                                                     */
     79 /*  Apply downsampling, post gain, quasi peak filtering and write the levels values */
     80 /*  in the buffer every 20 ms.                                                      */
     81 /*                                                                                  */
     82 /* PARAMETERS:                                                                      */
     83 /*                                                                                  */
     84 /* RETURNS:             void                                                        */
     85 /*                                                                                  */
     86 /************************************************************************************/
     87 void LVPSA_QPD_Process (            void                               *hInstance,
     88                                     LVM_INT16                          *pInSamps,
     89                                     LVM_INT16                           numSamples,
     90                                     LVM_INT16                           BandIndex);
     91 
     92 #ifdef BUILD_FLOAT
     93 void LVPSA_QPD_Process_Float (      void                               *hInstance,
     94                                     LVM_FLOAT                          *pInSamps,
     95                                     LVM_INT16                           numSamples,
     96                                     LVM_INT16                           BandIndex);
     97 #endif
     98 /************************************************************************************/
     99 /*                                                                                  */
    100 /* FUNCTION:            LVPSA_QPD_Init                                              */
    101 /*                                                                                  */
    102 /* DESCRIPTION:                                                                     */
    103 /*  Initialize a quasi peak filter instance.                                        */
    104 /*                                                                                  */
    105 /* PARAMETERS:                                                                      */
    106 /*  pInstance           Pointer to the instance                                     */
    107 /*   pTaps               Pointer to the filter's taps                               */
    108 /*   pCoef               Pointer to the filter's coefficients                       */
    109 /*                                                                                  */
    110 /* RETURNS:     void                                                                */
    111 /*                                                                                  */
    112 /************************************************************************************/
    113 void LVPSA_QPD_Init (   QPD_State_t       *pInstance,
    114                         QPD_Taps_t        *pTaps,
    115                         QPD_C32_Coefs     *pCoef     );
    116 #ifdef BUILD_FLOAT
    117 
    118 void LVPSA_QPD_Init_Float (   QPD_FLOAT_State_t       *pInstance,
    119                               QPD_FLOAT_Taps_t        *pTaps,
    120                               QPD_FLOAT_Coefs         *pCoef     );
    121 #endif
    122 #ifdef __cplusplus
    123 }
    124 #endif /* __cplusplus */
    125 
    126 #endif
    127 
    128