FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
vp8data.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2010 David Conrad
3  * Copyright (C) 2010 Ronald S. Bultje
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 /**
23  * @file
24  * VP8 compatible video decoder
25  */
26 
27 #ifndef AVCODEC_VP8DATA_H
28 #define AVCODEC_VP8DATA_H
29 
30 #include "vp8.h"
31 #include "h264pred.h"
32 
33 static const uint8_t vp7_pred4x4_mode[] = {
34  [DC_PRED8x8] = DC_PRED,
38 };
39 
40 static const uint8_t vp8_pred4x4_mode[] = {
41  [DC_PRED8x8] = DC_PRED,
45 };
46 
47 static const int8_t vp8_pred16x16_tree_intra[4][2] = {
48  { -MODE_I4x4, 1 }, // '0'
49  { 2, 3 },
50  { -DC_PRED8x8, -VERT_PRED8x8 }, // '100', '101'
51  { -HOR_PRED8x8, -PLANE_PRED8x8 }, // '110', '111'
52 };
53 
54 static const int8_t vp8_pred16x16_tree_inter[4][2] = {
55  { -DC_PRED8x8, 1 }, // '0'
56  { 2, 3 },
57  { -VERT_PRED8x8, -HOR_PRED8x8 }, // '100', '101'
58  { -PLANE_PRED8x8, -MODE_I4x4 }, // '110', '111'
59 };
60 
61 typedef struct VP7MVPred {
62  int8_t yoffset;
63  int8_t xoffset;
66 } VP7MVPred;
67 
68 #define VP7_MV_PRED_COUNT 12
70  { -1, 0, 12, 8 },
71  { 0, -1, 3, 8 },
72  { -1, -1, 15, 2 },
73  { -1, 1, 12, 2 },
74  { -2, 0, 12, 2 },
75  { 0, -2, 3, 2 },
76  { -1, -2, 15, 1 },
77  { -2, -1, 15, 1 },
78  { -2, 1, 12, 1 },
79  { -1, 2, 12, 1 },
80  { -2, -2, 15, 1 },
81  { -2, 2, 12, 1 },
82 };
83 
84 static const int vp7_mode_contexts[31][4] = {
85  { 3, 3, 1, 246 },
86  { 7, 89, 66, 239 },
87  { 10, 90, 78, 238 },
88  { 14, 118, 95, 241 },
89  { 14, 123, 106, 238 },
90  { 20, 140, 109, 240 },
91  { 13, 155, 103, 238 },
92  { 21, 158, 99, 240 },
93  { 27, 82, 108, 232 },
94  { 19, 99, 123, 217 },
95  { 45, 139, 148, 236 },
96  { 50, 117, 144, 235 },
97  { 57, 128, 164, 238 },
98  { 69, 139, 171, 239 },
99  { 74, 154, 179, 238 },
100  { 112, 165, 186, 242 },
101  { 98, 143, 185, 245 },
102  { 105, 153, 190, 250 },
103  { 124, 167, 192, 245 },
104  { 131, 186, 203, 246 },
105  { 59, 184, 222, 224 },
106  { 148, 215, 214, 213 },
107  { 137, 211, 210, 219 },
108  { 190, 227, 128, 228 },
109  { 183, 228, 128, 228 },
110  { 194, 234, 128, 228 },
111  { 202, 236, 128, 228 },
112  { 205, 240, 128, 228 },
113  { 205, 244, 128, 228 },
114  { 225, 246, 128, 228 },
115  { 233, 251, 128, 228 },
116 };
117 
118 static const int vp8_mode_contexts[6][4] = {
119  { 7, 1, 1, 143 },
120  { 14, 18, 14, 107 },
121  { 135, 64, 57, 68 },
122  { 60, 56, 128, 65 },
123  { 159, 134, 128, 34 },
124  { 234, 188, 128, 28 },
125 };
126 
127 static const uint8_t vp8_mbsplits[5][16] = {
128  { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 },
129  { 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 },
130  { 0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 2, 2, 3, 3 },
131  { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
132  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
133 };
134 
135 static const uint8_t vp8_mbfirstidx[4][16] = {
136  { 0, 8 },
137  { 0, 2 },
138  { 0, 2, 8, 10 },
139  { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }
140 };
141 
142 static const uint8_t vp8_mbsplit_count[4] = {
143  2, 2, 4, 16
144 };
145 static const uint8_t vp8_mbsplit_prob[3] = {
146  110, 111, 150
147 };
148 
149 static const uint8_t vp7_submv_prob[3] = {
150  180, 162, 25
151 };
152 
153 static const uint8_t vp8_submv_prob[5][3] = {
154  { 147, 136, 18 },
155  { 106, 145, 1 },
156  { 179, 121, 1 },
157  { 223, 1, 34 },
158  { 208, 1, 1 }
159 };
160 
162  145, 156, 163, 128
163 };
165  112, 86, 140, 37
166 };
167 
168 static const int8_t vp8_pred4x4_tree[9][2] = {
169  { -DC_PRED, 1 }, // '0'
170  { -TM_VP8_PRED, 2 }, // '10'
171  { -VERT_PRED, 3 }, // '110'
172  { 4, 6 },
173  { -HOR_PRED, 5 }, // '11100'
174  { -DIAG_DOWN_RIGHT_PRED, -VERT_RIGHT_PRED }, // '111010', '111011'
175  { -DIAG_DOWN_LEFT_PRED, 7 }, // '11110'
176  { -VERT_LEFT_PRED, 8 }, // '111110'
177  { -HOR_DOWN_PRED, -HOR_UP_PRED }, // '1111110', '1111111'
178 };
179 
180 static const int8_t vp8_pred8x8c_tree[3][2] = {
181  { -DC_PRED8x8, 1 }, // '0'
182  { -VERT_PRED8x8, 2 }, // '10
183  { -HOR_PRED8x8, -PLANE_PRED8x8 }, // '110', '111'
184 };
185 
186 static const uint8_t vp8_pred8x8c_prob_intra[3] = {
187  142, 114, 183
188 };
189 static const uint8_t vp8_pred8x8c_prob_inter[3] = {
190  162, 101, 204
191 };
192 static const uint8_t vp8_pred4x4_prob_inter[9] = {
193  120, 90, 79, 133, 87, 85, 80, 111, 151
194 };
195 
196 static const uint8_t vp8_pred4x4_prob_intra[10][10][9] = {
197  {
198  { 39, 53, 200, 87, 26, 21, 43, 232, 171 },
199  { 56, 34, 51, 104, 114, 102, 29, 93, 77 },
200  { 88, 88, 147, 150, 42, 46, 45, 196, 205 },
201  { 107, 54, 32, 26, 51, 1, 81, 43, 31 },
202  { 39, 28, 85, 171, 58, 165, 90, 98, 64 },
203  { 34, 22, 116, 206, 23, 34, 43, 166, 73 },
204  { 34, 19, 21, 102, 132, 188, 16, 76, 124 },
205  { 68, 25, 106, 22, 64, 171, 36, 225, 114 },
206  { 62, 18, 78, 95, 85, 57, 50, 48, 51 },
207  { 43, 97, 183, 117, 85, 38, 35, 179, 61 },
208  },
209  {
210  { 112, 113, 77, 85, 179, 255, 38, 120, 114 },
211  { 40, 42, 1, 196, 245, 209, 10, 25, 109 },
212  { 193, 101, 35, 159, 215, 111, 89, 46, 111 },
213  { 100, 80, 8, 43, 154, 1, 51, 26, 71 },
214  { 88, 43, 29, 140, 166, 213, 37, 43, 154 },
215  { 61, 63, 30, 155, 67, 45, 68, 1, 209 },
216  { 41, 40, 5, 102, 211, 183, 4, 1, 221 },
217  { 142, 78, 78, 16, 255, 128, 34, 197, 171 },
218  { 51, 50, 17, 168, 209, 192, 23, 25, 82 },
219  { 60, 148, 31, 172, 219, 228, 21, 18, 111 },
220  },
221  {
222  { 175, 69, 143, 80, 85, 82, 72, 155, 103 },
223  { 56, 58, 10, 171, 218, 189, 17, 13, 152 },
224  { 231, 120, 48, 89, 115, 113, 120, 152, 112 },
225  { 144, 71, 10, 38, 171, 213, 144, 34, 26 },
226  { 114, 26, 17, 163, 44, 195, 21, 10, 173 },
227  { 121, 24, 80, 195, 26, 62, 44, 64, 85 },
228  { 63, 20, 8, 114, 114, 208, 12, 9, 226 },
229  { 170, 46, 55, 19, 136, 160, 33, 206, 71 },
230  { 81, 40, 11, 96, 182, 84, 29, 16, 36 },
231  { 152, 179, 64, 126, 170, 118, 46, 70, 95 },
232  },
233  {
234  { 75, 79, 123, 47, 51, 128, 81, 171, 1 },
235  { 57, 17, 5, 71, 102, 57, 53, 41, 49 },
236  { 125, 98, 42, 88, 104, 85, 117, 175, 82 },
237  { 115, 21, 2, 10, 102, 255, 166, 23, 6 },
238  { 38, 33, 13, 121, 57, 73, 26, 1, 85 },
239  { 41, 10, 67, 138, 77, 110, 90, 47, 114 },
240  { 57, 18, 10, 102, 102, 213, 34, 20, 43 },
241  { 101, 29, 16, 10, 85, 128, 101, 196, 26 },
242  { 117, 20, 15, 36, 163, 128, 68, 1, 26 },
243  { 95, 84, 53, 89, 128, 100, 113, 101, 45 },
244  },
245  {
246  { 63, 59, 90, 180, 59, 166, 93, 73, 154 },
247  { 40, 40, 21, 116, 143, 209, 34, 39, 175 },
248  { 138, 31, 36, 171, 27, 166, 38, 44, 229 },
249  { 57, 46, 22, 24, 128, 1, 54, 17, 37 },
250  { 47, 15, 16, 183, 34, 223, 49, 45, 183 },
251  { 46, 17, 33, 183, 6, 98, 15, 32, 183 },
252  { 40, 3, 9, 115, 51, 192, 18, 6, 223 },
253  { 65, 32, 73, 115, 28, 128, 23, 128, 205 },
254  { 87, 37, 9, 115, 59, 77, 64, 21, 47 },
255  { 67, 87, 58, 169, 82, 115, 26, 59, 179 },
256  },
257  {
258  { 54, 57, 112, 184, 5, 41, 38, 166, 213 },
259  { 30, 34, 26, 133, 152, 116, 10, 32, 134 },
260  { 104, 55, 44, 218, 9, 54, 53, 130, 226 },
261  { 75, 32, 12, 51, 192, 255, 160, 43, 51 },
262  { 39, 19, 53, 221, 26, 114, 32, 73, 255 },
263  { 31, 9, 65, 234, 2, 15, 1, 118, 73 },
264  { 56, 21, 23, 111, 59, 205, 45, 37, 192 },
265  { 88, 31, 35, 67, 102, 85, 55, 186, 85 },
266  { 55, 38, 70, 124, 73, 102, 1, 34, 98 },
267  { 64, 90, 70, 205, 40, 41, 23, 26, 57 },
268  },
269  {
270  { 86, 40, 64, 135, 148, 224, 45, 183, 128 },
271  { 22, 26, 17, 131, 240, 154, 14, 1, 209 },
272  { 164, 50, 31, 137, 154, 133, 25, 35, 218 },
273  { 83, 12, 13, 54, 192, 255, 68, 47, 28 },
274  { 45, 16, 21, 91, 64, 222, 7, 1, 197 },
275  { 56, 21, 39, 155, 60, 138, 23, 102, 213 },
276  { 18, 11, 7, 63, 144, 171, 4, 4, 246 },
277  { 85, 26, 85, 85, 128, 128, 32, 146, 171 },
278  { 35, 27, 10, 146, 174, 171, 12, 26, 128 },
279  { 51, 103, 44, 131, 131, 123, 31, 6, 158 },
280  },
281  {
282  { 68, 45, 128, 34, 1, 47, 11, 245, 171 },
283  { 62, 17, 19, 70, 146, 85, 55, 62, 70 },
284  { 102, 61, 71, 37, 34, 53, 31, 243, 192 },
285  { 75, 15, 9, 9, 64, 255, 184, 119, 16 },
286  { 37, 43, 37, 154, 100, 163, 85, 160, 1 },
287  { 63, 9, 92, 136, 28, 64, 32, 201, 85 },
288  { 56, 8, 17, 132, 137, 255, 55, 116, 128 },
289  { 86, 6, 28, 5, 64, 255, 25, 248, 1 },
290  { 58, 15, 20, 82, 135, 57, 26, 121, 40 },
291  { 69, 60, 71, 38, 73, 119, 28, 222, 37 },
292  },
293  {
294  { 101, 75, 128, 139, 118, 146, 116, 128, 85 },
295  { 56, 41, 15, 176, 236, 85, 37, 9, 62 },
296  { 190, 80, 35, 99, 180, 80, 126, 54, 45 },
297  { 146, 36, 19, 30, 171, 255, 97, 27, 20 },
298  { 71, 30, 17, 119, 118, 255, 17, 18, 138 },
299  { 101, 38, 60, 138, 55, 70, 43, 26, 142 },
300  { 32, 41, 20, 117, 151, 142, 20, 21, 163 },
301  { 138, 45, 61, 62, 219, 1, 81, 188, 64 },
302  { 112, 19, 12, 61, 195, 128, 48, 4, 24 },
303  { 85, 126, 47, 87, 176, 51, 41, 20, 32 },
304  },
305  {
306  { 66, 102, 167, 99, 74, 62, 40, 234, 128 },
307  { 41, 53, 9, 178, 241, 141, 26, 8, 107 },
308  { 134, 183, 89, 137, 98, 101, 106, 165, 148 },
309  { 104, 79, 12, 27, 217, 255, 87, 17, 7 },
310  { 74, 43, 26, 146, 73, 166, 49, 23, 157 },
311  { 65, 38, 105, 160, 51, 52, 31, 115, 128 },
312  { 47, 41, 14, 110, 182, 183, 21, 17, 194 },
313  { 87, 68, 71, 44, 114, 51, 15, 186, 23 },
314  { 66, 45, 25, 102, 197, 189, 23, 18, 22 },
315  { 72, 187, 100, 130, 157, 111, 32, 75, 80 },
316  },
317 };
318 
319 static const int8_t vp8_segmentid_tree[][2] = {
320  { 1, 2 },
321  { -0, -1 }, // '00', '01'
322  { -2, -3 }, // '10', '11'
323 };
324 
325 static const uint8_t vp8_coeff_band[16] = {
326  0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7
327 };
328 
329 /* Inverse of vp8_coeff_band: mappings of bands to coefficient indexes.
330  * Each list is -1-terminated. */
331 static const int8_t vp8_coeff_band_indexes[8][10] = {
332  { 0, -1 },
333  { 1, -1 },
334  { 2, -1 },
335  { 3, -1 },
336  { 5, -1 },
337  { 6, -1 },
338  { 4, 7, 8, 9, 10, 11, 12, 13, 14, -1 },
339  { 15, -1 }
340 };
341 
342 static const uint8_t vp8_dct_cat1_prob[] = {
343  159, 0
344 };
345 static const uint8_t vp8_dct_cat2_prob[] = {
346  165, 145, 0
347 };
348 static const uint8_t vp8_dct_cat3_prob[] = {
349  173, 148, 140, 0
350 };
351 static const uint8_t vp8_dct_cat4_prob[] = {
352  176, 155, 140, 135, 0
353 };
354 static const uint8_t vp8_dct_cat5_prob[] = {
355  180, 157, 141, 134, 130, 0
356 };
357 static const uint8_t vp8_dct_cat6_prob[] = {
358  254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0
359 };
360 
361 // only used for cat3 and above; cat 1 and 2 are referenced directly
362 const uint8_t *const ff_vp8_dct_cat_prob[] = {
367 };
368 
369 static const uint8_t vp8_token_default_probs[4][8][3][NUM_DCT_TOKENS - 1] = {
370  {
371  {
372  { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
373  { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
374  { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
375  },
376  {
377  { 253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128 },
378  { 189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128 },
379  { 106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128 },
380  },
381  {
382  { 1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128 },
383  { 181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128 },
384  { 78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128 },
385  },
386  {
387  { 1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128 },
388  { 184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128 },
389  { 77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128 },
390  },
391  {
392  { 1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128 },
393  { 170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128 },
394  { 37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128 },
395  },
396  {
397  { 1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128 },
398  { 207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128 },
399  { 102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128 },
400  },
401  {
402  { 1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128 },
403  { 177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128 },
404  { 80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128 },
405  },
406  {
407  { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
408  { 246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
409  { 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
410  },
411  },
412  {
413  {
414  { 198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62 },
415  { 131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1 },
416  { 68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128 },
417  },
418  {
419  { 1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128 },
420  { 184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128 },
421  { 81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128 },
422  },
423  {
424  { 1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128 },
425  { 99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128 },
426  { 23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128 },
427  },
428  {
429  { 1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128 },
430  { 109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128 },
431  { 44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128 },
432  },
433  {
434  { 1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128 },
435  { 94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128 },
436  { 22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128 },
437  },
438  {
439  { 1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128 },
440  { 124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128 },
441  { 35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128 },
442  },
443  {
444  { 1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128 },
445  { 121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128 },
446  { 45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128 },
447  },
448  {
449  { 1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128 },
450  { 203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128 },
451  { 137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128 },
452  },
453  },
454  {
455  {
456  { 253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128 },
457  { 175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128 },
458  { 73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128 },
459  },
460  {
461  { 1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128 },
462  { 239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128 },
463  { 155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128 },
464  },
465  {
466  { 1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128 },
467  { 201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128 },
468  { 69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128 },
469  },
470  {
471  { 1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128 },
472  { 223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128 },
473  { 141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128 },
474  },
475  {
476  { 1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128 },
477  { 190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128 },
478  { 149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
479  },
480  {
481  { 1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
482  { 247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
483  { 240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
484  },
485  {
486  { 1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128 },
487  { 213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128 },
488  { 55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
489  },
490  {
491  { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
492  { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
493  { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
494  },
495  },
496  {
497  {
498  { 202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255 },
499  { 126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128 },
500  { 61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128 },
501  },
502  {
503  { 1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128 },
504  { 166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128 },
505  { 39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128 },
506  },
507  {
508  { 1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128 },
509  { 124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128 },
510  { 24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128 },
511  },
512  {
513  { 1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128 },
514  { 149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128 },
515  { 28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128 },
516  },
517  {
518  { 1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128 },
519  { 123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128 },
520  { 20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128 },
521  },
522  {
523  { 1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128 },
524  { 168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128 },
525  { 47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128 },
526  },
527  {
528  { 1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128 },
529  { 141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128 },
530  { 42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128 },
531  },
532  {
533  { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
534  { 244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
535  { 238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
536  },
537  },
538 };
539 
540 static const uint8_t vp8_token_update_probs[4][8][3][NUM_DCT_TOKENS - 1] = {
541  {
542  {
543  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
544  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
545  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
546  },
547  {
548  { 176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
549  { 223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
550  { 249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
551  },
552  {
553  { 255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
554  { 234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
555  { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
556  },
557  {
558  { 255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
559  { 239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
560  { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
561  },
562  {
563  { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
564  { 251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
565  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
566  },
567  {
568  { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
569  { 251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
570  { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
571  },
572  {
573  { 255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255 },
574  { 250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255 },
575  { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
576  },
577  {
578  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
579  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
580  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
581  },
582  },
583  {
584  {
585  { 217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
586  { 225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255 },
587  { 234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255 },
588  },
589  {
590  { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
591  { 223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
592  { 238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255 },
593  },
594  {
595  { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
596  { 249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
597  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
598  },
599  {
600  { 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
601  { 247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
602  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
603  },
604  {
605  { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
606  { 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
607  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
608  },
609  {
610  { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
611  { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
612  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
613  },
614  {
615  { 255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
616  { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
617  { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
618  },
619  {
620  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
621  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
622  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
623  },
624  },
625  {
626  {
627  { 186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255 },
628  { 234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255 },
629  { 251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255 },
630  },
631  {
632  { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
633  { 236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
634  { 251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255 },
635  },
636  {
637  { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
638  { 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
639  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
640  },
641  {
642  { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
643  { 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
644  { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
645  },
646  {
647  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
648  { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
649  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
650  },
651  {
652  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
653  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
654  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
655  },
656  {
657  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
658  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
659  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
660  },
661  {
662  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
663  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
664  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
665  },
666  },
667  {
668  {
669  { 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
670  { 250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255 },
671  { 248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255 },
672  },
673  {
674  { 255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
675  { 246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
676  { 252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255 },
677  },
678  {
679  { 255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
680  { 248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
681  { 253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255 },
682  },
683  {
684  { 255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
685  { 245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
686  { 253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
687  },
688  {
689  { 255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
690  { 252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
691  { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
692  },
693  {
694  { 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
695  { 249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
696  { 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
697  },
698  {
699  { 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
700  { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
701  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
702  },
703  {
704  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
705  { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
706  { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
707  },
708  },
709 };
710 
711 // fixme: copied from h264data.h
712 static const uint8_t zigzag_scan[16]={
713  0 + 0 * 4, 1 + 0 * 4, 0 + 1 * 4, 0 + 2 * 4,
714  1 + 1 * 4, 2 + 0 * 4, 3 + 0 * 4, 2 + 1 * 4,
715  1 + 2 * 4, 0 + 3 * 4, 1 + 3 * 4, 2 + 2 * 4,
716  3 + 1 * 4, 3 + 2 * 4, 2 + 3 * 4, 3 + 3 * 4,
717 };
718 
719 static const uint8_t vp8_dc_qlookup[VP8_MAX_QUANT + 1] = {
720  4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 17,
721  18, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 25, 25, 26, 27, 28,
722  29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43,
723  44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
724  59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
725  75, 76, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
726  91, 93, 95, 96, 98, 100, 101, 102, 104, 106, 108, 110, 112, 114, 116, 118,
727  122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 143, 145, 148, 151, 154, 157,
728 };
729 
730 static const uint16_t vp8_ac_qlookup[VP8_MAX_QUANT + 1] = {
731  4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
732  20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
733  36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
734  52, 53, 54, 55, 56, 57, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76,
735  78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108,
736  110, 112, 114, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 152,
737  155, 158, 161, 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209,
738  213, 217, 221, 225, 229, 234, 239, 245, 249, 254, 259, 264, 269, 274, 279, 284,
739 };
740 
741 static const uint8_t vp8_mv_update_prob[2][19] = {
742  { 237,
743  246,
744  253, 253, 254, 254, 254, 254, 254,
745  254, 254, 254, 254, 254, 250, 250, 252, /* VP8 only: */ 254, 254 },
746  { 231,
747  243,
748  245, 253, 254, 254, 254, 254, 254,
749  254, 254, 254, 254, 254, 251, 251, 254, /* VP8 only: */ 254, 254 }
750 };
751 
752 static const uint8_t vp7_mv_default_prob[2][17] = {
753  { 162,
754  128,
755  225, 146, 172, 147, 214, 39, 156,
756  247, 210, 135, 68, 138, 220, 239, 246 },
757  { 164,
758  128,
759  204, 170, 119, 235, 140, 230, 228,
760  244, 184, 201, 44, 173, 221, 239, 253 }
761 };
762 
763 static const uint8_t vp8_mv_default_prob[2][19] = {
764  { 162,
765  128,
766  225, 146, 172, 147, 214, 39, 156,
767  128, 129, 132, 75, 145, 178, 206, 239, 254, 254 },
768  { 164,
769  128,
770  204, 170, 119, 235, 140, 230, 228,
771  128, 130, 130, 74, 148, 180, 203, 236, 254, 254 }
772 };
773 
774 static const uint8_t vp7_feature_value_size[2][4] = {
775  { 7, 6, 0, 8 },
776  { 7, 6, 0, 5 },
777 };
778 
779 static const int8_t vp7_feature_index_tree[4][2] =
780 {
781  { 1, 2 },
782  { -0, -1 }, // '00', '01'
783  { -2, -3 }, // '10', '11'
784 };
785 
786 static const uint16_t vp7_ydc_qlookup[] = {
787  4, 4, 5, 6, 6, 7, 8, 8, 9, 10, 11, 12, 13, 14, 15,
788  16, 17, 18, 19, 20, 21, 22, 23, 23, 24, 25, 26, 27, 28, 29,
789  30, 31, 32, 33, 33, 34, 35, 36, 36, 37, 38, 39, 39, 40, 41,
790  41, 42, 43, 43, 44, 45, 45, 46, 47, 48, 48, 49, 50, 51, 52,
791  53, 53, 54, 56, 57, 58, 59, 60, 62, 63, 65, 66, 68, 70, 72,
792  74, 76, 79, 81, 84, 87, 90, 93, 96, 100, 104, 108, 112, 116, 121,
793  126, 131, 136, 142, 148, 154, 160, 167, 174, 182, 189, 198, 206, 215, 224,
794  234, 244, 254, 265, 277, 288, 301, 313, 327, 340, 355, 370, 385, 401, 417,
795  434, 452, 470, 489, 509, 529, 550, 572,
796 };
797 
798 static const uint16_t vp7_yac_qlookup[] = {
799  4, 4, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 15,
800  16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35,
801  37, 38, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 53, 54,
802  55, 56, 57, 58, 59, 61, 62, 63, 64, 65, 67, 68, 69, 70,
803  72, 73, 75, 76, 78, 80, 82, 84, 86, 88, 91, 93, 96, 99,
804  102, 105, 109, 112, 116, 121, 125, 130, 135, 140, 146, 152, 158, 165,
805  172, 180, 188, 196, 205, 214, 224, 234, 245, 256, 268, 281, 294, 308,
806  322, 337, 353, 369, 386, 404, 423, 443, 463, 484, 506, 529, 553, 578,
807  604, 631, 659, 688, 718, 749, 781, 814, 849, 885, 922, 960, 1000, 1041,
808  1083, 1127,
809 };
810 
811 static const uint16_t vp7_y2dc_qlookup[] = {
812  7, 9, 11, 13, 15, 17, 19, 21, 23, 26, 28, 30, 33, 35,
813  37, 39, 42, 44, 46, 48, 51, 53, 55, 57, 59, 61, 63, 65,
814  67, 69, 70, 72, 74, 75, 77, 78, 80, 81, 83, 84, 85, 87,
815  88, 89, 90, 92, 93, 94, 95, 96, 97, 99, 100, 101, 102, 104,
816  105, 106, 108, 109, 111, 113, 114, 116, 118, 120, 123, 125, 128, 131,
817  134, 137, 140, 144, 148, 152, 156, 161, 166, 171, 176, 182, 188, 195,
818  202, 209, 217, 225, 234, 243, 253, 263, 274, 285, 297, 309, 322, 336,
819  350, 365, 381, 397, 414, 432, 450, 470, 490, 511, 533, 556, 579, 604,
820  630, 656, 684, 713, 742, 773, 805, 838, 873, 908, 945, 983, 1022, 1063,
821  1105, 1148,
822 };
823 
824 static const uint16_t vp7_y2ac_qlookup[] = {
825  7, 9, 11, 13, 16, 18, 21, 24, 26, 29, 32, 35,
826  38, 41, 43, 46, 49, 52, 55, 58, 61, 64, 66, 69,
827  72, 74, 77, 79, 82, 84, 86, 88, 91, 93, 95, 97,
828  98, 100, 102, 104, 105, 107, 109, 110, 112, 113, 115, 116,
829  117, 119, 120, 122, 123, 125, 127, 128, 130, 132, 134, 136,
830  138, 141, 143, 146, 149, 152, 155, 158, 162, 166, 171, 175,
831  180, 185, 191, 197, 204, 210, 218, 226, 234, 243, 252, 262,
832  273, 284, 295, 308, 321, 335, 350, 365, 381, 398, 416, 435,
833  455, 476, 497, 520, 544, 569, 595, 622, 650, 680, 711, 743,
834  776, 811, 848, 885, 925, 965, 1008, 1052, 1097, 1144, 1193, 1244,
835  1297, 1351, 1407, 1466, 1526, 1588, 1652, 1719,
836 };
837 
838 #endif /* AVCODEC_VP8DATA_H */