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