swscale: fix gbrap to gbrap alpha scaling
[ffmpeg.git] / libavcodec / vp8data.h
1 /*
2  * Copyright (C) 2010 David Conrad
3  * Copyright (C) 2010 Ronald S. Bultje
4  *
5  * This file is part of Libav.
6  *
7  * Libav 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  * Libav 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 Libav; 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,
35     [VERT_PRED8x8]  = TM_VP8_PRED,
36     [HOR_PRED8x8]   = TM_VP8_PRED,
37     [PLANE_PRED8x8] = TM_VP8_PRED,
38 };
39
40 static const uint8_t vp8_pred4x4_mode[] = {
41     [DC_PRED8x8]    = DC_PRED,
42     [VERT_PRED8x8]  = VERT_PRED,
43     [HOR_PRED8x8]   = HOR_PRED,
44     [PLANE_PRED8x8] = TM_VP8_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;
64     uint8_t subblock;
65     uint8_t score;
66 } VP7MVPred;
67
68 #define VP7_MV_PRED_COUNT 12
69 static const VP7MVPred vp7_mv_pred[VP7_MV_PRED_COUNT] = {
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
161 static const uint8_t vp8_pred16x16_prob_intra[4] = {
162     145, 156, 163, 128
163 };
164 static const uint8_t vp8_pred16x16_prob_inter[4] = {
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[] = {
363     vp8_dct_cat3_prob,
364     vp8_dct_cat4_prob,
365     vp8_dct_cat5_prob,
366     vp8_dct_cat6_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 */