Home | History | Annotate | Download | only in src
      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
     23 extern "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 */
     34 typedef 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 
     44 typedef struct
     45 {
     46     LVMixer3_st     MixerStream[1];    /* Instance Params for one Audio Stream */
     47 } LVMixer3_1St_st;
     48 
     49 typedef struct
     50 {
     51     LVMixer3_st     MixerStream[2];    /* Instance Params for two Audio Streams */
     52 } LVMixer3_2St_st;
     53 
     54 typedef 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 /* ********************************************************************************/
     78 void LVC_Mixer_SetTarget( LVMixer3_st *pStream,
     79                                 LVM_INT32           TargetGain);
     80 
     81 LVM_INT32 LVC_Mixer_GetTarget( LVMixer3_st *pStream);
     82 
     83 LVM_INT32 LVC_Mixer_GetCurrent( LVMixer3_st *pStream);
     84 
     85 void LVC_Mixer_Init( LVMixer3_st *pStream,
     86                                 LVM_INT32           TargetGain,
     87                                 LVM_INT32           CurrentGain);
     88 
     89 void LVC_Mixer_SetTimeConstant( LVMixer3_st *pStream,
     90                                 LVM_INT32           Tc_millisec,
     91                                 LVM_Fs_en           Fs,
     92                                 LVM_INT16           NumChannels);
     93 
     94 void 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 
    101 void LVC_MixSoft_1St_D16C31_SAT( LVMixer3_1St_st *pInstance,
    102                                   const LVM_INT16           *src,
    103                                         LVM_INT16           *dst,
    104                                         LVM_INT16           n);
    105 
    106 void LVC_MixInSoft_D16C31_SAT( LVMixer3_1St_st *pInstance,
    107                                         LVM_INT16           *src,
    108                                         LVM_INT16           *dst,
    109                                         LVM_INT16           n);
    110 
    111 void 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 /**********************************************************************************/
    123 void 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