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