137 lines
6.0 KiB
C
137 lines
6.0 KiB
C
/*
|
|
* 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.
|
|
*/
|
|
|
|
#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__
|
|
|