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