Statistics
| Branch: | Revision:

ffmpeg / libavcodec / mpeg12data.h @ 46b4feec

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_INTRA 0x01
293
#define MB_PAT   0x02
294
#define MB_BACK  0x04
295
#define MB_FOR   0x08
296
#define MB_QUANT 0x10  
297

    
298
static const uint8_t table_mb_ptype[32][2] = {
299
    { 0, 0 }, // 0x00
300
    { 3, 5 }, // 0x01 MB_INTRA
301
    { 1, 2 }, // 0x02 MB_PAT
302
    { 0, 0 }, // 0x03
303
    { 0, 0 }, // 0x04
304
    { 0, 0 }, // 0x05
305
    { 0, 0 }, // 0x06
306
    { 0, 0 }, // 0x07
307
    { 1, 3 }, // 0x08 MB_FOR
308
    { 0, 0 }, // 0x09
309
    { 1, 1 }, // 0x0A MB_FOR|MB_PAT
310
    { 0, 0 }, // 0x0B
311
    { 0, 0 }, // 0x0C
312
    { 0, 0 }, // 0x0D
313
    { 0, 0 }, // 0x0E
314
    { 0, 0 }, // 0x0F
315
    { 0, 0 }, // 0x10
316
    { 1, 6 }, // 0x11 MB_QUANT|MB_INTRA
317
    { 1, 5 }, // 0x12 MB_QUANT|MB_PAT
318
    { 0, 0 }, // 0x13
319
    { 0, 0 }, // 0x14
320
    { 0, 0 }, // 0x15
321
    { 0, 0 }, // 0x16
322
    { 0, 0 }, // 0x17
323
    { 0, 0 }, // 0x18
324
    { 0, 0 }, // 0x19
325
    { 2, 5 }, // 0x1A MB_QUANT|MB_FOR|MB_PAT
326
    { 0, 0 }, // 0x1B
327
    { 0, 0 }, // 0x1C
328
    { 0, 0 }, // 0x1D
329
    { 0, 0 }, // 0x1E
330
    { 0, 0 }, // 0x1F
331
};
332

    
333
static const uint8_t table_mb_btype[32][2] = {
334
    { 0, 0 }, // 0x00
335
    { 3, 5 }, // 0x01 MB_INTRA
336
    { 0, 0 }, // 0x02
337
    { 0, 0 }, // 0x03
338
    { 2, 3 }, // 0x04 MB_BACK
339
    { 0, 0 }, // 0x05
340
    { 3, 3 }, // 0x06 MB_BACK|MB_PAT
341
    { 0, 0 }, // 0x07
342
    { 2, 4 }, // 0x08 MB_FOR
343
    { 0, 0 }, // 0x09
344
    { 3, 4 }, // 0x0A MB_FOR|MB_PAT
345
    { 0, 0 }, // 0x0B
346
    { 2, 2 }, // 0x0C MB_FOR|MB_BACK
347
    { 0, 0 }, // 0x0D
348
    { 3, 2 }, // 0x0E MB_FOR|MB_BACK|MB_PAT
349
    { 0, 0 }, // 0x0F
350
    { 0, 0 }, // 0x10
351
    { 1, 6 }, // 0x11 MB_QUANT|MB_INTRA
352
    { 0, 0 }, // 0x12
353
    { 0, 0 }, // 0x13
354
    { 0, 0 }, // 0x14
355
    { 0, 0 }, // 0x15
356
    { 2, 6 }, // 0x16 MB_QUANT|MB_BACK|MB_PAT
357
    { 0, 0 }, // 0x17
358
    { 0, 0 }, // 0x18
359
    { 0, 0 }, // 0x19
360
    { 3, 6 }, // 0x1A MB_QUANT|MB_FOR|MB_PAT
361
    { 0, 0 }, // 0x1B
362
    { 0, 0 }, // 0x1C
363
    { 0, 0 }, // 0x1D
364
    { 2, 5 }, // 0x1E MB_QUANT|MB_FOR|MB_BACK|MB_PAT
365
    { 0, 0 }, // 0x1F
366
};
367

    
368
static const uint8_t mbMotionVectorTable[17][2] = {
369
{ 0x1, 1 },
370
{ 0x1, 2 },
371
{ 0x1, 3 },
372
{ 0x1, 4 },
373
{ 0x3, 6 },
374
{ 0x5, 7 },
375
{ 0x4, 7 },
376
{ 0x3, 7 },
377
{ 0xb, 9 },
378
{ 0xa, 9 },
379
{ 0x9, 9 },
380
{ 0x11, 10 },
381
{ 0x10, 10 },
382
{ 0xf, 10 },
383
{ 0xe, 10 },
384
{ 0xd, 10 },
385
{ 0xc, 10 },
386
};
387

    
388
#define MPEG1_FRAME_RATE_BASE 1001
389

    
390
static const int frame_rate_tab[16] = {
391
        0,        
392
    24000,
393
    24024,
394
    25025,
395
    30000,
396
    30030,
397
    50050,
398
    60000,
399
    60060,
400
  // Xing's 15fps: (9)
401
    15015,
402
  // libmpeg3's "Unofficial economy rates": (10-13)
403
     5005,
404
    10010,
405
    12012,
406
    15015,
407
  // random, just to avoid segfault !never encode these
408
    25025,
409
    25025,
410
};
411

    
412
static const uint8_t non_linear_qscale[32] = {
413
    0, 1, 2, 3, 4, 5, 6, 7,
414
    8,10,12,14,16,18,20,22,
415
    24,28,32,36,40,44,48,52,
416
    56,64,72,80,88,96,104,112,
417
};
418

    
419
uint8_t ff_mpeg1_dc_scale_table[128]={ // MN: mpeg2 really can have such large qscales?
420
//  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
421
    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,
422
    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,
423
    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,
424
    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,
425
};
426

    
427
static const float mpeg1_aspect[16]={
428
    0.0000,
429
    1.0000,
430
    0.6735,
431
    0.7031,
432
    
433
    0.7615,
434
    0.8055,
435
    0.8437,
436
    0.8935,
437

    
438
    0.9157,
439
    0.9815,
440
    1.0255,
441
    1.0695,
442

    
443
    1.0950,
444
    1.1575,
445
    1.2015,
446
};
447

    
448
static const float mpeg2_aspect[16]={
449
    0,
450
    1.0,
451
    -3.0/4.0,
452
    -9.0/16.0,
453
    -1.0/2.21,
454
};
455