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 /*                                                                                  */
     21 /*  Includes                                                                        */
     22 /*                                                                                  */
     23 /************************************************************************************/
     24 
     25 #include "LVCS_Private.h"
     26 #include "Filters.h"                            /* Filter definitions */
     27 #include "BIQUAD.h"                             /* Biquad definitions */
     28 #include "LVCS_Headphone_Coeffs.h"              /* Headphone coefficients */
     29 
     30 
     31 /************************************************************************************/
     32 /*                                                                                  */
     33 /*  Stereo Enhancer coefficient constant tables                                     */
     34 /*                                                                                  */
     35 /************************************************************************************/
     36 
     37 /* Coefficient table for the middle filter */
     38 const BiquadA01B1CoefsSP_t LVCS_SEMidCoefTable[] = {
     39     {CS_MIDDLE_8000_A0,         /* 8kS/s coefficients */
     40      CS_MIDDLE_8000_A1,
     41      CS_MIDDLE_8000_B1,
     42      (LVM_UINT16 )CS_MIDDLE_8000_SCALE},
     43     {CS_MIDDLE_11025_A0,        /* 11kS/s coefficients */
     44      CS_MIDDLE_11025_A1,
     45      CS_MIDDLE_11025_B1,
     46      (LVM_UINT16 )CS_MIDDLE_11025_SCALE},
     47     {CS_MIDDLE_12000_A0,        /* 12kS/s coefficients */
     48      CS_MIDDLE_12000_A1,
     49      CS_MIDDLE_12000_B1,
     50      (LVM_UINT16 )CS_MIDDLE_12000_SCALE},
     51     {CS_MIDDLE_16000_A0,        /* 16kS/s coefficients */
     52      CS_MIDDLE_16000_A1,
     53      CS_MIDDLE_16000_B1,
     54      (LVM_UINT16 )CS_MIDDLE_16000_SCALE},
     55     {CS_MIDDLE_22050_A0,        /* 22kS/s coefficients */
     56      CS_MIDDLE_22050_A1,
     57      CS_MIDDLE_22050_B1,
     58      (LVM_UINT16 )CS_MIDDLE_22050_SCALE},
     59     {CS_MIDDLE_24000_A0,        /* 24kS/s coefficients */
     60      CS_MIDDLE_24000_A1,
     61      CS_MIDDLE_24000_B1,
     62      (LVM_UINT16 )CS_MIDDLE_24000_SCALE},
     63     {CS_MIDDLE_32000_A0,        /* 32kS/s coefficients */
     64      CS_MIDDLE_32000_A1,
     65      CS_MIDDLE_32000_B1,
     66      (LVM_UINT16 )CS_MIDDLE_32000_SCALE},
     67     {CS_MIDDLE_44100_A0,        /* 44kS/s coefficients */
     68      CS_MIDDLE_44100_A1,
     69      CS_MIDDLE_44100_B1,
     70      (LVM_UINT16 )CS_MIDDLE_44100_SCALE},
     71     {CS_MIDDLE_48000_A0,        /* 48kS/s coefficients */
     72      CS_MIDDLE_48000_A1,
     73      CS_MIDDLE_48000_B1,
     74      (LVM_UINT16 )CS_MIDDLE_48000_SCALE}
     75 #ifdef HIGHER_FS
     76     ,
     77     {CS_MIDDLE_88200_A0,        /* 88kS/s coefficients */
     78      CS_MIDDLE_88200_A1,
     79      CS_MIDDLE_88200_B1,
     80      (LVM_UINT16)CS_MIDDLE_88200_SCALE},
     81     {CS_MIDDLE_96000_A0,        /* 96kS/s coefficients */
     82      CS_MIDDLE_96000_A1,
     83      CS_MIDDLE_96000_B1,
     84      (LVM_UINT16 )CS_MIDDLE_96000_SCALE},
     85     {CS_MIDDLE_176400_A0,        /* 176kS/s coefficients */
     86      CS_MIDDLE_176400_A1,
     87      CS_MIDDLE_176400_B1,
     88      (LVM_UINT16)CS_MIDDLE_176400_SCALE},
     89     {CS_MIDDLE_192000_A0,        /* 192kS/s coefficients */
     90      CS_MIDDLE_192000_A1,
     91      CS_MIDDLE_192000_B1,
     92      (LVM_UINT16 )CS_MIDDLE_192000_SCALE}
     93 #endif
     94     };
     95 
     96 /* Coefficient table for the side filter */
     97 const BiquadA012B12CoefsSP_t LVCS_SESideCoefTable[] = {
     98     /* Headphone Side coefficients */
     99     {CS_SIDE_8000_A0,           /* 8kS/s coefficients */
    100      CS_SIDE_8000_A1,
    101      CS_SIDE_8000_A2,
    102      CS_SIDE_8000_B1,
    103      CS_SIDE_8000_B2,
    104      (LVM_UINT16 )CS_SIDE_8000_SCALE},
    105     {CS_SIDE_11025_A0,          /* 11kS/s coefficients */
    106      CS_SIDE_11025_A1,
    107      CS_SIDE_11025_A2,
    108      CS_SIDE_11025_B1,
    109      CS_SIDE_11025_B2,
    110      (LVM_UINT16 )CS_SIDE_11025_SCALE},
    111     {CS_SIDE_12000_A0,          /* 12kS/s coefficients */
    112      CS_SIDE_12000_A1,
    113      CS_SIDE_12000_A2,
    114      CS_SIDE_12000_B1,
    115      CS_SIDE_12000_B2,
    116      (LVM_UINT16 )CS_SIDE_12000_SCALE},
    117     {CS_SIDE_16000_A0,          /* 16kS/s coefficients */
    118      CS_SIDE_16000_A1,
    119      CS_SIDE_16000_A2,
    120      CS_SIDE_16000_B1,
    121      CS_SIDE_16000_B2,
    122      (LVM_UINT16 )CS_SIDE_16000_SCALE},
    123     {CS_SIDE_22050_A0,          /* 22kS/s coefficients */
    124      CS_SIDE_22050_A1,
    125      CS_SIDE_22050_A2,
    126      CS_SIDE_22050_B1,
    127      CS_SIDE_22050_B2,
    128      (LVM_UINT16 )CS_SIDE_22050_SCALE},
    129     {CS_SIDE_24000_A0,          /* 24kS/s coefficients */
    130      CS_SIDE_24000_A1,
    131      CS_SIDE_24000_A2,
    132      CS_SIDE_24000_B1,
    133      CS_SIDE_24000_B2,
    134      (LVM_UINT16 )CS_SIDE_24000_SCALE},
    135     {CS_SIDE_32000_A0,          /* 32kS/s coefficients */
    136      CS_SIDE_32000_A1,
    137      CS_SIDE_32000_A2,
    138      CS_SIDE_32000_B1,
    139      CS_SIDE_32000_B2,
    140      (LVM_UINT16 )CS_SIDE_32000_SCALE},
    141     {CS_SIDE_44100_A0,          /* 44kS/s coefficients */
    142      CS_SIDE_44100_A1,
    143      CS_SIDE_44100_A2,
    144      CS_SIDE_44100_B1,
    145      CS_SIDE_44100_B2,
    146      (LVM_UINT16 )CS_SIDE_44100_SCALE},
    147     {CS_SIDE_48000_A0,          /* 48kS/s coefficients */
    148      CS_SIDE_48000_A1,
    149      CS_SIDE_48000_A2,
    150      CS_SIDE_48000_B1,
    151      CS_SIDE_48000_B2,
    152      (LVM_UINT16 )CS_SIDE_48000_SCALE}
    153 #ifdef HIGHER_FS
    154      ,
    155     {CS_SIDE_88200_A0,          /* 88kS/s coefficients */
    156      CS_SIDE_88200_A1,
    157      CS_SIDE_88200_A2,
    158      CS_SIDE_88200_B1,
    159      CS_SIDE_88200_B2,
    160      (LVM_UINT16)CS_SIDE_88200_SCALE},
    161      {CS_SIDE_96000_A0,          /* 96kS/s coefficients */
    162      CS_SIDE_96000_A1,
    163      CS_SIDE_96000_A2,
    164      CS_SIDE_96000_B1,
    165      CS_SIDE_96000_B2,
    166      (LVM_UINT16 )CS_SIDE_96000_SCALE},
    167     {CS_SIDE_176400_A0,          /*176kS/s coefficients */
    168      CS_SIDE_176400_A1,
    169      CS_SIDE_176400_A2,
    170      CS_SIDE_176400_B1,
    171      CS_SIDE_176400_B2,
    172      (LVM_UINT16)CS_SIDE_176400_SCALE},
    173      {CS_SIDE_192000_A0,          /* 192kS/s coefficients */
    174      CS_SIDE_192000_A1,
    175      CS_SIDE_192000_A2,
    176      CS_SIDE_192000_B1,
    177      CS_SIDE_192000_B2,
    178      (LVM_UINT16 )CS_SIDE_192000_SCALE}
    179 #endif
    180 };
    181 
    182 
    183 /************************************************************************************/
    184 /*                                                                                  */
    185 /*  Equaliser coefficient constant tables                                           */
    186 /*                                                                                  */
    187 /************************************************************************************/
    188 
    189 const BiquadA012B12CoefsSP_t LVCS_EqualiserCoefTable[] = {
    190     /* Headphone coefficients */
    191     {CS_EQUALISER_8000_A0,      /* 8kS/s coefficients */
    192      CS_EQUALISER_8000_A1,
    193      CS_EQUALISER_8000_A2,
    194      CS_EQUALISER_8000_B1,
    195      CS_EQUALISER_8000_B2,
    196      (LVM_UINT16 )CS_EQUALISER_8000_SCALE},
    197     {CS_EQUALISER_11025_A0,     /* 11kS/s coefficients */
    198      CS_EQUALISER_11025_A1,
    199      CS_EQUALISER_11025_A2,
    200      CS_EQUALISER_11025_B1,
    201      CS_EQUALISER_11025_B2,
    202      (LVM_UINT16 )CS_EQUALISER_11025_SCALE},
    203     {CS_EQUALISER_12000_A0,     /* 12kS/s coefficients */
    204      CS_EQUALISER_12000_A1,
    205      CS_EQUALISER_12000_A2,
    206      CS_EQUALISER_12000_B1,
    207      CS_EQUALISER_12000_B2,
    208      (LVM_UINT16 )CS_EQUALISER_12000_SCALE},
    209     {CS_EQUALISER_16000_A0,     /* 16kS/s coefficients */
    210      CS_EQUALISER_16000_A1,
    211      CS_EQUALISER_16000_A2,
    212      CS_EQUALISER_16000_B1,
    213      CS_EQUALISER_16000_B2,
    214      (LVM_UINT16 )CS_EQUALISER_16000_SCALE},
    215     {CS_EQUALISER_22050_A0,     /* 22kS/s coefficients */
    216      CS_EQUALISER_22050_A1,
    217      CS_EQUALISER_22050_A2,
    218      CS_EQUALISER_22050_B1,
    219      CS_EQUALISER_22050_B2,
    220      (LVM_UINT16 )CS_EQUALISER_22050_SCALE},
    221     {CS_EQUALISER_24000_A0,     /* 24kS/s coefficients */
    222      CS_EQUALISER_24000_A1,
    223      CS_EQUALISER_24000_A2,
    224      CS_EQUALISER_24000_B1,
    225      CS_EQUALISER_24000_B2,
    226      (LVM_UINT16 )CS_EQUALISER_24000_SCALE},
    227     {CS_EQUALISER_32000_A0,     /* 32kS/s coefficients */
    228      CS_EQUALISER_32000_A1,
    229      CS_EQUALISER_32000_A2,
    230      CS_EQUALISER_32000_B1,
    231      CS_EQUALISER_32000_B2,
    232      (LVM_UINT16 )CS_EQUALISER_32000_SCALE},
    233     {CS_EQUALISER_44100_A0,     /* 44kS/s coefficients */
    234      CS_EQUALISER_44100_A1,
    235      CS_EQUALISER_44100_A2,
    236      CS_EQUALISER_44100_B1,
    237      CS_EQUALISER_44100_B2,
    238      (LVM_UINT16 )CS_EQUALISER_44100_SCALE},
    239     {CS_EQUALISER_48000_A0,     /* 48kS/s coefficients */
    240      CS_EQUALISER_48000_A1,
    241      CS_EQUALISER_48000_A2,
    242      CS_EQUALISER_48000_B1,
    243      CS_EQUALISER_48000_B2,
    244      (LVM_UINT16 )CS_EQUALISER_48000_SCALE},
    245 #ifdef HIGHER_FS
    246     {CS_EQUALISER_88200_A0,     /* 88kS/s coeffieients */
    247      CS_EQUALISER_88200_A1,
    248      CS_EQUALISER_88200_A2,
    249      CS_EQUALISER_88200_B1,
    250      CS_EQUALISER_88200_B2,
    251      (LVM_UINT16)CS_EQUALISER_88200_SCALE},
    252     {CS_EQUALISER_96000_A0,     /* 96kS/s coefficients */
    253      CS_EQUALISER_96000_A1,
    254      CS_EQUALISER_96000_A2,
    255      CS_EQUALISER_96000_B1,
    256      CS_EQUALISER_96000_B2,
    257      (LVM_UINT16 )CS_EQUALISER_96000_SCALE},
    258     {CS_EQUALISER_176400_A0,     /* 176kS/s coefficients */
    259      CS_EQUALISER_176400_A1,
    260      CS_EQUALISER_176400_A2,
    261      CS_EQUALISER_176400_B1,
    262      CS_EQUALISER_176400_B2,
    263      (LVM_UINT16)CS_EQUALISER_176400_SCALE},
    264     {CS_EQUALISER_192000_A0,     /* 192kS/s coefficients */
    265      CS_EQUALISER_192000_A1,
    266      CS_EQUALISER_192000_A2,
    267      CS_EQUALISER_192000_B1,
    268      CS_EQUALISER_192000_B2,
    269      (LVM_UINT16 )CS_EQUALISER_192000_SCALE},
    270 #endif
    271 
    272     /* Concert Sound EX Headphone coefficients */
    273     {CSEX_EQUALISER_8000_A0,    /* 8kS/s coefficients */
    274      CSEX_EQUALISER_8000_A1,
    275      CSEX_EQUALISER_8000_A2,
    276      CSEX_EQUALISER_8000_B1,
    277      CSEX_EQUALISER_8000_B2,
    278      (LVM_UINT16 )CSEX_EQUALISER_8000_SCALE},
    279     {CSEX_EQUALISER_11025_A0,   /* 11kS/s coefficients */
    280      CSEX_EQUALISER_11025_A1,
    281      CSEX_EQUALISER_11025_A2,
    282      CSEX_EQUALISER_11025_B1,
    283      CSEX_EQUALISER_11025_B2,
    284      (LVM_UINT16 )CSEX_EQUALISER_11025_SCALE},
    285     {CSEX_EQUALISER_12000_A0,   /* 12kS/s coefficients */
    286      CSEX_EQUALISER_12000_A1,
    287      CSEX_EQUALISER_12000_A2,
    288      CSEX_EQUALISER_12000_B1,
    289      CSEX_EQUALISER_12000_B2,
    290      (LVM_UINT16 )CSEX_EQUALISER_12000_SCALE},
    291     {CSEX_EQUALISER_16000_A0,   /* 16kS/s coefficients */
    292      CSEX_EQUALISER_16000_A1,
    293      CSEX_EQUALISER_16000_A2,
    294      CSEX_EQUALISER_16000_B1,
    295      CSEX_EQUALISER_16000_B2,
    296      (LVM_UINT16 )CSEX_EQUALISER_16000_SCALE},
    297     {CSEX_EQUALISER_22050_A0,   /* 22kS/s coefficients */
    298      CSEX_EQUALISER_22050_A1,
    299      CSEX_EQUALISER_22050_A2,
    300      CSEX_EQUALISER_22050_B1,
    301      CSEX_EQUALISER_22050_B2,
    302      (LVM_UINT16 )CSEX_EQUALISER_22050_SCALE},
    303     {CSEX_EQUALISER_24000_A0,   /* 24kS/s coefficients */
    304      CSEX_EQUALISER_24000_A1,
    305      CSEX_EQUALISER_24000_A2,
    306      CSEX_EQUALISER_24000_B1,
    307      CSEX_EQUALISER_24000_B2,
    308      (LVM_UINT16 )CSEX_EQUALISER_24000_SCALE},
    309     {CSEX_EQUALISER_32000_A0,   /* 32kS/s coefficients */
    310      CSEX_EQUALISER_32000_A1,
    311      CSEX_EQUALISER_32000_A2,
    312      CSEX_EQUALISER_32000_B1,
    313      CSEX_EQUALISER_32000_B2,
    314      (LVM_UINT16 )CSEX_EQUALISER_32000_SCALE},
    315     {CSEX_EQUALISER_44100_A0,   /* 44kS/s coefficients */
    316      CSEX_EQUALISER_44100_A1,
    317      CSEX_EQUALISER_44100_A2,
    318      CSEX_EQUALISER_44100_B1,
    319      CSEX_EQUALISER_44100_B2,
    320      (LVM_UINT16 )CSEX_EQUALISER_44100_SCALE},
    321     {CSEX_EQUALISER_48000_A0,   /* 48kS/s coefficients */
    322      CSEX_EQUALISER_48000_A1,
    323      CSEX_EQUALISER_48000_A2,
    324      CSEX_EQUALISER_48000_B1,
    325      CSEX_EQUALISER_48000_B2,
    326      (LVM_UINT16 )CSEX_EQUALISER_48000_SCALE}
    327 #ifdef HIGHER_FS
    328     ,
    329     {CSEX_EQUALISER_88200_A0,   /* 88kS/s coefficients */
    330      CSEX_EQUALISER_88200_A1,
    331      CSEX_EQUALISER_88200_A2,
    332      CSEX_EQUALISER_88200_B1,
    333      CSEX_EQUALISER_88200_B2,
    334      (LVM_UINT16)CSEX_EQUALISER_88200_SCALE},
    335     {CSEX_EQUALISER_96000_A0,   /* 96kS/s coefficients */
    336      CSEX_EQUALISER_96000_A1,
    337      CSEX_EQUALISER_96000_A2,
    338      CSEX_EQUALISER_96000_B1,
    339      CSEX_EQUALISER_96000_B2,
    340      (LVM_UINT16 )CSEX_EQUALISER_96000_SCALE},
    341     {CSEX_EQUALISER_176400_A0,   /* 176kS/s coefficients */
    342      CSEX_EQUALISER_176400_A1,
    343      CSEX_EQUALISER_176400_A2,
    344      CSEX_EQUALISER_176400_B1,
    345      CSEX_EQUALISER_176400_B2,
    346      (LVM_UINT16)CSEX_EQUALISER_176400_SCALE},
    347      {CSEX_EQUALISER_192000_A0,   /* 192kS/s coefficients */
    348      CSEX_EQUALISER_192000_A1,
    349      CSEX_EQUALISER_192000_A2,
    350      CSEX_EQUALISER_192000_B1,
    351      CSEX_EQUALISER_192000_B2,
    352      (LVM_UINT16 )CSEX_EQUALISER_192000_SCALE}
    353 #endif
    354 };
    355 
    356 
    357 /************************************************************************************/
    358 /*                                                                                  */
    359 /*  Reverb delay constant tables                                                    */
    360 /*                                                                                  */
    361 /************************************************************************************/
    362 
    363 /* Stereo delay table for Concert Sound */
    364 const LVM_UINT16    LVCS_StereoDelayCS[] = {
    365     LVCS_STEREODELAY_CS_8KHZ,
    366     LVCS_STEREODELAY_CS_11KHZ,
    367     LVCS_STEREODELAY_CS_12KHZ,
    368     LVCS_STEREODELAY_CS_16KHZ,
    369     LVCS_STEREODELAY_CS_22KHZ,
    370     LVCS_STEREODELAY_CS_24KHZ,
    371     LVCS_STEREODELAY_CS_32KHZ,
    372     LVCS_STEREODELAY_CS_44KHZ,
    373     LVCS_STEREODELAY_CS_48KHZ,
    374     LVCS_STEREODELAY_CS_88KHZ,
    375     LVCS_STEREODELAY_CS_96KHZ,
    376     LVCS_STEREODELAY_CS_176KHZ,
    377     LVCS_STEREODELAY_CS_192KHZ,
    378 };
    379 
    380 /************************************************************************************/
    381 /*                                                                                  */
    382 /*  Reverb coefficients constant table                                              */
    383 /*                                                                                  */
    384 /************************************************************************************/
    385 
    386 const BiquadA012B12CoefsSP_t LVCS_ReverbCoefTable[] = {
    387     /* Headphone coefficients */
    388     {CS_REVERB_8000_A0,             /* 8kS/s coefficients */
    389      CS_REVERB_8000_A1,
    390      CS_REVERB_8000_A2,
    391      CS_REVERB_8000_B1,
    392      CS_REVERB_8000_B2,
    393      (LVM_UINT16 )CS_REVERB_8000_SCALE},
    394     {CS_REVERB_11025_A0,            /* 11kS/s coefficients */
    395      CS_REVERB_11025_A1,
    396      CS_REVERB_11025_A2,
    397      CS_REVERB_11025_B1,
    398      CS_REVERB_11025_B2,
    399      (LVM_UINT16 )CS_REVERB_11025_SCALE},
    400     {CS_REVERB_12000_A0,            /* 12kS/s coefficients */
    401      CS_REVERB_12000_A1,
    402      CS_REVERB_12000_A2,
    403      CS_REVERB_12000_B1,
    404      CS_REVERB_12000_B2,
    405      (LVM_UINT16 )CS_REVERB_12000_SCALE},
    406     {CS_REVERB_16000_A0,            /* 16kS/s coefficients */
    407      CS_REVERB_16000_A1,
    408      CS_REVERB_16000_A2,
    409      CS_REVERB_16000_B1,
    410      CS_REVERB_16000_B2,
    411      (LVM_UINT16 )CS_REVERB_16000_SCALE},
    412     {CS_REVERB_22050_A0,            /* 22kS/s coefficients */
    413      CS_REVERB_22050_A1,
    414      CS_REVERB_22050_A2,
    415      CS_REVERB_22050_B1,
    416      CS_REVERB_22050_B2,
    417      (LVM_UINT16 )CS_REVERB_22050_SCALE},
    418     {CS_REVERB_24000_A0,            /* 24kS/s coefficients */
    419      CS_REVERB_24000_A1,
    420      CS_REVERB_24000_A2,
    421      CS_REVERB_24000_B1,
    422      CS_REVERB_24000_B2,
    423      (LVM_UINT16 )CS_REVERB_24000_SCALE},
    424     {CS_REVERB_32000_A0,            /* 32kS/s coefficients */
    425      CS_REVERB_32000_A1,
    426      CS_REVERB_32000_A2,
    427      CS_REVERB_32000_B1,
    428      CS_REVERB_32000_B2,
    429      (LVM_UINT16 )CS_REVERB_32000_SCALE},
    430     {CS_REVERB_44100_A0,            /* 44kS/s coefficients */
    431      CS_REVERB_44100_A1,
    432      CS_REVERB_44100_A2,
    433      CS_REVERB_44100_B1,
    434      CS_REVERB_44100_B2,
    435      (LVM_UINT16 )CS_REVERB_44100_SCALE},
    436     {CS_REVERB_48000_A0,            /* 48kS/s coefficients */
    437      CS_REVERB_48000_A1,
    438      CS_REVERB_48000_A2,
    439      CS_REVERB_48000_B1,
    440      CS_REVERB_48000_B2,
    441      (LVM_UINT16 )CS_REVERB_48000_SCALE}
    442 #ifdef HIGHER_FS
    443     ,
    444     {CS_REVERB_88200_A0,            /* 88kS/s coefficients */
    445      CS_REVERB_88200_A1,
    446      CS_REVERB_88200_A2,
    447      CS_REVERB_88200_B1,
    448      CS_REVERB_88200_B2,
    449      (LVM_UINT16)CS_REVERB_88200_SCALE},
    450     {CS_REVERB_96000_A0,            /* 96kS/s coefficients */
    451      CS_REVERB_96000_A1,
    452      CS_REVERB_96000_A2,
    453      CS_REVERB_96000_B1,
    454      CS_REVERB_96000_B2,
    455      (LVM_UINT16 )CS_REVERB_96000_SCALE},
    456     {CS_REVERB_176400_A0,            /* 176kS/s coefficients */
    457      CS_REVERB_176400_A1,
    458      CS_REVERB_176400_A2,
    459      CS_REVERB_176400_B1,
    460      CS_REVERB_176400_B2,
    461      (LVM_UINT16)CS_REVERB_176400_SCALE},
    462      {CS_REVERB_192000_A0,            /* 192kS/s coefficients */
    463      CS_REVERB_192000_A1,
    464      CS_REVERB_192000_A2,
    465      CS_REVERB_192000_B1,
    466      CS_REVERB_192000_B2,
    467      (LVM_UINT16 )CS_REVERB_192000_SCALE}
    468 #endif
    469 };
    470 
    471 
    472 /************************************************************************************/
    473 /*                                                                                  */
    474 /*  Bypass mixer constant tables                                                    */
    475 /*                                                                                  */
    476 /************************************************************************************/
    477 
    478 const Gain_t LVCS_OutputGainTable[] = {
    479     {LVCS_HEADPHONE_SHIFT,         /* Headphone, stereo mode */
    480      LVCS_HEADPHONE_SHIFTLOSS,
    481      LVCS_HEADPHONE_GAIN},
    482     {LVCS_EX_HEADPHONE_SHIFT,      /* EX Headphone, stereo mode */
    483      LVCS_EX_HEADPHONE_SHIFTLOSS,
    484      LVCS_EX_HEADPHONE_GAIN},
    485     {LVCS_HEADPHONE_SHIFT,         /* Headphone, mono mode */
    486      LVCS_HEADPHONE_SHIFTLOSS,
    487      LVCS_HEADPHONE_GAIN},
    488     {LVCS_EX_HEADPHONE_SHIFT,      /* EX Headphone, mono mode */
    489      LVCS_EX_HEADPHONE_SHIFTLOSS,
    490      LVCS_EX_HEADPHONE_GAIN}
    491 };
    492 
    493 
    494 /************************************************************************************/
    495 /*                                                                                  */
    496 /*  Volume correction table                                                         */
    497 /*                                                                                  */
    498 /*  Coefficient order:                                                              */
    499 /*      Compression 100% effect                                                     */
    500 /*      Compression 0% effect                                                       */
    501 /*      Gain 100% effect                                                            */
    502 /*      Gain 0% effect                                                              */
    503 /*                                                                                  */
    504 /*  The Compression gain is represented by a Q1.15 number to give a range of 0dB    */
    505 /*  to +6dB, E.g.:                                                                  */
    506 /*          0       is 0dB compression (no effect)                                  */
    507 /*          5461    is 1dB compression gain                                         */
    508 /*          10923   is 2dB compression gain                                         */
    509 /*          32767   is 6dB compression gain                                         */
    510 /*                                                                                  */
    511 /*  The Gain is represented as a Q3.13 number to give a range of +8 to -infinity    */
    512 /*  E.g.:                                                                           */
    513 /*          0       is -infinity                                                    */
    514 /*          32767   is +18dB (x8) gain                                              */
    515 /*          4096    is 0dB gain                                                     */
    516 /*          1024    is -12dB gain                                                   */
    517 /*                                                                                  */
    518 /************************************************************************************/
    519 const LVCS_VolCorrect_t LVCS_VolCorrectTable[] = {
    520 #ifdef BUILD_FLOAT
    521     {0.433362f,          /* Headphone, stereo mode */
    522      0.000000f,
    523      1.000024f,
    524      1.412640f},
    525     {0.433362f,          /* EX Headphone, stereo mode */
    526      0.000000f,
    527      1.000024f,
    528      1.412640f},
    529     {1.000000f,         /* Headphone, mono mode */
    530      0.000000f,
    531      1.000024f,
    532      1.412640f},
    533     {1.000000f,         /* EX Headphone, mono mode */
    534      0.000000f,
    535      1.000024f,
    536      1.412640f}
    537 #else
    538     {14200,          /* Headphone, stereo mode */
    539      0,
    540      4096,
    541      5786},
    542     {14200,          /* EX Headphone, stereo mode */
    543      0,
    544      4096,
    545      5786},
    546     {32767,         /* Headphone, mono mode */
    547      0,
    548      4096,
    549      5786},
    550     {32767,         /* EX Headphone, mono mode */
    551      0,
    552      4096,
    553      5786}
    554 #endif
    555 };
    556 
    557 /************************************************************************************/
    558 /*                                                                                  */
    559 /*  Mixer time constants, 100ms                                                     */
    560 /*                                                                                  */
    561 /************************************************************************************/
    562 
    563 #define LVCS_VOL_TC_Fs8000      32580       /* Floating point value 0.994262695 */
    564 #define LVCS_VOL_TC_Fs11025     32632       /* Floating point value 0.995849609 */
    565 #define LVCS_VOL_TC_Fs12000     32643       /* Floating point value 0.996185303 */
    566 #define LVCS_VOL_TC_Fs16000     32674       /* Floating point value 0.997131348 */
    567 #define LVCS_VOL_TC_Fs22050     32700       /* Floating point value 0.997924805 */
    568 #define LVCS_VOL_TC_Fs24000     32705       /* Floating point value 0.998077393 */
    569 #define LVCS_VOL_TC_Fs32000     32721       /* Floating point value 0.998565674 */
    570 #define LVCS_VOL_TC_Fs44100     32734       /* Floating point value 0.998962402 */
    571 #define LVCS_VOL_TC_Fs48000     32737       /* Floating point value 0.999053955 */
    572 #if defined(BUILD_FLOAT) && defined(HIGHER_FS)
    573 #define LVCS_VOL_TC_Fs88200     32751       /* Floating point value 0.999481066 */
    574 #define LVCS_VOL_TC_Fs96000     32751       /* Floating point value 0.999511703 */   /* Todo @ need to re check this value*/
    575 #define LVCS_VOL_TC_Fs176400    32759       /* Floating point value 0.999740499 */
    576 #define LVCS_VOL_TC_Fs192000    32763       /* Floating point value 0.999877925 */  /* Todo @ need to re check this value*/
    577 #endif
    578 
    579 #if defined(BUILD_FLOAT) && defined(HIGHER_FS)
    580 const LVM_INT16 LVCS_VolumeTCTable[13] = {LVCS_VOL_TC_Fs8000,
    581                                           LVCS_VOL_TC_Fs11025,
    582                                           LVCS_VOL_TC_Fs12000,
    583                                           LVCS_VOL_TC_Fs16000,
    584                                           LVCS_VOL_TC_Fs22050,
    585                                           LVCS_VOL_TC_Fs24000,
    586                                           LVCS_VOL_TC_Fs32000,
    587                                           LVCS_VOL_TC_Fs44100,
    588                                           LVCS_VOL_TC_Fs48000,
    589                                           LVCS_VOL_TC_Fs88200,
    590                                           LVCS_VOL_TC_Fs96000,
    591                                           LVCS_VOL_TC_Fs176400,
    592                                           LVCS_VOL_TC_Fs192000
    593 };
    594 #else
    595 const LVM_INT16 LVCS_VolumeTCTable[9] = {LVCS_VOL_TC_Fs8000,
    596                                         LVCS_VOL_TC_Fs11025,
    597                                         LVCS_VOL_TC_Fs12000,
    598                                         LVCS_VOL_TC_Fs16000,
    599                                         LVCS_VOL_TC_Fs22050,
    600                                         LVCS_VOL_TC_Fs24000,
    601                                         LVCS_VOL_TC_Fs32000,
    602                                         LVCS_VOL_TC_Fs44100,
    603                                         LVCS_VOL_TC_Fs48000
    604 };
    605 #endif
    606 
    607 /************************************************************************************/
    608 /*                                                                                  */
    609 /*  Sample rate table                                                               */
    610 /*                                                                                  */
    611 /************************************************************************************/
    612 #if defined(BUILD_FLOAT) && defined(HIGHER_FS)
    613 const LVM_INT32   LVCS_SampleRateTable[13] = {8000,
    614                                               11025,
    615                                               12000,
    616                                               16000,
    617                                               22050,
    618                                               24000,
    619                                               32000,
    620                                               44100,
    621                                               48000,
    622                                               88200,
    623                                               96000,
    624                                               176400,
    625                                               192000
    626 };
    627 #else
    628 const LVM_INT16   LVCS_SampleRateTable[9] = {8000,
    629                                             11025,
    630                                             12000,
    631                                             16000,
    632                                             22050,
    633                                             24000,
    634                                             32000,
    635                                             44100,
    636                                             48000
    637 };
    638 #endif
    639