12c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 22c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Copyright (C) 2004-2010 NXP Software 32c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Copyright (C) 2010 The Android Open Source Project 42c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * 52c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Licensed under the Apache License, Version 2.0 (the "License"); 62c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * you may not use this file except in compliance with the License. 72c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * You may obtain a copy of the License at 82c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * 92c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * http://www.apache.org/licenses/LICENSE-2.0 102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * 112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Unless required by applicable law or agreed to in writing, software 122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * distributed under the License is distributed on an "AS IS" BASIS, 132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * See the License for the specific language governing permissions and 152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * limitations under the License. 162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#ifndef __LVC_MIXER_H__ 192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define __LVC_MIXER_H__ 202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#ifdef __cplusplus 232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentextern "C" { 242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif /* __cplusplus */ 252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVM_Types.h" 282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/********************************************************************************** 302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent INSTANCE MEMORY TYPE DEFINITION 312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent***********************************************************************************/ 322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVMixer3_st structure stores Instance parameters for one audio stream */ 342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct 352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 PrivateParams[4]; /* Private Instance params for Audio Stream */ 372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 CallbackSet; /* Boolean. Should be set by calling application each time the target value is updated */ 382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 CallbackParam; /* Parameter that will be used in the calback function */ 392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent void *pCallbackHandle; /* Pointer to the instance of the callback function */ 402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent void *pGeneralPurpose; /* Pointer for general purpose usage */ 412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Callback pCallBack; /* Pointer to the callback function */ 422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVMixer3_st; 432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct 452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVMixer3_st MixerStream[1]; /* Instance Params for one Audio Stream */ 472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVMixer3_1St_st; 482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct 502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVMixer3_st MixerStream[2]; /* Instance Params for two Audio Streams */ 522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVMixer3_2St_st; 532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct 552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVMixer3_st MixerStream[3]; /* Instance Params for three Audio Streams */ 572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVMixer3_3St_st; 582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/********************************************************************************** 602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent FUNCTION PROTOTYPES (HIGH LEVEL FUNCTIONS) 612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent***********************************************************************************/ 622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Function names should be unique within first 16 characters */ 642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVMixer3_MixSoft_1St_D16C31_SAT LVMixer3_1St_D16C31_SAT_MixSoft 652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVMixer3_MixInSoft_D16C31_SAT LVMixer3_D16C31_SAT_MixInSoft 662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVMixer3_MixSoft_2St_D16C31_SAT LVMixer3_2St_D16C31_SAT_MixSoft 672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVMixer3_MixSoft_3St_D16C31_SAT LVMixer3_3St_D16C31_SAT_MixSoft 682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*** General functions ************************************************************/ 712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/**********************************************************************************/ 732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* This time constant calculation function assumes the mixer will be called with */ 742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* large block sizes. When the block size is small, especially if less than 4, */ 752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* then the calculation will give an incorrect value for alpha, see the mixer */ 762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* documentation for further details. */ 772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* ********************************************************************************/ 782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LVC_Mixer_SetTarget( LVMixer3_st *pStream, 792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 TargetGain); 802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 812c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVM_INT32 LVC_Mixer_GetTarget( LVMixer3_st *pStream); 822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 832c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVM_INT32 LVC_Mixer_GetCurrent( LVMixer3_st *pStream); 842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LVC_Mixer_Init( LVMixer3_st *pStream, 862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 TargetGain, 872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 CurrentGain); 882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LVC_Mixer_SetTimeConstant( LVMixer3_st *pStream, 902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 Tc_millisec, 912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Fs_en Fs, 922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 NumChannels); 932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LVC_Mixer_VarSlope_SetTimeConstant( LVMixer3_st *pStream, 952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 Tc_millisec, 962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Fs_en Fs, 972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 NumChannels); 982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*** 16 bit functions *************************************************************/ 1002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LVC_MixSoft_1St_D16C31_SAT( LVMixer3_1St_st *pInstance, 1022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent const LVM_INT16 *src, 1032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 *dst, 1042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 n); 1052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LVC_MixInSoft_D16C31_SAT( LVMixer3_1St_st *pInstance, 1072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 *src, 1082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 *dst, 1092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 n); 1102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LVC_MixSoft_2St_D16C31_SAT( LVMixer3_2St_st *pInstance, 1122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent const LVM_INT16 *src1, 1132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 *src2, 1142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 *dst, /* dst cannot be equal to src2 */ 1152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 n); 1162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/**********************************************************************************/ 1182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* For applying different gains to Left and right chennals */ 1192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* MixerStream[0] applies to Left channel */ 1202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* MixerStream[1] applies to Right channel */ 1212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Gain values should not be more that 1.0 */ 1222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/**********************************************************************************/ 1232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LVC_MixSoft_1St_2i_D16C31_SAT( LVMixer3_2St_st *pInstance, 1242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent const LVM_INT16 *src, 1252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 *dst, /* dst can be equal to src */ 1262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 n); /* Number of stereo samples */ 1272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#ifdef __cplusplus 1302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 1312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif /* __cplusplus */ 1322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/**********************************************************************************/ 1342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif //#ifndef __LVC_MIXER_H__ 1362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 137