LVC_Mixer.h revision d918324d44aa48b3b064ea9b87d0c520c38f15a9
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 __LVC_MIXER_H__
19#define __LVC_MIXER_H__
20
21
22#ifdef __cplusplus
23extern "C" {
24#endif /* __cplusplus */
25
26
27#include "LVM_Types.h"
28
29/**********************************************************************************
30   INSTANCE MEMORY TYPE DEFINITION
31***********************************************************************************/
32
33/* LVMixer3_st structure stores Instance parameters for one audio stream */
34typedef struct
35{
36    LVM_INT32       PrivateParams[4];   /* Private Instance params for Audio Stream */
37    LVM_INT16       CallbackSet;        /* Boolean.  Should be set by calling application each time the target value is updated */
38    LVM_INT16       CallbackParam;      /* Parameter that will be used in the calback function */
39    void            *pCallbackHandle;   /* Pointer to the instance of the callback function */
40    void            *pGeneralPurpose;   /* Pointer for general purpose usage */
41    LVM_Callback    pCallBack;          /* Pointer to the callback function */
42} LVMixer3_st;
43
44typedef struct
45{
46    LVMixer3_st     MixerStream[1];    /* Instance Params for one Audio Stream */
47} LVMixer3_1St_st;
48
49typedef struct
50{
51    LVMixer3_st     MixerStream[2];    /* Instance Params for two Audio Streams */
52} LVMixer3_2St_st;
53
54typedef struct
55{
56    LVMixer3_st     MixerStream[3];    /* Instance Params for three Audio Streams */
57} LVMixer3_3St_st;
58
59/**********************************************************************************
60   FUNCTION PROTOTYPES (HIGH LEVEL FUNCTIONS)
61***********************************************************************************/
62
63/* Function names should be unique within first 16 characters  */
64#define    LVMixer3_MixSoft_1St_D16C31_SAT   LVMixer3_1St_D16C31_SAT_MixSoft
65#define    LVMixer3_MixInSoft_D16C31_SAT     LVMixer3_D16C31_SAT_MixInSoft
66#define    LVMixer3_MixSoft_2St_D16C31_SAT   LVMixer3_2St_D16C31_SAT_MixSoft
67#define    LVMixer3_MixSoft_3St_D16C31_SAT   LVMixer3_3St_D16C31_SAT_MixSoft
68
69
70/*** General functions ************************************************************/
71
72/**********************************************************************************/
73/* This time constant calculation function assumes the mixer will be called with  */
74/* large block sizes. When the block size is small, especially if less than 4,    */
75/* then the calculation will give an incorrect value for alpha, see the mixer     */
76/* documentation for further details.                                             */
77/* ********************************************************************************/
78void LVC_Mixer_SetTarget( LVMixer3_st *pStream,
79                                LVM_INT32           TargetGain);
80
81LVM_INT32 LVC_Mixer_GetTarget( LVMixer3_st *pStream);
82
83LVM_INT32 LVC_Mixer_GetCurrent( LVMixer3_st *pStream);
84
85void LVC_Mixer_Init( LVMixer3_st *pStream,
86                                LVM_INT32           TargetGain,
87                                LVM_INT32           CurrentGain);
88
89void LVC_Mixer_SetTimeConstant( LVMixer3_st *pStream,
90                                LVM_INT32           Tc_millisec,
91                                LVM_Fs_en           Fs,
92                                LVM_INT16           NumChannels);
93
94void LVC_Mixer_VarSlope_SetTimeConstant( LVMixer3_st *pStream,
95                                        LVM_INT32           Tc_millisec,
96                                        LVM_Fs_en           Fs,
97                                        LVM_INT16           NumChannels);
98
99/*** 16 bit functions *************************************************************/
100
101void LVC_MixSoft_1St_D16C31_SAT( LVMixer3_1St_st *pInstance,
102                                  const LVM_INT16           *src,
103                                        LVM_INT16           *dst,
104                                        LVM_INT16           n);
105
106void LVC_MixInSoft_D16C31_SAT( LVMixer3_1St_st *pInstance,
107                                        LVM_INT16           *src,
108                                        LVM_INT16           *dst,
109                                        LVM_INT16           n);
110
111void LVC_MixSoft_2St_D16C31_SAT( LVMixer3_2St_st *pInstance,
112                                const LVM_INT16             *src1,
113                                      LVM_INT16             *src2,
114                                      LVM_INT16             *dst,  /* dst cannot be equal to src2 */
115                                      LVM_INT16             n);
116
117/**********************************************************************************/
118/* For applying different gains to Left and right chennals                        */
119/* MixerStream[0] applies to Left channel                                         */
120/* MixerStream[1] applies to Right channel                                        */
121/* Gain values should not be more that 1.0                                        */
122/**********************************************************************************/
123void LVC_MixSoft_1St_2i_D16C31_SAT( LVMixer3_2St_st         *pInstance,
124                                const   LVM_INT16           *src,
125                                        LVM_INT16           *dst,   /* dst can be equal to src */
126                                        LVM_INT16           n);     /* Number of stereo samples */
127
128
129#ifdef __cplusplus
130}
131#endif /* __cplusplus */
132
133/**********************************************************************************/
134
135#endif //#ifndef __LVC_MIXER_H__
136
137