~rexbron/ffmpeg/debian.libavcore

« back to all changes in this revision

Viewing changes to libavcodec/vc1data.c

  • Committer: Andrew Hunter
  • Date: 2010-08-29 06:49:36 UTC
  • Revision ID: andrew@aehunter.net-20100829064936-gyq5l5n2eu0595do
Remove dupe code base

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * VC-1 and WMV3 decoder
3
 
 * copyright (c) 2006 Konstantin Shishkov
4
 
 * (c) 2005 anonymous, Alex Beregszaszi, Michael Niedermayer
5
 
 *
6
 
 * This file is part of FFmpeg.
7
 
 *
8
 
 * FFmpeg is free software; you can redistribute it and/or
9
 
 * modify it under the terms of the GNU Lesser General Public
10
 
 * License as published by the Free Software Foundation; either
11
 
 * version 2.1 of the License, or (at your option) any later version.
12
 
 *
13
 
 * FFmpeg is distributed in the hope that it will be useful,
14
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16
 
 * Lesser General Public License for more details.
17
 
 *
18
 
 * You should have received a copy of the GNU Lesser General Public
19
 
 * License along with FFmpeg; if not, write to the Free Software
20
 
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
 
 */
22
 
 
23
 
/**
24
 
 * @file libavcodec/vc1data.c
25
 
 * VC-1 tables.
26
 
 */
27
 
 
28
 
#include "avcodec.h"
29
 
#include "vc1.h"
30
 
#include "vc1data.h"
31
 
 
32
 
/** Table for conversion between TTBLK and TTMB */
33
 
const int ff_vc1_ttblk_to_tt[3][8] = {
34
 
  { TT_8X4, TT_4X8, TT_8X8, TT_4X4, TT_8X4_TOP, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT },
35
 
  { TT_8X8, TT_4X8_RIGHT, TT_4X8_LEFT, TT_4X4, TT_8X4, TT_4X8, TT_8X4_BOTTOM, TT_8X4_TOP },
36
 
  { TT_8X8, TT_4X8, TT_4X4, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT, TT_8X4, TT_8X4_TOP }
37
 
};
38
 
 
39
 
const int ff_vc1_ttfrm_to_tt[4] = { TT_8X8, TT_8X4, TT_4X8, TT_4X4 };
40
 
 
41
 
/** MV P mode - the 5th element is only used for mode 1 */
42
 
const uint8_t ff_vc1_mv_pmode_table[2][5] = {
43
 
  { MV_PMODE_1MV_HPEL_BILIN, MV_PMODE_1MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_MIXED_MV },
44
 
  { MV_PMODE_1MV, MV_PMODE_MIXED_MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_1MV_HPEL_BILIN }
45
 
};
46
 
const uint8_t ff_vc1_mv_pmode_table2[2][4] = {
47
 
  { MV_PMODE_1MV_HPEL_BILIN, MV_PMODE_1MV, MV_PMODE_1MV_HPEL, MV_PMODE_MIXED_MV },
48
 
  { MV_PMODE_1MV, MV_PMODE_MIXED_MV, MV_PMODE_1MV_HPEL, MV_PMODE_1MV_HPEL_BILIN }
49
 
};
50
 
 
51
 
const int ff_vc1_fps_nr[5] = { 24, 25, 30, 50, 60 },
52
 
  ff_vc1_fps_dr[2] = { 1000, 1001 };
53
 
const uint8_t ff_vc1_pquant_table[3][32] = {
54
 
  {  /* Implicit quantizer */
55
 
     0,  1,  2,  3,  4,  5,  6,  7,  8,  6,  7,  8,  9, 10, 11, 12,
56
 
    13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 31
57
 
  },
58
 
  {  /* Explicit quantizer, pquantizer uniform */
59
 
     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
60
 
    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
61
 
  },
62
 
  {  /* Explicit quantizer, pquantizer non-uniform */
63
 
     0,  1,  1,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13,
64
 
    14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 31
65
 
  }
66
 
};
67
 
 
68
 
/** @name VC-1 VLC tables and defines
69
 
 *  @todo TODO move this into the context
70
 
 */
71
 
//@{
72
 
#define VC1_BFRACTION_VLC_BITS 7
73
 
VLC ff_vc1_bfraction_vlc;
74
 
#define VC1_IMODE_VLC_BITS 4
75
 
VLC ff_vc1_imode_vlc;
76
 
#define VC1_NORM2_VLC_BITS 3
77
 
VLC ff_vc1_norm2_vlc;
78
 
#define VC1_NORM6_VLC_BITS 9
79
 
VLC ff_vc1_norm6_vlc;
80
 
/* Could be optimized, one table only needs 8 bits */
81
 
#define VC1_TTMB_VLC_BITS 9 //12
82
 
VLC ff_vc1_ttmb_vlc[3];
83
 
#define VC1_MV_DIFF_VLC_BITS 9 //15
84
 
