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/************************************************************************************/ 192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Header file for the private layer interface of concert sound. */ 212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* This files includes all definitions, types, structures and function */ 232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* prototypes required by the execution layer. */ 242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#ifndef __LVCS_PRIVATE_H__ 282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define __LVCS_PRIVATE_H__ 292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#ifdef __cplusplus 312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentextern "C" { 322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif /* __cplusplus */ 332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Includes */ 382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVCS.h" /* Calling or Application layer definitions */ 422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVCS_StereoEnhancer.h" /* Stereo enhancer module definitions */ 432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVCS_ReverbGenerator.h" /* Reverberation module definitions */ 442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVCS_Equaliser.h" /* Equaliser module definitions */ 452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVCS_BypassMix.h" /* Bypass Mixer module definitions */ 462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVM_Timer.h" 472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Defines */ 522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Configuration switch controls */ 562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_STEREOENHANCESWITCH 0x0001 /* Stereo enhancement enable control */ 572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_REVERBSWITCH 0x0002 /* Reverberation enable control */ 582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_EQUALISERSWITCH 0x0004 /* Equaliser enable control */ 592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_BYPASSMIXSWITCH 0x0008 /* Bypass mixer enable control */ 60d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent#define LVCS_COMPGAINFRAME 64 /* Compressor gain update interval */ 612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Memory */ 632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_SCRATCHBUFFERS 6 /* Number of buffers required for inplace processing */ 642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* General */ 662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_INVALID 0xFFFF /* Invalid init parameter */ 672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_BYPASS_MIXER_TC 100 /* Bypass mixer time */ 682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Access to external coefficients table */ 702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_NR_OF_FS 9 712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_NR_OF_CHAN_CFG 2 722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Types */ 772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef LVM_UINT16 LVCS_Configuration_t; /* Internal algorithm configuration */ 812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef enum 832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_HEADPHONE = 0, 852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_DEVICE_MAX = LVM_MAXENUM 862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVCS_OutputDevice_en; 872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Structures */ 922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Volume correction structure */ 962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct 972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 CompFull; /* Post CS compression 100% effect */ 992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 CompMin; /* Post CS compression 0% effect */ 1002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 GainFull; /* CS gain correct 100% effect */ 1012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 GainMin; /* CS gain correct 0% effect */ 1022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVCS_VolCorrect_t; 1032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Instance structure */ 1052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct 1062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 1072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Public parameters */ 1082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_MemTab_t MemoryTable; /* Instance memory allocation table */ 1092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Params_t Params; /* Instance parameters */ 1102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Capabilities_t Capabilities; /* Initialisation capabilities */ 1112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Private parameters */ 1132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_OutputDevice_en OutputDevice; /* Selected output device type */ 1142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_VolCorrect_t VolCorrect; /* Volume correction settings */ 1152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 TransitionGain; /* Transition gain */ 116d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent LVM_INT16 CompressGain; /* Last used compressor gain*/ 1172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Sub-block configurations */ 1192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_StereoEnhancer_t StereoEnhancer; /* Stereo enhancer configuration */ 1202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_ReverbGenerator_t Reverberation; /* Reverberation configuration */ 1212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Equaliser_t Equaliser; /* Equaliser configuration */ 1222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_BypassMix_t BypassMix; /* Bypass mixer configuration */ 1232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Bypass variable */ 12509d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVM_INT16 MSTarget0; /* Mixer state control variable for smooth transtion */ 12609d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVM_INT16 MSTarget1; /* Mixer state control variable for smooth transtion */ 1272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 bInOperatingModeTransition; /* Operating mode transition flag */ 1282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 bTimerDone; /* Timer completion flag */ 1292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Timer_Params_t TimerParams; /* Timer parameters */ 1302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Timer_Instance_t TimerInstance; /* Timer instance */ 1312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVCS_Instance_t; 1332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Coefficient Structure */ 1352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct 1362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 1372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Biquad_Instance_t EqualiserBiquadInstance; 1382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Biquad_Instance_t ReverbBiquadInstance; 1392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Biquad_Instance_t SEBiquadInstanceMid; 1402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Biquad_Instance_t SEBiquadInstanceSide; 1412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVCS_Coefficient_t; 1432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Data Structure */ 1452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct 1462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 1472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Biquad_2I_Order2_Taps_t EqualiserBiquadTaps; 1482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Biquad_2I_Order2_Taps_t ReverbBiquadTaps; 1492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Biquad_1I_Order1_Taps_t SEBiquadTapsMid; 1502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Biquad_1I_Order2_Taps_t SEBiquadTapsSide; 1512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVCS_Data_t; 1532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LVCS_TimerCallBack ( void* hInstance, 1562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent void* pCallBackParams, 1572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 CallbackParam); 1582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#ifdef __cplusplus 1612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 1622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif /* __cplusplus */ 1632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif /* PRIVATE_H */ 1652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 167