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