VLC ff_vc1_mv_diff_vlc[4];
85
 
#define VC1_CBPCY_P_VLC_BITS 9 //14
86
 
VLC ff_vc1_cbpcy_p_vlc[4];
87
 
#define VC1_4MV_BLOCK_PATTERN_VLC_BITS 6
88
 
VLC ff_vc1_4mv_block_pattern_vlc[4];
89
 
#define VC1_TTBLK_VLC_BITS 5
90
 
VLC ff_vc1_ttblk_vlc[3];
91
 
#define VC1_SUBBLKPAT_VLC_BITS 6
92
 
VLC ff_vc1_subblkpat_vlc[3];
93
 
 
94
 
VLC ff_vc1_ac_coeff_table[8];
95
 
//@}
96
 
 
97
 
 
98
 
#if B_FRACTION_DEN==840 //original bfraction from vc9data.h, not conforming to standard
99
 
/* bfraction is fractional, we scale to the GCD 3*5*7*8 = 840 */
100
 
const int16_t ff_vc1_bfraction_lut[23] = {
101
 
  420 /*1/2*/, 280 /*1/3*/, 560 /*2/3*/, 210 /*1/4*/,
102
 
  630 /*3/4*/, 168 /*1/5*/, 336 /*2/5*/,
103
 
  504 /*3/5*/, 672 /*4/5*/, 140 /*1/6*/, 700 /*5/6*/,
104
 
  120 /*1/7*/, 240 /*2/7*/, 360 /*3/7*/, 480 /*4/7*/,
105
 
  600 /*5/7*/, 720 /*6/7*/, 105 /*1/8*/, 315 /*3/8*/,
106
 
  525 /*5/8*/, 735 /*7/8*/,
107
 
  -1 /*inv.*/, 0 /*BI fm*/
108
 
};
109
 
#else
110
 
/* pre-computed scales for all bfractions and base=256 */
111
 
const int16_t ff_vc1_bfraction_lut[23] = {
112
 
  128 /*1/2*/,  85 /*1/3*/, 170 /*2/3*/,  64 /*1/4*/,
113
 
  192 /*3/4*/,  51 /*1/5*/, 102 /*2/5*/,
114
 
  153 /*3/5*/, 204 /*4/5*/,  43 /*1/6*/, 215 /*5/6*/,
115
 
   37 /*1/7*/,  74 /*2/7*/, 111 /*3/7*/, 148 /*4/7*/,
116
 
  185 /*5/7*/, 222 /*6/7*/,  32 /*1/8*/,  96 /*3/8*/,
117
 
  160 /*5/8*/, 224 /*7/8*/,
118
 
  -1 /*inv.*/, 0 /*BI fm*/
119
 
};
120
 
#endif
121
 
 
122
 
const uint8_t ff_vc1_bfraction_bits[23] = {
123
 
    3, 3, 3, 3,
124
 
    3, 3, 3,
125
 
    7, 7, 7, 7,
126
 
    7, 7, 7, 7,
127
 
    7, 7, 7, 7,
128
 
    7, 7,
129
 
    7, 7
130
 
};
131
 
const uint8_t ff_vc1_bfraction_codes[23] = {
132
 
     0,   1,   2,   3,
133
 
     4,   5,   6,
134
 
   112, 113, 114, 115,
135
 
   116, 117, 118, 119,
136
 
   120, 121, 122, 123,
137
 
   124, 125,
138
 
   126, 127
139
 
};
140
 
 
141
 
//Same as H.264
142
 
const AVRational ff_vc1_pixel_aspect[16]={
143
 
 {0, 1},
144
 
 {1, 1},
145
 
 {12, 11},
146
 
 {10, 11},
147
 
 {16, 11},
148
 
 {40, 33},
149
 
 {24, 11},
150
 
 {20, 11},
151
 
 {32, 11},
152
 
 {80, 33},
153
 
 {18, 11},
154
 
 {15, 11},
155
 
 {64, 33},
156
 
 {160, 99},
157
 
 {0, 1},
158
 
 {0, 1}
159
 
};
160
 
 
161
 
/* BitPlane IMODE - such a small table... */
162
 
const uint8_t ff_vc1_imode_codes[7] = {
163
 
  0, 2, 1, 3, 1, 2, 3
164
 
};
165
 
const uint8_t ff_vc1_imode_bits[7] = {
166
 
  4, 2, 3, 2, 4, 3, 3
167
 
};
168
 
 
169
 
/* Normal-2 imode */
170
 
const uint8_t ff_vc1_norm2_codes[4] = {
171
 
  0, 4, 5, 3
172
 
};
173
 
const uint8_t ff_vc1_norm2_bits[4] = {
174
 
  1, 3, 3, 2
175
 
};
176
 
 
177
 
