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/************************************************************************************/ 19/* */ 20/* Header file for the private layer interface of concert sound. */ 21/* */ 22/* This files includes all definitions, types, structures and function */ 23/* prototypes required by the execution layer. */ 24/* */ 25/************************************************************************************/ 26 27#ifndef __LVCS_PRIVATE_H__ 28#define __LVCS_PRIVATE_H__ 29 30#ifdef __cplusplus 31extern "C" { 32#endif /* __cplusplus */ 33 34 35/************************************************************************************/ 36/* */ 37/* Includes */ 38/* */ 39/************************************************************************************/ 40 41#include "LVCS.h" /* Calling or Application layer definitions */ 42#include "LVCS_StereoEnhancer.h" /* Stereo enhancer module definitions */ 43#include "LVCS_ReverbGenerator.h" /* Reverberation module definitions */ 44#include "LVCS_Equaliser.h" /* Equaliser module definitions */ 45#include "LVCS_BypassMix.h" /* Bypass Mixer module definitions */ 46#include "LVM_Timer.h" 47 48 49/************************************************************************************/ 50/* */ 51/* Defines */ 52/* */ 53/************************************************************************************/ 54 55/* Configuration switch controls */ 56#define LVCS_STEREOENHANCESWITCH 0x0001 /* Stereo enhancement enable control */ 57#define LVCS_REVERBSWITCH 0x0002 /* Reverberation enable control */ 58#define LVCS_EQUALISERSWITCH 0x0004 /* Equaliser enable control */ 59#define LVCS_BYPASSMIXSWITCH 0x0008 /* Bypass mixer enable control */ 60#define LVCS_COMPGAINFRAME 64 /* Compressor gain update interval */ 61 62/* Memory */ 63#define LVCS_SCRATCHBUFFERS 6 /* Number of buffers required for inplace processing */ 64 65/* General */ 66#define LVCS_INVALID 0xFFFF /* Invalid init parameter */ 67#define LVCS_BYPASS_MIXER_TC 100 /* Bypass mixer time */ 68 69/* Access to external coefficients table */ 70#define LVCS_NR_OF_FS 9 71#define LVCS_NR_OF_CHAN_CFG 2 72 73 74/************************************************************************************/ 75/* */ 76/* Types */ 77/* */ 78/************************************************************************************/ 79 80typedef LVM_UINT16 LVCS_Configuration_t; /* Internal algorithm configuration */ 81 82typedef enum 83{ 84 LVCS_HEADPHONE = 0, 85 LVCS_DEVICE_MAX = LVM_MAXENUM 86} LVCS_OutputDevice_en; 87 88 89/************************************************************************************/ 90/* */ 91/* Structures */ 92/* */ 93/************************************************************************************/ 94 95/* Volume correction structure */ 96typedef struct 97{ 98 LVM_INT16 CompFull; /* Post CS compression 100% effect */ 99 LVM_INT16 CompMin; /* Post CS compression 0% effect */ 100 LVM_INT16 GainFull; /* CS gain correct 100% effect */ 101 LVM_INT16 GainMin; /* CS gain correct 0% effect */ 102} LVCS_VolCorrect_t; 103 104/* Instance structure */ 105typedef struct 106{ 107 /* Public parameters */ 108 LVCS_MemTab_t MemoryTable; /* Instance memory allocation table */ 109 LVCS_Params_t Params; /* Instance parameters */ 110 LVCS_Capabilities_t Capabilities; /* Initialisation capabilities */ 111 112 /* Private parameters */ 113 LVCS_OutputDevice_en OutputDevice; /* Selected output device type */ 114 LVCS_VolCorrect_t VolCorrect; /* Volume correction settings */ 115 LVM_INT16 TransitionGain; /* Transition gain */ 116 LVM_INT16 CompressGain; /* Last used compressor gain*/ 117 118 /* Sub-block configurations */ 119 LVCS_StereoEnhancer_t StereoEnhancer; /* Stereo enhancer configuration */ 120 LVCS_ReverbGenerator_t Reverberation; /* Reverberation configuration */ 121 LVCS_Equaliser_t Equaliser; /* Equaliser configuration */ 122 LVCS_BypassMix_t BypassMix; /* Bypass mixer configuration */ 123 124 /* Bypass variable */ 125 LVM_INT16 MSTarget0; /* Mixer state control variable for smooth transtion */ 126 LVM_INT16 MSTarget1; /* Mixer state control variable for smooth transtion */ 127 LVM_INT16 bInOperatingModeTransition; /* Operating mode transition flag */ 128 LVM_INT16 bTimerDone; /* Timer completion flag */ 129 LVM_Timer_Params_t TimerParams; /* Timer parameters */ 130 LVM_Timer_Instance_t TimerInstance; /* Timer instance */ 131 132} LVCS_Instance_t; 133 134/* Coefficient Structure */ 135typedef struct 136{ 137 Biquad_Instance_t EqualiserBiquadInstance; 138 Biquad_Instance_t ReverbBiquadInstance; 139 Biquad_Instance_t SEBiquadInstanceMid; 140 Biquad_Instance_t SEBiquadInstanceSide; 141 142} LVCS_Coefficient_t; 143 144/* Data Structure */ 145typedef struct 146{ 147 Biquad_2I_Order2_Taps_t EqualiserBiquadTaps; 148 Biquad_2I_Order2_Taps_t ReverbBiquadTaps; 149 Biquad_1I_Order1_Taps_t SEBiquadTapsMid; 150 Biquad_1I_Order2_Taps_t SEBiquadTapsSide; 151 152} LVCS_Data_t; 153 154 155void LVCS_TimerCallBack ( void* hInstance, 156 void* pCallBackParams, 157 LVM_INT32 CallbackParam); 158 159 160#ifdef __cplusplus 161} 162#endif /* __cplusplus */ 163 164#endif /* PRIVATE_H */ 165 166 167