~ubuntu-branches/ubuntu/jaunty/xvidcap/jaunty-proposed

« back to all changes in this revision

Viewing changes to ffmpeg/libavcodec/vc1data.c

  • Committer: Bazaar Package Importer
  • Author(s): Lionel Le Folgoc, Andrew Starr-Bochicchio, Lionel Le Folgoc
  • Date: 2008-12-26 00:10:06 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20081226001006-2040ls9680bd1blt
Tags: 1.1.7-0.2ubuntu1
[ Andrew Starr-Bochicchio ]
* Merge from debian-multimedia (LP: #298547), Ubuntu Changes:
 - For ffmpeg-related build-deps, fix versionized dependencies
   as the ubuntu versioning is different than debian-multimedia's.

[ Lionel Le Folgoc ]
* LP: #311412 is fixed since the 1.1.7~rc1-0.1 revision.
* debian/patches/03_ffmpeg.diff: updated to fix FTBFS due to libswscale API
  change (cherry-pick from Gentoo #234383).

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 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
/* Scantables/ZZ scan are at 11.9 (p262) and 8.1.1.12 (p10) */
 
566
const int8_t ff_vc1_normal_zz[64] = {
 
567
       0,     8,     1,     2,     9,    16,    24,    17,
 
568
      10,     3,     4,    11,    18,    25,    32,    40,
 
569
      33,    48,    26,    19,    12,     5,     6,    13,
 
570
      20,    27,    34,    41,    56,    49,    57,    42,
 
571
      35,    28,    21,    14,     7,    15,    22,    29,
 
572
      36,    43,    50,    58,    51,    59,    44,    37,
 
573
      30,    23,    31,    38,    45,    52,    60,    53,
 
574
      61,    46,    39,    47,    54,    62,    55,    63
 
575
};
 
576
 
 
577
const int8_t ff_vc1_horizontal_zz [64] = /* Table 227 */
 
578
{
 
579
       0,     1,     8,     2,     3,     9,    16,    24,
 
580
      17,    10,     4,     5,    11,    18,    25,    32,
 
581
      40,    48,    33,    26,    19,    12,     6,     7,
 
582
      13,    20,    27,    34,    41,    56,    49,    57,
 
583
      42,    35,    28,    21,    14,    15,    22,    29,
 
584
      36,    43,    50,    58,    51,    44,    37,    30,
 
585
      23,    31,    38,    45,    52,    59,    60,    53,
 
586
      46,    39,    47,    54,    61,    62,    55,    63
 
587
};
 
588
 
 
589
const int8_t ff_vc1_vertical_zz [64] = /* Table 228 */
 
590
{
 
591
       0,     8,    16,     1,    24,    32,    40,     9,
 
592
       2,     3,    10,    17,    25,    48,    56,    41,
 
593
      33,    26,    18,    11,     4,     5,    12,    19,
 
594
      27,    34,    49,    57,    50,    42,    35,    28,
 
595
      20,    13,     6,     7,    14,    21,    29,    36,
 
596
      43,    51,    58,    59,    52,    44,    37,    30,
 
597
      22,    15,    23,    31,    38,    45,    60,    53,
 
598
      46,    39,    47,    54,    61,    62,    55,    63
 
599
};
 
600
 
 
601
const int8_t ff_vc1_simple_progressive_8x8_zz [64] =
 
602
/* Table 229 */
 
603
{
 
604
       0,     8,     1,     2,     9,    16,    24,    17,
 
605
      10,     3,     4,    11,    18,    25,    32,    40,
 
606
      48,    56,    41,    33,    26,    19,    12,     5,
 
607
       6,    13,    20,    27,    34,    49,    57,    58,
 
608
      50,    42,    35,    28,    21,    14,     7,    15,
 
609
      22,    29,    36,    43,    51,    59,    60,    52,
 
610
      44,    37,    30,    23,    31,    38,    45,    53,
 
611
      61,    62,    54,    46,    39,    47,    55,    63
 
612
};
 
613
 
 
614
const int8_t ff_vc1_simple_progressive_8x4_zz [32] = /* Table 230 */
 
615
{
 
616
       0,     1,     2,     8,     3,     9,    10,    16,
 
617
       4,    11,    17,    24,    18,    12,     5,    19,
 
618
      25,    13,    20,    26,    27,     6,    21,    28,
 
619
      14,    22,    29,     7,    30,    15,    23,    31
 
620
};
 
621
 
 
622
const int8_t ff_vc1_simple_progressive_4x8_zz [32] = /* Table 231 */
 
623
{
 
624
       0,     8,     1,    16,
 
625
       9,    24,    17,     2,
 
626
      32,    10,    25,    40,
 
627
      18,    48,    33,    26,
 
628
      56,    41,    34,     3,
 
629
      49,    57,    11,    42,
 
630
      19,    50,    27,    58,
 
631
      35,    43,    51,    59
 
632
};
 
633
 
 
634
/* Table 232 */
 
635
const int8_t ff_vc1_simple_progressive_4x4_zz [16] =
 
636
{
 
637
       0,     8,    16,     1,
 
638
       9,    24,    17,     2,
 
639
      10,    18,    25,     3,
 
640
      11,    26,    19,    27
 
641
};
 
642
 
 
643
const int8_t ff_vc1_adv_progressive_8x4_zz [32] = /* Table 233 */
 
644
{
 
645
       0,     8,     1,    16,     2,     9,    10,     3,
 
646
      24,    17,     4,    11,    18,    12,     5,    19,
 
647
      25,    13,    20,    26,    27,     6,    21,    28,
 
648
      14,    22,    29,     7,    30,    15,    23,    31
 
649
};
 
650
 
 
651
const int8_t ff_vc1_adv_progressive_4x8_zz [32] = /* Table 234 */
 
652
{
 
653
       0,     1,     8,     2,
 
654
       9,    16,    17,    24,
 
655
      10,    32,    25,    18,
 
656
      40,     3,    33,    26,
 
657
      48,    11,    56,    41,
 
658
      34,    49,    57,    42,
 
659
      19,    50,    27,    58,
 
660
      35,    43,    51,    59
 
661
};
 
662
 
 
663
const int8_t ff_vc1_adv_interlaced_8x8_zz [64] = /* Table 235 */
 
664
{
 
665
       0,     8,     1,    16,    24,     9,     2,    32,
 
666
      40,    48,    56,    17,    10,     3,    25,    18,
 
667
      11,     4,    33,    41,    49,    57,    26,    34,
 
668
      42,    50,    58,    19,    12,     5,    27,    20,
 
669
      13,     6,    35,    28,    21,    14,     7,    15,
 
670
      22,    29,    36,    43,    51,    59,    60,    52,
 
671
      44,    37,    30,    23,    31,    38,    45,    53,
 
672
      61,    62,    54,    46,    39,    47,    55,    63
 
673
};
 
674
 
 
675
const int8_t ff_vc1_adv_interlaced_8x4_zz [32] = /* Table 236 */
 
676
{
 
677
       0,     8,    16,    24,     1,     9,     2,    17,
 
678
      25,    10,     3,    18,    26,     4,    11,    19,
 
679
      12,     5,    13,    20,    27,     6,    21,    28,
 
680
      14,    22,    29,     7,    30,    15,    23,    31
 
681
};
 
682
 
 
683
const int8_t ff_vc1_adv_interlaced_4x8_zz [32] = /* Table 237 */
 
684
{
 
685
       0,     1,     2,     8,
 
686
      16,     9,    24,    17,
 
687
      10,     3,    32,    40,
 
688
      48,    56,    25,    18,
 
689
      33,    26,    41,    34,
 
690
      49,    57,    11,    42,
 
691
      19,    50,    27,    58,
 
692
      35,    43,    51,    59
 
693
};
 
694
 
 
695
const int8_t ff_vc1_adv_interlaced_4x4_zz [16] = /* Table 238 */
 
696
{
 
697
       0,     8,    16,    24,
 
698
       1,     9,    17,     2,
 
699
      25,    10,    18,     3,
 
700
      26,    11,    19,    27
 
701
};
 
702
 
 
703
 
 
704
/* DQScale as specified in 8.1.3.9 - almost identical to 0x40000/i */
 
705
const int32_t ff_vc1_dqscale[63] = {
 
706
0x40000, 0x20000, 0x15555, 0x10000, 0xCCCD, 0xAAAB, 0x9249, 0x8000,
 
707
    0x71C7, 0x6666, 0x5D17, 0x5555, 0x4EC5, 0x4925, 0x4444, 0x4000,
 
708
    0x3C3C, 0x38E4, 0x35E5, 0x3333, 0x30C3, 0x2E8C, 0x2C86, 0x2AAB,
 
709
    0x28F6, 0x2762, 0x25ED, 0x2492, 0x234F, 0x2222, 0x2108, 0x2000,
 
710
    0x1F08, 0x1E1E, 0x1D42, 0x1C72, 0x1BAD, 0x1AF3, 0x1A42, 0x199A,
 
711
    0x18FA, 0x1862, 0x17D0, 0x1746, 0x16C1, 0x1643, 0x15CA, 0x1555,
 
712
    0x14E6, 0x147B, 0x1414, 0x13B1, 0x1352, 0x12F7, 0x129E, 0x1249,
 
713
    0x11F7, 0x11A8, 0x115B, 0x1111, 0x10C9, 0x1084, 0x1000
 
714
};