const uint16_t ff_vc1_norm6_codes[64] = {
178
 
0x001, 0x002, 0x003, 0x000, 0x004, 0x001, 0x002, 0x047, 0x005, 0x003, 0x004, 0x04B, 0x005, 0x04D, 0x04E, 0x30E,
179
 
0x006, 0x006, 0x007, 0x053, 0x008, 0x055, 0x056, 0x30D, 0x009, 0x059, 0x05A, 0x30C, 0x05C, 0x30B, 0x30A, 0x037,
180
 
0x007, 0x00A, 0x00B, 0x043, 0x00C, 0x045, 0x046, 0x309, 0x00D, 0x049, 0x04A, 0x308, 0x04C, 0x307, 0x306, 0x036,
181
 
0x00E, 0x051, 0x052, 0x305, 0x054, 0x304, 0x303, 0x035, 0x058, 0x302, 0x301, 0x034, 0x300, 0x033, 0x032, 0x007,
182
 
};
183
 
 
184
 
const uint8_t ff_vc1_norm6_bits[64] = {
185
 
 1,  4,  4,  8,  4,  8,  8, 10,  4,  8,  8, 10,  8, 10, 10, 13,
186
 
 4,  8,  8, 10,  8, 10, 10, 13,  8, 10, 10, 13, 10, 13, 13,  9,
187
 
 4,  8,  8, 10,  8, 10, 10, 13,  8, 10, 10, 13, 10, 13, 13,  9,
188
 
 8, 10, 10, 13, 10, 13, 13,  9, 10, 13, 13,  9, 13,  9,  9,  6,
189
 
};
190
 
#if 0
191
 
/* Normal-6 imode */
192
 
const uint8_t ff_vc1_norm6_spec[64][5] = {
193
 
{ 0,  1, 1        },
194
 
{ 1,  2, 4        },
195
 
{ 2,  3, 4        },
196
 
{ 3,  0, 8        },
197
 
{ 4,  4, 4        },
198
 
{ 5,  1, 8        },
199
 
{ 6,  2, 8        },
200
 
{ 7,  2, 5,  7, 5 },
201
 
{ 8,  5, 4        },
202
 
{ 9,  3, 8        },
203
 
{10,  4, 8        },
204
 
{11,  2, 5, 11, 5 },
205
 
{12,  5, 8        },
206
 
{13,  2, 5, 13, 5 },
207
 
{14,  2, 5, 14, 5 },
208
 
{15,  3, 5, 14, 8 },
209
 
{16,  6, 4        },
210
 
{17,  6, 8        },
211
 
{18,  7, 8        },
212
 
{19,  2, 5, 19, 5 },
213
 
{20,  8, 8        },
214
 
{21,  2, 5, 21, 5 },
215
 
{22,  2, 5, 22, 5 },
216
 
{23,  3, 5, 13, 8 },
217
 
{24,  9, 8        },
218
 
{25,  2, 5, 25, 5 },
219
 
{26,  2, 5, 26, 5 },
220
 
{27,  3, 5, 12, 8 },
221
 
{28,  2, 5, 28, 5 },
222
 
{29,  3, 5, 11, 8 },
223
 
{30,  3, 5, 10, 8 },
224
 
{31,  3, 5,  7, 4 },
225
 
{32,  7, 4        },
226
 
{33, 10, 8        },
227
 
{34, 11, 8        },
228
 
{35,  2, 5,  3, 5 },
229
 
{36, 12, 8        },
230
 
{37,  2, 5,  5, 5 },
231
 
{38,  2, 5,  6, 5 },
232
 
{39,  3, 5,  9, 8 },
233
 
{40, 13, 8        },
234
 
{41,  2, 5,  9, 5 },
235
 
{42,  2, 5, 10, 5 },
236
 
{43,  3, 5,  8, 8 },
237
 
{44,  2, 5, 12, 5 },
238
 
{45,  3, 5,  7, 8 },
239
 
{46,  3, 5,  6, 8 },
240
 
{47,  3, 5,  6, 4 },
241
 
{48, 14, 8        },
242
 
{49,  2, 5, 17, 5 },
243
 
{50,  2, 5, 18, 5 },
244
 
{51,  3, 5,  5, 8 },
245
 
{52,  2, 5, 20, 5 },
246
 
{53,  3, 5,  4, 8 },
247
 
{54,  3, 5,  3, 8 },
248
 
{55,  3, 5,  5, 4 },
249
 
{56,  2, 5, 24, 5 },
250
 
{57,  3, 5,  2, 8 },
251
 
{58,  3, 5,  1, 8 },
252
 
{59,  3, 5,  4, 4 },
253
 
{60,  3, 5,  0, 8 },
254
 
{61,  3, 5,  3, 4 },
255
 
{62,  3, 5,  2, 4 },
256
 
{63,  3, 5,  1, 1 },
257
 
};
258
 
#endif
259
 
 
260
 
/* 4MV Block pattern VLC tables */
261
 
