Optimize silk_warped_autocorrelation_FIX() for ARM NEON
[opus.git] / silk / tables_NLSF_CB_WB.c
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 static const opus_uint8 silk_NLSF_CB1_WB_Q8[ 512 ] = {
35          7,     23,     38,     54,     69,     85,    100,    116,
36        131,    147,    162,    178,    193,    208,    223,    239,
37         13,     25,     41,     55,     69,     83,     98,    112,
38        127,    142,    157,    171,    187,    203,    220,    236,
39         15,     21,     34,     51,     61,     78,     92,    106,
40        126,    136,    152,    167,    185,    205,    225,    240,
41         10,     21,     36,     50,     63,     79,     95,    110,
42        126,    141,    157,    173,    189,    205,    221,    237,
43         17,     20,     37,     51,     59,     78,     89,    107,
44        123,    134,    150,    164,    184,    205,    224,    240,
45         10,     15,     32,     51,     67,     81,     96,    112,
46        129,    142,    158,    173,    189,    204,    220,    236,
47          8,     21,     37,     51,     65,     79,     98,    113,
48        126,    138,    155,    168,    179,    192,    209,    218,
49         12,     15,     34,     55,     63,     78,     87,    108,
50        118,    131,    148,    167,    185,    203,    219,    236,
51         16,     19,     32,     36,     56,     79,     91,    108,
52        118,    136,    154,    171,    186,    204,    220,    237,
53         11,     28,     43,     58,     74,     89,    105,    120,
54        135,    150,    165,    180,    196,    211,    226,    241,
55          6,     16,     33,     46,     60,     75,     92,    107,
56        123,    137,    156,    169,    185,    199,    214,    225,
57         11,     19,     30,     44,     57,     74,     89,    105,
58        121,    135,    152,    169,    186,    202,    218,    234,
59         12,     19,     29,     46,     57,     71,     88,    100,
60        120,    132,    148,    165,    182,    199,    216,    233,
61         17,     23,     35,     46,     56,     77,     92,    106,
62        123,    134,    152,    167,    185,    204,    222,    237,
63         14,     17,     45,     53,     63,     75,     89,    107,
64        115,    132,    151,    171,    188,    206,    221,    240,
65          9,     16,     29,     40,     56,     71,     88,    103,
66        119,    137,    154,    171,    189,    205,    222,    237,
67         16,     19,     36,     48,     57,     76,     87,    105,
68        118,    132,    150,    167,    185,    202,    218,    236,
69         12,     17,     29,     54,     71,     81,     94,    104,
70        126,    136,    149,    164,    182,    201,    221,    237,
71         15,     28,     47,     62,     79,     97,    115,    129,
72        142,    155,    168,    180,    194,    208,    223,    238,
73          8,     14,     30,     45,     62,     78,     94,    111,
74        127,    143,    159,    175,    192,    207,    223,    239,
75         17,     30,     49,     62,     79,     92,    107,    119,
76        132,    145,    160,    174,    190,    204,    220,    235,
77         14,     19,     36,     45,     61,     76,     91,    108,
78        121,    138,    154,    172,    189,    205,    222,    238,
79         12,     18,     31,     45,     60,     76,     91,    107,
80        123,    138,    154,    171,    187,    204,    221,    236,
81         13,     17,     31,     43,     53,     70,     83,    103,
82        114,    131,    149,    167,    185,    203,    220,    237,
83         17,     22,     35,     42,     58,     78,     93,    110,
84        125,    139,    155,    170,    188,    206,    224,    240,
85          8,     15,     34,     50,     67,     83,     99,    115,
86        131,    146,    162,    178,    193,    209,    224,    239,
87         13,     16,     41,     66,     73,     86,     95,    111,
88        128,    137,    150,    163,    183,    206,    225,    241,
89         17,     25,     37,     52,     63,     75,     92,    102,
90        119,    132,    144,    160,    175,    191,    212,    231,
91         19,     31,     49,     65,     83,    100,    117,    133,
92        147,    161,    174,    187,    200,    213,    227,    242,
93         18,     31,     52,     68,     88,    103,    117,    126,
94        138,    149,    163,    177,    192,    207,    223,    239,
95         16,     29,     47,     61,     76,     90,    106,    119,
96        133,    147,    161,    176,    193,    209,    224,    240,
97         15,     21,     35,     50,     61,     73,     86,     97,
98        110,    119,    129,    141,    175,    198,    218,    237
99 };
100
101 static const opus_int16 silk_NLSF_CB1_Wght_Q9[ 512 ] = {
102      3657, 2925, 2925, 2925, 2925, 2925, 2925, 2925, 2925, 2925, 2925, 2925, 2963, 2963, 2925, 2846,
103      3216, 3085, 2972, 3056, 3056, 3010, 3010, 3010, 2963, 2963, 3010, 2972, 2888, 2846, 2846, 2726,
104      3920, 4014, 2981, 3207, 3207, 2934, 3056, 2846, 3122, 3244, 2925, 2846, 2620, 2553, 2780, 2925,
105      3516, 3197, 3010, 3103, 3019, 2888, 2925, 2925, 2925, 2925, 2888, 2888, 2888, 2888, 2888, 2753,
106      5054, 5054, 2934, 3573, 3385, 3056, 3085, 2793, 3160, 3160, 2972, 2846, 2513, 2540, 2753, 2888,
107      4428, 4149, 2700, 2753, 2972, 3010, 2925, 2846, 2981, 3019, 2925, 2925, 2925, 2925, 2888, 2726,
108      3620, 3019, 2972, 3056, 3056, 2873, 2806, 3056, 3216, 3047, 2981, 3291, 3291, 2981, 3310, 2991,
109      5227, 5014, 2540, 3338, 3526, 3385, 3197, 3094, 3376, 2981, 2700, 2647, 2687, 2793, 2846, 2673,
110      5081, 5174, 4615, 4428, 2460, 2897, 3047, 3207, 3169, 2687, 2740, 2888, 2846, 2793, 2846, 2700,
111      3122, 2888, 2963, 2925, 2925, 2925, 2925, 2963, 2963, 2963, 2963, 2925, 2925, 2963, 2963, 2963,
112      4202, 3207, 2981, 3103, 3010, 2888, 2888, 2925, 2972, 2873, 2916, 3019, 2972, 3010, 3197, 2873,
113      3760, 3760, 3244, 3103, 2981, 2888, 2925, 2888, 2972, 2934, 2793, 2793, 2846, 2888, 2888, 2660,
114      3854, 4014, 3207, 3122, 3244, 2934, 3047, 2963, 2963, 3085, 2846, 2793, 2793, 2793, 2793, 2580,
115      3845, 4080, 3357, 3516, 3094, 2740, 3010, 2934, 3122, 3085, 2846, 2846, 2647, 2647, 2846, 2806,
116      5147, 4894, 3225, 3845, 3441, 3169, 2897, 3413, 3451, 2700, 2580, 2673, 2740, 2846, 2806, 2753,
117      4109, 3789, 3291, 3160, 2925, 2888, 2888, 2925, 2793, 2740, 2793, 2740, 2793, 2846, 2888, 2806,
118      5081, 5054, 3047, 3545, 3244, 3056, 3085, 2944, 3103, 2897, 2740, 2740, 2740, 2846, 2793, 2620,
119      4309, 4309, 2860, 2527, 3207, 3376, 3376, 3075, 3075, 3376, 3056, 2846, 2647, 2580, 2726, 2753,
120      3056, 2916, 2806, 2888, 2740, 2687, 2897, 3103, 3150, 3150, 3216, 3169, 3056, 3010, 2963, 2846,
121      4375, 3882, 2925, 2888, 2846, 2888, 2846, 2846, 2888, 2888, 2888, 2846, 2888, 2925, 2888, 2846,
122      2981, 2916, 2916, 2981, 2981, 3056, 3122, 3216, 3150, 3056, 3010, 2972, 2972, 2972, 2925, 2740,
123      4229, 4149, 3310, 3347, 2925, 2963, 2888, 2981, 2981, 2846, 2793, 2740, 2846, 2846, 2846, 2793,
124      4080, 4014, 3103, 3010, 2925, 2925, 2925, 2888, 2925, 2925, 2846, 2846, 2846, 2793, 2888, 2780,
125      4615, 4575, 3169, 3441, 3207, 2981, 2897, 3038, 3122, 2740, 2687, 2687, 2687, 2740, 2793, 2700,
126      4149, 4269, 3789, 3657, 2726, 2780, 2888, 2888, 3010, 2972, 2925, 2846, 2687, 2687, 2793, 2888,
127      4215, 3554, 2753, 2846, 2846, 2888, 2888, 2888, 2925, 2925, 2888, 2925, 2925, 2925, 2963, 2888,
128      5174, 4921, 2261, 3432, 3789, 3479, 3347, 2846, 3310, 3479, 3150, 2897, 2460, 2487, 2753, 2925,
129      3451, 3685, 3122, 3197, 3357, 3047, 3207, 3207, 2981, 3216, 3085, 2925, 2925, 2687, 2540, 2434,
130      2981, 3010, 2793, 2793, 2740, 2793, 2846, 2972, 3056, 3103, 3150, 3150, 3150, 3103, 3010, 3010,
131      2944, 2873, 2687, 2726, 2780, 3010, 3432, 3545, 3357, 3244, 3056, 3010, 2963, 2925, 2888, 2846,
132      3019, 2944, 2897, 3010, 3010, 2972, 3019, 3103, 3056, 3056, 3010, 2888, 2846, 2925, 2925, 2888,
133      3920, 3967, 3010, 3197, 3357, 3216, 3291, 3291, 3479, 3704, 3441, 2726, 2181, 2460, 2580, 2607
134 };
135
136 static const opus_uint8 silk_NLSF_CB1_iCDF_WB[ 64 ] = {
137        225,    204,    201,    184,    183,    175,    158,    154,
138        153,    135,    119,    115,    113,    110,    109,     99,
139         98,     95,     79,     68,     52,     50,     48,     45,
140         43,     32,     31,     27,     18,     10,      3,      0,
141        255,    251,    235,    230,    212,    201,    196,    182,
142        167,    166,    163,    151,    138,    124,    110,    104,
143         90,     78,     76,     70,     69,     57,     45,     34,
144         24,     21,     11,      6,      5,      4,      3,      0
145 };
146
147 static const opus_uint8 silk_NLSF_CB2_SELECT_WB[ 256 ] = {
148          0,      0,      0,      0,      0,      0,      0,      1,
149        100,    102,    102,     68,     68,     36,     34,     96,
150        164,    107,    158,    185,    180,    185,    139,    102,
151         64,     66,     36,     34,     34,      0,      1,     32,
152        208,    139,    141,    191,    152,    185,    155,    104,
153         96,    171,    104,    166,    102,    102,    102,    132,
154          1,      0,      0,      0,      0,     16,     16,      0,
155         80,    109,     78,    107,    185,    139,    103,    101,
156        208,    212,    141,    139,    173,    153,    123,    103,
157         36,      0,      0,      0,      0,      0,      0,      1,
158         48,      0,      0,      0,      0,      0,      0,     32,
159         68,    135,    123,    119,    119,    103,     69,     98,
160         68,    103,    120,    118,    118,    102,     71,     98,
161        134,    136,    157,    184,    182,    153,    139,    134,
162        208,    168,    248,     75,    189,    143,    121,    107,
163         32,     49,     34,     34,     34,      0,     17,      2,
164        210,    235,    139,    123,    185,    137,    105,    134,
165         98,    135,    104,    182,    100,    183,    171,    134,
166        100,     70,     68,     70,     66,     66,     34,    131,
167         64,    166,    102,     68,     36,      2,      1,      0,
168        134,    166,    102,     68,     34,     34,     66,    132,
169        212,    246,    158,    139,    107,    107,     87,    102,
170        100,    219,    125,    122,    137,    118,    103,    132,
171        114,    135,    137,    105,    171,    106,     50,     34,
172        164,    214,    141,    143,    185,    151,    121,    103,
173        192,     34,      0,      0,      0,      0,      0,      1,
174        208,    109,     74,    187,    134,    249,    159,    137,
175        102,    110,    154,    118,     87,    101,    119,    101,
176          0,      2,      0,     36,     36,     66,     68,     35,
177         96,    164,    102,    100,     36,      0,      2,     33,
178        167,    138,    174,    102,    100,     84,      2,      2,
179        100,    107,    120,    119,     36,    197,     24,      0
180 };
181
182 static const opus_uint8 silk_NLSF_CB2_iCDF_WB[ 72 ] = {
183        255,    254,    253,    244,     12,      3,      2,      1,
184          0,    255,    254,    252,    224,     38,      3,      2,
185          1,      0,    255,    254,    251,    209,     57,      4,
186          2,      1,      0,    255,    254,    244,    195,     69,
187          4,      2,      1,      0,    255,    251,    232,    184,
188         84,      7,      2,      1,      0,    255,    254,    240,
189        186,     86,     14,      2,      1,      0,    255,    254,
190        239,    178,     91,     30,      5,      1,      0,    255,
191        248,    227,    177,    100,     19,      2,      1,      0
192 };
193
194 static const opus_uint8 silk_NLSF_CB2_BITS_WB_Q5[ 72 ] = {
195        255,    255,    255,    156,      4,    154,    255,    255,
196        255,    255,    255,    227,    102,     15,     92,    255,
197        255,    255,    255,    255,    213,     83,     24,     72,
198        236,    255,    255,    255,    255,    150,     76,     33,
199         63,    214,    255,    255,    255,    190,    121,     77,
200         43,     55,    185,    255,    255,    255,    245,    137,
201         71,     43,     59,    139,    255,    255,    255,    255,
202        131,     66,     50,     66,    107,    194,    255,    255,
203        166,    116,     76,     55,     53,    125,    255,    255
204 };
205
206 static const opus_uint8 silk_NLSF_PRED_WB_Q8[ 30 ] = {
207        175,    148,    160,    176,    178,    173,    174,    164,
208        177,    174,    196,    182,    198,    192,    182,     68,
209         62,     66,     60,     72,    117,     85,     90,    118,
210        136,    151,    142,    160,    142,    155
211 };
212
213 static const opus_int16 silk_NLSF_DELTA_MIN_WB_Q15[ 17 ] = {
214        100,      3,     40,      3,      3,      3,      5,     14,
215         14,     10,     11,      3,      8,      9,      7,      3,
216        347
217 };
218
219 const silk_NLSF_CB_struct silk_NLSF_CB_WB =
220 {
221     32,
222     16,
223     SILK_FIX_CONST( 0.15, 16 ),
224     SILK_FIX_CONST( 1.0 / 0.15, 6 ),
225     silk_NLSF_CB1_WB_Q8,
226     silk_NLSF_CB1_Wght_Q9,
227     silk_NLSF_CB1_iCDF_WB,
228     silk_NLSF_PRED_WB_Q8,
229     silk_NLSF_CB2_SELECT_WB,
230     silk_NLSF_CB2_iCDF_WB,
231     silk_NLSF_CB2_BITS_WB_Q5,
232     silk_NLSF_DELTA_MIN_WB_Q15,
233 };
234