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