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