const uint8_t ff_vc1_4mv_block_pattern_codes[4][16] = {
262
 
  { 14, 58, 59, 25, 12, 26, 15, 15, 13, 24, 27,  0, 28,  1,  2,  2},
263
 
  {  8, 18, 19,  4, 20,  5, 30, 11, 21, 31,  6, 12,  7, 13, 14,  0},
264
 
  { 15,  6,  7,  2,  8,  3, 28,  9, 10, 29,  4, 11,  5, 12, 13,  0},
265
 
  {  0, 11, 12,  4, 13,  5, 30, 16, 14, 31,  6, 17,  7, 18, 19, 10}
266
 
};
267
 
const uint8_t ff_vc1_4mv_block_pattern_bits[4][16] = {
268
 
  { 5, 6, 6, 5, 5, 5, 5, 4, 5, 5, 5, 3, 5, 3, 3, 2},
269
 
  { 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4, 4, 4, 4, 4, 2},
270
 
  { 4, 4, 4, 4, 4, 4, 5, 4, 4, 5, 4, 4, 4, 4, 4, 3},
271
 
  { 2, 4, 4, 4, 4, 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4}
272
 
};
273
 
 
274
 
const uint8_t wmv3_dc_scale_table[32]={
275
 
    0, 2, 4, 8, 8, 8, 9, 9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21
276
 
};
277
 
 
278
 
/* P-Picture CBPCY VLC tables */
279
 
#if 1 // Looks like original tables are not conforming to standard at all. Are they used for old WMV?
280
 
const uint16_t ff_vc1_cbpcy_p_codes[4][64] = {
281
 
  {
282
 
      0,   6,  15,  13,  13,  11,   3,  13,   5,   8,  49,  10,  12, 114, 102, 119,
283
 
      1,  54,  96,   8,  10, 111,   5,  15,  12,  10,   2,  12,  13, 115,  53,  63,
284
 
      1,   7,   1,   7,  14,  12,   4,  14,   1,   9,  97,  11,   7,  58,  52,  62,
285
 
      4, 103,   1,   9,  11,  56, 101, 118,   4, 110, 100,  30,   2,   5,   4,   3
286
 
  },
287
 
  {
288
 
      0,   9,   1,  18,   5,  14, 237,  26,   3, 121,   3,  22,  13,  16,   6,  30,
289
 
      2,  10,   1,  20,  12, 241,   5,  28,  16,  12,   3,  24,  28, 124, 239, 247,
290
 
      1, 240,   1,  19,  18,  15,   4,  27,   1, 122,   2,  23,   1,  17,   7,  31,
291
 
      1,  11,   2,  21,  19, 246, 238,  29,  17,  13, 236,  25,  58,  63,   8, 125
292
 
  },
293
 
  {
294
 
      0, 201,  25, 231,   5, 221,   1,   3,   2, 414,   2, 241,  16, 225, 195, 492,
295
 
      2, 412,   1, 240,   7, 224,  98, 245,   1, 220,  96,   5,   9, 230, 101, 247,
296
 
      1, 102,   1, 415,  24,   3,   2, 244,   3,  54,   3, 484,  17, 114, 200, 493,
297
 
      3, 413,   1,   4,  13, 113,  99, 485,   4, 111, 194, 243,   5,  29,  26,  31
298
 
  },
299
 
  {
300
 
      0,  28,  12,  44,   3,  36,  20,  52,   2,  32,  16,  48,   8,  40,  24,  28,
301
 
      1,  30,  14,  46,   6,  38,  22,  54,   3,  34,  18,  50,  10,  42,  26,  30,
302
 
      1,  29,  13,  45,   5,  37,  21,  53,   2,  33,  17,  49,   9,  41,  25,  29,
303
 
      1,  31,  15,  47,   7,  39,  23,  55,   4,  35,  19,  51,  11,  43,  27,  31
304
 
   }
305
 
};
306
 
 
307
 
const uint8_t ff_vc1_cbpcy_p_bits[4][64] = {
308
 
  {
309
 
    13,  13,   7,  13,   7,  13,  13,  12,   6,  13,   7,  12,   6,   8,   8,   8,
310
 
     5,   7,   8,  12,   6,   8,  13,  12,   7,  13,  13,  12,   6,   8,   7,   7,
311
 
     6,  13,   8,  12,   7,  13,  13,  12,   7,  13,   8,  12,   5,   7,   7,   7,
312
 
     6,   8,  13,  12,   6,   7,   8,   8,   5,   8,   8,   6,   3,   3,   3,   2
313
 
  },
314
 
  {
315
 
    14,  13,   8,  13,   3,  13,   8,  13,   3,   7,   8,  13,   4,  13,  13,  13,
316
 
     3,  13,  13,  13,   4,   8,  13,  13,   5,  13,  13,  13,   5,   7,   8,   8,
317
 
     3,   8,  14,  13,   5,  13,  13,  13,   4,   7,  13,  13,   6,  13,  13,  13,
318
 
     5,  13,   8,  13,   5,   8,   8,  13,   5,  13,   8,  13,   6,   6,  13,   7
319
 
  },
320
 
  {
321
 
    13,   8,   6,   8,   4,   8,  13,  12,   4,   9,   8,   8,   5,   8,   8,   9,
322
 
     5,   9,  10,   8,   4,   8,   7,   8,   6,   8,   7,  13,   4,   8,   7,   8,
323
 
     5,   7,   8,   9,   6,  13,  13,   8,   4,   6,   8,   9,   5,   7,   8,   9,
324
 
     5,   9,   9,  13,   5,   7,   7,   9,   4,   7,   8,   8,   3,   5,   5,   5
325
 
  },
326
 
  {
327
 
     9,   9,   9,   9,   2,   9,   9,   9,   2,   9,   9,   9,   9,   9,   9,   8,
328
 
     3,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   8,
329
 
     2,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   8,
330
 
     9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   8
331
 
  }
332
 
};
333
 
