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