Statistics
| Branch: | Revision:

ffmpeg / libavcodec / vp8data.h @ 3b636f21

History | View | Annotate | Download (29.8 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 ane 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
static const uint8_t vp8_pred4x4_mode[] =
66
{
67
    [DC_PRED8x8]    = DC_PRED,
68
    [VERT_PRED8x8]  = VERT_PRED,
69
    [HOR_PRED8x8]   = HOR_PRED,
70
    [PLANE_PRED8x8] = TM_VP8_PRED,
71
};
72

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

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

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

    
98
static const int8_t vp8_pred16x16_tree_mvinter[4][2] = {
99
    { -VP8_MVMODE_ZERO,      1 },           // '0'
100
     { -VP8_MVMODE_NEAREST,  2 },           // '10'
101
      { -VP8_MVMODE_NEAR,    3 },           // '110'
102
       { -VP8_MVMODE_NEW, -VP8_MVMODE_SPLIT } // '1110', '1111'
103
};
104

    
105
static const int8_t vp8_small_mvtree[7][2] = {
106
    {  1, 4 },
107
     {  2, 3 },
108
      { -0, -1 },                           // '000', '001'
109
      { -2, -3 },                           // '010', '011'
110
     {  5,  6 },
111
      { -4, -5 },                           // '100', '101'
112
      { -6, -7 }                            // '110', '111'
113
};
114

    
115
static const uint8_t vp8_mbsplits[4][16] = {
116
    {  0,  0,  0,  0,  0,  0,  0,  0,
117
       1,  1,  1,  1,  1,  1,  1,  1  },
118
    {  0,  0,  1,  1,  0,  0,  1,  1,
119
       0,  0,  1,  1,  0,  0,  1,  1  },
120
    {  0,  0,  1,  1,  0,  0,  1,  1,
121
       2,  2,  3,  3,  2,  2,  3,  3  },
122
    {  0,  1,  2,  3,  4,  5,  6,  7,
123
       8,  9, 10, 11, 12, 13, 14, 15  }
124
};
125

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

    
132
static const int8_t vp8_mbsplit_tree[3][2] = {
133
    { -3,  1 },                             // '0' - 16 individual MVs
134
     { -2,  2 },                            // '10' - quarter-based MVs
135
      { -0, -1 }                            // '110' - top/bottom MVs,
136
                                            // '111' - left/right MVs
137
};
138
static const uint8_t vp8_mbsplit_count[4] = {   2,   2,   4,  16 };
139
static const uint8_t vp8_mbsplit_prob[3]  = { 110, 111, 150 };
140

    
141
static const uint8_t vp8_submv_prob[5][3] = {
142
    { 147, 136,  18 },
143
    { 106, 145,   1 },
144
    { 179, 121,   1 },
145
    { 223,   1,  34 },
146
    { 208,   1,   1 }
147
};
148

    
149
static const int8_t vp8_submv_ref_tree[3][2] = {
150
    { -VP8_SUBMVMODE_LEFT4X4, 1 },          // '0'
151
     { -VP8_SUBMVMODE_TOP4X4, 2 },          // '10'
152
      { -VP8_SUBMVMODE_ZERO4X4, -VP8_SUBMVMODE_NEW4X4 } // '110', '111'
153
};
154

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

    
158
static const int8_t vp8_pred4x4_tree[9][2] =
159
{
160
    { -DC_PRED, 1 },                                    // '0'
161
     { -TM_VP8_PRED, 2 },                               // '10'
162
      { -VERT_PRED, 3 },                                // '110'
163
       { 4, 6 },
164
        { -HOR_PRED, 5 },                               // '11100'
165
         { -DIAG_DOWN_RIGHT_PRED, -VERT_RIGHT_PRED },   // '111010', '111011'
166
        { -DIAG_DOWN_LEFT_PRED, 7 },                    // '11110'
167
         { -VERT_LEFT_PRED, 8 },                        // '111110'
168
          { -HOR_DOWN_PRED, -HOR_UP_PRED },             // '1111110', '1111111'
169
};
170

    
171
static const int8_t vp8_pred8x8c_tree[3][2] =
172
{
173
    { -DC_PRED8x8, 1 },                 // '0'
174
     { -VERT_PRED8x8, 2 },              // '10
175
      { -HOR_PRED8x8, -PLANE_PRED8x8 }, // '110', '111'
176
};
177

    
178
static const uint8_t vp8_pred8x8c_prob_intra[3] = { 142, 114, 183 };
179
static const uint8_t vp8_pred8x8c_prob_inter[3] = { 162, 101, 204 };
180

    
181
static const uint8_t vp8_pred4x4_prob_inter[9] =
182
{
183
    120, 90, 79, 133, 87, 85, 80, 111, 151
184
};
185

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

    
310
static const int8_t vp8_segmentid_tree[][2] =
311
{
312
    { 1, 2 },
313
     { -0, -1 },    // '00', '01'
314
     { -2, -3 },    // '10', '11'
315
};
316

    
317
static const uint8_t vp8_coeff_band[16] =
318
{
319
    0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7
320
};
321

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

    
337
static const uint8_t vp8_dct_cat1_prob[] = { 159, 0 };
338
static const uint8_t vp8_dct_cat2_prob[] = { 165, 145, 0 };
339
static const uint8_t vp8_dct_cat3_prob[] = { 173, 148, 140, 0 };
340
static const uint8_t vp8_dct_cat4_prob[] = { 176, 155, 140, 135, 0 };
341
static const uint8_t vp8_dct_cat5_prob[] = { 180, 157, 141, 134, 130, 0 };
342
static const uint8_t vp8_dct_cat6_prob[] = { 254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0 };
343

    
344
static const uint8_t * const vp8_dct_cat_prob[6] =
345
{
346
    vp8_dct_cat1_prob,
347
    vp8_dct_cat2_prob,
348
    vp8_dct_cat3_prob,
349
    vp8_dct_cat4_prob,
350
    vp8_dct_cat5_prob,
351
    vp8_dct_cat6_prob,
352
};
353

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

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

    
528
static const uint8_t vp8_token_update_probs[4][8][3][NUM_DCT_TOKENS-1] =
529
{
530
    {
531
        {
532
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
533
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
534
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
535
        },
536
        {
537
            { 176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
538
            { 223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
539
            { 249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
540
        },
541
        {
542
            { 255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
543
            { 234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
544
            { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
545
        },
546
        {
547
            { 255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
548
            { 239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
549
            { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
550
        },
551
        {
552
            { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
553
            { 251, 255, 254, 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, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
558
            { 251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
559
            { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
560
        },
561
        {
562
            { 255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255 },
563
            { 250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255 },
564
            { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
565
        },
566
        {
567
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
568
            { 255, 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
    {
573
        {
574
            { 217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
575
            { 225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255 },
576
            { 234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255 },
577
        },
578
        {
579
            { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
580
            { 223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
581
            { 238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255 },
582
        },
583
        {
584
            { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
585
            { 249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
586
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
587
        },
588
        {
589
            { 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
590
            { 247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
591
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
592
        },
593
        {
594
            { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
595
            { 252, 255, 255, 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, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
600
            { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
601
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
602
        },
603
        {
604
            { 255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
605
            { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
606
            { 254, 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
    {
615
        {
616
            { 186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255 },
617
            { 234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255 },
618
            { 251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255 },
619
        },
620
        {
621
            { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
622
            { 236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
623
            { 251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255 },
624
        },
625
        {
626
            { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
627
            { 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
628
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
629
        },
630
        {
631
            { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
632
            { 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
633
            { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
634
        },
635
        {
636
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
637
            { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
638
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
639
        },
640
        {
641
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
642
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
643
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
644
        },
645
        {
646
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
647
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
648
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
649
        },
650
        {
651
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
652
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
653
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
654
        },
655
    },
656
    {
657
        {
658
            { 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
659
            { 250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255 },
660
            { 248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255 },
661
        },
662
        {
663
            { 255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
664
            { 246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
665
            { 252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255 },
666
        },
667
        {
668
            { 255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
669
            { 248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
670
            { 253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255 },
671
        },
672
        {
673
            { 255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
674
            { 245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
675
            { 253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
676
        },
677
        {
678
            { 255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
679
            { 252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
680
            { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
681
        },
682
        {
683
            { 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
684
            { 249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
685
            { 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
686
        },
687
        {
688
            { 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
689
            { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
690
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
691
        },
692
        {
693
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
694
            { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
695
            { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
696
        },
697
    },
698
};
699

    
700
// fixme: copied from h264data.h
701
static const uint8_t zigzag_scan[16]={
702
    0+0*4, 1+0*4, 0+1*4, 0+2*4,
703
    1+1*4, 2+0*4, 3+0*4, 2+1*4,
704
    1+2*4, 0+3*4, 1+3*4, 2+2*4,
705
    3+1*4, 3+2*4, 2+3*4, 3+3*4,
706
};
707

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

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

    
732
static const uint8_t vp8_mv_update_prob[2][19] = {
733
    { 237,
734
      246,
735
      253, 253, 254, 254, 254, 254, 254,
736
      254, 254, 254, 254, 254, 250, 250, 252, 254, 254 },
737
    { 231,
738
      243,
739
      245, 253, 254, 254, 254, 254, 254,
740
      254, 254, 254, 254, 254, 251, 251, 254, 254, 254 }
741
};
742

    
743
static const uint8_t vp8_mv_default_prob[2][19] = {
744
    { 162,
745
      128,
746
      225, 146, 172, 147, 214, 39, 156,
747
      128, 129, 132,  75, 145, 178, 206, 239, 254, 254 },
748
    { 164,
749
      128,
750
      204, 170, 119, 235, 140, 230, 228,
751
      128, 130, 130,  74, 148, 180, 203, 236, 254, 254 }
752
};