xref: /third_party/ffmpeg/libavcodec/ilbcdata.h (revision cabdff1a)
1/*
2 * Copyright (c) 2013, The WebRTC project authors. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 *
8 *   * Redistributions of source code must retain the above copyright
9 *     notice, this list of conditions and the following disclaimer.
10 *
11 *   * Redistributions in binary form must reproduce the above copyright
12 *     notice, this list of conditions and the following disclaimer in
13 *     the documentation and/or other materials provided with the
14 *     distribution.
15 *
16 *   * Neither the name of Google nor the names of its contributors may
17 *     be used to endorse or promote products derived from this software
18 *     without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33#ifndef AVCODEC_ILBCDATA_H
34#define AVCODEC_ILBCDATA_H
35
36#include "libavutil/common.h"
37
38static const uint8_t lsf_dim_codebook[] = { 3, 3, 4 };
39static const uint8_t lsf_size_codebook[] = { 64, 128, 128 };
40static const int16_t lsf_weight_20ms[] = { 12288, 8192, 4096, 0 };
41static const int16_t lsf_weight_30ms[] = { 8192, 16384, 10923, 5461, 0, 0 };
42
43static const int16_t hp_out_coeffs[] = { 3849, -7699, 3849, 7918, -3833 };
44
45static const int16_t kPlcPfSlope[] = { 26667, 18729, 13653, 10258, 7901, 6214 };
46
47static const int16_t kPlcPitchFact[] = { 0, 5462, 10922, 16384, 21846, 27306 };
48
49static const int16_t kCbFiltersRev[] = {
50    -140, 446, -755, 3302, 2922, -590, 343, -138
51};
52
53static const int16_t kPlcPerSqr[] = { 839, 1343, 2048, 2998, 4247, 5849 };
54
55static const int16_t alpha[] = {
56    6554, 13107, 19661, 26214
57};
58
59static const int16_t kLpcChirpSyntDenum[] = {
60    32767, 29573, 26690, 24087, 21739, 19619, 17707, 15980, 14422, 13016, 11747
61};
62
63static const int16_t cos_tbl[64] = {
64    32767,  32729,  32610,  32413,  32138,  31786,  31357,   30853,
65    30274,  29622,  28899,  28106,  27246,  26320,  25330,   24279,
66    23170,  22006,  20788,  19520,  18205,  16846,  15447,   14010,
67    12540,  11039,   9512,   7962,   6393,   4808,   3212,    1608,
68    0,      -1608,  -3212,  -4808,  -6393,  -7962,  -9512,  -11039,
69    -12540, -14010, -15447, -16846, -18205, -19520, -20788, -22006,
70    -23170, -24279, -25330, -26320, -27246, -28106, -28899, -29622,
71    -30274, -30853, -31357, -31786, -32138, -32413, -32610, -32729,
72};
73
74static const int16_t cos_derivative_tbl[64] = {
75    -632,  -1893,  -3150,  -4399,  -5638,  -6863,  -8072,  -9261,
76    -10428, -11570, -12684, -13767, -14817, -15832, -16808, -17744,
77    -18637, -19486, -20287, -21039, -21741, -22390, -22986, -23526,
78    -24009, -24435, -24801, -25108, -25354, -25540, -25664, -25726,
79    -25726, -25664, -25540, -25354, -25108, -24801, -24435, -24009,
80    -23526, -22986, -22390, -21741, -21039, -20287, -19486, -18637,
81    -17744, -16808, -15832, -14817, -13767, -12684, -11570, -10428,
82    -9261,  -8072,  -6863,  -5638,  -4399,  -3150,  -1893,   -632
83};
84
85static const int16_t lsf_codebook[64 * 3 + 128 * 3 + 128 * 4] = {
86    1273, 2238, 3696, 3199, 5309, 8209, 3606, 5671, 7829,
87    2815, 5262, 8778, 2608, 4027, 5493, 1582, 3076, 5945,
88    2983, 4181, 5396, 2437, 4322, 6902, 1861, 2998, 4613,
89    2007, 3250, 5214, 1388, 2459, 4262, 2563, 3805, 5269,
90    2036, 3522, 5129, 1935, 4025, 6694, 2744, 5121, 7338,
91    2810, 4248, 5723, 3054, 5405, 7745, 1449, 2593, 4763,
92    3411, 5128, 6596, 2484, 4659, 7496, 1668, 2879, 4818,
93    1812, 3072, 5036, 1638, 2649, 3900, 2464, 3550, 4644,
94    1853, 2900, 4158, 2458, 4163, 5830, 2556, 4036, 6254,
95    2703, 4432, 6519, 3062, 4953, 7609, 1725, 3703, 6187,
96    2221, 3877, 5427, 2339, 3579, 5197, 2021, 4633, 7037,
97    2216, 3328, 4535, 2961, 4739, 6667, 2807, 3955, 5099,
98    2788, 4501, 6088, 1642, 2755, 4431, 3341, 5282, 7333,
99    2414, 3726, 5727, 1582, 2822, 5269, 2259, 3447, 4905,
100    3117, 4986, 7054, 1825, 3491, 5542, 3338, 5736, 8627,
101    1789, 3090, 5488, 2566, 3720, 4923, 2846, 4682, 7161,
102    1950, 3321, 5976, 1834, 3383, 6734, 3238, 4769, 6094,
103    2031, 3978, 5903, 1877, 4068, 7436, 2131, 4644, 8296,
104    2764, 5010, 8013, 2194, 3667, 6302, 2053, 3127, 4342,
105    3523, 6595, 10010, 3134, 4457, 5748, 3142, 5819, 9414,
106    2223, 4334, 6353, 2022, 3224, 4822, 2186, 3458, 5544,
107    2552, 4757, 6870, 10905, 12917, 14578, 9503, 11485, 14485,
108    9518, 12494, 14052, 6222, 7487, 9174, 7759, 9186, 10506,
109    8315, 12755, 14786, 9609, 11486, 13866, 8909, 12077, 13643,
110    7369, 9054, 11520, 9408, 12163, 14715, 6436, 9911, 12843,
111    7109, 9556, 11884, 7557, 10075, 11640, 6482, 9202, 11547,
112    6463, 7914, 10980, 8611, 10427, 12752, 7101, 9676, 12606,
113    7428, 11252, 13172, 10197, 12955, 15842, 7487, 10955, 12613,
114    5575, 7858, 13621, 7268, 11719, 14752, 7476, 11744, 13795,
115    7049, 8686, 11922, 8234, 11314, 13983, 6560, 11173, 14984,
116    6405, 9211, 12337, 8222, 12054, 13801, 8039, 10728, 13255,
117    10066, 12733, 14389, 6016, 7338, 10040, 6896, 8648, 10234,
118    7538, 9170, 12175, 7327, 12608, 14983, 10516, 12643, 15223,
119    5538, 7644, 12213, 6728, 12221, 14253, 7563, 9377, 12948,
120    8661, 11023, 13401, 7280, 8806, 11085, 7723, 9793, 12333,
121    12225, 14648, 16709, 8768, 13389, 15245, 10267, 12197, 13812,
122    5301, 7078, 11484, 7100, 10280, 11906, 8716, 12555, 14183,
123    9567, 12464, 15434, 7832, 12305, 14300, 7608, 10556, 12121,
124    8913, 11311, 12868, 7414, 9722, 11239, 8666, 11641, 13250,
125    9079, 10752, 12300, 8024, 11608, 13306, 10453, 13607, 16449,
126    8135, 9573, 10909, 6375, 7741, 10125, 10025, 12217, 14874,
127    6985, 11063, 14109, 9296, 13051, 14642, 8613, 10975, 12542,
128    6583, 10414, 13534, 6191, 9368, 13430, 5742, 6859, 9260,
129    7723, 9813, 13679, 8137, 11291, 12833, 6562, 8973, 10641,
130    6062, 8462, 11335, 6928, 8784, 12647, 7501, 8784, 10031,
131    8372, 10045, 12135, 8191, 9864, 12746, 5917, 7487, 10979,
132    5516, 6848, 10318, 6819, 9899, 11421, 7882, 12912, 15670,
133    9558, 11230, 12753, 7752, 9327, 11472, 8479, 9980, 11358,
134    11418, 14072, 16386, 7968, 10330, 14423, 8423, 10555, 12162,
135    6337, 10306, 14391, 8850, 10879, 14276, 6750, 11885, 15710,
136    7037, 8328, 9764, 6914, 9266, 13476, 9746, 13949, 15519,
137    11032, 14444, 16925, 8032, 10271, 11810, 10962, 13451, 15833,
138    10021, 11667, 13324, 6273, 8226, 12936, 8543, 10397, 13496,
139    7936, 10302, 12745, 6769, 8138, 10446, 6081, 7786, 11719,
140    8637, 11795, 14975, 8790, 10336, 11812, 7040, 8490, 10771,
141    7338, 10381, 13153, 6598, 7888, 9358, 6518, 8237, 12030,
142    9055, 10763, 12983, 6490, 10009, 12007, 9589, 12023, 13632,
143    6867, 9447, 10995, 7930, 9816, 11397, 10241, 13300, 14939,
144    5830, 8670, 12387, 9870, 11915, 14247, 9318, 11647, 13272,
145    6721, 10836, 12929, 6543, 8233, 9944, 8034, 10854, 12394,
146    9112, 11787, 14218, 9302, 11114, 13400, 9022, 11366, 13816,
147    6962, 10461, 12480, 11288, 13333, 15222, 7249, 8974, 10547,
148    10566, 12336, 14390, 6697, 11339, 13521, 11851, 13944, 15826,
149    6847, 8381, 11349, 7509, 9331, 10939, 8029, 9618, 11909,
150    13973, 17644, 19647, 22474, 14722, 16522, 20035, 22134, 16305, 18179, 21106, 23048,
151    15150, 17948, 21394, 23225, 13582, 15191, 17687, 22333, 11778, 15546, 18458, 21753,
152    16619, 18410, 20827, 23559, 14229, 15746, 17907, 22474, 12465, 15327, 20700, 22831,
153    15085, 16799, 20182, 23410, 13026, 16935, 19890, 22892, 14310, 16854, 19007, 22944,
154    14210, 15897, 18891, 23154, 14633, 18059, 20132, 22899, 15246, 17781, 19780, 22640,
155    16396, 18904, 20912, 23035, 14618, 17401, 19510, 21672, 15473, 17497, 19813, 23439,
156    18851, 20736, 22323, 23864, 15055, 16804, 18530, 20916, 16490, 18196, 19990, 21939,
157    11711, 15223, 21154, 23312, 13294, 15546, 19393, 21472, 12956, 16060, 20610, 22417,
158    11628, 15843, 19617, 22501, 14106, 16872, 19839, 22689, 15655, 18192, 20161, 22452,
159    12953, 15244, 20619, 23549, 15322, 17193, 19926, 21762, 16873, 18676, 20444, 22359,
160    14874, 17871, 20083, 21959, 11534, 14486, 19194, 21857, 17766, 19617, 21338, 23178,
161    13404, 15284, 19080, 23136, 15392, 17527, 19470, 21953, 14462, 16153, 17985, 21192,
162    17734, 19750, 21903, 23783, 16973, 19096, 21675, 23815, 16597, 18936, 21257, 23461,
163    15966, 17865, 20602, 22920, 15416, 17456, 20301, 22972, 18335, 20093, 21732, 23497,
164    15548, 17217, 20679, 23594, 15208, 16995, 20816, 22870, 13890, 18015, 20531, 22468,
165    13211, 15377, 19951, 22388, 12852, 14635, 17978, 22680, 16002, 17732, 20373, 23544,
166    11373, 14134, 19534, 22707, 17329, 19151, 21241, 23462, 15612, 17296, 19362, 22850,
167    15422, 19104, 21285, 23164, 13792, 17111, 19349, 21370, 15352, 17876, 20776, 22667,
168    15253, 16961, 18921, 22123, 14108, 17264, 20294, 23246, 15785, 17897, 20010, 21822,
169    17399, 19147, 20915, 22753, 13010, 15659, 18127, 20840, 16826, 19422, 22218, 24084,
170    18108, 20641, 22695, 24237, 18018, 20273, 22268, 23920, 16057, 17821, 21365, 23665,
171    16005, 17901, 19892, 23016, 13232, 16683, 21107, 23221, 13280, 16615, 19915, 21829,
172    14950, 18575, 20599, 22511, 16337, 18261, 20277, 23216, 14306, 16477, 21203, 23158,
173    12803, 17498, 20248, 22014, 14327, 17068, 20160, 22006, 14402, 17461, 21599, 23688,
174    16968, 18834, 20896, 23055, 15070, 17157, 20451, 22315, 15419, 17107, 21601, 23946,
175    16039, 17639, 19533, 21424, 16326, 19261, 21745, 23673, 16489, 18534, 21658, 23782,
176    16594, 18471, 20549, 22807, 18973, 21212, 22890, 24278, 14264, 18674, 21123, 23071,
177    15117, 16841, 19239, 23118, 13762, 15782, 20478, 23230, 14111, 15949, 20058, 22354,
178    14990, 16738, 21139, 23492, 13735, 16971, 19026, 22158, 14676, 17314, 20232, 22807,
179    16196, 18146, 20459, 22339, 14747, 17258, 19315, 22437, 14973, 17778, 20692, 23367,
180    15715, 17472, 20385, 22349, 15702, 18228, 20829, 23410, 14428, 16188, 20541, 23630,
181    16824, 19394, 21365, 23246, 13069, 16392, 18900, 21121, 12047, 16640, 19463, 21689,
182    14757, 17433, 19659, 23125, 15185, 16930, 19900, 22540, 16026, 17725, 19618, 22399,
183    16086, 18643, 21179, 23472, 15462, 17248, 19102, 21196, 17368, 20016, 22396, 24096,
184    12340, 14475, 19665, 23362, 13636, 16229, 19462, 22728, 14096, 16211, 19591, 21635,
185    12152, 14867, 19943, 22301, 14492, 17503, 21002, 22728, 14834, 16788, 19447, 21411,
186    14650, 16433, 19326, 22308, 14624, 16328, 19659, 23204, 13888, 16572, 20665, 22488,
187    12977, 16102, 18841, 22246, 15523, 18431, 21757, 23738, 14095, 16349, 18837, 20947,
188    13266, 17809, 21088, 22839, 15427, 18190, 20270, 23143, 11859, 16753, 20935, 22486,
189    12310, 17667, 21736, 23319, 14021, 15926, 18702, 22002, 12286, 15299, 19178, 21126,
190    15703, 17491, 21039, 23151, 12272, 14018, 18213, 22570, 14817, 16364, 18485, 22598,
191    17109, 19683, 21851, 23677, 12657, 14903, 19039, 22061, 14713, 16487, 20527, 22814,
192    14635, 16726, 18763, 21715, 15878, 18550, 20718, 22906
193};
194
195static const int16_t gain3[9]={
196    -16384, -10813, -5407, 0, 4096, 8192, 12288, 16384, 32767
197};
198
199static const int16_t gain4[17]={
200    -17203, -14746, -12288, -9830, -7373, -4915, -2458, 0, 2458, 4915, 7373, 9830,
201    12288, 14746, 17203, 19661, 32767
202};
203
204static const int16_t gain5[33]={
205    614,   1229,  1843,  2458,  3072,  3686,
206    4301,  4915,  5530,  6144,  6758,  7373,
207    7987,  8602,  9216,  9830,  10445, 11059,
208    11674, 12288, 12902, 13517, 14131, 14746,
209    15360, 15974, 16589, 17203, 17818, 18432,
210    19046, 19661, 32767
211};
212
213static const int16_t *const ilbc_gain[] = {
214    gain5, gain4, gain3,
215};
216
217static const int16_t ilbc_state[8] = {
218   -30473, -17838, -9257, -2537, 3639, 10893, 19958, 32636
219};
220
221static const int16_t frg_quant_mod[64] = {
222    /* First 37 values in Q8 */
223    569, 671, 786, 916, 1077, 1278,
224    1529, 1802, 2109, 2481, 2898, 3440,
225    3943, 4535, 5149, 5778, 6464, 7208,
226    7904, 8682, 9397, 10285, 11240, 12246,
227    13313, 14382, 15492, 16735, 18131, 19693,
228    21280, 22912, 24624, 26544, 28432, 30488,
229    32720,
230    /* 22 values in Q5 */
231    4383, 4684, 5012, 5363, 5739, 6146,
232    6603, 7113, 7679, 8285, 9040, 9850,
233    10838, 11882, 13103, 14467, 15950, 17669,
234    19712, 22016, 24800, 28576,
235    /* 5 values in Q3 */
236    8240, 9792, 12040, 15440, 22472
237};
238
239#endif /* AVCODEC_ILBCDATA_H */
240