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 
     65 /* General */
     66 #define LVCS_INVALID                0xFFFF      /* Invalid init parameter */
     67 #define LVCS_BYPASS_MIXER_TC        100         /* Bypass mixer time */
     68 
     69 /* Access to external coefficients table */
     70 #define LVCS_NR_OF_FS                    9
     71 #define LVCS_NR_OF_CHAN_CFG              2
     72 
     73 
     74 /************************************************************************************/
     75 /*                                                                                  */
     76 /*  Types                                                                           */
     77 /*                                                                                  */
     78 /************************************************************************************/
     79 
     80 typedef LVM_UINT16  LVCS_Configuration_t;       /* Internal algorithm configuration */
     81 
     82 typedef enum
     83 {
     84     LVCS_HEADPHONE  = 0,
     85     LVCS_DEVICE_MAX = LVM_MAXENUM
     86 } LVCS_OutputDevice_en;
     87 
     88 
     89 /************************************************************************************/
     90 /*                                                                                  */
     91 /*  Structures                                                                      */
     92 /*                                                                                  */
     93 /************************************************************************************/
     94 
     95 /* Volume correction structure */
     96 typedef struct
     97 {
     98 #ifdef BUILD_FLOAT
     99     LVM_FLOAT   CompFull;                       /* Post CS compression 100% effect */
    100     LVM_FLOAT   CompMin;                        /* Post CS compression 0% effect */
    101     LVM_FLOAT   GainFull;                       /* CS gain correct 100% effect */
    102     LVM_FLOAT   GainMin;                        /* CS gain correct 0% effect */
    103 #else
    104     LVM_INT16   CompFull;                       /* Post CS compression 100% effect */
    105     LVM_INT16   CompMin;                        /* Post CS compression 0% effect */
    106     LVM_INT16   GainFull;                       /* CS gain correct 100% effect */
    107     LVM_INT16   GainMin;                        /* CS gain correct 0% effect */
    108 #endif
    109 } LVCS_VolCorrect_t;
    110 
    111 /* Instance structure */
    112 typedef struct
    113 {
    114     /* Public parameters */
    115     LVCS_MemTab_t           MemoryTable;        /* Instance memory allocation table */
    116     LVCS_Params_t           Params;             /* Instance parameters */
    117     LVCS_Capabilities_t     Capabilities;       /* Initialisation capabilities */
    118 
    119     /* Private parameters */
    120     LVCS_OutputDevice_en    OutputDevice;       /* Selected output device type */
    121     LVCS_VolCorrect_t       VolCorrect;         /* Volume correction settings */
    122 #ifndef BUILD_FLOAT
    123     LVM_INT16               TransitionGain;     /* Transition gain */
    124     LVM_INT16               CompressGain;       /* Last used compressor gain*/
    125 #else
    126     LVM_FLOAT               TransitionGain;     /* Transition gain */
    127     LVM_FLOAT               CompressGain;       /* Last used compressor gain*/
    128 #endif
    129 
    130     /* Sub-block configurations */
    131     LVCS_StereoEnhancer_t   StereoEnhancer;     /* Stereo enhancer configuration */
    132     LVCS_ReverbGenerator_t  Reverberation;      /* Reverberation configuration */
    133     LVCS_Equaliser_t        Equaliser;          /* Equaliser configuration */
    134     LVCS_BypassMix_t        BypassMix;          /* Bypass mixer configuration */
    135 
    136     /* Bypass variable */
    137     LVM_INT16               MSTarget0;                          /* Mixer state control variable for smooth transtion */
    138     LVM_INT16               MSTarget1;                          /* Mixer state control variable for smooth transtion */
    139     LVM_INT16               bInOperatingModeTransition;         /* Operating mode transition flag */
    140     LVM_INT16               bTimerDone;                         /* Timer completion flag */
    141     LVM_Timer_Params_t      TimerParams;                        /* Timer parameters */
    142     LVM_Timer_Instance_t    TimerInstance;                      /* Timer instance */
    143 
    144 } LVCS_Instance_t;
    145 
    146 /* Coefficient Structure */
    147 typedef struct
    148 {
    149 #ifdef BUILD_FLOAT
    150     Biquad_FLOAT_Instance_t       EqualiserBiquadInstance;
    151     Biquad_FLOAT_Instance_t       ReverbBiquadInstance;
    152     Biquad_FLOAT_Instance_t       SEBiquadInstanceMid;
    153     Biquad_FLOAT_Instance_t       SEBiquadInstanceSide;
    154 #else
    155     Biquad_Instance_t       EqualiserBiquadInstance;
    156     Biquad_Instance_t       ReverbBiquadInstance;
    157     Biquad_Instance_t       SEBiquadInstanceMid;
    158     Biquad_Instance_t       SEBiquadInstanceSide;
    159 #endif
    160 } LVCS_Coefficient_t;
    161 
    162 /* Data Structure */
    163 typedef struct
    164 {
    165 #ifdef BUILD_FLOAT
    166     Biquad_2I_Order2_FLOAT_Taps_t EqualiserBiquadTaps;
    167     Biquad_2I_Order2_FLOAT_Taps_t ReverbBiquadTaps;
    168     Biquad_1I_Order1_FLOAT_Taps_t SEBiquadTapsMid;
    169     Biquad_1I_Order2_FLOAT_Taps_t SEBiquadTapsSide;
    170 #else
    171     Biquad_2I_Order2_Taps_t EqualiserBiquadTaps;
    172     Biquad_2I_Order2_Taps_t ReverbBiquadTaps;
    173     Biquad_1I_Order1_Taps_t SEBiquadTapsMid;
    174     Biquad_1I_Order2_Taps_t SEBiquadTapsSide;
    175 #endif
    176 } LVCS_Data_t;
    177 
    178 void LVCS_TimerCallBack (   void* hInstance,
    179                             void* pCallBackParams,
    180                             LVM_INT32 CallbackParam);
    181 
    182 
    183 #ifdef __cplusplus
    184 }
    185 #endif /* __cplusplus */
    186 
    187 #endif      /* PRIVATE_H */
    188 
    189 
    190