summaryrefslogtreecommitdiffstats
path: root/media/libeffects/lvm/lib/Common/src/LVC_Mixer.h
blob: 3b32e213fdc5c7f370a19a67a2b0339b05d21e33 (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
136
137
138
139
140
141
142
143
144
/*
 * 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 __LVC_MIXER_H__
#define __LVC_MIXER_H__


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


#include "LVM_Types.h"

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

/* LVMixer3_st structure stores Instance parameters for one audio stream */
typedef struct
{
    LVM_INT32       PrivateParams[4];   /* Private Instance params for Audio Stream */
    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 */
} LVMixer3_st;

typedef struct
{
    LVMixer3_st     MixerStream[1];    /* Instance Params for one Audio Stream */
} LVMixer3_1St_st;

typedef struct
{
    LVMixer3_st     MixerStream[2];    /* Instance Params for two Audio Streams */
} LVMixer3_2St_st;

typedef struct
{
    LVMixer3_st     MixerStream[3];    /* Instance Params for three Audio Streams */
} LVMixer3_3St_st;

/**********************************************************************************
   FUNCTION PROTOTYPES (HIGH LEVEL FUNCTIONS)
***********************************************************************************/

/* Function names should be unique within first 16 characters  */
#define    LVMixer3_MixSoft_1St_D16C31_SAT   LVMixer3_1St_D16C31_SAT_MixSoft
#define    LVMixer3_MixInSoft_D16C31_SAT     LVMixer3_D16C31_SAT_MixInSoft
#define    LVMixer3_MixSoft_2St_D16C31_SAT   LVMixer3_2St_D16C31_SAT_MixSoft
#define    LVMixer3_MixSoft_3St_D16C31_SAT   LVMixer3_3St_D16C31_SAT_MixSoft


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

/**********************************************************************************/
/* This time constant calculation function assumes the mixer will be called with  */
/* large block sizes. When the block size is small, especially if less than 4,    */
/* then the calculation will give an incorrect value for alpha, see the mixer     */
/* documentation for further details.                                             */
/* ********************************************************************************/
void LVC_Mixer_SetTarget( LVMixer3_st *pStream,
                                LVM_INT32           TargetGain);

LVM_INT32 LVC_Mixer_GetTarget( LVMixer3_st *pStream);

LVM_INT32 LVC_Mixer_GetCurrent( LVMixer3_st *pStream);

void LVC_Mixer_Init( LVMixer3_st *pStream,
                                LVM_INT32           TargetGain,
                                LVM_INT32           CurrentGain);

void LVC_Mixer_SetTimeConstant( LVMixer3_st *pStream,
                                LVM_INT32           Tc_millisec,
                                LVM_Fs_en           Fs,
                                LVM_INT16           NumChannels);

void LVC_Mixer_VarSlope_SetTimeConstant( LVMixer3_st *pStream,
                                        LVM_INT32           Tc_millisec,
                                        LVM_Fs_en           Fs,
                                        LVM_INT16           NumChannels);

/*** 16 bit functions *************************************************************/

void LVC_MixSoft_1St_D16C31_SAT( LVMixer3_1St_st *pInstance,
                                  const LVM_INT16           *src,
                                        LVM_INT16           *dst,
                                        LVM_INT16           n);

void LVC_MixInSoft_D16C31_SAT( LVMixer3_1St_st *pInstance,
                                        LVM_INT16           *src,
                                        LVM_INT16           *dst,
                                        LVM_INT16           n);

void LVC_MixSoft_2St_D16C31_SAT( LVMixer3_2St_st *pInstance,
                                const LVM_INT16             *src1,
                                      LVM_INT16             *src2,
                                      LVM_INT16             *dst,  /* dst cannot be equal to src2 */
                                      LVM_INT16             n);

/**********************************************************************************/
/* For applying different gains to Left and right chennals                        */
/* MixerStream[0] applies to Left channel                                         */
/* MixerStream[1] applies to Right channel                                        */
/* Gain values should not be more that 1.0                                        */
/**********************************************************************************/
void LVC_MixSoft_1St_2i_D16C31_SAT( LVMixer3_2St_st         *pInstance,
                                const   LVM_INT16           *src,
                                        LVM_INT16           *dst,   /* dst can be equal to src */
                                        LVM_INT16           n);     /* Number of stereo samples */


#ifdef __cplusplus
}
#endif /* __cplusplus */

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

#endif //#ifndef __LVC_MIXER_H__