#else
334
 
const uint16_t ff_vc1_cbpcy_p_codes[4][64] = {
335
 
  {
336
 
      0,   1,   1,   4,   5,   1,  12,   4,  13,  14,  10,  11,  12,   7,  13,   2,
337
 
     15,   1,  96,   1,  49,  97,   2, 100,   3,   4,   5, 101, 102,  52,  53,   4,
338
 
      6,   7,  54, 103,   8,   9,  10, 110,  11,  12, 111,  56, 114,  58, 115,   5,
339
 
     13,   7,   8,   9,  10,  11,  12,  30,  13,  14,  15, 118, 119,  62,  63,   3
340
 
  },
341
 
  {
342
 
      0,   1,   2,   1,   3,   1,  16,  17,   5,  18,  12,  19,  13,   1,  28,  58,
343
 
      1,   1,   1,   2,   3,   2,   3, 236, 237,   4,   5, 238,   6,   7, 239,   8,
344
 
      9, 240,  10,  11, 121, 122,  12,  13,  14,  15, 241, 246,  16,  17, 124,  63,
345
 
     18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31, 247, 125
346
 
  },
347
 
  {
348
 
      0,   1,   2,   3,   2,   3,   1,   4,   5,  24,   7,  13,  16,  17,   9,   5,
349
 
     25,   1,   1,   1,   2,   3,  96, 194,   1,   2,  98,  99, 195, 200, 101,  26,
350
 
    201, 102, 412, 413, 414,  54, 220, 111, 221,   3, 224, 113, 225, 114, 230,  29,
351
 
    231, 415, 240,   4, 241, 484,   5, 243,   3, 244, 245, 485, 492, 493, 247,  31
352
 
  },
353
 
  {
354
 
      0,   1,   1,   1,   2,   2,   3,   4,   3,   5,   6,   7,   8,   9,  10,  11,
355
 
     12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,
356
 
     28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,
357
 
     44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  28,  29,  30,  31
358
 
   }
359
 
};
360
 
const uint8_t ff_vc1_cbpcy_p_bits[4][64] = {
361
 
  {
362
 
    13,  6,  5,  6,  6,  7,  7,  5,  7,  7,  6,  6,  6,  5,  6,  3,
363
 
     7,  8,  8, 13,  7,  8, 13,  8, 13, 13, 13,  8,  8,  7,  7,  3,
364
 
    13, 13,  7,  8, 13, 13, 13,  8, 13, 13,  8,  7,  8,  7,  8,  3,
365
 
    13, 12, 12, 12, 12, 12, 12,  6, 12, 12, 12,  8,  8,  7,  7,  2
366
 
  },
367
 
  {
368
 
    14,  3,  3,  5,  3,  4,  5,  5,  3,  5,  4,  5,  4,  6,  5,  6,
369
 
     8, 14, 13,  8,  8, 13, 13,  8,  8, 13, 13,  8, 13, 13,  8, 13,
370
 
    13,  8, 13, 13,  7,  7, 13, 13, 13, 13,  8,  8, 13, 13,  7,  6,
371
 
    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,  8,  7
372
 
  },
373
 
  {
374
 
    13,  5,  5,  5,  4,  4,  6,  4,  4,  6,  4,  5,  5,  5,  4,  3,
375
 
     6,  8, 10,  9,  8,  8,  7,  8, 13, 13,  7,  7,  8,  8,  7,  5,
376
 
     8,  7,  9,  9,  9,  6,  8,  7,  8, 13,  8,  7,  8,  7,  8,  5,
377
 
     8,  9,  8, 13,  8,  9, 13,  8, 12,  8,  8,  9,  9,  9,  8,  5
378
 
  },
379
 
  {
380
 
     9,  2,  3,  9,  2,  9,  9,  9,  2,  9,  9,  9,  9,  9,  9,  9,
381
 
     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
382
 
     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
383
 
     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  8,  8,  8,  8
384
 
  }
385
 
};
386
 
#endif
387
 
 
388
 
