Statistics
| Branch: | Revision:

ffmpeg / libavcodec / vp8data.h @ b0d58795

History | View | Annotate | Download (28.6 KB)

1
/**
2
 * VP8 compatible video decoder
3
 *
4
 * Copyright (C) 2010 David Conrad
5
 * Copyright (C) 2010 Ronald S. Bultje
6
 *
7
 * This file is part of FFmpeg.
8
 *
9
 * FFmpeg is free software; you can redistribute it and/or
10
 * modify it under the terms of the GNU Lesser General Public
11
 * License as published by the Free Software Foundation; either
12
 * version 2.1 of the License, or (at your option) any later version.
13
 *
14
 * FFmpeg is distributed in the hope that it will be useful,
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17
 * Lesser General Public License for more details.
18
 *
19
 * You should have received a copy of the GNU Lesser General Public
20
 * License along with FFmpeg; if not, write to the Free Software
21
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22
 */
23

    
24
// TODO: move these #define and enum to a better header...
25

    
26
#define VP8_MAX_QUANT 127
27

    
28
enum dct_token {
29
    DCT_0,
30
    DCT_1,
31
    DCT_2,
32
    DCT_3,
33
    DCT_4,
34
    DCT_CAT1,
35
    DCT_CAT2,
36
    DCT_CAT3,
37
    DCT_CAT4,
38
    DCT_CAT5,
39
    DCT_CAT6,
40
    DCT_EOB,
41

    
42
    NUM_DCT_TOKENS
43
};
44

    
45
#include "h264pred.h"
46

    
47
// used to signal 4x4 intra pred in luma MBs
48
#define MODE_I4x4 4
49

    
50
enum inter_mvmode {
51
    VP8_MVMODE_NEAREST = MODE_I4x4 + 1,
52
    VP8_MVMODE_NEAR,
53
    VP8_MVMODE_ZERO,
54
    VP8_MVMODE_NEW,
55
    VP8_MVMODE_SPLIT
56
};
57

    
58
enum inter_splitmvmode {
59
    VP8_SPLITMVMODE_16x8 = 0,    ///< 2 16x8 blocks (vertical)
60
    VP8_SPLITMVMODE_8x16,        ///< 2 8x16 blocks (horizontal)
61
    VP8_SPLITMVMODE_8x8,         ///< 2x2 blocks of 8x8px each
62
    VP8_SPLITMVMODE_4x4,         ///< 4x4 blocks of 4x4px each
63
    VP8_SPLITMVMODE_NONE,        ///< (only used in prediction) no split MVs
64
};
65

    
66
static const uint8_t vp8_pred4x4_mode[] =
67
{
68
    [DC_PRED8x8]    = DC_PRED,
69
    [VERT_PRED8x8]  = VERT_PRED,
70
    [HOR_PRED8x8]   = HOR_PRED,
71
    [PLANE_PRED8x8] = TM_VP8_PRED,
72
};
73

    
74
static const int8_t vp8_pred16x16_tree_intra[4][2] =
75
{
76
    { -MODE_I4x4, 1 },                      // '0'
77
     { 2, 3 },
78
      {  -DC_PRED8x8,  -VERT_PRED8x8 },     // '100', '101'
79
      { -HOR_PRED8x8, -PLANE_PRED8x8 },     // '110', '111'
80
};
81

    
82
static const int8_t vp8_pred16x16_tree_inter[4][2] =
83
{
84
    { -DC_PRED8x8, 1 },                     // '0'
85
     { 2, 3 },
86
      {  -VERT_PRED8x8, -HOR_PRED8x8 },     // '100', '101'
87
      { -PLANE_PRED8x8, -MODE_I4x4 },       // '110', '111'
88
};
89

    
90
static const int vp8_mode_contexts[6][4] = {
91
    {   7,   1,   1, 143 },
92
    {  14,  18,  14, 107 },
93
    { 135,  64,  57,  68 },
94
    {  60,  56, 128,  65 },
95
    { 159, 134, 128,  34 },
96
    { 234, 188, 128,  28 },
97
};
98

    
99
static const uint8_t vp8_mbsplits[5][16] = {
100
    {  0,  0,  0,  0,  0,  0,  0,  0,
101
       1,  1,  1,  1,  1,  1,  1,  1  },
102
    {  0,  0,  1,  1,  0,  0,  1,  1,
103
       0,  0,  1,  1,  0,  0,  1,  1  },
104
    {  0,  0,  1,  1,  0,  0,  1,  1,
105
       2,  2,  3,  3,  2,  2,  3,  3  },
106
    {  0,  1,  2,  3,  4,  5,  6,  7,
107
       8,  9, 10, 11, 12, 13, 14, 15  },
108
    {  0,  0,  0,  0,  0,  0,  0,  0,
109
       0,  0,  0,  0,  0,  0,  0,  0  }
110
};
111

    
112
static const uint8_t vp8_mbfirstidx[4][16] = {
113
    {  0,  8 }, {  0,  2 }, {  0,  2,  8,  10 },
114
    {  0,  1,  2,  3,  4,  5,  6,  7,
115
       8,  9, 10, 11, 12, 13, 14, 15 }
116
};
117

    
118
static const uint8_t vp8_mbsplit_count[4] = {   2,   2,   4,  16 };
119
static const uint8_t vp8_mbsplit_prob[3]  = { 110, 111, 150 };
120

    
121
static const uint8_t vp8_submv_prob[5][3] = {
122
    { 147, 136,  18 },
123
    { 106, 145,   1 },
124
    { 179, 121,   1 },
125
    { 223,   1,  34 },
126
    { 208,   1,   1 }
127
};
128

    
129
static const uint8_t vp8_pred16x16_prob_intra[4] = { 145, 156, 163, 128 };
130
static const uint8_t vp8_pred16x16_prob_inter[4] = { 112,  86, 140,  37 };
131

    
132
static const int8_t vp8_pred4x4_tree[9][2] =
133
{
134
    { -DC_PRED, 1 },                                    // '0'
135
     { -TM_VP8_PRED, 2 },                               // '10'
136
      { -VERT_PRED, 3 },                                // '110'
137
       { 4, 6 },
138
        { -HOR_PRED, 5 },                               // '11100'
139
         { -DIAG_DOWN_RIGHT_PRED, -VERT_RIGHT_PRED },   // '111010', '111011'
140
        { -DIAG_DOWN_LEFT_PRED, 7 },                    // '11110'
141
         { -VERT_LEFT_PRED, 8 },                        // '111110'
142
          { -HOR_DOWN_PRED, -HOR_UP_PRED },             // '1111110', '1111111'
143
};
144

    
145
static const int8_t vp8_pred8x8c_tree[3][2] =
146
{
147
    { -DC_PRED8x8, 1 },                 // '0'
148
     { -VERT_PRED8x8, 2 },              // '10
149
      { -HOR_PRED8x8, -PLANE_PRED8x8 }, // '110', '111'
150
};
151

    
152
static const uint8_t vp8_pred8x8c_prob_intra[3] = { 142, 114, 183 };
153
static const uint8_t vp8_pred8x8c_prob_inter[3] = { 162, 101, 204 };
154

    
155
static const uint8_t vp8_pred4x4_prob_inter[9] =
156
{
157
    120, 90, 79, 133, 87, 85, 80, 111, 151
158
};
159

    
160
static const uint8_t vp8_pred4x4_prob_intra[10][10][9] =
161
{
162
    {
163
        {  39,  53, 200,  87,  26,  21,  43, 232, 171 },
164
        {  56,  34,  51, 104, 114, 102,  29,  93,  77 },
165
        {  88,  88, 147, 150,  42,  46,  45, 196, 205 },
166
        { 107,  54,  32,  26,  51,   1,  81,  43,  31 },
167
        {  39,  28,  85, 171,  58, 165,  90,  98,  64 },
168
        {  34,  22, 116, 206,  23,  34,  43, 166,  73 },
169
        {  34,  19,  21, 102, 132, 188,  16,  76, 124 },
170
        {  68,  25, 106,  22,  64, 171,  36, 225, 114 },
171
        {  62,  18,  78,  95,  85,  57,  50,  48,  51 },
172
        {  43,  97, 183, 117,  85,  38,  35, 179,  61 },
173
    },
174
    {
175
        { 112, 113,  77,  85, 179, 255,  38, 120, 114 },
176
        {  40,  42,   1, 196, 245, 209,  10,  25, 109 },
177
        { 193, 101,  35, 159, 215, 111,  89,  46, 111 },
178
        { 100,  80,   8,  43, 154,   1,  51,  26,  71 },
179
        {  88,  43,  29, 140, 166, 213,  37,  43, 154 },
180
        {  61,  63,  30, 155,  67,  45,  68,   1, 209 },
181
        {  41,  40,   5, 102, 211, 183,   4,   1, 221 },
182
        { 142,  78,  78,  16, 255, 128,  34, 197, 171 },
183
        {  51,  50,  17, 168, 209, 192,  23,  25,  82 },
184
        {  60, 148,  31, 172, 219, 228,  21,  18, 111 },
185
    },
186
    {
187
        { 175,  69, 143,  80,  85,  82,  72, 155, 103 },
188
        {  56,  58,  10, 171, 218, 189,  17,  13, 152 },
189
        { 231, 120,  48,  89, 115, 113, 120, 152, 112 },
190
        { 144,  71,  10,  38, 171, 213, 144,  34,  26 },
191
        { 114,  26,  17, 163,  44, 195,  21,  10, 173 },
192
        { 121,  24,  80, 195,  26,  62,  44,  64,  85 },
193
        {  63,  20,   8, 114, 114, 208,  12,   9, 226 },
194
        { 170,  46,  55,  19, 136, 160,  33, 206,  71 },
195
        {  81,  40,  11,  96, 182,  84,  29,  16,  36 },
196
        { 152, 179,  64, 126, 170, 118,  46,  70,  95 },
197
    },
198
    {
199
        {  75,  79, 123,  47,  51, 128,  81, 171,   1 },
200
        {  57,  17,   5,  71, 102,  57,  53,  41,  49 },
201
        { 125,  98,  42,  88, 104,  85, 117, 175,  82 },
202
        { 115,  21,   2,  10, 102, 255, 166,  23,   6 },
203
        {  38,  33,  13, 121,  57,  73,  26,   1,  85 },
204
        {  41,  10,  67, 138,  77, 110,  90,  47, 114 },
205
        {  57,  18,  10, 102, 102, 213,  34,  20,  43 },
206
        { 101,  29,  16,  10,  85, 128, 101, 196,  26 },
207
        { 117,  20,  15,  36, 163, 128,  68,   1,  26 },
208
        {  95,  84,  53,  89, 128, 100, 113, 101,  45 },
209
    },
210
    {
211
        {  63,  59,  90, 180,  59, 166,  93,  73, 154 },
212
        {  40,  40,  21, 116, 143, 209,  34,  39, 175 },
213
        { 138,  31,  36, 171,  27, 166,  38,  44, 229 },
214
        {  57,  46,  22,  24, 128,   1,  54,  17,  37 },
215
        {  47,  15,  16, 183,  34, 223,  49,  45, 183 },
216
        {  46,  17,  33, 183,   6,  98,  15,  32, 183 },
217
        {  40,   3,   9, 115,  51, 192,  18,   6, 223 },
218
        {  65,  32,  73, 115,  28, 128,  23, 128, 205 },
219
        {  87,  37,   9, 115,  59,  77,  64,  21,  47 },
220
        {  67,  87,  58, 169,  82, 115,  26,  59, 179 },
221
    },
222
    {
223
        {  54,  57, 112, 184,   5,  41,  38, 166, 213 },
224
        {  30,  34,  26, 133, 152, 116,  10,  32, 134 },
225
        { 104,  55,  44, 218,   9,  54,  53, 130, 226 },
226
        {  75,  32,  12,  51, 192, 255, 160,  43,  51 },
227
        {  39,  19,  53, 221,  26, 114,  32,  73, 255 },
228
        {  31,   9,  65, 234,   2,  15,   1, 118,  73 },
229
        {  56,  21,  23, 111,  59, 205,  45,  37, 192 },
230
        {  88,  31,  35,  67, 102,  85,  55, 186,  85 },
231
        {  55,  38,  70, 124,  73, 102,   1,  34,  98 },
232
        {  64,  90,  70, 205,  40,  41,  23,  26,  57 },
233
    },
234
    {
235
        {  86,  40,  64, 135, 148, 224,  45, 183, 128 },
236
        {  22,  26,  17, 131, 240, 154,  14,   1, 209 },
237
        { 164,  50,  31, 137, 154, 133,  25,  35, 218 },
238
        {  83,  12,  13,  54, 192, 255,  68,  47,  28 },
239
        {  45,  16,  21,  91,  64, 222,   7,   1, 197 },
240
        {  56,  21,  39, 155,  60, 138,  23, 102, 213 },
241
        {  18,  11,   7,  63, 144, 171,   4,   4, 246 },
242
        {  85,  26,  85,  85, 128, 128,  32, 146, 171 },
243
        {  35,  27,  10, 146, 174, 171,  12,  26, 128 },
244
        {  51, 103,  44, 131, 131, 123,  31,   6, 158 },
245
    },
246
    {
247
        {  68,  45, 128,  34,   1,  47,  11, 245, 171 },
248
        {  62,  17,  19,  70, 146,  85,  55,  62,  70 },
249
        { 102,  61,  71,  37,  34,  53,  31, 243, 192 },
250
        {  75,  15,   9,   9,  64, 255, 184, 119,  16 },
251
        {  37,  43,  37, 154, 100, 163,  85, 160,   1 },
252
        {  63,   9,  92, 136,  28,  64,  32, 201,  85 },
253
        {  56,   8,  17, 132, 137, 255,  55, 116, 128 },
254
        {  86,   6,  28,   5,  64, 255,  25, 248,   1 },
255
        {  58,  15,  20,  82, 135,  57,  26, 121,  40 },
256
        {  69,  60,  71,  38,  73, 119,  28, 222,  37 },
257
    },
258
    {
259
        { 101,  75, 128, 139, 118, 146, 116, 128,  85 },
260
        {  56,  41,  15, 176, 236,  85,  37,   9,  62 },
261
        { 190,  80,  35,  99, 180,  80, 126,  54,  45 },
262
        { 146,  36,  19,  30, 171, 255,  97,  27,  20 },
263
        {  71,  30,  17, 119, 118, 255,  17,  18, 138 },
264
        { 101,  38,  60, 138,  55,  70,  43,  26, 142 },
265
        {  32,  41,  20, 117, 151, 142,  20,  21, 163 },
266
        { 138,  45,  61,  62, 219,   1,  81, 188,  64 },
267
        { 112,  19,  12,  61, 195, 128,  48,   4,  24 },
268
        {  85, 126,  47,  87, 176,  51,  41,  20,  32 },
269
    },
270
    {
271
        {  66, 102, 167,  99,  74,  62,  40, 234, 128 },
272
        {  41,  53,   9, 178, 241, 141,  26,   8, 107 },
273
        { 134, 183,  89, 137,  98, 101, 106, 165, 148 },
274
        { 104,  79,  12,  27, 217, 255,  87,  17,   7 },
275
        {  74,  43,  26, 146,  73, 166,  49,  23, 157 },
276
        {  65,  38, 105, 160,  51,  52,  31, 115, 128 },
277
        {  47,  41,  14, 110, 182, 183,  21,  17, 194 },
278
        {  87,  68,  71,  44, 114,  51,  15, 186,  23 },
279
        {  66,  45,  25, 102, 197, 189,  23,  18,  22 },
280
        {  72, 187, 100, 130, 157, 111,  32,  75,  80 },
281
    },
282
};
283

    
284
static const int8_t vp8_segmentid_tree[][2] =
285
{
286
    { 1, 2 },
287
     { -0, -1 },    // '00', '01'
288
     { -2, -3 },    // '10', '11'
289
};
290

    
291
static const uint8_t vp8_coeff_band[16] =
292
{
293
    0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7
294
};
295

    
296
/* Inverse of vp8_coeff_band: mappings of bands to coefficient indexes.
297
 * Each list is -1-terminated. */
