summaryrefslogtreecommitdiffstats
path: root/media/libeffects/lvm/lib/Common/lib/Mixer.h
blob: d7419807f5704224ba8d9f70c392ba55bb29fed4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/*
 * Copyright (C) 2004-2010 NXP Software
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**********************************************************************************

     $Author: beq07716 $
     $Revision: 1000 $
     $Date: 2010-06-28 13:08:20 +0200 (Mon, 28 Jun 2010) $

***********************************************************************************/

#ifndef __MIXER_H__
#define __MIXER_H__


#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */


#include "LVM_Types.h"

/**********************************************************************************
   INSTANCE MEMORY TYPE DEFINITION
***********************************************************************************/

typedef struct
{
    LVM_INT32   Alpha;                    /* Time constant. Set by calling application.  Can be changed at any time */
    LVM_INT32   Target;                   /* Target value.  Set by calling application.  Can be changed at any time */
    LVM_INT32   Current;                  /* Current value.  Set by the mixer function. */
    LVM_INT16   CallbackSet;              /* Boolean.  Should be set by calling application each time the target value is updated */
    LVM_INT16   CallbackParam;            /* Parameter that will be used in the calback function */
    void        *pCallbackHandle;         /* Pointer to the instance of the callback function */
    void        *pGeneralPurpose;         /* Pointer for general purpose usage */
    LVM_Callback pCallBack;               /* Pointer to the callback function */
} Mix_1St_Cll_t;

typedef struct
{
    LVM_INT32   Alpha1;
    LVM_INT32   Target1;
    LVM_INT32   Current1;
    LVM_INT16   CallbackSet1;
    LVM_INT16   CallbackParam1;
    void        *pCallbackHandle1;
    void        *pGeneralPurpose1;
    LVM_Callback pCallBack1;

    LVM_INT32   Alpha2;                   /* Warning the address of this location is passed as a pointer to Mix_1St_Cll_t in some functions */
    LVM_INT32   Target2;
    LVM_INT32   Current2;
    LVM_INT16   CallbackSet2;
    LVM_INT16   CallbackParam2;
    void        *pCallbackHandle2;
    void        *pGeneralPurpose2;
    LVM_Callback pCallBack2;

} Mix_2St_Cll_t;


/*** General functions ************************************************************/

LVM_UINT32 LVM_Mixer_TimeConstant(LVM_UINT32   tc,
                                  LVM_UINT16   Fs,
                                  LVM_UINT16   NumChannels);


void MixSoft_1St_D32C31_WRA(    Mix_1St_Cll_t       *pInstance,
                                const LVM_INT32     *src,
                                      LVM_INT32     *dst,
                                      LVM_INT16     n);

void MixSoft_2St_D32C31_SAT(    Mix_2St_Cll_t       *pInstance,
                                const LVM_INT32     *src1,
                                const LVM_INT32     *src2,
                                      LVM_INT32     *dst,
                                      LVM_INT16     n);

void MixInSoft_D32C31_SAT(      Mix_1St_Cll_t       *pInstance,
                                const LVM_INT32     *src,
                                      LVM_INT32     *dst,
                                      LVM_INT16     n);

/**********************************************************************************
   FUNCTION PROTOTYPES (LOW LEVEL SUBFUNCTIONS)
***********************************************************************************/

void Core_MixSoft_1St_D32C31_WRA(   Mix_1St_Cll_t       *pInstance,
                                    const LVM_INT32     *src,
                                          LVM_INT32     *dst,
                                          LVM_INT16     n);

void Core_MixHard_2St_D32C31_SAT(   Mix_2St_Cll_t       *pInstance,
                                    const LVM_INT32     *src1,
                                    const LVM_INT32     *src2,
                                          LVM_INT32     *dst,
                                          LVM_INT16     n);

void Core_MixInSoft_D32C31_SAT(     Mix_1St_Cll_t       *pInstance,
                                    const LVM_INT32     *src,
                                          LVM_INT32     *dst,
                                          LVM_INT16     n);
#ifdef __cplusplus
}
#endif /* __cplusplus */


/**********************************************************************************/

#endif /* __MIXER_H__ */