/* MacroBlock Transform Type: 7.1.3.11, p89
389
 
 * 8x8:B
390
 
 * 8x4:B:btm  8x4:B:top  8x4:B:both,
391
 
 * 4x8:B:right  4x8:B:left  4x8:B:both
392
 
 * 4x4:B  8x8:MB
393
 
 * 8x4:MB:btm  8x4:MB:top  8x4,MB,both
394
 
 * 4x8,MB,right  4x8,MB,left
395
 
 * 4x4,MB                               */
396
 
const uint16_t ff_vc1_ttmb_codes[3][16] = {
397
 
  {
398
 
    0x0003,
399
 
    0x002E, 0x005F, 0x0000,
400
 
    0x0016, 0x0015, 0x0001,
401
 
    0x0004, 0x0014,
402
 
    0x02F1, 0x0179, 0x017B,
403
 
    0x0BC0, 0x0BC1, 0x05E1,
404
 
    0x017A
405
 
  },
406
 
  {
407
 
    0x0006,
408
 
    0x0006, 0x0003, 0x0007,
409
 
    0x000F, 0x000E, 0x0000,
410
 
    0x0002, 0x0002,
411
 
    0x0014, 0x0011, 0x000B,
412
 
    0x0009, 0x0021, 0x0015,
413
 
    0x0020
414
 
  },
415
 
  {
416
 
    0x0006,
417
 
    0x0000, 0x000E, 0x0005,
418
 
    0x0002, 0x0003, 0x0003,
419
 
    0x000F, 0x0002,
420
 
    0x0081, 0x0021, 0x0009,
421
 
    0x0101, 0x0041, 0x0011,
422
 
    0x0100
423
 
  }
424
 
};
425
 
 
426
 
const uint8_t ff_vc1_ttmb_bits[3][16] = {
427
 
  {
428
 
     2,
429
 
     6,  7,  2,
430
 
     5,  5,  2,
431
 
     3,  5,
432
 
    10,  9,  9,
433
 
    12, 12, 11,
434
 
     9
435
 
  },
436
 
  {
437
 
    3,
438
 
    4, 4, 4,
439
 
    4, 4, 3,
440
 
    3, 2,
441
 
    7, 7, 6,
442
 
    6, 8, 7,
443
 
    8
444
 
  },
445
 
  {
446
 
     3,
447
 
     3, 4, 5,
448
 
     3, 3, 4,
449
 
     4, 2,
450
 
    10, 8, 6,
451
 
    11, 9, 7,
452
 
    11
453
 
  }
454
 
};
455
 
 
456
 
/* TTBLK (Transform Type per Block) tables */
457
 
const uint8_t ff_vc1_ttblk_codes[3][8] = {
458
 
  {  0,  1,  3,  5, 16, 17, 18, 19},
459
 
  {  3,  0,  1,  2,  3,  5,  8,  9},
460
 
  {  1,  0,  1,  4,  6,  7, 10, 11}
461
 
};
462
 
const uint8_t ff_vc1_ttblk_bits[3][8] = {
463
 
  {  2,  2,  2,  3,  5,  5,  5,  5},
464
 
  {  2,  3,  3,  3,  3,  3,  4,  4},
465
 
  {  2,  3,  3,  3,  3,  3,  4,  4}
466
 
};
467
 
 
468
 
/* SUBBLKPAT tables, p93-94, reordered */
469
 
const uint8_t ff_vc1_subblkpat_codes[3][15] = {
470
 
  { 14, 12,  7, 11,  9, 26,  2, 10, 27,  8,  0,  6,  1, 15,  1},
471
 
  { 14,  0,  8, 15, 10,  4, 23, 13,  5,  9, 25,  3, 24, 22,  1},
472
 
  {  5,  6,  2,  2,  8,  0, 28,  3,  1,  3, 29,  1, 19, 18, 15}
473
 
};
474
 
const uint8_t ff_vc1_subblkpat_bits[3][15] = {
475
 
  {  5,  5,  5,  5,  5,  6,  4,  5,  6,  5,  4,  5,  4,  5,  1},
476
 
  {  4,  3,  4,  4,  4,  5,  5,  4,  5,  4,  5,  4,  5,  5,  2},
477
 
  {  3,  3,  4,  3,  4,  5,  5,  3,  5,  4,  5,  4,  5,  5,  4}
478
 
};
479
 
 
480
 
/* MV differential tables, p265 */
481
 
