Statistics
| Branch: | Revision:

ffmpeg / libavcodec / mpeg12data.h @ 7bc9090a

History | View | Annotate | Download (11.4 KB)

1
/**
2
 * @file mpeg12data.h
3
 * MPEG1/2 tables.
4
 */
5

    
6
const int16_t ff_mpeg1_default_intra_matrix[64] = {
7
        8, 16, 19, 22, 26, 27, 29, 34,
8
        16, 16, 22, 24, 27, 29, 34, 37,
9
        19, 22, 26, 27, 29, 34, 34, 38,
10
        22, 22, 26, 27, 29, 34, 37, 40,
11
        22, 26, 27, 29, 32, 35, 40, 48,
12
        26, 27, 29, 32, 35, 40, 48, 58,
13
        26, 27, 29, 34, 38, 46, 56, 69,
14
        27, 29, 35, 38, 46, 56, 69, 83
15
};
16

    
17
const int16_t ff_mpeg1_default_non_intra_matrix[64] = {
18
    16, 16, 16, 16, 16, 16, 16, 16,
19
    16, 16, 16, 16, 16, 16, 16, 16,
20
    16, 16, 16, 16, 16, 16, 16, 16,
21
    16, 16, 16, 16, 16, 16, 16, 16,
22
    16, 16, 16, 16, 16, 16, 16, 16,
23
    16, 16, 16, 16, 16, 16, 16, 16,
24
    16, 16, 16, 16, 16, 16, 16, 16,
25
    16, 16, 16, 16, 16, 16, 16, 16,
26
};
27

    
28
const unsigned char vlc_dc_table[256] = {
29
    0, 1, 2, 2,
30
    3, 3, 3, 3,
31
    4, 4, 4, 4, 4, 4, 4, 4,
32
    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
33
    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
34
    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
35

    
36
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
37
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
38
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
39
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
40

    
41
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
42
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
43
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
44
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
45
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
46
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
47
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
48
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
49
};
50

    
51
const uint16_t vlc_dc_lum_code[12] = {
52
    0x4, 0x0, 0x1, 0x5, 0x6, 0xe, 0x1e, 0x3e, 0x7e, 0xfe, 0x1fe, 0x1ff,
53
};
54
const unsigned char vlc_dc_lum_bits[12] = {
55
    3, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 9,
56
};
57

    
58
const uint16_t vlc_dc_chroma_code[12] = {
59
    0x0, 0x1, 0x2, 0x6, 0xe, 0x1e, 0x3e, 0x7e, 0xfe, 0x1fe, 0x3fe, 0x3ff,
60
};
61
const unsigned char vlc_dc_chroma_bits[12] = {
62
    2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10,
63
};
64

    
65
/* simple include everything table for dc, first byte is bits number next 3 are code*/
66
static uint32_t mpeg1_lum_dc_uni[512];
67
static uint32_t mpeg1_chr_dc_uni[512];
68

    
69
static const uint16_t mpeg1_vlc[113][2] = {
70
 { 0x3, 2 }, { 0x4, 4 }, { 0x5, 5 }, { 0x6, 7 },
71
 { 0x26, 8 }, { 0x21, 8 }, { 0xa, 10 }, { 0x1d, 12 },
72
 { 0x18, 12 }, { 0x13, 12 }, { 0x10, 12 }, { 0x1a, 13 },
73
 { 0x19, 13 }, { 0x18, 13 }, { 0x17, 13 }, { 0x1f, 14 },
74
 { 0x1e, 14 }, { 0x1d, 14 }, { 0x1c, 14 }, { 0x1b, 14 },
75
 { 0x1a, 14 }, { 0x19, 14 }, { 0x18, 14 }, { 0x17, 14 },
76
 { 0x16, 14 }, { 0x15, 14 }, { 0x14, 14 }, { 0x13, 14 },
77
 { 0x12, 14 }, { 0x11, 14 }, { 0x10, 14 }, { 0x18, 15 },
78
 { 0x17, 15 }, { 0x16, 15 }, { 0x15, 15 }, { 0x14, 15 },
79
 { 0x13, 15 }, { 0x12, 15 }, { 0x11, 15 }, { 0x10, 15 },
80
 { 0x3, 3 }, { 0x6, 6 }, { 0x25, 8 }, { 0xc, 10 },
81
 { 0x1b, 12 }, { 0x16, 13 }, { 0x15, 13 }, { 0x1f, 15 },
82
 { 0x1e, 15 }, { 0x1d, 15 }, { 0x1c, 15 }, { 0x1b, 15 },
83
 { 0x1a, 15 }, { 0x19, 15 }, { 0x13, 16 }, { 0x12, 16 },
84
 { 0x11, 16 }, { 0x10, 16 }, { 0x5, 4 }, { 0x4, 7 },
85
 { 0xb, 10 }, { 0x14, 12 }, { 0x14, 13 }, { 0x7, 5 },
86
 { 0x24, 8 }, { 0x1c, 12 }, { 0x13, 13 }, { 0x6, 5 },
87
 { 0xf, 10 }, { 0x12, 12 }, { 0x7, 6 }, { 0x9, 10 },
88
 { 0x12, 13 }, { 0x5, 6 }, { 0x1e, 12 }, { 0x14, 16 },
89
 { 0x4, 6 }, { 0x15, 12 }, { 0x7, 7 }, { 0x11, 12 },
90
 { 0x5, 7 }, { 0x11, 13 }, { 0x27, 8 }, { 0x10, 13 },
91
 { 0x23, 8 }, { 0x1a, 16 }, { 0x22, 8 }, { 0x19, 16 },
92
 { 0x20, 8 }, { 0x18, 16 }, { 0xe, 10 }, { 0x17, 16 },
93
 { 0xd, 10 }, { 0x16, 16 }, { 0x8, 10 }, { 0x15, 16 },
94
 { 0x1f, 12 }, { 0x1a, 12 }, { 0x19, 12 }, { 0x17, 12 },
95
 { 0x16, 12 }, { 0x1f, 13 }, { 0x1e, 13 }, { 0x1d, 13 },
96
 { 0x1c, 13 }, { 0x1b, 13 }, { 0x1f, 16 }, { 0x1e, 16 },
97
 { 0x1d, 16 }, { 0x1c, 16 }, { 0x1b, 16 },
98
 { 0x1, 6 }, /* escape */
99
 { 0x2, 2 }, /* EOB */
100
};
101

    
102
static const uint16_t mpeg2_vlc[113][2] = {
103
  {0x02, 2}, {0x06, 3}, {0x07, 4}, {0x1c, 5},
104
  {0x1d, 5}, {0x05, 6}, {0x04, 6}, {0x7b, 7},
105
  {0x7c, 7}, {0x23, 8}, {0x22, 8}, {0xfa, 8},
106
  {0xfb, 8}, {0xfe, 8}, {0xff, 8}, {0x1f,14},
107
  {0x1e,14}, {0x1d,14}, {0x1c,14}, {0x1b,14},
108
  {0x1a,14}, {0x19,14}, {0x18,14}, {0x17,14},
109
  {0x16,14}, {0x15,14}, {0x14,14}, {0x13,14},
110
  {0x12,14}, {0x11,14}, {0x10,14}, {0x18,15},
111
  {0x17,15}, {0x16,15}, {0x15,15}, {0x14,15},
112
  {0x13,15}, {0x12,15}, {0x11,15}, {0x10,15},
113
  {0x02, 3}, {0x06, 5}, {0x79, 7}, {0x27, 8},
114
  {0x20, 8}, {0x16,13}, {0x15,13}, {0x1f,15},
115
  {0x1e,15}, {0x1d,15}, {0x1c,15}, {0x1b,15},
116
  {0x1a,15}, {0x19,15}, {0x13,16}, {0x12,16},
117
  {0x11,16}, {0x10,16}, {0x05, 5}, {0x07, 7}, 
118
  {0xfc, 8}, {0x0c,10}, {0x14,13}, {0x07, 5}, 
119
  {0x26, 8}, {0x1c,12}, {0x13,13}, {0x06, 6}, 
120
  {0xfd, 8}, {0x12,12}, {0x07, 6}, {0x04, 9}, 
121
  {0x12,13}, {0x06, 7}, {0x1e,12}, {0x14,16}, 
122
  {0x04, 7}, {0x15,12}, {0x05, 7}, {0x11,12}, 
123
  {0x78, 7}, {0x11,13}, {0x7a, 7}, {0x10,13}, 
124
  {0x21, 8}, {0x1a,16}, {0x25, 8}, {0x19,16}, 
125
  {0x24, 8}, {0x18,16}, {0x05, 9}, {0x17,16}, 
126
  {0x07, 9}, {0x16,16}, {0x0d,10}, {0x15,16}, 
127
  {0x1f,12}, {0x1a,12}, {0x19,12}, {0x17,12}, 
128
  {0x16,12}, {0x1f,13}, {0x1e,13}, {0x1d,13}, 
129
  {0x1c,13}, {0x1b,13}, {0x1f,16}, {0x1e,16}, 
130
  {0x1d,16}, {0x1c,16}, {0x1b,16}, 
131
  {0x01,6}, /* escape */
132
  {0x06,4}, /* EOB */
133
};
134

    
135
static const int8_t mpeg1_level[111] = {
136
  1,  2,  3,  4,  5,  6,  7,  8,
137
  9, 10, 11, 12, 13, 14, 15, 16,
138
 17, 18, 19, 20, 21, 22, 23, 24,
139
 25, 26, 27, 28, 29, 30, 31, 32,
140
 33, 34, 35, 36, 37, 38, 39, 40,
141
  1,  2,  3,  4,  5,  6,  7,  8,
142
  9, 10, 11, 12, 13, 14, 15, 16,
143
 17, 18,  1,  2,  3,  4,  5,  1,
144
  2,  3,  4,  1,  2,  3,  1,  2,
145
  3,  1,  2,  3,  1,  2,  1,  2,
146
  1,  2,  1,  2,  1,  2,  1,  2,
147
  1,  2,  1,  2,  1,  2,  1,  2,
148
  1,  1,  1,  1,  1,  1,  1,  1,
149
  1,  1,  1,  1,  1,  1,  1,
150
};
151

    
152
static const int8_t mpeg1_run[111] = {
153
  0,  0,  0,  0,  0,  0,  0,  0,
154
  0,  0,  0,  0,  0,  0,  0,  0,
155
  0,  0,  0,  0,  0,  0,  0,  0,
156
  0,  0,  0,  0,  0,  0,  0,  0,
157
  0,  0,  0,  0,  0,  0,  0,  0,
158
  1,  1,  1,  1,  1,  1,  1,  1,
159
  1,  1,  1,  1,  1,  1,  1,  1,
160
  1,  1,  2,  2,  2,  2,  2,  3,
161
  3,  3,  3,  4,  4,  4,  5,  5,
162
  5,  6,  6,  6,  7,  7,  8,  8,
163
  9,  9, 10, 10, 11, 11, 12, 12,
164
 13, 13, 14, 14, 15, 15, 16, 16,
165
 17, 18, 19, 20, 21, 22, 23, 24,
166
 25, 26, 27, 28, 29, 30, 31,
167
};
168

    
169
static uint8_t mpeg1_index_run[2][64];
170
static int8_t mpeg1_max_level[2][64];
171

    
172
static RLTable rl_mpeg1 = {
173
    111,
174
    111,
175
    mpeg1_vlc,
176
    mpeg1_run,
177
    mpeg1_level,
178
};
179

    
180
static RLTable rl_mpeg2 = {
181
    111,
182
    111,
183
    mpeg2_vlc,
184
    mpeg1_run,
185
    mpeg1_level,
186
};
187

    
188
static const uint8_t mbAddrIncrTable[35][2] = {
189
    {0x1, 1},
190
    {0x3, 3},
191
    {0x2, 3},
192
    {0x3, 4},
193
    {0x2, 4},
194
    {0x3, 5},
195
    {0x2, 5},
196
    {0x7, 7},
197
    {0x6, 7},
198
    {0xb, 8},
199
    {0xa, 8},
200
    {0x9, 8},
201
    {0x8, 8},
202
    {0x7, 8},
203
    {0x6, 8},
204
    {0x17, 10},
205
    {0x16, 10},
206
    {0x15, 10},
207
    {0x14, 10},
208
    {0x13, 10},
209
    {0x12, 10},
210
    {0x23, 11},
211
    {0x22, 11},
212
    {0x21, 11},
213
    {0x20, 11},
214
    {0x1f, 11},
215
    {0x1e, 11},
216
    {0x1d, 11},
217
    {0x1c, 11},
218
    {0x1b, 11},
219
    {0x1a, 11},
220
    {0x19, 11},
221
    {0x18, 11},
222
    {0x8, 11}, /* escape */
223
    {0xf, 11}, /* stuffing */
224
};
225

    
226
static const uint8_t mbPatTable[63][2] = {
227
    {0xb, 5},
228
    {0x9, 5},
229
    {0xd, 6},
230
    {0xd, 4},
231
    {0x17, 7},
232
    {0x13, 7},
233
    {0x1f, 8},
234
    {0xc, 4},
235
    {0x16, 7},
236
    {0x12, 7},
237
    {0x1e, 8},
238
    {0x13, 5},
239
    {0x1b, 8},
240
    {0x17, 8},
241
    {0x13, 8},
242
    {0xb, 4},
243
    {0x15, 7},
244
    {0x11, 7},
245
    {0x1d, 8},
246
    {0x11, 5},
247
    {0x19, 8},
248
    {0x15, 8},
249
    {0x11, 8},
250
    {0xf, 6},
251
    {0xf, 8},
252
    {0xd, 8},
253
    {0x3, 9},
254
    {0xf, 5},
255
    {0xb, 8},
256
    {0x7, 8},
257
    {0x7, 9},
258
    {0xa, 4},
259
    {0x14, 7},
260
    {0x10, 7},
261
    {0x1c, 8},
262
    {0xe, 6},
263
    {0xe, 8},
264
    {0xc, 8},
265
    {0x2, 9},
266
    {0x10, 5},
267
    {0x18, 8},
268
    {0x14, 8},
269
    {0x10, 8},
270
    {0xe, 5},
271
    {0xa, 8},
272
    {0x6, 8},
273
    {0x6, 9},
274
    {0x12, 5},
275
    {0x1a, 8},
276
    {0x16, 8},
277
    {0x12, 8},
278
    {0xd, 5},
279
    {0x9, 8},
280
    {0x5, 8},
281
    {0x5, 9},
282
    {0xc, 5},
283
    {0x8, 8},
284
    {0x4, 8},
285
    {0x4, 9},
286
    {0x7, 3},
287
    {0xa, 5},
288
    {0x8, 5},
289
    {0xc, 6}
290
};
291

    
292
#define MB_TYPE_PAT       0x40000000
293
#define MB_TYPE_ZERO_MV   0x20000000
294
#define IS_ZERO_MV(a)   ((a)&MB_TYPE_ZERO_MV)
295
#define IS_PAT(a)       ((a)&MB_TYPE_PAT)
296

    
297
static const uint8_t table_mb_ptype[7][2] = {
298
    { 3, 5 }, // 0x01 MB_INTRA
299
    { 1, 2 }, // 0x02 MB_PAT
300
    { 1, 3 }, // 0x08 MB_FOR
301
    { 1, 1 }, // 0x0A MB_FOR|MB_PAT
302
    { 1, 6 }, // 0x11 MB_QUANT|MB_INTRA
303
    { 1, 5 }, // 0x12 MB_QUANT|MB_PAT
304
    { 2, 5 }, // 0x1A MB_QUANT|MB_FOR|MB_PAT
305
};
306

    
307
static const uint32_t ptype2mb_type[7] = {
308
                    MB_TYPE_INTRA,
309
                    MB_TYPE_L0 | MB_TYPE_PAT | MB_TYPE_ZERO_MV | MB_TYPE_16x16,
310
                    MB_TYPE_L0,
311
                    MB_TYPE_L0 | MB_TYPE_PAT,
312
    MB_TYPE_QUANT | MB_TYPE_INTRA,
313
    MB_TYPE_QUANT | MB_TYPE_L0 | MB_TYPE_PAT | MB_TYPE_ZERO_MV | MB_TYPE_16x16,
314
    MB_TYPE_QUANT | MB_TYPE_L0 | MB_TYPE_PAT,
315
};
316

    
317
static const uint8_t table_mb_btype[11][2] = {
318
    { 3, 5 }, // 0x01 MB_INTRA
319
    { 2, 3 }, // 0x04 MB_BACK
320
    { 3, 3 }, // 0x06 MB_BACK|MB_PAT
321
    { 2, 4 }, // 0x08 MB_FOR
322
    { 3, 4 }, // 0x0A MB_FOR|MB_PAT
323
    { 2, 2 }, // 0x0C MB_FOR|MB_BACK
324
    { 3, 2 }, // 0x0E MB_FOR|MB_BACK|MB_PAT
325
    { 1, 6 }, // 0x11 MB_QUANT|MB_INTRA
326
    { 2, 6 }, // 0x16 MB_QUANT|MB_BACK|MB_PAT
327
    { 3, 6 }, // 0x1A MB_QUANT|MB_FOR|MB_PAT
328
    { 2, 5 }, // 0x1E MB_QUANT|MB_FOR|MB_BACK|MB_PAT
329
};
330

    
331
static const uint32_t btype2mb_type[11] = {
332
                    MB_TYPE_INTRA,
333
                    MB_TYPE_L1,
334
                    MB_TYPE_L1   | MB_TYPE_PAT,
335
                    MB_TYPE_L0,
336
                    MB_TYPE_L0   | MB_TYPE_PAT,
337
                    MB_TYPE_L0L1,
338
                    MB_TYPE_L0L1 | MB_TYPE_PAT,
339
    MB_TYPE_QUANT | MB_TYPE_INTRA,
340
    MB_TYPE_QUANT | MB_TYPE_L1   | MB_TYPE_PAT,
341
    MB_TYPE_QUANT | MB_TYPE_L0   | MB_TYPE_PAT,
342
    MB_TYPE_QUANT | MB_TYPE_L0L1 | MB_TYPE_PAT,
343
};
344

    
345
static const uint8_t mbMotionVectorTable[17][2] = {
346
{ 0x1, 1 },
347
{ 0x1, 2 },
348
{ 0x1, 3 },
349
{ 0x1, 4 },
350
{ 0x3, 6 },
351
{ 0x5, 7 },
352
{ 0x4, 7 },
353
{ 0x3, 7 },
354
{ 0xb, 9 },
355
{ 0xa, 9 },
356
{ 0x9, 9 },
357
{ 0x11, 10 },
358
{ 0x10, 10 },
359
{ 0xf, 10 },
360
{ 0xe, 10 },
361
{ 0xd, 10 },
362
{ 0xc, 10 },
363
};
364

    
365
#define MPEG1_FRAME_RATE_BASE 1001
366

    
367
static const int frame_rate_tab[16] = {
368
        0,        
369
    24000,
370
    24024,
371
    25025,
372
    30000,
373
    30030,
374
    50050,
375
    60000,
376
    60060,
377
  // Xing's 15fps: (9)
378
    15015,
379
  // libmpeg3's "Unofficial economy rates": (10-13)
380
     5005,
381
    10010,
382
    12012,
383
    15015,
384
  // random, just to avoid segfault !never encode these
385
    25025,
386
    25025,
387
};
388

    
389
static const uint8_t non_linear_qscale[32] = {
390
    0, 1, 2, 3, 4, 5, 6, 7,
391
    8,10,12,14,16,18,20,22,
392
    24,28,32,36,40,44,48,52,
393
    56,64,72,80,88,96,104,112,
394
};
395

    
396
uint8_t ff_mpeg1_dc_scale_table[128]={ // MN: mpeg2 really can have such large qscales?
397
//  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
398
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
399
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
400
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
401
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
402
};
403

    
404
static const float mpeg1_aspect[16]={
405
    0.0000,
406
    1.0000,
407
    0.6735,
408
    0.7031,
409
    
410
    0.7615,
411
    0.8055,
412
    0.8437,
413
    0.8935,
414

    
415
    0.9157,
416
    0.9815,
417
    1.0255,
418
    1.0695,
419

    
420
    1.0950,
421
    1.1575,
422
    1.2015,
423
};
424

    
425
static const float mpeg2_aspect[16]={
426
    0,
427
    1.0,
428
    -3.0/4.0,
429
    -9.0/16.0,
430
    -1.0/2.21,
431
};
432