Statistics
| Branch: | Revision:

ffmpeg / libavcodec / vp8data.h @ 23117d69

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