/* * 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 _LVPSA_PRIVATE_H_ #define _LVPSA_PRIVATE_H_ #include #include "LVPSA.h" #include "BIQUAD.h" #include "LVPSA_QPD.h" #include "LVM_Macros.h" /********************************************************************************** CONSTANT DEFINITIONS ***********************************************************************************/ #define LVPSA_NR_SUPPORTED_RATE 13 /* From 8000Hz to 192000Hz*/ #define LVPSA_NR_SUPPORTED_SPEED \ 3 /* LOW, MEDIUM, HIGH */ #define LVPSA_MAXBUFFERDURATION \ 4000 /* Maximum length in ms of the levels buffer */ #define LVPSA_MAXINPUTBLOCKSIZE \ 5000 /* Maximum length in mono samples of the block to process */ #define LVPSA_NBANDSMIN 1 /* Minimum number of frequency band */ #define LVPSA_NBANDSMAX 30 /* Maximum number of frequency band */ #define LVPSA_MAXCENTERFREQ \ 20000 /* Maximum possible center frequency */ #define LVPSA_MINPOSTGAIN \ (-15) /* Minimum possible post gain */ #define LVPSA_MAXPOSTGAIN 15 /* Maximum possible post gain */ #define LVPSA_MINQFACTOR 25 /* Minimum possible Q factor */ #define LVPSA_MAXQFACTOR 1200 /* Maximum possible Q factor */ #define LVPSA_MAXLEVELDECAYFACTOR \ 0x4111 /* Decay factor for the maximum values calculation */ #define LVPSA_MAXLEVELDECAYSHIFT \ 14 /* Decay shift for the maximum values calculation */ #define LVPSA_MAXUNSIGNEDCHAR 0xFF #define LVPSA_FsInvertShift 31 #define LVPSA_GAINSHIFT 11 #define LVPSA_FREQSHIFT 25 /********************************************************************************** TYPES DEFINITIONS ***********************************************************************************/ #define LVPSA_InternalRefreshTime 0x0014 /* 20 ms (50Hz) in Q16.0 */ #define LVPSA_InternalRefreshTimeInv 0x0666 /* 1/20ms left shifted by 15 */ #define LVPSA_InternalRefreshTimeShift 15 /* Precision of the filter */ typedef enum { LVPSA_SimplePrecisionFilter, /* Simple precision */ LVPSA_DoublePrecisionFilter /* Double precision */ } LVPSA_BPFilterPrecision_en; typedef struct { LVM_CHAR bControlPending; /* Flag incating a change of the control parameters */ LVM_UINT16 nBands; /* Number of bands of the spectrum analyzer */ LVM_UINT16 MaxInputBlockSize; /* Maximum input data buffer size */ LVPSA_ControlParams_t CurrentParams; /* Current control parameters of the module */ LVPSA_ControlParams_t NewParams; /* New control parameters given by the user */ void* pScratch; /* Pointer to bundle scratch buffer */ LVPSA_BPFilterPrecision_en* pBPFiltersPrecision; /* Points a nBands elements array that contains the filter precision for each band */ std::vector> specBiquad; /* Biquad filter instances */ /* Points a nBands elements array that contains the QPD filter instance for each band */ QPD_FLOAT_State_t* pQPD_States; /* Points a nBands elements array that contains the QPD filter taps for each band */ QPD_FLOAT_Taps_t* pQPD_Taps; /* Points a nBands elements array that contains the post-filter gains for each band */ LVM_FLOAT* pPostGains; LVPSA_FilterParam_t* pFiltersParams; /* Copy of the filters parameters from the input parameters */ LVM_UINT16 nSamplesBufferUpdate; /* Number of samples to make 20ms */ LVM_INT32 BufferUpdateSamplesCount; /* Counter used to know when to put a new value in the buffer */ LVM_UINT16 nRelevantFilters; /* Number of relevant filters depending on sampling frequency and bands center frequency */ LVM_UINT16 LocalSamplesCount; /* Counter used to update the SpectralDataBufferAudioTime */ LVM_UINT16 DownSamplingFactor; /* Down sampling factor depending on the sampling frequency */ LVM_UINT16 DownSamplingCount; /* Counter used for the downsampling handling */ LVM_UINT16 SpectralDataBufferDuration; /* Length of the buffer in time (ms) defined by the application */ LVM_UINT8* pSpectralDataBufferStart; /* Starting address of the buffer */ LVM_UINT8* pSpectralDataBufferWritePointer; /* Current position of the writing pointer of the buffer */ LVPSA_Time SpectralDataBufferAudioTime; /* AudioTime at which the last value save occurred in the buffer */ LVM_UINT32 SpectralDataBufferLength; /* Number of spectrum data value that the buffer can contain (per band) = SpectralDataBufferDuration/20ms */ LVM_UINT8* pPreviousPeaks; /* Points to a nBands elements array that contains the previous peak value of the level detection. Those values are decremented after each call to the GetSpectrum function */ } LVPSA_InstancePr_t, *pLVPSA_InstancePr_t; /********************************************************************************** FUNCTIONS PROTOTYPE ***********************************************************************************/ /************************************************************************************/ /* */ /* FUNCTION: LVPSA_ApplyNewSettings */ /* */ /* DESCRIPTION: */ /* Reinitialize some parameters and changes filters' coefficients if */ /* some control parameters have changed. */ /* */ /* PARAMETERS: */ /* pInst Pointer to the instance */ /* */ /* RETURNS: */ /* LVPSA_OK Always succeeds */ /* */ /************************************************************************************/ LVPSA_RETURN LVPSA_ApplyNewSettings(LVPSA_InstancePr_t* pInst); #endif /* _LVPSA_PRIVATE_H */