1/***********************************************************************
2Copyright (c) 2006-2011, Skype Limited. All rights reserved.
3Redistribution and use in source and binary forms, with or without
4modification, are permitted provided that the following conditions
5are met:
6- Redistributions of source code must retain the above copyright notice,
7this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written
14permission.
15THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25POSSIBILITY OF SUCH DAMAGE.
26***********************************************************************/
27
28#ifdef HAVE_CONFIG_H
29#include "config.h"
30#endif
31
32#include "tables.h"
33
34const opus_uint8 silk_max_pulses_table[ 4 ] = {
35         8,     10,     12,     16
36};
37
38const opus_uint8 silk_pulses_per_block_iCDF[ 10 ][ 18 ] = {
39{
40       125,     51,     26,     18,     15,     12,     11,     10,
41         9,      8,      7,      6,      5,      4,      3,      2,
42         1,      0
43},
44{
45       198,    105,     45,     22,     15,     12,     11,     10,
46         9,      8,      7,      6,      5,      4,      3,      2,
47         1,      0
48},
49{
50       213,    162,    116,     83,     59,     43,     32,     24,
51        18,     15,     12,      9,      7,      6,      5,      3,
52         2,      0
53},
54{
55       239,    187,    116,     59,     28,     16,     11,     10,
56         9,      8,      7,      6,      5,      4,      3,      2,
57         1,      0
58},
59{
60       250,    229,    188,    135,     86,     51,     30,     19,
61        13,     10,      8,      6,      5,      4,      3,      2,
62         1,      0
63},
64{
65       249,    235,    213,    185,    156,    128,    103,     83,
66        66,     53,     42,     33,     26,     21,     17,     13,
67        10,      0
68},
69{
70       254,    249,    235,    206,    164,    118,     77,     46,
71        27,     16,     10,      7,      5,      4,      3,      2,
72         1,      0
73},
74{
75       255,    253,    249,    239,    220,    191,    156,    119,
76        85,     57,     37,     23,     15,     10,      6,      4,
77         2,      0
78},
79{
80       255,    253,    251,    246,    237,    223,    203,    179,
81       152,    124,     98,     75,     55,     40,     29,     21,
82        15,      0
83},
84{
85       255,    254,    253,    247,    220,    162,    106,     67,
86        42,     28,     18,     12,      9,      6,      4,      3,
87         2,      0
88}
89};
90
91const opus_uint8 silk_pulses_per_block_BITS_Q5[ 9 ][ 18 ] = {
92{
93        31,     57,    107,    160,    205,    205,    255,    255,
94       255,    255,    255,    255,    255,    255,    255,    255,
95       255,    255
96},
97{
98        69,     47,     67,    111,    166,    205,    255,    255,
99       255,    255,    255,    255,    255,    255,    255,    255,
100       255,    255
101},
102{
103        82,     74,     79,     95,    109,    128,    145,    160,
104       173,    205,    205,    205,    224,    255,    255,    224,
105       255,    224
106},
107{
108       125,     74,     59,     69,     97,    141,    182,    255,
109       255,    255,    255,    255,    255,    255,    255,    255,
110       255,    255
111},
112{
113       173,    115,     85,     73,     76,     92,    115,    145,
114       173,    205,    224,    224,    255,    255,    255,    255,
115       255,    255
116},
117{
118       166,    134,    113,    102,    101,    102,    107,    118,
119       125,    138,    145,    155,    166,    182,    192,    192,
120       205,    150
121},
122{
123       224,    182,    134,    101,     83,     79,     85,     97,
124       120,    145,    173,    205,    224,    255,    255,    255,
125       255,    255
126},
127{
128       255,    224,    192,    150,    120,    101,     92,     89,
129        93,    102,    118,    134,    160,    182,    192,    224,
130       224,    224
131},
132{
133       255,    224,    224,    182,    155,    134,    118,    109,
134       104,    102,    106,    111,    118,    131,    145,    160,
135       173,    131
136}
137};
138
139const opus_uint8 silk_rate_levels_iCDF[ 2 ][ 9 ] =
140{
141{
142       241,    190,    178,    132,     87,     74,     41,     14,
143         0
144},
145{
146       223,    193,    157,    140,    106,     57,     39,     18,
147         0
148}
149};
150
151const opus_uint8 silk_rate_levels_BITS_Q5[ 2 ][ 9 ] =
152{
153{
154       131,     74,    141,     79,     80,    138,     95,    104,
155       134
156},
157{
158        95,     99,     91,    125,     93,     76,    123,    115,
159       123
160}
161};
162
163const opus_uint8 silk_shell_code_table0[ 152 ] = {
164       128,      0,    214,     42,      0,    235,    128,     21,
165         0,    244,    184,     72,     11,      0,    248,    214,
166       128,     42,      7,      0,    248,    225,    170,     80,
167        25,      5,      0,    251,    236,    198,    126,     54,
168        18,      3,      0,    250,    238,    211,    159,     82,
169        35,     15,      5,      0,    250,    231,    203,    168,
170       128,     88,     53,     25,      6,      0,    252,    238,
171       216,    185,    148,    108,     71,     40,     18,      4,
172         0,    253,    243,    225,    199,    166,    128,     90,
173        57,     31,     13,      3,      0,    254,    246,    233,
174       212,    183,    147,    109,     73,     44,     23,     10,
175         2,      0,    255,    250,    240,    223,    198,    166,
176       128,     90,     58,     33,     16,      6,      1,      0,
177       255,    251,    244,    231,    210,    181,    146,    110,
178        75,     46,     25,     12,      5,      1,      0,    255,
179       253,    248,    238,    221,    196,    164,    128,     92,
180        60,     35,     18,      8,      3,      1,      0,    255,
181       253,    249,    242,    229,    208,    180,    146,    110,
182        76,     48,     27,     14,      7,      3,      1,      0
183};
184
185const opus_uint8 silk_shell_code_table1[ 152 ] = {
186       129,      0,    207,     50,      0,    236,    129,     20,
187         0,    245,    185,     72,     10,      0,    249,    213,
188       129,     42,      6,      0,    250,    226,    169,     87,
189        27,      4,      0,    251,    233,    194,    130,     62,
190        20,      4,      0,    250,    236,    207,    160,     99,
191        47,     17,      3,      0,    255,    240,    217,    182,
192       131,     81,     41,     11,      1,      0,    255,    254,
193       233,    201,    159,    107,     61,     20,      2,      1,
194         0,    255,    249,    233,    206,    170,    128,     86,
195        50,     23,      7,      1,      0,    255,    250,    238,
196       217,    186,    148,    108,     70,     39,     18,      6,
197         1,      0,    255,    252,    243,    226,    200,    166,
198       128,     90,     56,     30,     13,      4,      1,      0,
199       255,    252,    245,    231,    209,    180,    146,    110,
200        76,     47,     25,     11,      4,      1,      0,    255,
201       253,    248,    237,    219,    194,    163,    128,     93,
202        62,     37,     19,      8,      3,      1,      0,    255,
203       254,    250,    241,    226,    205,    177,    145,    111,
204        79,     51,     30,     15,      6,      2,      1,      0
205};
206
207const opus_uint8 silk_shell_code_table2[ 152 ] = {
208       129,      0,    203,     54,      0,    234,    129,     23,
209         0,    245,    184,     73,     10,      0,    250,    215,
210       129,     41,      5,      0,    252,    232,    173,     86,
211        24,      3,      0,    253,    240,    200,    129,     56,
212        15,      2,      0,    253,    244,    217,    164,     94,
213        38,     10,      1,      0,    253,    245,    226,    189,
214       132,     71,     27,      7,      1,      0,    253,    246,
215       231,    203,    159,    105,     56,     23,      6,      1,
216         0,    255,    248,    235,    213,    179,    133,     85,
217        47,     19,      5,      1,      0,    255,    254,    243,
218       221,    194,    159,    117,     70,     37,     12,      2,
219         1,      0,    255,    254,    248,    234,    208,    171,
220       128,     85,     48,     22,      8,      2,      1,      0,
221       255,    254,    250,    240,    220,    189,    149,    107,
222        67,     36,     16,      6,      2,      1,      0,    255,
223       254,    251,    243,    227,    201,    166,    128,     90,
224        55,     29,     13,      5,      2,      1,      0,    255,
225       254,    252,    246,    234,    213,    183,    147,    109,
226        73,     43,     22,     10,      4,      2,      1,      0
227};
228
229const opus_uint8 silk_shell_code_table3[ 152 ] = {
230       130,      0,    200,     58,      0,    231,    130,     26,
231         0,    244,    184,     76,     12,      0,    249,    214,
232       130,     43,      6,      0,    252,    232,    173,     87,
233        24,      3,      0,    253,    241,    203,    131,     56,
234        14,      2,      0,    254,    246,    221,    167,     94,
235        35,      8,      1,      0,    254,    249,    232,    193,
236       130,     65,     23,      5,      1,      0,    255,    251,
237       239,    211,    162,     99,     45,     15,      4,      1,
238         0,    255,    251,    243,    223,    186,    131,     74,
239        33,     11,      3,      1,      0,    255,    252,    245,
240       230,    202,    158,    105,     57,     24,      8,      2,
241         1,      0,    255,    253,    247,    235,    214,    179,
242       132,     84,     44,     19,      7,      2,      1,      0,
243       255,    254,    250,    240,    223,    196,    159,    112,
244        69,     36,     15,      6,      2,      1,      0,    255,
245       254,    253,    245,    231,    209,    176,    136,     93,
246        55,     27,     11,      3,      2,      1,      0,    255,
247       254,    253,    252,    239,    221,    194,    158,    117,
248        76,     42,     18,      4,      3,      2,      1,      0
249};
250
251const opus_uint8 silk_shell_code_table_offsets[ 17 ] = {
252         0,      0,      2,      5,      9,     14,     20,     27,
253        35,     44,     54,     65,     77,     90,    104,    119,
254       135
255};
256
257const opus_uint8 silk_sign_iCDF[ 42 ] = {
258       254,     49,     67,     77,     82,     93,     99,
259       198,     11,     18,     24,     31,     36,     45,
260       255,     46,     66,     78,     87,     94,    104,
261       208,     14,     21,     32,     42,     51,     66,
262       255,     94,    104,    109,    112,    115,    118,
263       248,     53,     69,     80,     88,     95,    102
264};
265