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 bundle             */
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 __LVM_PRIVATE_H__
282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define __LVM_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 "LVM.h"                                /* LifeVibes */
422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVM_Common.h"                         /* LifeVibes common */
432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "BIQUAD.h"                             /* Biquad library */
442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVC_Mixer.h"                          /* Mixer library */
452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVCS_Private.h"                       /* Concert Sound */
462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVDBE_Private.h"                      /* Dynamic Bass Enhancement */
472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVEQNB_Private.h"                     /* N-Band equaliser */
482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVPSA_Private.h"                      /* Parametric Spectrum Analyzer */
492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/
522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                  */
532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Defines                                                                         */
542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                  */
552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/
562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* General */
582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_INVALID                     0xFFFF    /* Invalid init parameter */
592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Memory */
612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_INSTANCE_ALIGN              4         /* 32-bit for structures */
622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_FIRSTCALL                   0         /* First call to the buffer */
632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_MAXBLOCKCALL                1         /* Maximum block size calls to the buffer */
642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_LASTCALL                    2         /* Last call to the buffer */
652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_FIRSTLASTCALL               3         /* Single call for small number of samples */
662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Block Size */
682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_MIN_MAXBLOCKSIZE            16        /* Minimum MaxBlockSize Limit*/
692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_MANAGED_MAX_MAXBLOCKSIZE    8191      /* Maximum MaxBlockSzie Limit for Managed Buffer Mode*/
702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_UNMANAGED_MAX_MAXBLOCKSIZE  4096      /* Maximum MaxBlockSzie Limit for Unmanaged Buffer Mode */
712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define MAX_INTERNAL_BLOCKSIZE          8128      /* Maximum multiple of 64  below 8191*/
732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define MIN_INTERNAL_BLOCKSIZE          16        /* Minimum internal block size */
752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define MIN_INTERNAL_BLOCKSHIFT         4         /* Minimum internal block size as a power of 2 */
762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define MIN_INTERNAL_BLOCKMASK          0xFFF0    /* Minimum internal block size mask */
772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_PSA_DYNAMICRANGE            60        /* Spectral Dynamic range: used for offseting output*/
792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_PSA_BARHEIGHT               127       /* Spectral Bar Height*/
802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_TE_MIN_EFFECTLEVEL          0         /*TE Minimum EffectLevel*/
822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_TE_MAX_EFFECTLEVEL          15        /*TE Maximum Effect level*/
832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_VC_MIN_EFFECTLEVEL          -96       /*VC Minimum EffectLevel*/
852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_VC_MAX_EFFECTLEVEL          0         /*VC Maximum Effect level*/
862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_BE_MIN_EFFECTLEVEL          0         /*BE Minimum EffectLevel*/
882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_BE_MAX_EFFECTLEVEL          15        /*BE Maximum Effect level*/
892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_EQNB_MIN_BAND_FREQ          20        /*EQNB Minimum Band Frequency*/
912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_EQNB_MAX_BAND_FREQ          24000     /*EQNB Maximum Band Frequency*/
922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_EQNB_MIN_BAND_GAIN          -15       /*EQNB Minimum Band Frequency*/
932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_EQNB_MAX_BAND_GAIN          15        /*EQNB Maximum Band Frequency*/
942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_EQNB_MIN_QFACTOR            25        /*EQNB Minimum Q Factor*/
952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_EQNB_MAX_QFACTOR            1200      /*EQNB Maximum Q Factor*/
962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_EQNB_MIN_LPF_FREQ           1000      /*EQNB Minimum Low Pass Corner frequency*/
972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_EQNB_MIN_HPF_FREQ           20        /*EQNB Minimum High Pass Corner frequency*/
982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_EQNB_MAX_HPF_FREQ           1000      /*EQNB Maximum High Pass Corner frequency*/
992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_CS_MIN_EFFECT_LEVEL         0         /*CS Minimum Effect Level*/
1012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_CS_MAX_REVERB_LEVEL         100       /*CS Maximum Reverb Level*/
1022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_VIRTUALIZER_MAX_REVERB_LEVEL 100      /*Vitrualizer Maximum Reverb Level*/
1032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_VC_MIXER_TIME              100       /*VC mixer time*/
1052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_VC_BALANCE_MAX             96        /*VC balance max value*/
1062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_VC_BALANCE_MIN             -96       /*VC balance min value*/
1072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Algorithm masks */
1092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_CS_MASK                     1
1102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_EQNB_MASK                   2
1112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_DBE_MASK                    4
1122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_VC_MASK                     16
1132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_TE_MASK                     32
1142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_PSA_MASK                    2048
1152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/
1182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                  */
1192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Structures                                                                      */
1202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                  */
1212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/
1222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Memory region definition */
1242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct
1252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
1262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_UINT32              Size;               /* Region size in bytes */
1272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_UINT16              Alignment;          /* Byte alignment */
1282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_MemoryTypes_en      Type;               /* Region type */
1292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    void                    *pBaseAddress;      /* Pointer to the region base address */
1302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVM_IntMemoryRegion_t;
1312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Memory table containing the region definitions */
1342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct
1352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
1362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_IntMemoryRegion_t   Region[LVM_NR_MEMORY_REGIONS];  /* One definition for each region */
1372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVM_IntMemTab_t;
1382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Buffer Management */
1412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct
1422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
1432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               *pScratch;          /* Bundle scratch buffer */
1442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               BufferState;        /* Buffer status */
1462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               InDelayBuffer[6*MIN_INTERNAL_BLOCKSIZE]; /* Input buffer delay line, left and right */
1472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               InDelaySamples;     /* Number of samples in the input delay buffer */
1482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               OutDelayBuffer[2*MIN_INTERNAL_BLOCKSIZE]; /* Output buffer delay line */
1502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               OutDelaySamples;    /* Number of samples in the output delay buffer, left and right */
1512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               SamplesToOutput;    /* Samples to write to the output */
1522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVM_Buffer_t;
1532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Filter taps */
1562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct
1572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
1582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    Biquad_2I_Order1_Taps_t TrebleBoost_Taps;   /* Treble boost Taps */
1592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVM_TE_Data_t;
1602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Coefficients */
1632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct
1642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
1652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    Biquad_Instance_t       TrebleBoost_State;  /* State for the treble boost filter */
1662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVM_TE_Coefs_t;
1672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct
1702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
1712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Public parameters */
1722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_MemTab_t            MemoryTable;        /* Instance memory allocation table */
1732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_ControlParams_t     Params;             /* Control parameters */
1742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_InstParams_t        InstParams;         /* Instance parameters */
1752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Private parameters */
1772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_UINT16              ControlPending;     /* Control flag to indicate update pending */
1782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_ControlParams_t     NewParams;          /* New control parameters pending update */
1792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Buffer control */
1812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               InternalBlockSize;  /* Maximum internal block size */
1822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_Buffer_t            *pBufferManagement; /* Buffer management variables */
1832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               SamplesToProcess;   /* Input samples left to process */
1842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               *pInputSamples;     /* External input sample pointer */
1852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               *pOutputSamples;    /* External output sample pointer */
1862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Configuration number */
1882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT32               ConfigurationNumber;
1892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT32               BlickSizeMultiple;
1902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* DC removal */
1922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    Biquad_Instance_t       DC_RemovalInstance; /* DC removal filter instance */
1932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Concert Sound */
1952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_Handle_t           hCSInstance;        /* Concert Sound instance handle */
1962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_Instance_t         CS_Instance;        /* Concert Sound instance */
1972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               CS_Active;          /* Control flag */
1982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Equalizer */
2002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVEQNB_Handle_t         hEQNBInstance;      /* N-Band Equaliser instance handle */
2012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVEQNB_Instance_t       EQNB_Instance;      /* N-Band Equaliser instance */
2022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_EQNB_BandDef_t      *pEQNB_BandDefs;    /* Local storage for new definitions */
2032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_EQNB_BandDef_t      *pEQNB_UserDefs;    /* Local storage for the user's definitions */
2042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               EQNB_Active;        /* Control flag */
2052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Dynamic Bass Enhancement */
2072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVDBE_Handle_t          hDBEInstance;       /* Dynamic Bass Enhancement instance handle */
2082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVDBE_Instance_t        DBE_Instance;       /* Dynamic Bass Enhancement instance */
2092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               DBE_Active;         /* Control flag */
2102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Volume Control */
2122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVMixer3_1St_st         VC_Volume;          /* Volume scaler */
2132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVMixer3_2St_st         VC_BalanceMix;      /* VC balance mixer */
2142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               VC_VolumedB;        /* Gain in dB */
2152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               VC_Active;          /* Control flag */
2162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               VC_AVLFixedVolume;  /* AVL fixed volume */
2172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Treble Enhancement */
2192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_TE_Data_t           *pTE_Taps;          /* Treble boost Taps */
2202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_TE_Coefs_t          *pTE_State;         /* State for the treble boost filter */
2212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               TE_Active;          /* Control flag */
2222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Headroom */
2242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_HeadroomParams_t    NewHeadroomParams;   /* New headroom parameters pending update */
2252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_HeadroomParams_t    HeadroomParams;      /* Headroom parameters */
2262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_HeadroomBandDef_t   *pHeadroom_BandDefs; /* Local storage for new definitions */
2272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_HeadroomBandDef_t   *pHeadroom_UserDefs; /* Local storage for the user's definitions */
2282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_UINT16              Headroom;            /* Value of the current headroom */
2292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Spectrum Analyzer */
2312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    pLVPSA_Handle_t         hPSAInstance;       /* Spectrum Analyzer instance handle */
2322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVPSA_InstancePr_t      PSA_Instance;       /* Spectrum Analyzer instance */
2332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVPSA_InitParams_t      PSA_InitParams;     /* Spectrum Analyzer initialization parameters */
2342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVPSA_ControlParams_t   PSA_ControlParams;  /* Spectrum Analyzer control parameters */
2352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               PSA_GainOffset;     /* Tone control flag */
2362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_Callback            CallBack;
2372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               *pPSAInput;         /* PSA input pointer */
2382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16              NoSmoothVolume;      /* Enable or disable smooth volume changes*/
2402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVM_Instance_t;
2422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/
2452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                  */
2462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Function Prototypes                                                             */
2472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                  */
2482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/
2492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2502c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVM_ReturnStatus_en LVM_ApplyNewSettings(LVM_Handle_t       hInstance);
2512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid    LVM_SetTrebleBoost( LVM_Instance_t         *pInstance,
2532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                            LVM_ControlParams_t    *pParams);
2542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid    LVM_SetVolume(  LVM_Instance_t         *pInstance,
2562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                        LVM_ControlParams_t    *pParams);
2572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2582c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVM_INT32    LVM_VCCallBack(void*   pBundleHandle,
2592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                            void*   pGeneralPurpose,
2602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                            short   CallBackParam);
2612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid    LVM_SetHeadroom(    LVM_Instance_t         *pInstance,
2632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                            LVM_ControlParams_t    *pParams);
2642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid    LVM_BufferIn(   LVM_Handle_t      hInstance,
2662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                        const LVM_INT16   *pInData,
2672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                        LVM_INT16         **pToProcess,
2682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                        LVM_INT16         **pProcessed,
2692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                        LVM_UINT16        *pNumSamples);
2702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid    LVM_BufferOut(  LVM_Handle_t     hInstance,
2722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                        LVM_INT16        *pOutData,
2732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                        LVM_UINT16       *pNumSamples);
2742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2752c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVM_INT32 LVM_AlgoCallBack(     void          *pBundleHandle,
2762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                                void          *pData,
2772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                                LVM_INT16     callbackId);
2782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#ifdef __cplusplus
2802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}
2812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif /* __cplusplus */
2822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif      /* __LVM_PRIVATE_H__ */
2842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
285