Statistics
| Branch: | Revision:

ffmpeg / libavcodec / vp8data.h @ 10bf2eeb

History | View | Annotate | Download (29.4 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
    VP8_SPLITMVMODE_NONE,        ///< (only used in prediction) no split MVs
71
};
72

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

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

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

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

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

    
113
static const uint8_t vp8_mbsplits[5][16] = {
114
    {  0,  0,  0,  0,  0,  0,  0,  0,
115
       1,  1,  1,  1,  1,  1,  1,  1  },
116
    {  0,  0,  1,  1,  0,  0,  1,  1,
117
       0,  0,  1,  1,  0,  0,  1,  1  },
118
    {  0,  0,  1,  1,  0,  0,  1,  1,
119
       2,  2,  3,  3,  2,  2,  3,  3  },
120
    {  0,  1,  2,  3,  4,  5,  6,  7,
121
       8,  9, 10, 11, 12, 13, 14, 15  },
122
    {  0,  0,  0,  0,  0,  0,  0,  0,
123
       0,  0,  0,  0,  0,  0,  0,  0  }
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
    { -VP8_SPLITMVMODE_4x4,  1 },           // '0' - 16 individual MVs
134
     { -VP8_SPLITMVMODE_8x8,  2 },          // '10' - quarter-based MVs
135
      { -VP8_SPLITMVMODE_16x8,              // '110' - top/bottom MVs
136
        -VP8_SPLITMVMODE_8x16 }             // '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
/* Padded by one byte to allow overreads */
318
static const uint8_t vp8_coeff_band[17] =
319
{
320
    0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0
321
};
322

    
323
static const uint8_t vp8_dct_cat1_prob[] = { 159, 0 };
324
static const uint8_t vp8_dct_cat2_prob[] = { 165, 145, 0 };
325
static const uint8_t vp8_dct_cat3_prob[] = { 173, 148, 140, 0 };
326
static const uint8_t vp8_dct_cat4_prob[] = { 176, 155, 140, 135, 0 };
327
static const uint8_t vp8_dct_cat5_prob[] = { 180, 157, 141, 134, 130, 0 };
328
static const uint8_t vp8_dct_cat6_prob[] = { 254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0 };
329

    
330
// only used for cat3 and above; cat 1 and 2 are referenced directly
331
static const uint8_t * const vp8_dct_cat_prob[] =
332
{
333
    vp8_dct_cat3_prob,
334
    vp8_dct_cat4_prob,
335
    vp8_dct_cat5_prob,
336
    vp8_dct_cat6_prob,
337
};
338

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

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

    
683
// fixme: copied from h264data.h
684
static const uint8_t zigzag_scan[16]={
685
    0+0*4, 1+0*4, 0+1*4, 0+2*4,
686
    1+1*4, 2+0*4, 3+0*4, 2+1*4,
687
    1+2*4, 0+3*4, 1+3*4, 2+2*4,
688
    3+1*4, 3+2*4, 2+3*4, 3+3*4,
689
};
690

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

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

    
715
static const uint8_t vp8_mv_update_prob[2][19] = {
716
    { 237,
717
      246,
718
      253, 253, 254, 254, 254, 254, 254,
719
      254, 254, 254, 254, 254, 250, 250, 252, 254, 254 },
720
    { 231,
721
      243,
722
      245, 253, 254, 254, 254, 254, 254,
723
      254, 254, 254, 254, 254, 251, 251, 254, 254, 254 }
724
};
725

    
726
static const uint8_t vp8_mv_default_prob[2][19] = {
727
    { 162,
728
      128,
729
      225, 146, 172, 147, 214, 39, 156,
730
      128, 129, 132,  75, 145, 178, 206, 239, 254, 254 },
731
    { 164,
732
      128,
733
      204, 170, 119, 235, 140, 230, 228,
734
      128, 130, 130,  74, 148, 180, 203, 236, 254, 254 }
735
};