blob: 2e85f772def9636f75bd90b1b5d4f8c797142fe8 [file] [log] [blame]
/*
* 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.
*/
/************************************************************************************/
/* */
/* Header file for the private layer interface of concert sound bundle */
/* */
/* This files includes all definitions, types, structures and function */
/* prototypes required by the execution layer. */
/* */
/************************************************************************************/
#ifndef __LVM_PRIVATE_H__
#define __LVM_PRIVATE_H__
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/************************************************************************************/
/* */
/* Includes */
/* */
/************************************************************************************/
#include "LVM.h" /* LifeVibes */
#include "LVM_Common.h" /* LifeVibes common */
#include "BIQUAD.h" /* Biquad library */
#include "LVC_Mixer.h" /* Mixer library */
#include "LVCS_Private.h" /* Concert Sound */
#include "LVDBE_Private.h" /* Dynamic Bass Enhancement */
#include "LVEQNB_Private.h" /* N-Band equaliser */
#include "LVPSA_Private.h" /* Parametric Spectrum Analyzer */
/************************************************************************************/
/* */
/* Defines */
/* */
/************************************************************************************/
/* General */
#define LVM_INVALID 0xFFFF /* Invalid init parameter */
/* Memory */
#define LVM_INSTANCE_ALIGN 4 /* 32-bit for structures */
#define LVM_FIRSTCALL 0 /* First call to the buffer */
#define LVM_MAXBLOCKCALL 1 /* Maximum block size calls to the buffer */
#define LVM_LASTCALL 2 /* Last call to the buffer */
#define LVM_FIRSTLASTCALL 3 /* Single call for small number of samples */
/* Block Size */
#define LVM_MIN_MAXBLOCKSIZE 16 /* Minimum MaxBlockSize Limit*/
#define LVM_MANAGED_MAX_MAXBLOCKSIZE 8191 /* Maximum MaxBlockSzie Limit for Managed Buffer Mode*/
#define LVM_UNMANAGED_MAX_MAXBLOCKSIZE 4096 /* Maximum MaxBlockSzie Limit for Unmanaged Buffer Mode */
#define MAX_INTERNAL_BLOCKSIZE 8128 /* Maximum multiple of 64 below 8191*/
#define MIN_INTERNAL_BLOCKSIZE 16 /* Minimum internal block size */
#define MIN_INTERNAL_BLOCKSHIFT 4 /* Minimum internal block size as a power of 2 */
#define MIN_INTERNAL_BLOCKMASK 0xFFF0 /* Minimum internal block size mask */
#define LVM_PSA_DYNAMICRANGE 60 /* Spectral Dynamic range: used for offseting output*/
#define LVM_PSA_BARHEIGHT 127 /* Spectral Bar Height*/
#define LVM_TE_MIN_EFFECTLEVEL 0 /*TE Minimum EffectLevel*/
#define LVM_TE_MAX_EFFECTLEVEL 15 /*TE Maximum Effect level*/
#define LVM_VC_MIN_EFFECTLEVEL (-96) /*VC Minimum EffectLevel*/
#define LVM_VC_MAX_EFFECTLEVEL 0 /*VC Maximum Effect level*/
#define LVM_BE_MIN_EFFECTLEVEL 0 /*BE Minimum EffectLevel*/
#define LVM_BE_MAX_EFFECTLEVEL 15 /*BE Maximum Effect level*/
#define LVM_EQNB_MIN_BAND_FREQ 20 /*EQNB Minimum Band Frequency*/
#define LVM_EQNB_MAX_BAND_FREQ 24000 /*EQNB Maximum Band Frequency*/
#define LVM_EQNB_MIN_BAND_GAIN (-15) /*EQNB Minimum Band Frequency*/
#define LVM_EQNB_MAX_BAND_GAIN 15 /*EQNB Maximum Band Frequency*/
#define LVM_EQNB_MIN_QFACTOR 25 /*EQNB Minimum Q Factor*/
#define LVM_EQNB_MAX_QFACTOR 1200 /*EQNB Maximum Q Factor*/
#define LVM_EQNB_MIN_LPF_FREQ 1000 /*EQNB Minimum Low Pass Corner frequency*/
#define LVM_EQNB_MIN_HPF_FREQ 20 /*EQNB Minimum High Pass Corner frequency*/
#define LVM_EQNB_MAX_HPF_FREQ 1000 /*EQNB Maximum High Pass Corner frequency*/
#define LVM_CS_MIN_EFFECT_LEVEL 0 /*CS Minimum Effect Level*/
#define LVM_CS_MAX_REVERB_LEVEL 100 /*CS Maximum Reverb Level*/
#define LVM_VIRTUALIZER_MAX_REVERB_LEVEL 100 /*Vitrualizer Maximum Reverb Level*/
#define LVM_VC_MIXER_TIME 100 /*VC mixer time*/
#define LVM_VC_BALANCE_MAX 96 /*VC balance max value*/
#define LVM_VC_BALANCE_MIN (-96) /*VC balance min value*/
/* Algorithm masks */
#define LVM_CS_MASK 1
#define LVM_EQNB_MASK 2
#define LVM_DBE_MASK 4
#define LVM_VC_MASK 16
#define LVM_TE_MASK 32
#define LVM_PSA_MASK 2048
/************************************************************************************/
/* */
/* Structures */
/* */
/************************************************************************************/
/* Memory region definition */
typedef struct
{
LVM_UINT32 Size; /* Region size in bytes */
LVM_UINT16 Alignment; /* Byte alignment */
LVM_MemoryTypes_en Type; /* Region type */
void *pBaseAddress; /* Pointer to the region base address */
} LVM_IntMemoryRegion_t;
/* Memory table containing the region definitions */
typedef struct
{
LVM_IntMemoryRegion_t Region[LVM_NR_MEMORY_REGIONS]; /* One definition for each region */
} LVM_IntMemTab_t;
/* Buffer Management */
typedef struct
{
LVM_INT16 *pScratch; /* Bundle scratch buffer */
LVM_INT16 BufferState; /* Buffer status */
LVM_INT16 InDelayBuffer[6*MIN_INTERNAL_BLOCKSIZE]; /* Input buffer delay line, left and right */
LVM_INT16 InDelaySamples; /* Number of samples in the input delay buffer */
LVM_INT16 OutDelayBuffer[2*MIN_INTERNAL_BLOCKSIZE]; /* Output buffer delay line */
LVM_INT16 OutDelaySamples; /* Number of samples in the output delay buffer, left and right */
LVM_INT16 SamplesToOutput; /* Samples to write to the output */
} LVM_Buffer_t;
/* Filter taps */
typedef struct
{
Biquad_2I_Order1_Taps_t TrebleBoost_Taps; /* Treble boost Taps */
} LVM_TE_Data_t;
/* Coefficients */
typedef struct
{
Biquad_Instance_t TrebleBoost_State; /* State for the treble boost filter */
} LVM_TE_Coefs_t;
typedef struct
{
/* Public parameters */
LVM_MemTab_t MemoryTable; /* Instance memory allocation table */
LVM_ControlParams_t Params; /* Control parameters */
LVM_InstParams_t InstParams; /* Instance parameters */
/* Private parameters */
LVM_UINT16 ControlPending; /* Control flag to indicate update pending */
LVM_ControlParams_t NewParams; /* New control parameters pending update */
/* Buffer control */
LVM_INT16 InternalBlockSize; /* Maximum internal block size */
LVM_Buffer_t *pBufferManagement; /* Buffer management variables */
LVM_INT16 SamplesToProcess; /* Input samples left to process */
LVM_INT16 *pInputSamples; /* External input sample pointer */
LVM_INT16 *pOutputSamples; /* External output sample pointer */
/* Configuration number */
LVM_INT32 ConfigurationNumber;
LVM_INT32 BlickSizeMultiple;
/* DC removal */
Biquad_Instance_t DC_RemovalInstance; /* DC removal filter instance */
/* Concert Sound */
LVCS_Handle_t hCSInstance; /* Concert Sound instance handle */
LVCS_Instance_t CS_Instance; /* Concert Sound instance */
LVM_INT16 CS_Active; /* Control flag */
/* Equalizer */
LVEQNB_Handle_t hEQNBInstance; /* N-Band Equaliser instance handle */
LVEQNB_Instance_t EQNB_Instance; /* N-Band Equaliser instance */
LVM_EQNB_BandDef_t *pEQNB_BandDefs; /* Local storage for new definitions */
LVM_EQNB_BandDef_t *pEQNB_UserDefs; /* Local storage for the user's definitions */
LVM_INT16 EQNB_Active; /* Control flag */
/* Dynamic Bass Enhancement */
LVDBE_Handle_t hDBEInstance; /* Dynamic Bass Enhancement instance handle */
LVDBE_Instance_t DBE_Instance; /* Dynamic Bass Enhancement instance */
LVM_INT16 DBE_Active; /* Control flag */
/* Volume Control */
LVMixer3_1St_st VC_Volume; /* Volume scaler */
LVMixer3_2St_st VC_BalanceMix; /* VC balance mixer */
LVM_INT16 VC_VolumedB; /* Gain in dB */
LVM_INT16 VC_Active; /* Control flag */
LVM_INT16 VC_AVLFixedVolume; /* AVL fixed volume */
/* Treble Enhancement */
LVM_TE_Data_t *pTE_Taps; /* Treble boost Taps */
LVM_TE_Coefs_t *pTE_State; /* State for the treble boost filter */
LVM_INT16 TE_Active; /* Control flag */
/* Headroom */
LVM_HeadroomParams_t NewHeadroomParams; /* New headroom parameters pending update */
LVM_HeadroomParams_t HeadroomParams; /* Headroom parameters */
LVM_HeadroomBandDef_t *pHeadroom_BandDefs; /* Local storage for new definitions */
LVM_HeadroomBandDef_t *pHeadroom_UserDefs; /* Local storage for the user's definitions */
LVM_UINT16 Headroom; /* Value of the current headroom */
/* Spectrum Analyzer */
pLVPSA_Handle_t hPSAInstance; /* Spectrum Analyzer instance handle */
LVPSA_InstancePr_t PSA_Instance; /* Spectrum Analyzer instance */
LVPSA_InitParams_t PSA_InitParams; /* Spectrum Analyzer initialization parameters */
LVPSA_ControlParams_t PSA_ControlParams; /* Spectrum Analyzer control parameters */
LVM_INT16 PSA_GainOffset; /* Tone control flag */
LVM_Callback CallBack;
LVM_INT16 *pPSAInput; /* PSA input pointer */
LVM_INT16 NoSmoothVolume; /* Enable or disable smooth volume changes*/
} LVM_Instance_t;
/************************************************************************************/
/* */
/* Function Prototypes */
/* */
/************************************************************************************/
LVM_ReturnStatus_en LVM_ApplyNewSettings(LVM_Handle_t hInstance);
void LVM_SetTrebleBoost( LVM_Instance_t *pInstance,
LVM_ControlParams_t *pParams);
void LVM_SetVolume( LVM_Instance_t *pInstance,
LVM_ControlParams_t *pParams);
LVM_INT32 LVM_VCCallBack(void* pBundleHandle,
void* pGeneralPurpose,
short CallBackParam);
void LVM_SetHeadroom( LVM_Instance_t *pInstance,
LVM_ControlParams_t *pParams);
void LVM_BufferIn( LVM_Handle_t hInstance,
const LVM_INT16 *pInData,
LVM_INT16 **pToProcess,
LVM_INT16 **pProcessed,
LVM_UINT16 *pNumSamples);
void LVM_BufferOut( LVM_Handle_t hInstance,
LVM_INT16 *pOutData,
LVM_UINT16 *pNumSamples);
LVM_INT32 LVM_AlgoCallBack( void *pBundleHandle,
void *pData,
LVM_INT16 callbackId);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __LVM_PRIVATE_H__ */