Statistics
| Branch: | Revision:

ffmpeg / libavcodec / vp8data.h @ 4ae3ee4a

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_ZERO = MODE_I4x4 + 1,
52
    VP8_MVMODE_MV,
53
    VP8_MVMODE_SPLIT
54
};
55

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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