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 __MIXER_H__
19 #define __MIXER_H__
20 
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif /* __cplusplus */
25 
26 
27 #include "LVM_Types.h"
28 
29 /**********************************************************************************
30    INSTANCE MEMORY TYPE DEFINITION
31 ***********************************************************************************/
32 
33 typedef struct
34 {
35     LVM_INT32   Alpha;                    /* Time constant. Set by calling application.  Can be changed at any time */
36     LVM_INT32   Target;                   /* Target value.  Set by calling application.  Can be changed at any time */
37     LVM_INT32   Current;                  /* Current value.  Set by the mixer function. */
38     LVM_INT16   CallbackSet;              /* Boolean.  Should be set by calling application each time the target value is updated */
39     LVM_INT16   CallbackParam;            /* Parameter that will be used in the calback function */
40     void        *pCallbackHandle;         /* Pointer to the instance of the callback function */
41     void        *pGeneralPurpose;         /* Pointer for general purpose usage */
42     LVM_Callback pCallBack;               /* Pointer to the callback function */
43 } Mix_1St_Cll_t;
44 
45 typedef struct
46 {
47     LVM_INT32   Alpha1;
48     LVM_INT32   Target1;
49     LVM_INT32   Current1;
50     LVM_INT16   CallbackSet1;
51     LVM_INT16   CallbackParam1;
52     void        *pCallbackHandle1;
53     void        *pGeneralPurpose1;
54     LVM_Callback pCallBack1;
55 
56     LVM_INT32   Alpha2;                   /* Warning the address of this location is passed as a pointer to Mix_1St_Cll_t in some functions */
57     LVM_INT32   Target2;
58     LVM_INT32   Current2;
59     LVM_INT16   CallbackSet2;
60     LVM_INT16   CallbackParam2;
61     void        *pCallbackHandle2;
62     void        *pGeneralPurpose2;
63     LVM_Callback pCallBack2;
64 
65 } Mix_2St_Cll_t;
66 
67 
68 /*** General functions ************************************************************/
69 
70 LVM_UINT32 LVM_Mixer_TimeConstant(LVM_UINT32   tc,
71                                   LVM_UINT16   Fs,
72                                   LVM_UINT16   NumChannels);
73 
74 
75 void MixSoft_1St_D32C31_WRA(    Mix_1St_Cll_t       *pInstance,
76                                 const LVM_INT32     *src,
77                                       LVM_INT32     *dst,
78                                       LVM_INT16     n);
79 
80 void MixSoft_2St_D32C31_SAT(    Mix_2St_Cll_t       *pInstance,
81                                 const LVM_INT32     *src1,
82                                 const LVM_INT32     *src2,
83                                       LVM_INT32     *dst,
84                                       LVM_INT16     n);
85 
86 void MixInSoft_D32C31_SAT(      Mix_1St_Cll_t       *pInstance,
87                                 const LVM_INT32     *src,
88                                       LVM_INT32     *dst,
89                                       LVM_INT16     n);
90 
91 /**********************************************************************************
92    FUNCTION PROTOTYPES (LOW LEVEL SUBFUNCTIONS)
93 ***********************************************************************************/
94 
95 void Core_MixSoft_1St_D32C31_WRA(   Mix_1St_Cll_t       *pInstance,
96                                     const LVM_INT32     *src,
97                                           LVM_INT32     *dst,
98                                           LVM_INT16     n);
99 
100 void Core_MixHard_2St_D32C31_SAT(   Mix_2St_Cll_t       *pInstance,
101                                     const LVM_INT32     *src1,
102                                     const LVM_INT32     *src2,
103                                           LVM_INT32     *dst,
104                                           LVM_INT16     n);
105 
106 void Core_MixInSoft_D32C31_SAT(     Mix_1St_Cll_t       *pInstance,
107                                     const LVM_INT32     *src,
108                                           LVM_INT32     *dst,
109                                           LVM_INT16     n);
110 #ifdef __cplusplus
111 }
112 #endif /* __cplusplus */
113 
114 
115 /**********************************************************************************/
116 
117 #endif /* __MIXER_H__ */
118 
119 
120 
121 
122 
123 
124 
125 
126 
127 
128