Statistics
| Branch: | Revision:

ffmpeg / libavcodec / vp8data.h @ 10bf2eeb

History | View | Annotate | Download (29.4 KB)

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