Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (C) 2004-2010 NXP Software
      3  * Copyright (C) 2010 The Android Open Source Project
      4  *
      5  * Licensed under the Apache License, Version 2.0 (the "License");
      6  * you may not use this file except in compliance with the License.
      7  * You may obtain a copy of the License at
      8  *
      9  *      http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  * Unless required by applicable law or agreed to in writing, software
     12  * distributed under the License is distributed on an "AS IS" BASIS,
     13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  * See the License for the specific language governing permissions and
     15  * limitations under the License.
     16  */
     17 
     18 /************************************************************************************/
     19 /*                                                                                  */
     20 /*  Header file for the private layer interface of concert sound.                   */
     21 /*                                                                                  */
     22 /*  This files includes all definitions, types, structures and function             */
     23 /*  prototypes required by the execution layer.                                     */
     24 /*                                                                                  */
     25 /************************************************************************************/
     26 
     27 #ifndef __LVCS_PRIVATE_H__
     28 #define __LVCS_PRIVATE_H__
     29 
     30 #ifdef __cplusplus
     31 extern "C" {
     32 #endif /* __cplusplus */
     33 
     34 
     35 /************************************************************************************/
     36 /*                                                                                  */
     37 /*  Includes                                                                        */
     38 /*                                                                                  */
     39 /************************************************************************************/
     40 
     41 #include "LVCS.h"                               /* Calling or Application layer definitions */
     42 #include "LVCS_StereoEnhancer.h"                /* Stereo enhancer module definitions */
     43 #include "LVCS_ReverbGenerator.h"               /* Reverberation module definitions */
     44 #include "LVCS_Equaliser.h"                     /* Equaliser module definitions */
     45 #include "LVCS_BypassMix.h"                     /* Bypass Mixer module definitions */
     46 #include "LVM_Timer.h"
     47 
     48 
     49 /************************************************************************************/
     50 /*                                                                                  */
     51 /*  Defines                                                                         */
     52 /*                                                                                  */
     53 /************************************************************************************/
     54 
     55 /* Configuration switch controls */
     56 #define LVCS_STEREOENHANCESWITCH    0x0001      /* Stereo enhancement enable control */
     57 #define LVCS_REVERBSWITCH           0x0002      /* Reverberation enable control */
     58 #define LVCS_EQUALISERSWITCH        0x0004      /* Equaliser enable control */
     59 #define LVCS_BYPASSMIXSWITCH        0x0008      /* Bypass mixer enable control */
     60 #define LVCS_COMPGAINFRAME          64          /* Compressor gain update interval */
     61 
     62 /* Memory */
     63 #define LVCS_SCRATCHBUFFERS              6      /* Number of buffers required for inplace processing */
     64 #ifdef SUPPORT_MC
     65 /*
     66  * The Concert Surround module applies processing only on the first two
     67  * channels of a multichannel input. The data of first two channels is copied
     68  * from the multichannel input into scratch buffer. The buffers added here
     69  * are used for this purpose
     70  */
     71 #define LVCS_MC_SCRATCHBUFFERS           2
     72 #endif
     73 
     74 /* General */
     75 #define LVCS_INVALID                0xFFFF      /* Invalid init parameter */
     76 #define LVCS_BYPASS_MIXER_TC        100         /* Bypass mixer time */
     77 
     78 /* Access to external coefficients table */
     79 #define LVCS_NR_OF_FS                    9
     80 #define LVCS_NR_OF_CHAN_CFG              2
     81 
     82 
     83 /************************************************************************************/
     84 /*                                                                                  */
     85 /*  Types                                                                           */
     86 /*                                                                                  */
     87 /************************************************************************************/
     88 
     89 typedef LVM_UINT16  LVCS_Configuration_t;       /* Internal algorithm configuration */
     90 
     91 typedef enum
     92 {
     93     LVCS_HEADPHONE  = 0,
     94     LVCS_DEVICE_MAX = LVM_MAXENUM
     95 } LVCS_OutputDevice_en;
     96 
     97 
     98 /************************************************************************************/
     99 /*                                                                                  */
    100 /*  Structures                                                                      */
    101 /*                                                                                  */
    102 /************************************************************************************/
    103 
    104 /* Volume correction structure */
    105 typedef struct
    106 {
    107 #ifdef BUILD_FLOAT
    108     LVM_FLOAT   CompFull;                       /* Post CS compression 100% effect */
    109     LVM_FLOAT   CompMin;                        /* Post CS compression 0% effect */
    110     LVM_FLOAT   GainFull;                       /* CS gain correct 100% effect */
    111     LVM_FLOAT   GainMin;                        /* CS gain correct 0% effect */
    112 #else
    113     LVM_INT16   CompFull;                       /* Post CS compression 100% effect */
    114     LVM_INT16   CompMin;                        /* Post CS compression 0% effect */
    115     LVM_INT16   GainFull;                       /* CS gain correct 100% effect */
    116     LVM_INT16   GainMin;                        /* CS gain correct 0% effect */
    117 #endif
    118 } LVCS_VolCorrect_t;
    119 
    120 /* Instance structure */
    121 typedef struct
    122 {
    123     /* Public parameters */
    124     LVCS_MemTab_t           MemoryTable;        /* Instance memory allocation table */
    125     LVCS_Params_t           Params;             /* Instance parameters */
    126     LVCS_Capabilities_t     Capabilities;       /* Initialisation capabilities */
    127 
    128     /* Private parameters */
    129     LVCS_OutputDevice_en    OutputDevice;       /* Selected output device type */
    130     LVCS_VolCorrect_t       VolCorrect;         /* Volume correction settings */
    131 #ifndef BUILD_FLOAT
    132     LVM_INT16               TransitionGain;     /* Transition gain */
    133     LVM_INT16               CompressGain;       /* Last used compressor gain*/
    134 #else
    135     LVM_FLOAT               TransitionGain;     /* Transition gain */
    136     LVM_FLOAT               CompressGain;       /* Last used compressor gain*/
    137 #endif
    138 
    139     /* Sub-block configurations */
    140     LVCS_StereoEnhancer_t   StereoEnhancer;     /* Stereo enhancer configuration */
    141     LVCS_ReverbGenerator_t  Reverberation;      /* Reverberation configuration */
    142     LVCS_Equaliser_t        Equaliser;          /* Equaliser configuration */
    143     LVCS_BypassMix_t        BypassMix;          /* Bypass mixer configuration */
    144 
    145     /* Bypass variable */
    146     LVM_INT16               MSTarget0;                          /* Mixer state control variable for smooth transtion */
    147     LVM_INT16               MSTarget1;                          /* Mixer state control variable for smooth transtion */
    148     LVM_INT16               bInOperatingModeTransition;         /* Operating mode transition flag */
    149     LVM_INT16               bTimerDone;                         /* Timer completion flag */
    150     LVM_Timer_Params_t      TimerParams;                        /* Timer parameters */
    151     LVM_Timer_Instance_t    TimerInstance;                      /* Timer instance */
    152 
    153 } LVCS_Instance_t;
    154 
    155 /* Coefficient Structure */
    156 typedef struct
    157 {
    158 #ifdef BUILD_FLOAT
    159     Biquad_FLOAT_Instance_t       EqualiserBiquadInstance;
    160     Biquad_FLOAT_Instance_t       ReverbBiquadInstance;
    161     Biquad_FLOAT_Instance_t       SEBiquadInstanceMid;
    162     Biquad_FLOAT_Instance_t       SEBiquadInstanceSide;
    163 #else
    164     Biquad_Instance_t       EqualiserBiquadInstance;
    165     Biquad_Instance_t       ReverbBiquadInstance;
    166     Biquad_Instance_t       SEBiquadInstanceMid;
    167     Biquad_Instance_t       SEBiquadInstanceSide;
    168 #endif
    169 } LVCS_Coefficient_t;
    170 
    171 /* Data Structure */
    172 typedef struct
    173 {
    174 #ifdef BUILD_FLOAT
    175     Biquad_2I_Order2_FLOAT_Taps_t EqualiserBiquadTaps;
    176     Biquad_2I_Order2_FLOAT_Taps_t ReverbBiquadTaps;
    177     Biquad_1I_Order1_FLOAT_Taps_t SEBiquadTapsMid;
    178     Biquad_1I_Order2_FLOAT_Taps_t SEBiquadTapsSide;
    179 #else
    180     Biquad_2I_Order2_Taps_t EqualiserBiquadTaps;
    181     Biquad_2I_Order2_Taps_t ReverbBiquadTaps;
    182     Biquad_1I_Order1_Taps_t SEBiquadTapsMid;
    183     Biquad_1I_Order2_Taps_t SEBiquadTapsSide;
    184 #endif
    185 } LVCS_Data_t;
    186 
    187 void LVCS_TimerCallBack (   void* hInstance,
    188                             void* pCallBackParams,
    189                             LVM_INT32 CallbackParam);
    190 
    191 
    192 #ifdef __cplusplus
    193 }
    194 #endif /* __cplusplus */
    195 
    196 #endif      /* PRIVATE_H */
    197 
    198 
    199