298
static const int8_t vp8_coeff_band_indexes[8][10] =
299
{
300
    {0, -1},
301
    {1, -1},
302
    {2, -1},
303
    {3, -1},
304
    {5, -1},
305
    {6, -1},
306
    {4, 7, 8, 9, 10, 11, 12, 13, 14, -1},
307
    {15, -1}
308
};
309

    
310
static const uint8_t vp8_dct_cat1_prob[] = { 159, 0 };
311
static const uint8_t vp8_dct_cat2_prob[] = { 165, 145, 0 };
312
static const uint8_t vp8_dct_cat3_prob[] = { 173, 148, 140, 0 };
313
static const uint8_t vp8_dct_cat4_prob[] = { 176, 155, 140, 135, 0 };
314
static const uint8_t vp8_dct_cat5_prob[] = { 180, 157, 141, 134, 130, 0 };
315
static const uint8_t vp8_dct_cat6_prob[] = { 254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0 };
316

    
317
// only used for cat3 and above; cat 1 and 2 are referenced directly
318
static const uint8_t * const vp8_dct_cat_prob[] =
319
{
320
    vp8_dct_cat3_prob,
321
    vp8_dct_cat4_prob,
322
    vp8_dct_cat5_prob,
323
    vp8_dct_cat6_prob,
324
};
325

    
326
static const uint8_t vp8_token_default_probs[4][8][3][NUM_DCT_TOKENS-1] =
327
{
328
    {
329
        {
330
            { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
331
            { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
332
            { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
333
        },
334
        {
335
            { 253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128 },
336
            { 189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128 },
337
            { 106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128 },
338
        },
339
        {
340
            {   1,  98, 248, 255, 236, 226, 255, 255, 128, 128, 128 },
341
            { 181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128 },
342
            {  78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128 },
343
        },
344
        {
345
            {   1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128 },
346
            { 184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128 },
347
            {  77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128 },
348
        },
349
        {
350
            {   1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128 },
351
            { 170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128 },
352
            {  37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128 },
353
        },
354
        {
355
            {   1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128 },
356
            { 207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128 },
357
            { 102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128 },
358
        },
359
        {
360
            {   1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128 },
361
            { 177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128 },
362
            {  80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128 },
363
        },
364
        {
365
            {   1,   1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
366
            { 246,   1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
367
            { 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
368
        },
369
    },
370
    {
371
        {
372
            { 198,  35, 237, 223, 193, 187, 162, 160, 145, 155,  62 },
373
            { 131,  45, 198, 221, 172, 176, 220, 157, 252, 221,   1 },
374
            {  68,  47, 146, 208, 149, 167, 221, 162, 255, 223, 128 },
375
        },
376
        {
377
            {   1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128 },
378
            { 184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128 },
379
            {  81,  99, 181, 242, 176, 190, 249, 202, 255, 255, 128 },
380
        },
381
        {
382
            {   1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128 },
383
            {  99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128 },
384
            {  23,  91, 163, 242, 170, 187, 247, 210, 255, 255, 128 },
385
        },
386
        {
387
            {   1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128 },
388
            { 109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128 },
389
            {  44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128 },
390
        },
391
        {
392
            {   1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128 },
393
            {  94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128 },
394
            {  22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128 },
395
        },
396
        {
397
            {   1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128 },
398
            { 124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128 },
399
            {  35,  77, 181, 251, 193, 211, 255, 205, 128, 128, 128 },
400
        },
401
        {
402
            {   1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128 },
403
            { 121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128 },
404
            {  45,  99, 188, 251, 195, 217, 255, 224, 128, 128, 128 },
405
        },
406
        {
407
            {   1,   1, 251, 255, 213, 255, 128, 128, 128, 128, 128 },
408
            { 203,   1, 248, 255, 255, 128, 128, 128, 128, 128, 128 },
409
            { 137,   1, 177, 255, 224, 255, 128, 128, 128, 128, 128 },
410
        },
411
    },
412
    {
413
        {
414
            { 253,   9, 248, 251, 207, 208, 255, 192, 128, 128, 128 },
415
            { 175,  13, 224, 243, 193, 185, 249, 198, 255, 255, 128 },
416
            {  73,  17, 171, 221, 161, 179, 236, 167, 255, 234, 128 },
417
        },
418
        {
419
            {   1,  95, 247, 253, 212, 183, 255, 255, 128, 128, 128 },
420
            { 239,  90, 244, 250, 211, 209, 255, 255, 128, 128, 128 },
421
            { 155,  77, 195, 248, 188, 195, 255, 255, 128, 128, 128 },
422
        },
423
        {
424
            {   1,  24, 239, 251, 218, 219, 255, 205, 128, 128, 128 },
425
            { 201,  51, 219, 255, 196, 186, 128, 128, 128, 128, 128 },
426
            {  69,  46, 190, 239, 201, 218, 255, 228, 128, 128, 128 },
427
        },
428
        {
429
            {   1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128 },
430
            { 223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128 },
431
            { 141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128 },
432
        },
433
        {
434
            {   1,  16, 248, 255, 255, 128, 128, 128, 128, 128, 128 },
435
            { 190,  36, 230, 255, 236, 255, 128, 128, 128, 128, 128 },
436
            { 149,   1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
437
        },
438
        {
439
            {   1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
440
            { 247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
441
            { 240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
442
        },
443
        {
444
            {   1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128 },
445
            { 213,  62, 250, 255, 255, 128, 128, 128, 128, 128, 128 },
446
            {  55,  93, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
447
        },
448
        {
449
            { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
450
            { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
451
            { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
452
        },
453
    },
454
    {
455
        {
456
            { 202,  24, 213, 235, 186, 191, 220, 160, 240, 175, 255 },
457
            { 126,  38, 182, 232, 169, 184, 228, 174, 255, 187, 128 },
458
            {  61,  46, 138, 219, 151, 178, 240, 170, 255, 216, 128 },
459
        },
460
        {
461
            {   1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128 },
462
            { 166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128 },
463
            {  39,  77, 162, 232, 172, 180, 245, 178, 255, 255, 128 },
464
        },
465
        {
466
            {   1,  52, 220, 246, 198, 199, 249, 220, 255, 255, 128 },
467
            { 124,  74, 191, 243, 183, 193, 250, 221, 255, 255, 128 },
468
            {  24,  71, 130, 219, 154, 170, 243, 182, 255, 255, 128 },
469
        },
470
        {
471
            {   1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128 },
472
            { 149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128 },
473
            {  28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128 },
474
        },
475
        {
476
            {   1,  81, 230, 252, 204, 203, 255, 192, 128, 128, 128 },
477
            { 123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128 },
478
            {  20,  95, 153, 243, 164, 173, 255, 203, 128, 128, 128 },
479
        },
480
        {
481
            {   1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128 },
482
            { 168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128 },
483
            {  47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128 },
484
        },
485
        {
486
            {   1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128 },
487
            { 141,  84, 213, 252, 201, 202, 255, 219, 128, 128, 128 },
488
            {  42,  80, 160, 240, 162, 185, 255, 205, 128, 128, 128 },
489
        },
490
        {
491
            {   1,   1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
492
            { 244,   1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
493
            { 238,   1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
494
        },
495
    },
496
};
497

    
498
static const uint8_t vp8_token_update_probs[4][8][3][NUM_DCT_TOKENS-1] =
499
{
500
    {
501
        {
502
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
503
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
504
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
505
        },
506
        {
507
            { 176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
508
            { 223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
509
            { 249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
510
        },
511
        {
512
            { 255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
513
            { 234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
514
            { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
515
        },
516
        {
517
            { 255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
518
            { 239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
519
            { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
520
        },
521
        {
522
            { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
523
            { 251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
524
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
525
        },
526
        {
527
            { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
528
            { 251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
529
            { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
530
        },
531
        {
532
            { 255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255 },
533
            { 250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255 },
534
            { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
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
    {
543
        {
544
            { 217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
545
            { 225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255 },
546
            { 234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255 },
547
        },
548
        {
549
            { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
550
            { 223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
551
            { 238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255 },
552
        },
553
        {
554
            { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
555
            { 249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
556
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
557
        },
558
        {
559
            { 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
560
            { 247, 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, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
565
            { 252, 255, 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, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
570
            { 253, 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, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
575
            { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
576
            { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
577
        },
578
        {
579
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
580
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
581
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
582
        },
583
    },
584
    {
585
        {
586
            { 186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255 },
587
            { 234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255 },
588
            { 251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255 },
589
        },
590
        {
591
            { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
592
            { 236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
593
            { 251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255 },
594
        },
595
        {
596
            { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
597
            { 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
598
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
599
        },
600
        {
601
            { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
602
            { 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
603
            { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
604
        },
605
        {
606
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
607
            { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
608
            { 255, 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
            { 255, 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
    {
627
        {
628
            { 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
629
            { 250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255 },
630
            { 248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255 },
631
        },
632
        {
633
            { 255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
634
            { 246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
635
            { 252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255 },
636
        },
637
        {
638
            { 255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
639
            { 248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
640
            { 253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255 },
641
        },
642
        {
643
            { 255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
644
            { 245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
645
            { 253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
646
        },
647
        {
648
            { 255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
649
            { 252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
650
            { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
651
        },
652
        {
653
            { 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
654
            { 249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
655
            { 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
656
        },
657
        {
658
            { 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
659
            { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
660
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
661
        },
662
        {
663
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
664
            { 254, 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
};
669

    
670
// fixme: copied from h264data.h
671
static const uint8_t zigzag_scan[16]={
672
    0+0*4, 1+0*4, 0+1*4, 0+2*4,
673
    1+1*4, 2+0*4, 3+0*4, 2+1*4,
674
    1+2*4, 0+3*4, 1+3*4, 2+2*4,
675
    3+1*4, 3+2*4, 2+3*4, 3+3*4,
676
};
677

    
678
static const uint8_t vp8_dc_qlookup[VP8_MAX_QUANT+1] =
679
{
680
      4,   5,   6,   7,   8,   9,  10,  10,  11,  12,  13,  14,  15,  16,  17,  17,
681
     18,  19,  20,  20,  21,  21,  22,  22,  23,  23,  24,  25,  25,  26,  27,  28,
682
     29,  30,  31,  32,  33,  34,  35,  36,  37,  37,  38,  39,  40,  41,  42,  43,
683
     44,  45,  46,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,
684
     59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,
685
     75,  76,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,
686
     91,  93,  95,  96,  98, 100, 101, 102, 104, 106, 108, 110, 112, 114, 116, 118,
687
    122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 143, 145, 148, 151, 154, 157,
688
};
689

    
690
static const uint16_t vp8_ac_qlookup[VP8_MAX_QUANT+1] =
691
{
692
      4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,  16,  17,  18,  19,
693
     20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,
694
     36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,
695
     52,  53,  54,  55,  56,  57,  58,  60,  62,  64,  66,  68,  70,  72,  74,  76,
696
     78,  80,  82,  84,  86,  88,  90,  92,  94,  96,  98, 100, 102, 104, 106, 108,
697
    110, 112, 114, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 152,
698
    155, 158, 161, 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209,
699
    213, 217, 221, 225, 229, 234, 239, 245, 249, 254, 259, 264, 269, 274, 279, 284,
700
};
701

    
702
static const uint8_t vp8_mv_update_prob[2][19] = {
703
    { 237,
704
      246,
705
      253, 253, 254, 254, 254, 254, 254,
706
      254, 254, 254, 254, 254, 250, 250, 252, 254, 254 },
707
    { 231,
708
      243,
709
      245, 253, 254, 254, 254, 254, 254,
710
      254, 254, 254, 254, 254, 251, 251, 254, 254, 254 }
711
};
712

    
713
static const uint8_t vp8_mv_default_prob[2][19] = {
714
    { 162,
715
      128,
716
      225, 146, 172, 147, 214, 39, 156,
717
      128, 129, 132,  75, 145, 178, 206, 239, 254, 254 },
718
    { 164,
719
      128,
720
      204, 170, 119, 235, 140, 230, 228,
721
      128, 130, 130,  74, 148, 180, 203, 236, 254, 254 }
722
};