const uint16_t ff_vc1_mv_diff_codes[4][73] = {
482
 
  {
483
 
       0,    2,    3,    8,  576,    3,    2,    6,
484
 
       5,  577,  578,    7,    8,    9,   40,   19,
485
 
      37,   82,   21,   22,   23,  579,  580,  166,
486
 
      96,  167,   49,  194,  195,  581,  582,  583,
487
 
     292,  293,  294,   13,    2,    7,   24,   50,
488
 
     102,  295,   13,    7,    8,   18,   50,  103,
489
 
      38,   20,   21,   22,   39,  204,  103,   23,
490
 
      24,   25,  104,  410,  105,  106,  107,  108,
491
 
     109,  220,  411,  442,  222,  443,  446,  447,
492
 
       7 /* 73 elements */
493
 
  },
494
 
  {
495
 
       0,    4,    5,    3,    4,    3,    4,    5,
496
 
      20,    6,   21,   44,   45,   46, 3008,   95,
497
 
     112,  113,   57, 3009, 3010,  116,  117, 3011,
498
 
     118, 3012, 3013, 3014, 3015, 3016, 3017, 3018,
499
 
    3019, 3020, 3021, 3022,    1,    4,   15,  160,
500
 
     161,   41,    6,   11,   42,  162,   43,  119,
501
 
      56,   57,   58,  163,  236,  237, 3023,  119,
502
 
     120,  242,  122,  486, 1512,  487,  246,  494,
503
 
    1513,  495, 1514, 1515, 1516, 1517, 1518, 1519,
504
 
      31 /* 73 elements */
505
 
  },
506
 
  {
507
 
       0,  512,  513,  514,  515,    2,    3,  258,
508
 
     259,  260,  261,  262,  263,  264,  265,  266,
509
 
     267,  268,  269,  270,  271,  272,  273,  274,
510
 
     275,  276,  277,  278,  279,  280,  281,  282,
511
 
     283,  284,  285,  286,    1,    5,  287,  288,
512
 
     289,  290,    6,    7,  291,  292,  293,  294,
513
 
     295,  296,  297,  298,  299,  300,  301,  302,
514
 
     303,  304,  305,  306,  307,  308,  309,  310,
515
 
     311,  312,  313,  314,  315,  316,  317,  318,
516
 
     319 /* 73 elements */
517
 
  },
518
 
  {
519
 
       0,    1,    1,    2,    3,    4,    1,    5,
520
 
       4,    3,    5,    8,    6,    9,   10,   11,
521
 
      12,    7,  104,   14,  105,    4,   10,   15,
522
 
      11,    6,   14,    8,  106,  107,  108,   15,
523
 
     109,    9,   55,   10,    1,    2,    1,    2,
524
 
       3,   12,    6,    2,    6,    7,   28,    7,
525
 
      15,    8,    5,   18,   29,  152,   77,   24,
526
 
      25,   26,   39,  108,   13,  109,   55,   56,
527
 
      57,  116,   11,  153,  234,  235,  118,  119,
528
 
      15 /* 73 elements */
529
 
  }
530
 
};
531
 
const uint8_t ff_vc1_mv_diff_bits[4][73] = {
532
 
  {
533
 
     6,  7,  7,  8, 14,  6,  5,  6,  7, 14, 14,  6,  6,  6,  8,  9,
534
 
    10,  9,  7,  7,  7, 14, 14, 10,  9, 10,  8, 10, 10, 14, 14, 14,
535
 
    13, 13, 13,  6,  3,  5,  6,  8,  9, 13,  5,  4,  4,  5,  7,  9,
536
 
     6,  5,  5,  5,  6,  9,  8,  5,  5,  5,  7, 10,  7,  7,  7,  7,
537
 
     7,  8, 10,  9,  8,  9,  9,  9,  3 /* 73 elements */
538
 
  },
539
 
  {
540
 
     5,  7,  7,  6,  6,  5,  5,  6,  7,  5,  7,  8,  8,  8, 14,  9,
541
 
     9,  9,  8, 14, 14,  9,  9, 14,  9, 14, 14, 14, 14, 14, 14, 14,
542
 
    14, 14, 14, 14,  2,  3,  6,  8,  8,  6,  3,  4,  6,  8,  6,  9,
543
 
     6,  6,  6,  8,  8,  8, 14,  7,  7,  8,  7,  9, 13,  9,  8,  9,
544
 
    13,  9, 13, 13, 13, 13, 13, 13,  5 /* 73 elements */
545
 
 
546
 
  },
547
 
  {
548
 
     3, 12, 12, 12, 12,  3,  4, 11, 11, 11, 11, 11, 11, 11, 11, 11,
549
 
    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
550
 
    11, 11, 11, 11,  1,  5, 11, 11, 11, 11,  4,  4, 11, 11, 11, 11,
551
 
    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
552
 
    11, 11, 11, 11, 11, 11, 11, 11, 11 /* 73 elements */
553
 
  },
554
 
  {
555
 
    15, 11, 15, 15, 15, 15, 12, 15, 12, 11, 12, 12, 15, 12, 12, 12,
556
 
    12, 15, 15, 12, 15, 10, 11, 12, 11, 10, 11, 10, 15, 15, 15, 11,
557
 
    15, 10, 14, 10,  4,  4,  5,  7,  8,  9,  5,  3,  4,  5,  6,  8,
558
 
     5,  4,  3,  5,  6,  8,  7,  5,  5,  5,  6,  7,  9,  7,  6,  6,
559
 
     6,  7, 10,  8,  8,  8,  7,  7,  4 /* 73 elements */
560
 
  }
561
 
};
562
 
 
563
 
