Statistics
| Branch: | Revision:

ffmpeg / libavcodec / vp8data.h @ 7c4dcf81

History | View | Annotate | Download (30.1 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_submvmode {
59
    VP8_SUBMVMODE_LEFT4X4,
60
    VP8_SUBMVMODE_TOP4X4,
61
    VP8_SUBMVMODE_ZERO4X4,
62
    VP8_SUBMVMODE_NEW4X4
63
};
64

    
65
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
};
71

    
72
static const uint8_t vp8_pred4x4_mode[] =
73
{
74
    [DC_PRED8x8]    = DC_PRED,
75
    [VERT_PRED8x8]  = VERT_PRED,
76
    [HOR_PRED8x8]   = HOR_PRED,
77
    [PLANE_PRED8x8] = TM_VP8_PRED,
78
};
79

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

    
88
static const int8_t vp8_pred16x16_tree_inter[4][2] =
89
{
90
    { -DC_PRED8x8, 1 },                     // '0'
91
     { 2, 3 },
92
      {  -VERT_PRED8x8, -HOR_PRED8x8 },     // '100', '101'
93
      { -PLANE_PRED8x8, -MODE_I4x4 },       // '110', '111'
94
};
95

    
96
static const int vp8_mode_contexts[6][4] = {
97
    {   7,   1,   1, 143 },
98
    {  14,  18,  14, 107 },
99
    { 135,  64,  57,  68 },
100
    {  60,  56, 128,  65 },
101
    { 159, 134, 128,  34 },
102
    { 234, 188, 128,  28 },
103
};
104

    
105
static const int8_t vp8_pred16x16_tree_mvinter[4][2] = {
106
    { -VP8_MVMODE_ZERO,      1 },           // '0'
107
     { -VP8_MVMODE_NEAREST,  2 },           // '10'
108
      { -VP8_MVMODE_NEAR,    3 },           // '110'
109
       { -VP8_MVMODE_NEW, -VP8_MVMODE_SPLIT } // '1110', '1111'
110
};
111

    
112
static const int8_t vp8_small_mvtree[7][2] = {
113
    {  1, 4 },
114
     {  2, 3 },
115
      { -0, -1 },                           // '000', '001'
116
      { -2, -3 },                           // '010', '011'
117
     {  5,  6 },
118
      { -4, -5 },                           // '100', '101'
119
      { -6, -7 }                            // '110', '111'
120
};
121

    
122
static const uint8_t vp8_mbsplits[4][16] = {
123
    {  0,  0,  0,  0,  0,  0,  0,  0,
124
       1,  1,  1,  1,  1,  1,  1,  1  },
125
    {  0,  0,  1,  1,  0,  0,  1,  1,
126
       0,  0,  1,  1,  0,  0,  1,  1  },
127
    {  0,  0,  1,  1,  0,  0,  1,  1,
128
       2,  2,  3,  3,  2,  2,  3,  3  },
129
    {  0,  1,  2,  3,  4,  5,  6,  7,
130
       8,  9, 10, 11, 12, 13, 14, 15  }
131
};
132

    
133
static const uint8_t vp8_mbfirstidx[4][16] = {
134
    {  0,  8 }, {  0,  2 }, {  0,  2,  8,  10 },
135
    {  0,  1,  2,  3,  4,  5,  6,  7,
136
       8,  9, 10, 11, 12, 13, 14, 15 }
137
};
138

    
139
static const int8_t vp8_mbsplit_tree[3][2] = {
140
    { -VP8_SPLITMVMODE_4x4,  1 },           // '0' - 16 individual MVs
141
     { -VP8_SPLITMVMODE_8x8,  2 },          // '10' - quarter-based MVs
142
      { -VP8_SPLITMVMODE_16x8,              // '110' - top/bottom MVs
143
        -VP8_SPLITMVMODE_8x16 }             // '111' - left/right MVs
144
};
145
static const uint8_t vp8_mbsplit_count[4] = {   2,   2,   4,  16 };
146
static const uint8_t vp8_mbsplit_prob[3]  = { 110, 111, 150 };
147

    
148
static const uint8_t vp8_submv_prob[5][3] = {
149
    { 147, 136,  18 },
150
    { 106, 145,   1 },
151
    { 179, 121,   1 },
152
    { 223,   1,  34 },
153
    { 208,   1,   1 }
154
};
155

    
156
static const int8_t vp8_submv_ref_tree[3][2] = {
157
    { -VP8_SUBMVMODE_LEFT4X4, 1 },          // '0'
158
     { -VP8_SUBMVMODE_TOP4X4, 2 },          // '10'
159
      { -VP8_SUBMVMODE_ZERO4X4, -VP8_SUBMVMODE_NEW4X4 } // '110', '111'
160
};
161

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

    
165
static const int8_t vp8_pred4x4_tree[9][2] =
166
{
167
    { -DC_PRED, 1 },                                    // '0'
168
     { -TM_VP8_PRED, 2 },                               // '10'
169
      { -VERT_PRED, 3 },                                // '110'
170
       { 4, 6 },
171
        { -HOR_PRED, 5 },                               // '11100'
172
         { -DIAG_DOWN_RIGHT_PRED, -VERT_RIGHT_PRED },   // '111010', '111011'
173
        { -DIAG_DOWN_LEFT_PRED, 7 },                    // '11110'
174
         { -VERT_LEFT_PRED, 8 },                        // '111110'
175
          { -HOR_DOWN_PRED, -HOR_UP_PRED },             // '1111110', '1111111'
176
};
177

    
178
static const int8_t vp8_pred8x8c_tree[3][2] =
179
{
180
    { -DC_PRED8x8, 1 },                 // '0'
181
     { -VERT_PRED8x8, 2 },              // '10
182
      { -HOR_PRED8x8, -PLANE_PRED8x8 }, // '110', '111'
183
};
184

    
185
static const uint8_t vp8_pred8x8c_prob_intra[3] = { 142, 114, 183 };
186
static const uint8_t vp8_pred8x8c_prob_inter[3] = { 162, 101, 204 };
187

    
188
static const uint8_t vp8_pred4x4_prob_inter[9] =
189
{
190
    120, 90, 79, 133, 87, 85, 80, 111, 151
191
};
192

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

    
317
static const int8_t vp8_segmentid_tree[][2] =
318
{
319
    { 1, 2 },
320
     { -0, -1 },    // '00', '01'
321
     { -2, -3 },    // '10', '11'
322
};
323

    
324
static const uint8_t vp8_coeff_band[16] =
325
{
326
    0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7
327
};
328

    
329
static const int8_t vp8_coeff_tree[NUM_DCT_TOKENS-1][2] =
330
{
331
    { -DCT_EOB, 1 },                // '0'
332
     { -DCT_0, 2 },                 // '10'
333
      { -DCT_1, 3 },                // '110'
334
       { 4, 6 },
335
        { -DCT_2, 5 },              // '11100'
336
         { -DCT_3, -DCT_4 },        // '111010', '111011'
337
        { 7, 8 },
338
         { -DCT_CAT1, -DCT_CAT2 },  // '111100', '111101'
339
         { 9, 10 },
340
          { -DCT_CAT3, -DCT_CAT4 }, // '1111100', '1111101'
341
          { -DCT_CAT5, -DCT_CAT6 }, // '1111110', '1111111'
342
};
343

    
344
static const uint8_t vp8_dct_cat1_prob[] = { 159, 0 };
345
static const uint8_t vp8_dct_cat2_prob[] = { 165, 145, 0 };
346
static const uint8_t vp8_dct_cat3_prob[] = { 173, 148, 140, 0 };
347
static const uint8_t vp8_dct_cat4_prob[] = { 176, 155, 140, 135, 0 };
348
static const uint8_t vp8_dct_cat5_prob[] = { 180, 157, 141, 134, 130, 0 };
349
static const uint8_t vp8_dct_cat6_prob[] = { 254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0 };
350

    
351
static const uint8_t * const vp8_dct_cat_prob[6] =
352
{
353
    vp8_dct_cat1_prob,
354
    vp8_dct_cat2_prob,
355
    vp8_dct_cat3_prob,
356
    vp8_dct_cat4_prob,
357
    vp8_dct_cat5_prob,
358
    vp8_dct_cat6_prob,
359
};
360

    
361
static const uint8_t vp8_dct_cat_offset[6] = { 5, 7, 11, 19, 35, 67 };
362

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

    
535
static const uint8_t vp8_token_update_probs[4][8][3][NUM_DCT_TOKENS-1] =
536
{
537
    {
538
        {
539
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
540
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
541
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
542
        },
543
        {
544
            { 176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
545
            { 223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
546
            { 249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
547
        },
548
        {
549
            { 255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
550
            { 234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
551
            { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
552
        },
553
        {
554
            { 255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
555
            { 239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
556
            { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
557
        },
558
        {
559
            { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
560
            { 251, 255, 254, 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
            { 251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
566
            { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
567
        },
568
        {
569
            { 255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255 },
570
            { 250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255 },
571
            { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
572
        },
573
        {
574
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
575
            { 255, 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
    {
580
        {
581
            { 217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
582
            { 225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255 },
583
            { 234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255 },
584
        },
585
        {
586
            { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
587
            { 223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
588
            { 238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255 },
589
        },
590
        {
591
            { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
592
            { 249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
593
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
594
        },
595
        {
596
            { 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
597
            { 247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
598
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
599
        },
600
        {
601
            { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
602
            { 252, 255, 255, 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, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
607
            { 253, 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, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
612
            { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
613
            { 254, 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
    {
622
        {
623
            { 186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255 },
624
            { 234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255 },
625
            { 251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255 },
626
        },
627
        {
628
            { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
629
            { 236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
630
            { 251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255 },
631
        },
632
        {
633
            { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
634
            { 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
635
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
636
        },
637
        {
638
            { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
639
            { 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
640
            { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
641
        },
642
        {
643
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
644
            { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
645
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
646
        },
647
        {
648
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
649
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
650
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
651
        },
652
        {
653
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
654
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
655
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
656
        },
657
        {
658
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
659
            { 255, 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
    {
664
        {
665
            { 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
666
            { 250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255 },
667
            { 248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255 },
668
        },
669
        {
670
            { 255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
671
            { 246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
672
            { 252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255 },
673
        },
674
        {
675
            { 255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
676
            { 248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
677
            { 253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255 },
678
        },
679
        {
680
            { 255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
681
            { 245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
682
            { 253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
683
        },
684
        {
685
            { 255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
686
            { 252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
687
            { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
688
        },
689
        {
690
            { 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
691
            { 249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
692
            { 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
693
        },
694
        {
695
            { 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
696
            { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
697
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
698
        },
699
        {
700
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
701
            { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
702
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
703
        },
704
    },
705
};
706

    
707
// fixme: copied from h264data.h
708
static const uint8_t zigzag_scan[16]={
709
    0+0*4, 1+0*4, 0+1*4, 0+2*4,
710
    1+1*4, 2+0*4, 3+0*4, 2+1*4,
711
    1+2*4, 0+3*4, 1+3*4, 2+2*4,
712
    3+1*4, 3+2*4, 2+3*4, 3+3*4,
713
};
714

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

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

    
739
static const uint8_t vp8_mv_update_prob[2][19] = {
740
    { 237,
741
      246,
742
      253, 253, 254, 254, 254, 254, 254,
743
      254, 254, 254, 254, 254, 250, 250, 252, 254, 254 },
744
    { 231,
745
      243,
746
      245, 253, 254, 254, 254, 254, 254,
747
      254, 254, 254, 254, 254, 251, 251, 254, 254, 254 }
748
};
749

    
750
static const uint8_t vp8_mv_default_prob[2][19] = {
751
    { 162,
752
      128,
753
      225, 146, 172, 147, 214, 39, 156,
754
      128, 129, 132,  75, 145, 178, 206, 239, 254, 254 },
755
    { 164,
756
      128,
757
      204, 170, 119, 235, 140, 230, 228,
758
      128, 130, 130,  74, 148, 180, 203, 236, 254, 254 }
759
};