1 /***********************************************************************
2 Copyright (c) 2006-2011, Skype Limited. All rights reserved.
3 Redistribution and use in source and binary forms, with or without
4 modification, are permitted provided that the following conditions
5 are met:
6 - Redistributions of source code must retain the above copyright notice,
7 this list of conditions and the following disclaimer.
8 - Redistributions in binary form must reproduce the above copyright
9 notice, this list of conditions and the following disclaimer in the
10 documentation and/or other materials provided with the distribution.
11 - Neither the name of Internet Society, IETF or IETF Trust, nor the
12 names of specific contributors, may be used to endorse or promote
13 products derived from this software without specific prior written
14 permission.
15 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS”
16 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 POSSIBILITY OF SUCH DAMAGE.
26 ***********************************************************************/
27 
28 #ifdef HAVE_CONFIG_H
29 #include "config.h"
30 #endif
31 
32 #include "tables.h"
33 
34 const opus_uint8 silk_max_pulses_table[ 4 ] = {
35          8,     10,     12,     16
36 };
37 
38 const 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 
91 const 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 
139 const 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 
151 const 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 
163 const 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 
185 const 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 
207 const 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 
229 const 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 
251 const 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 
257 const 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