]> git.sesse.net Git - ffmpeg/blob - libavcodec/vp8data.h
43b74ca2b6c4a776704eeee8ecd93f1346a580c4
[ffmpeg] / libavcodec / vp8data.h
1 /**
2  * VP8 compatible video decoder
3  *
4  * Copyright (C) 2010 David Conrad
5  * Copyright (C) 2010 Ronald S. Bultje
6  *
7  * This file is part of FFmpeg.
8  *
9  * FFmpeg is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * FFmpeg is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with FFmpeg; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22  */
23
24 // TODO: move these #define and enum to a better header...
25
26 #define VP8_MAX_QUANT 127
27
28 enum dct_token {
29     DCT_0,
30     DCT_1,
31     DCT_2,
32     DCT_3,
33     DCT_4,
34     DCT_CAT1,
35     DCT_CAT2,
36     DCT_CAT3,
37     DCT_CAT4,
38     DCT_CAT5,
39     DCT_CAT6,
40     DCT_EOB,
41
42     NUM_DCT_TOKENS
43 };
44
45 #include "h264pred.h"
46
47 // used to signal 4x4 intra pred in luma MBs
48 #define MODE_I4x4 4
49
50 enum inter_mvmode {
51     VP8_MVMODE_NEAREST = MODE_I4x4 + 1,
52     VP8_MVMODE_NEAR,
53     VP8_MVMODE_ZERO,
54     VP8_MVMODE_NEW,
55     VP8_MVMODE_SPLIT
56 };
57
58 enum inter_splitmvmode {
59     VP8_SPLITMVMODE_16x8 = 0,    ///< 2 16x8 blocks (vertical)
60     VP8_SPLITMVMODE_8x16,        ///< 2 8x16 blocks (horizontal)
61     VP8_SPLITMVMODE_8x8,         ///< 2x2 blocks of 8x8px each
62     VP8_SPLITMVMODE_4x4,         ///< 4x4 blocks of 4x4px each
63     VP8_SPLITMVMODE_NONE,        ///< (only used in prediction) no split MVs
64 };
65
66 static const uint8_t vp8_pred4x4_mode[] =
67 {
68     [DC_PRED8x8]    = DC_PRED,
69     [VERT_PRED8x8]  = VERT_PRED,
70     [HOR_PRED8x8]   = HOR_PRED,
71     [PLANE_PRED8x8] = TM_VP8_PRED,
72 };
73
74 static const int8_t vp8_pred16x16_tree_intra[4][2] =
75 {
76     { -MODE_I4x4, 1 },                      // '0'
77      { 2, 3 },
78       {  -DC_PRED8x8,  -VERT_PRED8x8 },     // '100', '101'
79       { -HOR_PRED8x8, -PLANE_PRED8x8 },     // '110', '111'
80 };
81
82 static const int8_t vp8_pred16x16_tree_inter[4][2] =
83 {
84     { -DC_PRED8x8, 1 },                     // '0'
85      { 2, 3 },
86       {  -VERT_PRED8x8, -HOR_PRED8x8 },     // '100', '101'
87       { -PLANE_PRED8x8, -MODE_I4x4 },       // '110', '111'
88 };
89
90 static const int vp8_mode_contexts[6][4] = {
91     {   7,   1,   1, 143 },
92     {  14,  18,  14, 107 },
93     { 135,  64,  57,  68 },
94     {  60,  56, 128,  65 },
95     { 159, 134, 128,  34 },
96     { 234, 188, 128,  28 },
97 };
98
99 static const uint8_t vp8_mbsplits[5][16] = {
100     {  0,  0,  0,  0,  0,  0,  0,  0,
101        1,  1,  1,  1,  1,  1,  1,  1  },
102     {  0,  0,  1,  1,  0,  0,  1,  1,
103        0,  0,  1,  1,  0,  0,  1,  1  },
104     {  0,  0,  1,  1,  0,  0,  1,  1,
105        2,  2,  3,  3,  2,  2,  3,  3  },
106     {  0,  1,  2,  3,  4,  5,  6,  7,
107        8,  9, 10, 11, 12, 13, 14, 15  },
108     {  0,  0,  0,  0,  0,  0,  0,  0,
109        0,  0,  0,  0,  0,  0,  0,  0  }
110 };
111
112 static const uint8_t vp8_mbfirstidx[4][16] = {
113     {  0,  8 }, {  0,  2 }, {  0,  2,  8,  10 },
114     {  0,  1,  2,  3,  4,  5,  6,  7,
115        8,  9, 10, 11, 12, 13, 14, 15 }
116 };
117
118 static const int8_t vp8_mbsplit_tree[3][2] = {
119     { -VP8_SPLITMVMODE_4x4,  1 },           // '0' - 16 individual MVs
120      { -VP8_SPLITMVMODE_8x8,  2 },          // '10' - quarter-based MVs
121       { -VP8_SPLITMVMODE_16x8,              // '110' - top/bottom MVs
122         -VP8_SPLITMVMODE_8x16 }             // '111' - left/right MVs
123 };
124 static const uint8_t vp8_mbsplit_count[4] = {   2,   2,   4,  16 };
125 static const uint8_t vp8_mbsplit_prob[3]  = { 110, 111, 150 };
126
127 static const uint8_t vp8_submv_prob[5][3] = {
128     { 147, 136,  18 },
129     { 106, 145,   1 },
130     { 179, 121,   1 },
131     { 223,   1,  34 },
132     { 208,   1,   1 }
133 };
134
135 static const uint8_t vp8_pred16x16_prob_intra[4] = { 145, 156, 163, 128 };
136 static const uint8_t vp8_pred16x16_prob_inter[4] = { 112,  86, 140,  37 };
137
138 static const int8_t vp8_pred4x4_tree[9][2] =
139 {
140     { -DC_PRED, 1 },                                    // '0'
141      { -TM_VP8_PRED, 2 },                               // '10'
142       { -VERT_PRED, 3 },                                // '110'
143        { 4, 6 },
144         { -HOR_PRED, 5 },                               // '11100'
145          { -DIAG_DOWN_RIGHT_PRED, -VERT_RIGHT_PRED },   // '111010', '111011'
146         { -DIAG_DOWN_LEFT_PRED, 7 },                    // '11110'
147          { -VERT_LEFT_PRED, 8 },                        // '111110'
148           { -HOR_DOWN_PRED, -HOR_UP_PRED },             // '1111110', '1111111'
149 };
150
151 static const int8_t vp8_pred8x8c_tree[3][2] =
152 {
153     { -DC_PRED8x8, 1 },                 // '0'
154      { -VERT_PRED8x8, 2 },              // '10
155       { -HOR_PRED8x8, -PLANE_PRED8x8 }, // '110', '111'
156 };
157
158 static const uint8_t vp8_pred8x8c_prob_intra[3] = { 142, 114, 183 };
159 static const uint8_t vp8_pred8x8c_prob_inter[3] = { 162, 101, 204 };
160
161 static const uint8_t vp8_pred4x4_prob_inter[9] =
162 {
163     120, 90, 79, 133, 87, 85, 80, 111, 151
164 };
165
166 static const uint8_t vp8_pred4x4_prob_intra[10][10][9] =
167 {
168     {
169         {  39,  53, 200,  87,  26,  21,  43, 232, 171 },
170         {  56,  34,  51, 104, 114, 102,  29,  93,  77 },
171         {  88,  88, 147, 150,  42,  46,  45, 196, 205 },
172         { 107,  54,  32,  26,  51,   1,  81,  43,  31 },
173         {  39,  28,  85, 171,  58, 165,  90,  98,  64 },
174         {  34,  22, 116, 206,  23,  34,  43, 166,  73 },
175         {  34,  19,  21, 102, 132, 188,  16,  76, 124 },
176         {  68,  25, 106,  22,  64, 171,  36, 225, 114 },
177         {  62,  18,  78,  95,  85,  57,  50,  48,  51 },
178         {  43,  97, 183, 117,  85,  38,  35, 179,  61 },
179     },
180     {
181         { 112, 113,  77,  85, 179, 255,  38, 120, 114 },
182         {  40,  42,   1, 196, 245, 209,  10,  25, 109 },
183         { 193, 101,  35, 159, 215, 111,  89,  46, 111 },
184         { 100,  80,   8,  43, 154,   1,  51,  26,  71 },
185         {  88,  43,  29, 140, 166, 213,  37,  43, 154 },
186         {  61,  63,  30, 155,  67,  45,  68,   1, 209 },
187         {  41,  40,   5, 102, 211, 183,   4,   1, 221 },
188         { 142,  78,  78,  16, 255, 128,  34, 197, 171 },
189         {  51,  50,  17, 168, 209, 192,  23,  25,  82 },
190         {  60, 148,  31, 172, 219, 228,  21,  18, 111 },
191     },
192     {
193         { 175,  69, 143,  80,  85,  82,  72, 155, 103 },
194         {  56,  58,  10, 171, 218, 189,  17,  13, 152 },
195         { 231, 120,  48,  89, 115, 113, 120, 152, 112 },
196         { 144,  71,  10,  38, 171, 213, 144,  34,  26 },
197         { 114,  26,  17, 163,  44, 195,  21,  10, 173 },
198         { 121,  24,  80, 195,  26,  62,  44,  64,  85 },
199         {  63,  20,   8, 114, 114, 208,  12,   9, 226 },
200         { 170,  46,  55,  19, 136, 160,  33, 206,  71 },
201         {  81,  40,  11,  96, 182,  84,  29,  16,  36 },
202         { 152, 179,  64, 126, 170, 118,  46,  70,  95 },
203     },
204     {
205         {  75,  79, 123,  47,  51, 128,  81, 171,   1 },
206         {  57,  17,   5,  71, 102,  57,  53,  41,  49 },
207         { 125,  98,  42,  88, 104,  85, 117, 175,  82 },
208         { 115,  21,   2,  10, 102, 255, 166,  23,   6 },
209         {  38,  33,  13, 121,  57,  73,  26,   1,  85 },
210         {  41,  10,  67, 138,  77, 110,  90,  47, 114 },
211         {  57,  18,  10, 102, 102, 213,  34,  20,  43 },
212         { 101,  29,  16,  10,  85, 128, 101, 196,  26 },
213         { 117,  20,  15,  36, 163, 128,  68,   1,  26 },
214         {  95,  84,  53,  89, 128, 100, 113, 101,  45 },
215     },
216     {
217         {  63,  59,  90, 180,  59, 166,  93,  73, 154 },
218         {  40,  40,  21, 116, 143, 209,  34,  39, 175 },
219         { 138,  31,  36, 171,  27, 166,  38,  44, 229 },
220         {  57,  46,  22,  24, 128,   1,  54,  17,  37 },
221         {  47,  15,  16, 183,  34, 223,  49,  45, 183 },
222         {  46,  17,  33, 183,   6,  98,  15,  32, 183 },
223         {  40,   3,   9, 115,  51, 192,  18,   6, 223 },
224         {  65,  32,  73, 115,  28, 128,  23, 128, 205 },
225         {  87,  37,   9, 115,  59,  77,  64,  21,  47 },
226         {  67,  87,  58, 169,  82, 115,  26,  59, 179 },
227     },
228     {
229         {  54,  57, 112, 184,   5,  41,  38, 166, 213 },
230         {  30,  34,  26, 133, 152, 116,  10,  32, 134 },
231         { 104,  55,  44, 218,   9,  54,  53, 130, 226 },
232         {  75,  32,  12,  51, 192, 255, 160,  43,  51 },
233         {  39,  19,  53, 221,  26, 114,  32,  73, 255 },
234         {  31,   9,  65, 234,   2,  15,   1, 118,  73 },
235         {  56,  21,  23, 111,  59, 205,  45,  37, 192 },
236         {  88,  31,  35,  67, 102,  85,  55, 186,  85 },
237         {  55,  38,  70, 124,  73, 102,   1,  34,  98 },
238         {  64,  90,  70, 205,  40,  41,  23,  26,  57 },
239     },
240     {
241         {  86,  40,  64, 135, 148, 224,  45, 183, 128 },
242         {  22,  26,  17, 131, 240, 154,  14,   1, 209 },
243         { 164,  50,  31, 137, 154, 133,  25,  35, 218 },
244         {  83,  12,  13,  54, 192, 255,  68,  47,  28 },
245         {  45,  16,  21,  91,  64, 222,   7,   1, 197 },
246         {  56,  21,  39, 155,  60, 138,  23, 102, 213 },
247         {  18,  11,   7,  63, 144, 171,   4,   4, 246 },
248         {  85,  26,  85,  85, 128, 128,  32, 146, 171 },
249         {  35,  27,  10, 146, 174, 171,  12,  26, 128 },
250         {  51, 103,  44, 131, 131, 123,  31,   6, 158 },
251     },
252     {
253         {  68,  45, 128,  34,   1,  47,  11, 245, 171 },
254         {  62,  17,  19,  70, 146,  85,  55,  62,  70 },
255         { 102,  61,  71,  37,  34,  53,  31, 243, 192 },
256         {  75,  15,   9,   9,  64, 255, 184, 119,  16 },
257         {  37,  43,  37, 154, 100, 163,  85, 160,   1 },
258         {  63,   9,  92, 136,  28,  64,  32, 201,  85 },
259         {  56,   8,  17, 132, 137, 255,  55, 116, 128 },
260         {  86,   6,  28,   5,  64, 255,  25, 248,   1 },
261         {  58,  15,  20,  82, 135,  57,  26, 121,  40 },
262         {  69,  60,  71,  38,  73, 119,  28, 222,  37 },
263     },
264     {
265         { 101,  75, 128, 139, 118, 146, 116, 128,  85 },
266         {  56,  41,  15, 176, 236,  85,  37,   9,  62 },
267         { 190,  80,  35,  99, 180,  80, 126,  54,  45 },
268         { 146,  36,  19,  30, 171, 255,  97,  27,  20 },
269         {  71,  30,  17, 119, 118, 255,  17,  18, 138 },
270         { 101,  38,  60, 138,  55,  70,  43,  26, 142 },
271         {  32,  41,  20, 117, 151, 142,  20,  21, 163 },
272         { 138,  45,  61,  62, 219,   1,  81, 188,  64 },
273         { 112,  19,  12,  61, 195, 128,  48,   4,  24 },
274         {  85, 126,  47,  87, 176,  51,  41,  20,  32 },
275     },
276     {
277         {  66, 102, 167,  99,  74,  62,  40, 234, 128 },
278         {  41,  53,   9, 178, 241, 141,  26,   8, 107 },
279         { 134, 183,  89, 137,  98, 101, 106, 165, 148 },
280         { 104,  79,  12,  27, 217, 255,  87,  17,   7 },
281         {  74,  43,  26, 146,  73, 166,  49,  23, 157 },
282         {  65,  38, 105, 160,  51,  52,  31, 115, 128 },
283         {  47,  41,  14, 110, 182, 183,  21,  17, 194 },
284         {  87,  68,  71,  44, 114,  51,  15, 186,  23 },
285         {  66,  45,  25, 102, 197, 189,  23,  18,  22 },
286         {  72, 187, 100, 130, 157, 111,  32,  75,  80 },
287     },
288 };
289
290 static const int8_t vp8_segmentid_tree[][2] =
291 {
292     { 1, 2 },
293      { -0, -1 },    // '00', '01'
294      { -2, -3 },    // '10', '11'
295 };
296
297 static const uint8_t vp8_coeff_band[16] =
298 {
299     0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7
300 };
301
302 static const uint8_t vp8_dct_cat1_prob[] = { 159, 0 };
303 static const uint8_t vp8_dct_cat2_prob[] = { 165, 145, 0 };
304 static const uint8_t vp8_dct_cat3_prob[] = { 173, 148, 140, 0 };
305 static const uint8_t vp8_dct_cat4_prob[] = { 176, 155, 140, 135, 0 };
306 static const uint8_t vp8_dct_cat5_prob[] = { 180, 157, 141, 134, 130, 0 };
307 static const uint8_t vp8_dct_cat6_prob[] = { 254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0 };
308
309 // only used for cat3 and above; cat 1 and 2 are referenced directly
310 static const uint8_t * const vp8_dct_cat_prob[] =
311 {
312     vp8_dct_cat3_prob,
313     vp8_dct_cat4_prob,
314     vp8_dct_cat5_prob,
315     vp8_dct_cat6_prob,
316 };
317
318 static const uint8_t vp8_token_default_probs[4][8][3][NUM_DCT_TOKENS-1] =
319 {
320     {
321         {
322             { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
323             { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
324             { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
325         },
326         {
327             { 253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128 },
328             { 189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128 },
329             { 106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128 },
330         },
331         {
332             {   1,  98, 248, 255, 236, 226, 255, 255, 128, 128, 128 },
333             { 181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128 },
334             {  78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128 },
335         },
336         {
337             {   1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128 },
338             { 184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128 },
339             {  77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128 },
340         },
341         {
342             {   1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128 },
343             { 170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128 },
344             {  37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128 },
345         },
346         {
347             {   1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128 },
348             { 207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128 },
349             { 102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128 },
350         },
351         {
352             {   1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128 },
353             { 177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128 },
354             {  80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128 },
355         },
356         {
357             {   1,   1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
358             { 246,   1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
359             { 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
360         },
361     },
362     {
363         {
364             { 198,  35, 237, 223, 193, 187, 162, 160, 145, 155,  62 },
365             { 131,  45, 198, 221, 172, 176, 220, 157, 252, 221,   1 },
366             {  68,  47, 146, 208, 149, 167, 221, 162, 255, 223, 128 },
367         },
368         {
369             {   1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128 },
370             { 184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128 },
371             {  81,  99, 181, 242, 176, 190, 249, 202, 255, 255, 128 },
372         },
373         {
374             {   1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128 },
375             {  99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128 },
376             {  23,  91, 163, 242, 170, 187, 247, 210, 255, 255, 128 },
377         },
378         {
379             {   1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128 },
380             { 109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128 },
381             {  44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128 },
382         },
383         {
384             {   1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128 },
385             {  94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128 },
386             {  22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128 },
387         },
388         {
389             {   1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128 },
390             { 124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128 },
391             {  35,  77, 181, 251, 193, 211, 255, 205, 128, 128, 128 },
392         },
393         {
394             {   1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128 },
395             { 121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128 },
396             {  45,  99, 188, 251, 195, 217, 255, 224, 128, 128, 128 },
397         },
398         {
399             {   1,   1, 251, 255, 213, 255, 128, 128, 128, 128, 128 },
400             { 203,   1, 248, 255, 255, 128, 128, 128, 128, 128, 128 },
401             { 137,   1, 177, 255, 224, 255, 128, 128, 128, 128, 128 },
402         },
403     },
404     {
405         {
406             { 253,   9, 248, 251, 207, 208, 255, 192, 128, 128, 128 },
407             { 175,  13, 224, 243, 193, 185, 249, 198, 255, 255, 128 },
408             {  73,  17, 171, 221, 161, 179, 236, 167, 255, 234, 128 },
409         },
410         {
411             {   1,  95, 247, 253, 212, 183, 255, 255, 128, 128, 128 },
412             { 239,  90, 244, 250, 211, 209, 255, 255, 128, 128, 128 },
413             { 155,  77, 195, 248, 188, 195, 255, 255, 128, 128, 128 },
414         },
415         {
416             {   1,  24, 239, 251, 218, 219, 255, 205, 128, 128, 128 },
417             { 201,  51, 219, 255, 196, 186, 128, 128, 128, 128, 128 },
418             {  69,  46, 190, 239, 201, 218, 255, 228, 128, 128, 128 },
419         },
420         {
421             {   1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128 },
422             { 223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128 },
423             { 141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128 },
424         },
425         {
426             {   1,  16, 248, 255, 255, 128, 128, 128, 128, 128, 128 },
427             { 190,  36, 230, 255, 236, 255, 128, 128, 128, 128, 128 },
428             { 149,   1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
429         },
430         {
431             {   1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
432             { 247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
433             { 240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
434         },
435         {
436             {   1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128 },
437             { 213,  62, 250, 255, 255, 128, 128, 128, 128, 128, 128 },
438             {  55,  93, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
439         },
440         {
441             { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
442             { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
443             { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
444         },
445     },
446     {
447         {
448             { 202,  24, 213, 235, 186, 191, 220, 160, 240, 175, 255 },
449             { 126,  38, 182, 232, 169, 184, 228, 174, 255, 187, 128 },
450             {  61,  46, 138, 219, 151, 178, 240, 170, 255, 216, 128 },
451         },
452         {
453             {   1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128 },
454             { 166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128 },
455             {  39,  77, 162, 232, 172, 180, 245, 178, 255, 255, 128 },
456         },
457         {
458             {   1,  52, 220, 246, 198, 199, 249, 220, 255, 255, 128 },
459             { 124,  74, 191, 243, 183, 193, 250, 221, 255, 255, 128 },
460             {  24,  71, 130, 219, 154, 170, 243, 182, 255, 255, 128 },
461         },
462         {
463             {   1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128 },
464             { 149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128 },
465             {  28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128 },
466         },
467         {
468             {   1,  81, 230, 252, 204, 203, 255, 192, 128, 128, 128 },
469             { 123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128 },
470             {  20,  95, 153, 243, 164, 173, 255, 203, 128, 128, 128 },
471         },
472         {
473             {   1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128 },
474             { 168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128 },
475             {  47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128 },
476         },
477         {
478             {   1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128 },
479             { 141,  84, 213, 252, 201, 202, 255, 219, 128, 128, 128 },
480             {  42,  80, 160, 240, 162, 185, 255, 205, 128, 128, 128 },
481         },
482         {
483             {   1,   1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
484             { 244,   1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
485             { 238,   1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
486         },
487     },
488 };
489
490 static const uint8_t vp8_token_update_probs[4][8][3][NUM_DCT_TOKENS-1] =
491 {
492     {
493         {
494             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
495             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
496             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
497         },
498         {
499             { 176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
500             { 223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
501             { 249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
502         },
503         {
504             { 255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
505             { 234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
506             { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
507         },
508         {
509             { 255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
510             { 239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
511             { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
512         },
513         {
514             { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
515             { 251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
516             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
517         },
518         {
519             { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
520             { 251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
521             { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
522         },
523         {
524             { 255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255 },
525             { 250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255 },
526             { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
527         },
528         {
529             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
530             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
531             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
532         },
533     },
534     {
535         {
536             { 217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
537             { 225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255 },
538             { 234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255 },
539         },
540         {
541             { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
542             { 223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
543             { 238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255 },
544         },
545         {
546             { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
547             { 249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
548             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
549         },
550         {
551             { 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
552             { 247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
553             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
554         },
555         {
556             { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
557             { 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
558             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
559         },
560         {
561             { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
562             { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
563             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
564         },
565         {
566             { 255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
567             { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
568             { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
569         },
570         {
571             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
572             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
573             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
574         },
575     },
576     {
577         {
578             { 186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255 },
579             { 234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255 },
580             { 251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255 },
581         },
582         {
583             { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
584             { 236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
585             { 251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255 },
586         },
587         {
588             { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
589             { 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
590             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
591         },
592         {
593             { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
594             { 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
595             { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
596         },
597         {
598             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
599             { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
600             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
601         },
602         {
603             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
604             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
605             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
606         },
607         {
608             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
609             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
610             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
611         },
612         {
613             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
614             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
615             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
616         },
617     },
618     {
619         {
620             { 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
621             { 250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255 },
622             { 248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255 },
623         },
624         {
625             { 255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
626             { 246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
627             { 252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255 },
628         },
629         {
630             { 255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
631             { 248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
632             { 253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255 },
633         },
634         {
635             { 255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
636             { 245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
637             { 253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
638         },
639         {
640             { 255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
641             { 252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
642             { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
643         },
644         {
645             { 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
646             { 249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
647             { 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
648         },
649         {
650             { 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
651             { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
652             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
653         },
654         {
655             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
656             { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
657             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
658         },
659     },
660 };
661
662 // fixme: copied from h264data.h
663 static const uint8_t zigzag_scan[16]={
664     0+0*4, 1+0*4, 0+1*4, 0+2*4,
665     1+1*4, 2+0*4, 3+0*4, 2+1*4,
666     1+2*4, 0+3*4, 1+3*4, 2+2*4,
667     3+1*4, 3+2*4, 2+3*4, 3+3*4,
668 };
669
670 static const uint8_t vp8_dc_qlookup[VP8_MAX_QUANT+1] =
671 {
672       4,   5,   6,   7,   8,   9,  10,  10,  11,  12,  13,  14,  15,  16,  17,  17,
673      18,  19,  20,  20,  21,  21,  22,  22,  23,  23,  24,  25,  25,  26,  27,  28,
674      29,  30,  31,  32,  33,  34,  35,  36,  37,  37,  38,  39,  40,  41,  42,  43,
675      44,  45,  46,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,
676      59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,
677      75,  76,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,
678      91,  93,  95,  96,  98, 100, 101, 102, 104, 106, 108, 110, 112, 114, 116, 118,
679     122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 143, 145, 148, 151, 154, 157,
680 };
681
682 static const uint16_t vp8_ac_qlookup[VP8_MAX_QUANT+1] =
683 {
684       4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,  16,  17,  18,  19,
685      20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,
686      36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,
687      52,  53,  54,  55,  56,  57,  58,  60,  62,  64,  66,  68,  70,  72,  74,  76,
688      78,  80,  82,  84,  86,  88,  90,  92,  94,  96,  98, 100, 102, 104, 106, 108,
689     110, 112, 114, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 152,
690     155, 158, 161, 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209,
691     213, 217, 221, 225, 229, 234, 239, 245, 249, 254, 259, 264, 269, 274, 279, 284,
692 };
693
694 static const uint8_t vp8_mv_update_prob[2][19] = {
695     { 237,
696       246,
697       253, 253, 254, 254, 254, 254, 254,
698       254, 254, 254, 254, 254, 250, 250, 252, 254, 254 },
699     { 231,
700       243,
701       245, 253, 254, 254, 254, 254, 254,
702       254, 254, 254, 254, 254, 251, 251, 254, 254, 254 }
703 };
704
705 static const uint8_t vp8_mv_default_prob[2][19] = {
706     { 162,
707       128,
708       225, 146, 172, 147, 214, 39, 156,
709       128, 129, 132,  75, 145, 178, 206, 239, 254, 254 },
710     { 164,
711       128,
712       204, 170, 119, 235, 140, 230, 228,
713       128, 130, 130,  74, 148, 180, 203, 236, 254, 254 }
714 };