/* DC differentials low+hi-mo, p217 are the same as in msmpeg4data .h */
564
 
 
565
 
/* Table 232 */
566
 
const int8_t ff_vc1_simple_progressive_4x4_zz [16] =
567
 
{
568
 
       0,     8,    16,     1,
569
 
       9,    24,    17,     2,
570
 
      10,    18,    25,     3,
571
 
      11,    26,    19,    27
572
 
};
573
 
 
574
 
const int8_t ff_vc1_adv_progressive_8x4_zz [32] = /* Table 233 */
575
 
{
576
 
       0,     8,     1,    16,     2,     9,    10,     3,
577
 
      24,    17,     4,    11,    18,    12,     5,    19,
578
 
      25,    13,    20,    26,    27,     6,    21,    28,
579
 
      14,    22,    29,     7,    30,    15,    23,    31
580
 
};
581
 
 
582
 
const int8_t ff_vc1_adv_progressive_4x8_zz [32] = /* Table 234 */
583
 
{
584
 
       0,     1,     8,     2,
585
 
       9,    16,    17,    24,
586
 
      10,    32,    25,    18,
587
 
      40,     3,    33,    26,
588
 
      48,    11,    56,    41,
589
 
      34,    49,    57,    42,
590
 
      19,    50,    27,    58,
591
 
      35,    43,    51,    59
592
 
};
593
 
 
594
 
const int8_t ff_vc1_adv_interlaced_8x8_zz [64] = /* Table 235 */
595
 
{
596
 
       0,     8,     1,    16,    24,     9,     2,    32,
597
 
      40,    48,    56,    17,    10,     3,    25,    18,
598
 
      11,     4,    33,    41,    49,    57,    26,    34,
599
 
      42,    50,    58,    19,    12,     5,    27,    20,
600
 
      13,     6,    35,    28,    21,    14,     7,    15,
601
 
      22,    29,    36,    43,    51,    59,    60,    52,
602
 
      44,    37,    30,    23,    31,    38,    45,    53,
603
 
      61,    62,    54,    46,    39,    47,    55,    63
604
 
};
605
 
 
606
 
const int8_t ff_vc1_adv_interlaced_8x4_zz [32] = /* Table 236 */
607
 
{
608
 
       0,     8,    16,    24,     1,     9,     2,    17,
609
 
      25,    10,     3,    18,    26,     4,    11,    19,
610
 
      12,     5,    13,    20,    27,     6,    21,    28,
611
 
      14,    22,    29,     7,    30,    15,    23,    31
612
 
};
613
 
 
614
 
const int8_t ff_vc1_adv_interlaced_4x8_zz [32] = /* Table 237 */
615
 
{
616
 
       0,     1,     2,     8,
617
 
      16,     9,    24,    17,
618
 
      10,     3,    32,    40,
619
 
      48,    56,    25,    18,
620
 
      33,    26,    41,    34,
621
 
      49,    57,    11,    42,
622
 
      19,    50,    27,    58,
623
 
      35,    43,    51,    59
624
 
};
625
 
 
626
 
const int8_t ff_vc1_adv_interlaced_4x4_zz [16] = /* Table 238 */
627
 
{
628
 
       0,     8,    16,    24,
629
 
       1,     9,    17,     2,
630
 
      25,    10,    18,     3,
631
 
      26,    11,    19,    27
632
 
};
633
 
 
634
 
 
635
 
/* DQScale as specified in 8.1.3.9 - almost identical to 0x40000/i */
636
 
const int32_t ff_vc1_dqscale[63] = {
637
 
0x40000, 0x20000, 0x15555, 0x10000, 0xCCCD, 0xAAAB, 0x9249, 0x8000,
638
 
    0x71C7, 0x6666, 0x5D17, 0x5555, 0x4EC5, 0x4925, 0x4444, 0x4000,
639
 
    0x3C3C, 0x38E4, 0x35E5, 0x3333, 0x30C3, 0x2E8C, 0x2C86, 0x2AAB,
640
 
    0x28F6, 0x2762, 0x25ED, 0x2492, 0x234F, 0x2222, 0x2108, 0x2000,
641
 
    0x1F08, 0x1E1E, 0x1D42, 0x1C72, 0x1BAD, 0x1AF3, 0x1A42, 0x199A,
642
 
    0x18FA, 0x1862, 0x17D0, 0x1746, 0x16C1, 0x1643, 0x15CA, 0x1555,
643
 
    0x14E6, 0x147B, 0x1414, 0x13B1, 0x1352, 0x12F7, 0x129E, 0x1249,
644
 
    0x11F7, 0x11A8, 0x115B, 0x1111, 0x10C9, 0x1084, 0x1000
645
 
};