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 /*    Includes                                                                      */
     21 /*                                                                                  */
     22 /************************************************************************************/
     23 
     24 #include "LVM_Tables.h"
     25 #include "LVM_Coeffs.h"
     26 
     27 /************************************************************************************/
     28 /*                                                                                  */
     29 /*    Treble Boost Filter Coefficients                                              */
     30 /*                                                                                  */
     31 /************************************************************************************/
     32 
     33 FO_C16_LShx_Coefs_t    LVM_TrebleBoostCoefs[] = {
     34 
     35                     /* 22kHz sampling rate */
     36                     {HPF_Fs22050_Gain1_A1,             /* Gain setting 1 */
     37                      HPF_Fs22050_Gain1_A0,
     38                      -HPF_Fs22050_Gain1_B1,
     39                     HPF_Fs22050_Gain1_Shift},
     40                     {HPF_Fs22050_Gain2_A1,             /* Gain setting 2 */
     41                      HPF_Fs22050_Gain2_A0,
     42                      -HPF_Fs22050_Gain2_B1,
     43                     HPF_Fs22050_Gain2_Shift},
     44                     {HPF_Fs22050_Gain3_A1,             /* Gain setting 3 */
     45                      HPF_Fs22050_Gain3_A0,
     46                      -HPF_Fs22050_Gain3_B1,
     47                     HPF_Fs22050_Gain3_Shift},
     48                     {HPF_Fs22050_Gain4_A1,             /* Gain setting 4 */
     49                      HPF_Fs22050_Gain4_A0,
     50                      -HPF_Fs22050_Gain4_B1,
     51                     HPF_Fs22050_Gain4_Shift},
     52                     {HPF_Fs22050_Gain5_A1,             /* Gain setting 5 */
     53                      HPF_Fs22050_Gain5_A0,
     54                      -HPF_Fs22050_Gain5_B1,
     55                     HPF_Fs22050_Gain5_Shift},
     56                     {HPF_Fs22050_Gain6_A1,             /* Gain setting 6 */
     57                      HPF_Fs22050_Gain6_A0,
     58                      -HPF_Fs22050_Gain6_B1,
     59                     HPF_Fs22050_Gain6_Shift},
     60                     {HPF_Fs22050_Gain7_A1,             /* Gain setting 7 */
     61                      HPF_Fs22050_Gain7_A0,
     62                      -HPF_Fs22050_Gain7_B1,
     63                     HPF_Fs22050_Gain7_Shift},
     64                     {HPF_Fs22050_Gain8_A1,             /* Gain setting 8 */
     65                      HPF_Fs22050_Gain8_A0,
     66                      -HPF_Fs22050_Gain8_B1,
     67                     HPF_Fs22050_Gain8_Shift},
     68                     {HPF_Fs22050_Gain9_A1,             /* Gain setting 9 */
     69                      HPF_Fs22050_Gain9_A0,
     70                      -HPF_Fs22050_Gain9_B1,
     71                     HPF_Fs22050_Gain9_Shift},
     72                     {HPF_Fs22050_Gain10_A1,             /* Gain setting 10 */
     73                      HPF_Fs22050_Gain10_A0,
     74                      -HPF_Fs22050_Gain10_B1,
     75                     HPF_Fs22050_Gain10_Shift},
     76                     {HPF_Fs22050_Gain11_A1,             /* Gain setting 11 */
     77                      HPF_Fs22050_Gain11_A0,
     78                      -HPF_Fs22050_Gain11_B1,
     79                     HPF_Fs22050_Gain11_Shift},
     80                     {HPF_Fs22050_Gain12_A1,             /* Gain setting 12 */
     81                      HPF_Fs22050_Gain12_A0,
     82                      -HPF_Fs22050_Gain12_B1,
     83                     HPF_Fs22050_Gain12_Shift},
     84                     {HPF_Fs22050_Gain13_A1,             /* Gain setting 13 */
     85                      HPF_Fs22050_Gain13_A0,
     86                      -HPF_Fs22050_Gain13_B1,
     87                     HPF_Fs22050_Gain13_Shift},
     88                     {HPF_Fs22050_Gain14_A1,             /* Gain setting 14 */
     89                      HPF_Fs22050_Gain14_A0,
     90                      -HPF_Fs22050_Gain14_B1,
     91                     HPF_Fs22050_Gain14_Shift},
     92                     {HPF_Fs22050_Gain15_A1,             /* Gain setting 15 */
     93                      HPF_Fs22050_Gain15_A0,
     94                      -HPF_Fs22050_Gain15_B1,
     95                     HPF_Fs22050_Gain15_Shift},
     96 
     97                     /* 24kHz sampling rate */
     98                     {HPF_Fs24000_Gain1_A1,             /* Gain setting 1 */
     99                      HPF_Fs24000_Gain1_A0,
    100                      -HPF_Fs24000_Gain1_B1,
    101                      HPF_Fs24000_Gain1_Shift},
    102                     {HPF_Fs24000_Gain2_A1,             /* Gain setting 2 */
    103                      HPF_Fs24000_Gain2_A0,
    104                      -HPF_Fs24000_Gain2_B1,
    105                      HPF_Fs24000_Gain2_Shift},
    106                     {HPF_Fs24000_Gain3_A1,             /* Gain setting 3 */
    107                      HPF_Fs24000_Gain3_A0,
    108                      -HPF_Fs24000_Gain3_B1,
    109                      HPF_Fs24000_Gain3_Shift},
    110                     {HPF_Fs24000_Gain4_A1,             /* Gain setting 4 */
    111                      HPF_Fs24000_Gain4_A0,
    112                      -HPF_Fs24000_Gain4_B1,
    113                      HPF_Fs24000_Gain4_Shift},
    114                     {HPF_Fs24000_Gain5_A1,             /* Gain setting 5 */
    115                      HPF_Fs24000_Gain5_A0,
    116                      -HPF_Fs24000_Gain5_B1,
    117                      HPF_Fs24000_Gain5_Shift},
    118                     {HPF_Fs24000_Gain6_A1,             /* Gain setting 6 */
    119                      HPF_Fs24000_Gain6_A0,
    120                      -HPF_Fs24000_Gain6_B1,
    121                      HPF_Fs24000_Gain6_Shift},
    122                     {HPF_Fs24000_Gain7_A1,             /* Gain setting 7 */
    123                      HPF_Fs24000_Gain7_A0,
    124                      -HPF_Fs24000_Gain7_B1,
    125                      HPF_Fs24000_Gain7_Shift},
    126                     {HPF_Fs24000_Gain8_A1,             /* Gain setting 8 */
    127                      HPF_Fs24000_Gain8_A0,
    128                      -HPF_Fs24000_Gain8_B1,
    129                      HPF_Fs24000_Gain8_Shift},
    130                     {HPF_Fs24000_Gain9_A1,             /* Gain setting 9 */
    131                      HPF_Fs24000_Gain9_A0,
    132                      -HPF_Fs24000_Gain9_B1,
    133                      HPF_Fs24000_Gain9_Shift},
    134                     {HPF_Fs24000_Gain10_A1,             /* Gain setting 10 */
    135                      HPF_Fs24000_Gain10_A0,
    136                      -HPF_Fs24000_Gain10_B1,
    137                      HPF_Fs24000_Gain10_Shift},
    138                     {HPF_Fs24000_Gain11_A1,             /* Gain setting 11 */
    139                      HPF_Fs24000_Gain11_A0,
    140                      -HPF_Fs24000_Gain11_B1,
    141                      HPF_Fs24000_Gain11_Shift},
    142                     {HPF_Fs24000_Gain12_A1,             /* Gain setting 12 */
    143                      HPF_Fs24000_Gain12_A0,
    144                      -HPF_Fs24000_Gain12_B1,
    145                      HPF_Fs24000_Gain12_Shift},
    146                     {HPF_Fs24000_Gain13_A1,             /* Gain setting 13 */
    147                      HPF_Fs24000_Gain13_A0,
    148                      -HPF_Fs24000_Gain13_B1,
    149                      HPF_Fs24000_Gain13_Shift},
    150                     {HPF_Fs24000_Gain14_A1,             /* Gain setting 14 */
    151                      HPF_Fs24000_Gain14_A0,
    152                      -HPF_Fs24000_Gain14_B1,
    153                      HPF_Fs24000_Gain14_Shift},
    154                     {HPF_Fs24000_Gain15_A1,             /* Gain setting 15 */
    155                      HPF_Fs24000_Gain15_A0,
    156                      -HPF_Fs24000_Gain15_B1,
    157                      HPF_Fs24000_Gain15_Shift},
    158 
    159                     /* 32kHz sampling rate */
    160                     {HPF_Fs32000_Gain1_A1,             /* Gain setting 1 */
    161                      HPF_Fs32000_Gain1_A0,
    162                      -HPF_Fs32000_Gain1_B1,
    163                     HPF_Fs32000_Gain1_Shift},
    164                     {HPF_Fs32000_Gain2_A1,             /* Gain setting 2 */
    165                      HPF_Fs32000_Gain2_A0,
    166                      -HPF_Fs32000_Gain2_B1,
    167                     HPF_Fs32000_Gain2_Shift},
    168                     {HPF_Fs32000_Gain3_A1,             /* Gain setting 3 */
    169                      HPF_Fs32000_Gain3_A0,
    170                      -HPF_Fs32000_Gain3_B1,
    171                     HPF_Fs32000_Gain3_Shift},
    172                     {HPF_Fs32000_Gain4_A1,             /* Gain setting 4 */
    173                      HPF_Fs32000_Gain4_A0,
    174                      -HPF_Fs32000_Gain4_B1,
    175                     HPF_Fs32000_Gain4_Shift},
    176                     {HPF_Fs32000_Gain5_A1,             /* Gain setting 5 */
    177                      HPF_Fs32000_Gain5_A0,
    178                      -HPF_Fs32000_Gain5_B1,
    179                     HPF_Fs32000_Gain5_Shift},
    180                     {HPF_Fs32000_Gain6_A1,             /* Gain setting 6 */
    181                      HPF_Fs32000_Gain6_A0,
    182                      -HPF_Fs32000_Gain6_B1,
    183                     HPF_Fs32000_Gain6_Shift},
    184                     {HPF_Fs32000_Gain7_A1,             /* Gain setting 7 */
    185                      HPF_Fs32000_Gain7_A0,
    186                      -HPF_Fs32000_Gain7_B1,
    187                     HPF_Fs32000_Gain7_Shift},
    188                     {HPF_Fs32000_Gain8_A1,             /* Gain setting 8 */
    189                      HPF_Fs32000_Gain8_A0,
    190                      -HPF_Fs32000_Gain8_B1,
    191                     HPF_Fs32000_Gain8_Shift},
    192                     {HPF_Fs32000_Gain9_A1,             /* Gain setting 9 */
    193                      HPF_Fs32000_Gain9_A0,
    194                      -HPF_Fs32000_Gain9_B1,
    195                     HPF_Fs32000_Gain9_Shift},
    196                     {HPF_Fs32000_Gain10_A1,             /* Gain setting 10 */
    197                      HPF_Fs32000_Gain10_A0,
    198                      -HPF_Fs32000_Gain10_B1,
    199                     HPF_Fs32000_Gain10_Shift},
    200                     {HPF_Fs32000_Gain11_A1,             /* Gain setting 11 */
    201                      HPF_Fs32000_Gain11_A0,
    202                      -HPF_Fs32000_Gain11_B1,
    203                     HPF_Fs32000_Gain11_Shift},
    204                     {HPF_Fs32000_Gain12_A1,             /* Gain setting 12 */
    205                      HPF_Fs32000_Gain12_A0,
    206                      -HPF_Fs32000_Gain12_B1,
    207                     HPF_Fs32000_Gain12_Shift},
    208                     {HPF_Fs32000_Gain13_A1,             /* Gain setting 13 */
    209                      HPF_Fs32000_Gain13_A0,
    210                      -HPF_Fs32000_Gain13_B1,
    211                     HPF_Fs32000_Gain13_Shift},
    212                     {HPF_Fs32000_Gain14_A1,             /* Gain setting 14 */
    213                      HPF_Fs32000_Gain14_A0,
    214                      -HPF_Fs32000_Gain14_B1,
    215                     HPF_Fs32000_Gain14_Shift},
    216                     {HPF_Fs32000_Gain15_A1,             /* Gain setting 15 */
    217                      HPF_Fs32000_Gain15_A0,
    218                      -HPF_Fs32000_Gain15_B1,
    219                     HPF_Fs32000_Gain15_Shift},
    220 
    221                     /* 44kHz sampling rate */
    222                     {HPF_Fs44100_Gain1_A1,             /* Gain setting 1 */
    223                      HPF_Fs44100_Gain1_A0,
    224                      -HPF_Fs44100_Gain1_B1,
    225                      HPF_Fs44100_Gain1_Shift},
    226                     {HPF_Fs44100_Gain2_A1,             /* Gain setting 2 */
    227                      HPF_Fs44100_Gain2_A0,
    228                      -HPF_Fs44100_Gain2_B1,
    229                      HPF_Fs44100_Gain2_Shift},
    230                     {HPF_Fs44100_Gain3_A1,             /* Gain setting 3 */
    231                      HPF_Fs44100_Gain3_A0,
    232                      -HPF_Fs44100_Gain3_B1,
    233                      HPF_Fs44100_Gain3_Shift},
    234                     {HPF_Fs44100_Gain4_A1,             /* Gain setting 4 */
    235                      HPF_Fs44100_Gain4_A0,
    236                      -HPF_Fs44100_Gain4_B1,
    237                      HPF_Fs44100_Gain4_Shift},
    238                     {HPF_Fs44100_Gain5_A1,             /* Gain setting 5 */
    239                      HPF_Fs44100_Gain5_A0,
    240                      -HPF_Fs44100_Gain5_B1,
    241                      HPF_Fs44100_Gain5_Shift},
    242                     {HPF_Fs44100_Gain6_A1,             /* Gain setting 6 */
    243                      HPF_Fs44100_Gain6_A0,
    244                      -HPF_Fs44100_Gain6_B1,
    245                      HPF_Fs44100_Gain6_Shift},
    246                     {HPF_Fs44100_Gain7_A1,             /* Gain setting 7 */
    247                      HPF_Fs44100_Gain7_A0,
    248                      -HPF_Fs44100_Gain7_B1,
    249                      HPF_Fs44100_Gain7_Shift},
    250                     {HPF_Fs44100_Gain8_A1,             /* Gain setting 8 */
    251                      HPF_Fs44100_Gain8_A0,
    252                      -HPF_Fs44100_Gain8_B1,
    253                      HPF_Fs44100_Gain8_Shift},
    254                     {HPF_Fs44100_Gain9_A1,             /* Gain setting 9 */
    255                      HPF_Fs44100_Gain9_A0,
    256                      -HPF_Fs44100_Gain9_B1,
    257                      HPF_Fs44100_Gain9_Shift},
    258                     {HPF_Fs44100_Gain10_A1,             /* Gain setting 10 */
    259                      HPF_Fs44100_Gain10_A0,
    260                      -HPF_Fs44100_Gain10_B1,
    261                      HPF_Fs44100_Gain10_Shift},
    262                     {HPF_Fs44100_Gain11_A1,             /* Gain setting 11 */
    263                      HPF_Fs44100_Gain11_A0,
    264                      -HPF_Fs44100_Gain11_B1,
    265                      HPF_Fs44100_Gain11_Shift},
    266                     {HPF_Fs44100_Gain12_A1,             /* Gain setting 12 */
    267                      HPF_Fs44100_Gain12_A0,
    268                      -HPF_Fs44100_Gain12_B1,
    269                      HPF_Fs44100_Gain12_Shift},
    270                     {HPF_Fs44100_Gain13_A1,             /* Gain setting 13 */
    271                      HPF_Fs44100_Gain13_A0,
    272                      -HPF_Fs44100_Gain13_B1,
    273                      HPF_Fs44100_Gain13_Shift},
    274                     {HPF_Fs44100_Gain14_A1,             /* Gain setting 14 */
    275                      HPF_Fs44100_Gain14_A0,
    276                      -HPF_Fs44100_Gain14_B1,
    277                      HPF_Fs44100_Gain14_Shift},
    278                     {HPF_Fs44100_Gain15_A1,             /* Gain setting 15 */
    279                      HPF_Fs44100_Gain15_A0,
    280                      -HPF_Fs44100_Gain15_B1,
    281                      HPF_Fs44100_Gain15_Shift},
    282 
    283                     /* 48kHz sampling rate */
    284                     {HPF_Fs48000_Gain1_A1,             /* Gain setting 1 */
    285                      HPF_Fs48000_Gain1_A0,
    286                      -HPF_Fs48000_Gain1_B1,
    287                      HPF_Fs48000_Gain1_Shift},
    288                     {HPF_Fs48000_Gain2_A1,             /* Gain setting 2 */
    289                      HPF_Fs48000_Gain2_A0,
    290                      -HPF_Fs48000_Gain2_B1,
    291                      HPF_Fs48000_Gain2_Shift},
    292                     {HPF_Fs48000_Gain3_A1,             /* Gain setting 3 */
    293                      HPF_Fs48000_Gain3_A0,
    294                      -HPF_Fs48000_Gain3_B1,
    295                      HPF_Fs48000_Gain3_Shift},
    296                     {HPF_Fs48000_Gain4_A1,             /* Gain setting 4 */
    297                      HPF_Fs48000_Gain4_A0,
    298                      -HPF_Fs48000_Gain4_B1,
    299                      HPF_Fs48000_Gain4_Shift},
    300                     {HPF_Fs48000_Gain5_A1,             /* Gain setting 5 */
    301                      HPF_Fs48000_Gain5_A0,
    302                      -HPF_Fs48000_Gain5_B1,
    303                      HPF_Fs48000_Gain5_Shift},
    304                     {HPF_Fs48000_Gain6_A1,             /* Gain setting 6 */
    305                      HPF_Fs48000_Gain6_A0,
    306                      -HPF_Fs48000_Gain6_B1,
    307                      HPF_Fs48000_Gain6_Shift},
    308                     {HPF_Fs48000_Gain7_A1,             /* Gain setting 7 */
    309                      HPF_Fs48000_Gain7_A0,
    310                      -HPF_Fs48000_Gain7_B1,
    311                      HPF_Fs48000_Gain7_Shift},
    312                     {HPF_Fs48000_Gain8_A1,             /* Gain setting 8 */
    313                      HPF_Fs48000_Gain8_A0,
    314                      -HPF_Fs48000_Gain8_B1,
    315                      HPF_Fs48000_Gain8_Shift},
    316                     {HPF_Fs48000_Gain9_A1,             /* Gain setting 9 */
    317                      HPF_Fs48000_Gain9_A0,
    318                      -HPF_Fs48000_Gain9_B1,
    319                      HPF_Fs48000_Gain9_Shift},
    320                     {HPF_Fs48000_Gain10_A1,             /* Gain setting 10 */
    321                      HPF_Fs48000_Gain10_A0,
    322                      -HPF_Fs48000_Gain10_B1,
    323                      HPF_Fs48000_Gain10_Shift},
    324                     {HPF_Fs48000_Gain11_A1,             /* Gain setting 11 */
    325                      HPF_Fs48000_Gain11_A0,
    326                      -HPF_Fs48000_Gain11_B1,
    327                      HPF_Fs48000_Gain11_Shift},
    328                     {HPF_Fs48000_Gain12_A1,             /* Gain setting 12 */
    329                      HPF_Fs48000_Gain12_A0,
    330                      -HPF_Fs48000_Gain12_B1,
    331                      HPF_Fs48000_Gain12_Shift},
    332                     {HPF_Fs48000_Gain13_A1,             /* Gain setting 13 */
    333                      HPF_Fs48000_Gain13_A0,
    334                      -HPF_Fs48000_Gain13_B1,
    335                      HPF_Fs48000_Gain13_Shift},
    336                     {HPF_Fs48000_Gain14_A1,             /* Gain setting 14 */
    337                      HPF_Fs48000_Gain14_A0,
    338                      -HPF_Fs48000_Gain14_B1,
    339                      HPF_Fs48000_Gain14_Shift},
    340                     {HPF_Fs48000_Gain15_A1,             /* Gain setting 15 */
    341                      HPF_Fs48000_Gain15_A0,
    342                      -HPF_Fs48000_Gain15_B1,
    343                      HPF_Fs48000_Gain15_Shift}};
    344 
    345 
    346 /************************************************************************************/
    347 /*                                                                                    */
    348 /*    Volume control gain and time constant tables                                    */
    349 /*                                                                                    */
    350 /************************************************************************************/
    351 
    352 /* dB to linear conversion table */
    353 const LVM_INT16 LVM_VolumeTable[] = {
    354     0x7FFF,             /*  0dB */
    355     0x7215,             /* -1dB */
    356     0x65AD,             /* -2dB */
    357     0x5A9E,             /* -3dB */
    358     0x50C3,             /* -4dB */
    359     0x47FB,             /* -5dB */
    360     0x4000};            /* -6dB */
    361 
    362 /************************************************************************************/
    363 /*                                                                                  */
    364 /*  Volume mixer time constants (100ms)                                             */
    365 /*                                                                                  */
    366 /************************************************************************************/
    367 
    368 #define LVM_MIX_TC_Fs8000      32580         /* Floating point value 0.994262695 */
    369 #define LVM_MIX_TC_Fs11025     32632         /* Floating point value 0.995849609 */
    370 #define LVM_MIX_TC_Fs12000     32643         /* Floating point value 0.996185303 */
    371 #define LVM_MIX_TC_Fs16000     32674         /* Floating point value 0.997131348 */
    372 #define LVM_MIX_TC_Fs22050     32700         /* Floating point value 0.997924805 */
    373 #define LVM_MIX_TC_Fs24000     32705         /* Floating point value 0.998077393 */
    374 #define LVM_MIX_TC_Fs32000     32721         /* Floating point value 0.998565674 */
    375 #define LVM_MIX_TC_Fs44100     32734         /* Floating point value 0.998962402 */
    376 #define LVM_MIX_TC_Fs48000     32737         /* Floating point value 0.999053955 */
    377 
    378 
    379 const LVM_INT16 LVM_MixerTCTable[] = {
    380     LVM_MIX_TC_Fs8000,
    381     LVM_MIX_TC_Fs11025,
    382     LVM_MIX_TC_Fs12000,
    383     LVM_MIX_TC_Fs16000,
    384     LVM_MIX_TC_Fs22050,
    385     LVM_MIX_TC_Fs24000,
    386     LVM_MIX_TC_Fs32000,
    387     LVM_MIX_TC_Fs44100,
    388     LVM_MIX_TC_Fs48000};
    389 
    390