]> git.sesse.net Git - ffmpeg/blob - libavcodec/mpeg12dec.c
Merge remote-tracking branch 'qatar/master'
[ffmpeg] / libavcodec / mpeg12dec.c
1 /*
2  * MPEG-1/2 decoder
3  * Copyright (c) 2000, 2001 Fabrice Bellard
4  * Copyright (c) 2002-2013 Michael Niedermayer <michaelni@gmx.at>
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
25  * MPEG-1/2 decoder
26  */
27
28 #include "libavutil/attributes.h"
29 #include "libavutil/internal.h"
30 #include "libavutil/stereo3d.h"
31 #include "internal.h"
32 #include "avcodec.h"
33 #include "dsputil.h"
34 #include "mpegvideo.h"
35 #include "error_resilience.h"
36 #include "mpeg12.h"
37 #include "mpeg12data.h"
38 #include "bytestream.h"
39 #include "vdpau_internal.h"
40 #include "xvmc_internal.h"
41 #include "thread.h"
42 #include "version.h"
43
44 typedef struct Mpeg1Context {
45     MpegEncContext mpeg_enc_ctx;
46     int mpeg_enc_ctx_allocated; /* true if decoding context allocated */
47     int repeat_field; /* true if we must repeat the field */
48     AVPanScan pan_scan;              /**< some temporary storage for the panscan */
49     uint8_t *a53_caption;
50     int a53_caption_size;
51     int slice_count;
52     int save_aspect_info;
53     int save_width, save_height, save_progressive_seq;
54     AVRational frame_rate_ext;       ///< MPEG-2 specific framerate modificator
55     int sync;                        ///< Did we reach a sync point like a GOP/SEQ/KEYFrame?
56     int tmpgexs;
57     int first_slice;
58     int extradata_decoded;
59 } Mpeg1Context;
60
61 #define MB_TYPE_ZERO_MV   0x20000000
62
63 static const uint32_t ptype2mb_type[7] = {
64                     MB_TYPE_INTRA,
65                     MB_TYPE_L0 | MB_TYPE_CBP | MB_TYPE_ZERO_MV | MB_TYPE_16x16,
66                     MB_TYPE_L0,
67                     MB_TYPE_L0 | MB_TYPE_CBP,
68     MB_TYPE_QUANT | MB_TYPE_INTRA,
69     MB_TYPE_QUANT | MB_TYPE_L0 | MB_TYPE_CBP | MB_TYPE_ZERO_MV | MB_TYPE_16x16,
70     MB_TYPE_QUANT | MB_TYPE_L0 | MB_TYPE_CBP,
71 };
72
73 static const uint32_t btype2mb_type[11] = {
74                     MB_TYPE_INTRA,
75                     MB_TYPE_L1,
76                     MB_TYPE_L1   | MB_TYPE_CBP,
77                     MB_TYPE_L0,
78                     MB_TYPE_L0   | MB_TYPE_CBP,
79                     MB_TYPE_L0L1,
80                     MB_TYPE_L0L1 | MB_TYPE_CBP,
81     MB_TYPE_QUANT | MB_TYPE_INTRA,
82     MB_TYPE_QUANT | MB_TYPE_L1   | MB_TYPE_CBP,
83     MB_TYPE_QUANT | MB_TYPE_L0   | MB_TYPE_CBP,
84     MB_TYPE_QUANT | MB_TYPE_L0L1 | MB_TYPE_CBP,
85 };
86
87 static const uint8_t non_linear_qscale[32] = {
88     0, 1, 2, 3, 4, 5, 6, 7,
89     8,10,12,14,16,18,20,22,
90     24,28,32,36,40,44,48,52,
91     56,64,72,80,88,96,104,112,
92 };
93
94 /* as H.263, but only 17 codes */
95 static int mpeg_decode_motion(MpegEncContext *s, int fcode, int pred)
96 {
97     int code, sign, val, shift;
98
99     code = get_vlc2(&s->gb, ff_mv_vlc.table, MV_VLC_BITS, 2);
100     if (code == 0) {
101         return pred;
102     }
103     if (code < 0) {
104         return 0xffff;
105     }
106
107     sign  = get_bits1(&s->gb);
108     shift = fcode - 1;
109     val   = code;
110     if (shift) {
111         val  = (val - 1) << shift;
112         val |= get_bits(&s->gb, shift);
113         val++;
114     }
115     if (sign)
116         val = -val;
117     val += pred;
118
119     /* modulo decoding */
120     return sign_extend(val, 5 + shift);
121 }
122
123 static inline int mpeg1_decode_block_intra(MpegEncContext *s, int16_t *block, int n)
124 {
125     int level, dc, diff, i, j, run;
126     int component;
127     RLTable *rl = &ff_rl_mpeg1;
128     uint8_t * const scantable    = s->intra_scantable.permutated;
129     const uint16_t *quant_matrix = s->intra_matrix;
130     const int qscale             = s->qscale;
131
132     /* DC coefficient */
133     component = (n <= 3 ? 0 : n - 4 + 1);
134     diff = decode_dc(&s->gb, component);
135     if (diff >= 0xffff)
136         return -1;
137     dc  = s->last_dc[component];
138     dc += diff;
139     s->last_dc[component] = dc;
140     block[0] = dc * quant_matrix[0];
141     av_dlog(s->avctx, "dc=%d diff=%d\n", dc, diff);
142     i = 0;
143     {
144         OPEN_READER(re, &s->gb);
145         /* now quantify & encode AC coefficients */
146         for (;;) {
147             UPDATE_CACHE(re, &s->gb);
148             GET_RL_VLC(level, run, re, &s->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2, 0);
149
150             if (level == 127) {
151                 break;
152             } else if (level != 0) {
153                 i += run;
154                 j = scantable[i];
155                 level = (level * qscale * quant_matrix[j]) >> 4;
156                 level = (level - 1) | 1;
157                 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
158                 LAST_SKIP_BITS(re, &s->gb, 1);
159             } else {
160                 /* escape */
161                 run = SHOW_UBITS(re, &s->gb, 6) + 1; LAST_SKIP_BITS(re, &s->gb, 6);
162                 UPDATE_CACHE(re, &s->gb);
163                 level = SHOW_SBITS(re, &s->gb, 8); SKIP_BITS(re, &s->gb, 8);
164                 if (level == -128) {
165                     level = SHOW_UBITS(re, &s->gb, 8) - 256; LAST_SKIP_BITS(re, &s->gb, 8);
166                 } else if (level == 0) {
167                     level = SHOW_UBITS(re, &s->gb, 8)      ; LAST_SKIP_BITS(re, &s->gb, 8);
168                 }
169                 i += run;
170                 j = scantable[i];
171                 if (level < 0) {
172                     level = -level;
173                     level = (level * qscale * quant_matrix[j]) >> 4;
174                     level = (level - 1) | 1;
175                     level = -level;
176                 } else {
177                     level = (level * qscale * quant_matrix[j]) >> 4;
178                     level = (level - 1) | 1;
179                 }
180             }
181             if (i > 63) {
182                 av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
183                 return -1;
184             }
185
186             block[j] = level;
187         }
188         CLOSE_READER(re, &s->gb);
189     }
190     s->block_last_index[n] = i;
191    return 0;
192 }
193
194 int ff_mpeg1_decode_block_intra(MpegEncContext *s, int16_t *block, int n)
195 {
196     return mpeg1_decode_block_intra(s, block, n);
197 }
198
199 static inline int mpeg1_decode_block_inter(MpegEncContext *s, int16_t *block, int n)
200 {
201     int level, i, j, run;
202     RLTable *rl = &ff_rl_mpeg1;
203     uint8_t * const scantable    = s->intra_scantable.permutated;
204     const uint16_t *quant_matrix = s->inter_matrix;
205     const int qscale             = s->qscale;
206
207     {
208         OPEN_READER(re, &s->gb);
209         i = -1;
210         // special case for first coefficient, no need to add second VLC table
211         UPDATE_CACHE(re, &s->gb);
212         if (((int32_t)GET_CACHE(re, &s->gb)) < 0) {
213             level = (3 * qscale * quant_matrix[0]) >> 5;
214             level = (level - 1) | 1;
215             if (GET_CACHE(re, &s->gb) & 0x40000000)
216                 level = -level;
217             block[0] = level;
218             i++;
219             SKIP_BITS(re, &s->gb, 2);
220             if (((int32_t)GET_CACHE(re, &s->gb)) <= (int32_t)0xBFFFFFFF)
221                 goto end;
222         }
223         /* now quantify & encode AC coefficients */
224         for (;;) {
225             GET_RL_VLC(level, run, re, &s->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2, 0);
226
227             if (level != 0) {
228                 i += run;
229                 j = scantable[i];
230                 level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
231                 level = (level - 1) | 1;
232                 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
233                 SKIP_BITS(re, &s->gb, 1);
234             } else {
235                 /* escape */
236                 run = SHOW_UBITS(re, &s->gb, 6) + 1; LAST_SKIP_BITS(re, &s->gb, 6);
237                 UPDATE_CACHE(re, &s->gb);
238                 level = SHOW_SBITS(re, &s->gb, 8); SKIP_BITS(re, &s->gb, 8);
239                 if (level == -128) {
240                     level = SHOW_UBITS(re, &s->gb, 8) - 256; SKIP_BITS(re, &s->gb, 8);
241                 } else if (level == 0) {
242                     level = SHOW_UBITS(re, &s->gb, 8)      ; SKIP_BITS(re, &s->gb, 8);
243                 }
244                 i += run;
245                 j = scantable[i];
246                 if (level < 0) {
247                     level = -level;
248                     level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
249                     level = (level - 1) | 1;
250                     level = -level;
251                 } else {
252                     level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
253                     level = (level - 1) | 1;
254                 }
255             }
256             if (i > 63) {
257                 av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
258                 return -1;
259             }
260
261             block[j] = level;
262             if (((int32_t)GET_CACHE(re, &s->gb)) <= (int32_t)0xBFFFFFFF)
263                 break;
264             UPDATE_CACHE(re, &s->gb);
265         }
266 end:
267         LAST_SKIP_BITS(re, &s->gb, 2);
268         CLOSE_READER(re, &s->gb);
269     }
270     s->block_last_index[n] = i;
271     return 0;
272 }
273
274 /**
275  * Note: this function can read out of range and crash for corrupt streams.
276  * Changing this would eat up any speed benefits it has.
277  * Do not use "fast" flag if you need the code to be robust.
278  */
279 static inline int mpeg1_fast_decode_block_inter(MpegEncContext *s, int16_t *block, int n)
280 {
281     int level, i, j, run;
282     RLTable *rl = &ff_rl_mpeg1;
283     uint8_t * const scantable = s->intra_scantable.permutated;
284     const int qscale          = s->qscale;
285
286     {
287         OPEN_READER(re, &s->gb);
288         i = -1;
289         // special case for first coefficient, no need to add second VLC table
290         UPDATE_CACHE(re, &s->gb);
291         if (((int32_t)GET_CACHE(re, &s->gb)) < 0) {
292             level = (3 * qscale) >> 1;
293             level = (level - 1) | 1;
294             if (GET_CACHE(re, &s->gb) & 0x40000000)
295                 level = -level;
296             block[0] = level;
297             i++;
298             SKIP_BITS(re, &s->gb, 2);
299             if (((int32_t)GET_CACHE(re, &s->gb)) <= (int32_t)0xBFFFFFFF)
300                 goto end;
301         }
302
303         /* now quantify & encode AC coefficients */
304         for (;;) {
305             GET_RL_VLC(level, run, re, &s->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2, 0);
306
307             if (level != 0) {
308                 i += run;
309                 j = scantable[i];
310                 level = ((level * 2 + 1) * qscale) >> 1;
311                 level = (level - 1) | 1;
312                 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
313                 SKIP_BITS(re, &s->gb, 1);
314             } else {
315                 /* escape */
316                 run = SHOW_UBITS(re, &s->gb, 6)+1; LAST_SKIP_BITS(re, &s->gb, 6);
317                 UPDATE_CACHE(re, &s->gb);
318                 level = SHOW_SBITS(re, &s->gb, 8); SKIP_BITS(re, &s->gb, 8);
319                 if (level == -128) {
320                     level = SHOW_UBITS(re, &s->gb, 8) - 256; SKIP_BITS(re, &s->gb, 8);
321                 } else if (level == 0) {
322                     level = SHOW_UBITS(re, &s->gb, 8)      ; SKIP_BITS(re, &s->gb, 8);
323                 }
324                 i += run;
325                 j = scantable[i];
326                 if (level < 0) {
327                     level = -level;
328                     level = ((level * 2 + 1) * qscale) >> 1;
329                     level = (level - 1) | 1;
330                     level = -level;
331                 } else {
332                     level = ((level * 2 + 1) * qscale) >> 1;
333                     level = (level - 1) | 1;
334                 }
335             }
336
337             block[j] = level;
338             if (((int32_t)GET_CACHE(re, &s->gb)) <= (int32_t)0xBFFFFFFF)
339                 break;
340             UPDATE_CACHE(re, &s->gb);
341         }
342 end:
343         LAST_SKIP_BITS(re, &s->gb, 2);
344         CLOSE_READER(re, &s->gb);
345     }
346     s->block_last_index[n] = i;
347     return 0;
348 }
349
350
351 static inline int mpeg2_decode_block_non_intra(MpegEncContext *s, int16_t *block, int n)
352 {
353     int level, i, j, run;
354     RLTable *rl = &ff_rl_mpeg1;
355     uint8_t * const scantable = s->intra_scantable.permutated;
356     const uint16_t *quant_matrix;
357     const int qscale = s->qscale;
358     int mismatch;
359
360     mismatch = 1;
361
362     {
363         OPEN_READER(re, &s->gb);
364         i = -1;
365         if (n < 4)
366             quant_matrix = s->inter_matrix;
367         else
368             quant_matrix = s->chroma_inter_matrix;
369
370         // special case for first coefficient, no need to add second VLC table
371         UPDATE_CACHE(re, &s->gb);
372         if (((int32_t)GET_CACHE(re, &s->gb)) < 0) {
373             level= (3 * qscale * quant_matrix[0]) >> 5;
374             if (GET_CACHE(re, &s->gb) & 0x40000000)
375                 level = -level;
376             block[0]  = level;
377             mismatch ^= level;
378             i++;
379             SKIP_BITS(re, &s->gb, 2);
380             if (((int32_t)GET_CACHE(re, &s->gb)) <= (int32_t)0xBFFFFFFF)
381                 goto end;
382         }
383
384         /* now quantify & encode AC coefficients */
385         for (;;) {
386             GET_RL_VLC(level, run, re, &s->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2, 0);
387
388             if (level != 0) {
389                 i += run;
390                 j = scantable[i];
391                 level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
392                 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
393                 SKIP_BITS(re, &s->gb, 1);
394             } else {
395                 /* escape */
396                 run = SHOW_UBITS(re, &s->gb, 6) + 1; LAST_SKIP_BITS(re, &s->gb, 6);
397                 UPDATE_CACHE(re, &s->gb);
398                 level = SHOW_SBITS(re, &s->gb, 12); SKIP_BITS(re, &s->gb, 12);
399
400                 i += run;
401                 j = scantable[i];
402                 if (level < 0) {
403                     level = ((-level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
404                     level = -level;
405                 } else {
406                     level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
407                 }
408             }
409             if (i > 63) {
410                 av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
411                 return -1;
412             }
413
414             mismatch ^= level;
415             block[j]  = level;
416             if (((int32_t)GET_CACHE(re, &s->gb)) <= (int32_t)0xBFFFFFFF)
417                 break;
418             UPDATE_CACHE(re, &s->gb);
419         }
420 end:
421         LAST_SKIP_BITS(re, &s->gb, 2);
422         CLOSE_READER(re, &s->gb);
423     }
424     block[63] ^= (mismatch & 1);
425
426     s->block_last_index[n] = i;
427     return 0;
428 }
429
430 /**
431  * Note: this function can read out of range and crash for corrupt streams.
432  * Changing this would eat up any speed benefits it has.
433  * Do not use "fast" flag if you need the code to be robust.
434  */
435 static inline int mpeg2_fast_decode_block_non_intra(MpegEncContext *s,
436                                                     int16_t *block, int n)
437 {
438     int level, i, j, run;
439     RLTable *rl = &ff_rl_mpeg1;
440     uint8_t * const scantable = s->intra_scantable.permutated;
441     const int qscale          = s->qscale;
442     OPEN_READER(re, &s->gb);
443     i = -1;
444
445     // special case for first coefficient, no need to add second VLC table
446     UPDATE_CACHE(re, &s->gb);
447     if (((int32_t)GET_CACHE(re, &s->gb)) < 0) {
448         level = (3 * qscale) >> 1;
449         if (GET_CACHE(re, &s->gb) & 0x40000000)
450             level = -level;
451         block[0] = level;
452         i++;
453         SKIP_BITS(re, &s->gb, 2);
454         if (((int32_t)GET_CACHE(re, &s->gb)) <= (int32_t)0xBFFFFFFF)
455             goto end;
456     }
457
458     /* now quantify & encode AC coefficients */
459     for (;;) {
460         GET_RL_VLC(level, run, re, &s->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2, 0);
461
462         if (level != 0) {
463             i += run;
464             j  = scantable[i];
465             level = ((level * 2 + 1) * qscale) >> 1;
466             level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
467             SKIP_BITS(re, &s->gb, 1);
468         } else {
469             /* escape */
470             run = SHOW_UBITS(re, &s->gb, 6) + 1; LAST_SKIP_BITS(re, &s->gb, 6);
471             UPDATE_CACHE(re, &s->gb);
472             level = SHOW_SBITS(re, &s->gb, 12); SKIP_BITS(re, &s->gb, 12);
473
474             i += run;
475             j  = scantable[i];
476             if (level < 0) {
477                 level = ((-level * 2 + 1) * qscale) >> 1;
478                 level = -level;
479             } else {
480                 level = ((level * 2 + 1) * qscale) >> 1;
481             }
482         }
483
484         block[j] = level;
485         if (((int32_t)GET_CACHE(re, &s->gb)) <= (int32_t)0xBFFFFFFF)
486             break;
487         UPDATE_CACHE(re, &s->gb);
488     }
489 end:
490     LAST_SKIP_BITS(re, &s->gb, 2);
491     CLOSE_READER(re, &s->gb);
492     s->block_last_index[n] = i;
493     return 0;
494 }
495
496
497 static inline int mpeg2_decode_block_intra(MpegEncContext *s, int16_t *block, int n)
498 {
499     int level, dc, diff, i, j, run;
500     int component;
501     RLTable *rl;
502     uint8_t * const scantable = s->intra_scantable.permutated;
503     const uint16_t *quant_matrix;
504     const int qscale = s->qscale;
505     int mismatch;
506
507     /* DC coefficient */
508     if (n < 4) {
509         quant_matrix = s->intra_matrix;
510         component = 0;
511     } else {
512         quant_matrix = s->chroma_intra_matrix;
513         component = (n & 1) + 1;
514     }
515     diff = decode_dc(&s->gb, component);
516     if (diff >= 0xffff)
517         return -1;
518     dc  = s->last_dc[component];
519     dc += diff;
520     s->last_dc[component] = dc;
521     block[0] = dc << (3 - s->intra_dc_precision);
522     av_dlog(s->avctx, "dc=%d\n", block[0]);
523     mismatch = block[0] ^ 1;
524     i = 0;
525     if (s->intra_vlc_format)
526         rl = &ff_rl_mpeg2;
527     else
528         rl = &ff_rl_mpeg1;
529
530     {
531         OPEN_READER(re, &s->gb);
532         /* now quantify & encode AC coefficients */
533         for (;;) {
534             UPDATE_CACHE(re, &s->gb);
535             GET_RL_VLC(level, run, re, &s->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2, 0);
536
537             if (level == 127) {
538                 break;
539             } else if (level != 0) {
540                 i += run;
541                 j  = scantable[i];
542                 level = (level * qscale * quant_matrix[j]) >> 4;
543                 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
544                 LAST_SKIP_BITS(re, &s->gb, 1);
545             } else {
546                 /* escape */
547                 run = SHOW_UBITS(re, &s->gb, 6) + 1; LAST_SKIP_BITS(re, &s->gb, 6);
548                 UPDATE_CACHE(re, &s->gb);
549                 level = SHOW_SBITS(re, &s->gb, 12); SKIP_BITS(re, &s->gb, 12);
550                 i += run;
551                 j  = scantable[i];
552                 if (level < 0) {
553                     level = (-level * qscale * quant_matrix[j]) >> 4;
554                     level = -level;
555                 } else {
556                     level = (level * qscale * quant_matrix[j]) >> 4;
557                 }
558             }
559             if (i > 63) {
560                 av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
561                 return -1;
562             }
563
564             mismatch ^= level;
565             block[j]  = level;
566         }
567         CLOSE_READER(re, &s->gb);
568     }
569     block[63] ^= mismatch & 1;
570
571     s->block_last_index[n] = i;
572     return 0;
573 }
574
575 /**
576  * Note: this function can read out of range and crash for corrupt streams.
577  * Changing this would eat up any speed benefits it has.
578  * Do not use "fast" flag if you need the code to be robust.
579  */
580 static inline int mpeg2_fast_decode_block_intra(MpegEncContext *s, int16_t *block, int n)
581 {
582     int level, dc, diff, j, run;
583     int component;
584     RLTable *rl;
585     uint8_t * scantable = s->intra_scantable.permutated;
586     const uint16_t *quant_matrix;
587     const int qscale = s->qscale;
588
589     /* DC coefficient */
590     if (n < 4) {
591         quant_matrix = s->intra_matrix;
592         component = 0;
593     } else {
594         quant_matrix = s->chroma_intra_matrix;
595         component = (n & 1) + 1;
596     }
597     diff = decode_dc(&s->gb, component);
598     if (diff >= 0xffff)
599         return -1;
600     dc = s->last_dc[component];
601     dc += diff;
602     s->last_dc[component] = dc;
603     block[0] = dc << (3 - s->intra_dc_precision);
604     if (s->intra_vlc_format)
605         rl = &ff_rl_mpeg2;
606     else
607         rl = &ff_rl_mpeg1;
608
609     {
610         OPEN_READER(re, &s->gb);
611         /* now quantify & encode AC coefficients */
612         for (;;) {
613             UPDATE_CACHE(re, &s->gb);
614             GET_RL_VLC(level, run, re, &s->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2, 0);
615
616             if (level == 127) {
617                 break;
618             } else if (level != 0) {
619                 scantable += run;
620                 j = *scantable;
621                 level = (level * qscale * quant_matrix[j]) >> 4;
622                 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
623                 LAST_SKIP_BITS(re, &s->gb, 1);
624             } else {
625                 /* escape */
626                 run = SHOW_UBITS(re, &s->gb, 6) + 1; LAST_SKIP_BITS(re, &s->gb, 6);
627                 UPDATE_CACHE(re, &s->gb);
628                 level = SHOW_SBITS(re, &s->gb, 12); SKIP_BITS(re, &s->gb, 12);
629                 scantable += run;
630                 j = *scantable;
631                 if (level < 0) {
632                     level = (-level * qscale * quant_matrix[j]) >> 4;
633                     level = -level;
634                 } else {
635                     level = (level * qscale * quant_matrix[j]) >> 4;
636                 }
637             }
638
639             block[j] = level;
640         }
641         CLOSE_READER(re, &s->gb);
642     }
643
644     s->block_last_index[n] = scantable - s->intra_scantable.permutated;
645     return 0;
646 }
647
648 /******************************************/
649 /* decoding */
650
651 static inline int get_dmv(MpegEncContext *s)
652 {
653     if (get_bits1(&s->gb))
654         return 1 - (get_bits1(&s->gb) << 1);
655     else
656         return 0;
657 }
658
659 static inline int get_qscale(MpegEncContext *s)
660 {
661     int qscale = get_bits(&s->gb, 5);
662     if (s->q_scale_type) {
663         return non_linear_qscale[qscale];
664     } else {
665         return qscale << 1;
666     }
667 }
668
669 static void exchange_uv(MpegEncContext *s)
670 {
671     int16_t (*tmp)[64];
672
673     tmp           = s->pblocks[4];
674     s->pblocks[4] = s->pblocks[5];
675     s->pblocks[5] = tmp;
676 }
677
678 /* motion type (for MPEG-2) */
679 #define MT_FIELD 1
680 #define MT_FRAME 2
681 #define MT_16X8  2
682 #define MT_DMV   3
683
684 static int mpeg_decode_mb(MpegEncContext *s, int16_t block[12][64])
685 {
686     int i, j, k, cbp, val, mb_type, motion_type;
687     const int mb_block_count = 4 + (1 << s->chroma_format);
688
689     av_dlog(s->avctx, "decode_mb: x=%d y=%d\n", s->mb_x, s->mb_y);
690
691     av_assert2(s->mb_skipped == 0);
692
693     if (s->mb_skip_run-- != 0) {
694         if (s->pict_type == AV_PICTURE_TYPE_P) {
695             s->mb_skipped = 1;
696             s->current_picture.mb_type[s->mb_x + s->mb_y * s->mb_stride] = MB_TYPE_SKIP | MB_TYPE_L0 | MB_TYPE_16x16;
697         } else {
698             int mb_type;
699
700             if (s->mb_x)
701                 mb_type = s->current_picture.mb_type[s->mb_x + s->mb_y * s->mb_stride - 1];
702             else
703                 mb_type = s->current_picture.mb_type[s->mb_width + (s->mb_y - 1) * s->mb_stride - 1]; // FIXME not sure if this is allowed in MPEG at all
704             if (IS_INTRA(mb_type)) {
705                 av_log(s->avctx, AV_LOG_ERROR, "skip with previntra\n");
706                 return -1;
707             }
708             s->current_picture.mb_type[s->mb_x + s->mb_y*s->mb_stride] =
709                 mb_type | MB_TYPE_SKIP;
710
711             if ((s->mv[0][0][0] | s->mv[0][0][1] | s->mv[1][0][0] | s->mv[1][0][1]) == 0)
712                 s->mb_skipped = 1;
713         }
714
715         return 0;
716     }
717
718     switch (s->pict_type) {
719     default:
720     case AV_PICTURE_TYPE_I:
721         if (get_bits1(&s->gb) == 0) {
722             if (get_bits1(&s->gb) == 0) {
723                 av_log(s->avctx, AV_LOG_ERROR, "invalid mb type in I Frame at %d %d\n", s->mb_x, s->mb_y);
724                 return -1;
725             }
726             mb_type = MB_TYPE_QUANT | MB_TYPE_INTRA;
727         } else {
728             mb_type = MB_TYPE_INTRA;
729         }
730         break;
731     case AV_PICTURE_TYPE_P:
732         mb_type = get_vlc2(&s->gb, ff_mb_ptype_vlc.table, MB_PTYPE_VLC_BITS, 1);
733         if (mb_type < 0) {
734             av_log(s->avctx, AV_LOG_ERROR, "invalid mb type in P Frame at %d %d\n", s->mb_x, s->mb_y);
735             return -1;
736         }
737         mb_type = ptype2mb_type[mb_type];
738         break;
739     case AV_PICTURE_TYPE_B:
740         mb_type = get_vlc2(&s->gb, ff_mb_btype_vlc.table, MB_BTYPE_VLC_BITS, 1);
741         if (mb_type < 0) {
742             av_log(s->avctx, AV_LOG_ERROR, "invalid mb type in B Frame at %d %d\n", s->mb_x, s->mb_y);
743             return -1;
744         }
745         mb_type = btype2mb_type[mb_type];
746         break;
747     }
748     av_dlog(s->avctx, "mb_type=%x\n", mb_type);
749 //    motion_type = 0; /* avoid warning */
750     if (IS_INTRA(mb_type)) {
751         s->dsp.clear_blocks(s->block[0]);
752
753         if (!s->chroma_y_shift) {
754             s->dsp.clear_blocks(s->block[6]);
755         }
756
757         /* compute DCT type */
758         if (s->picture_structure == PICT_FRAME && // FIXME add an interlaced_dct coded var?
759             !s->frame_pred_frame_dct) {
760             s->interlaced_dct = get_bits1(&s->gb);
761         }
762
763         if (IS_QUANT(mb_type))
764             s->qscale = get_qscale(s);
765
766         if (s->concealment_motion_vectors) {
767             /* just parse them */
768             if (s->picture_structure != PICT_FRAME)
769                 skip_bits1(&s->gb); /* field select */
770
771             s->mv[0][0][0]= s->last_mv[0][0][0]= s->last_mv[0][1][0] =
772                 mpeg_decode_motion(s, s->mpeg_f_code[0][0], s->last_mv[0][0][0]);
773             s->mv[0][0][1]= s->last_mv[0][0][1]= s->last_mv[0][1][1] =
774                 mpeg_decode_motion(s, s->mpeg_f_code[0][1], s->last_mv[0][0][1]);
775
776             skip_bits1(&s->gb); /* marker */
777         } else
778             memset(s->last_mv, 0, sizeof(s->last_mv)); /* reset mv prediction */
779         s->mb_intra = 1;
780 #if FF_API_XVMC
781 FF_DISABLE_DEPRECATION_WARNINGS
782         // if 1, we memcpy blocks in xvmcvideo
783         if (CONFIG_MPEG_XVMC_DECODER && s->avctx->xvmc_acceleration > 1) {
784             ff_xvmc_pack_pblocks(s, -1); // inter are always full blocks
785             if (s->swap_uv) {
786                 exchange_uv(s);
787             }
788         }
789 FF_ENABLE_DEPRECATION_WARNINGS
790 #endif /* FF_API_XVMC */
791
792         if (s->codec_id == AV_CODEC_ID_MPEG2VIDEO) {
793             if (s->flags2 & CODEC_FLAG2_FAST) {
794                 for (i = 0; i < 6; i++) {
795                     mpeg2_fast_decode_block_intra(s, *s->pblocks[i], i);
796                 }
797             } else {
798                 for (i = 0; i < mb_block_count; i++) {
799                     if (mpeg2_decode_block_intra(s, *s->pblocks[i], i) < 0)
800                         return -1;
801                 }
802             }
803         } else {
804             for (i = 0; i < 6; i++) {
805                 if (mpeg1_decode_block_intra(s, *s->pblocks[i], i) < 0)
806                     return -1;
807             }
808         }
809     } else {
810         if (mb_type & MB_TYPE_ZERO_MV) {
811             av_assert2(mb_type & MB_TYPE_CBP);
812
813             s->mv_dir = MV_DIR_FORWARD;
814             if (s->picture_structure == PICT_FRAME) {
815                 if (s->picture_structure == PICT_FRAME
816                     && !s->frame_pred_frame_dct)
817                     s->interlaced_dct = get_bits1(&s->gb);
818                 s->mv_type = MV_TYPE_16X16;
819             } else {
820                 s->mv_type = MV_TYPE_FIELD;
821                 mb_type |= MB_TYPE_INTERLACED;
822                 s->field_select[0][0] = s->picture_structure - 1;
823             }
824
825             if (IS_QUANT(mb_type))
826                 s->qscale = get_qscale(s);
827
828             s->last_mv[0][0][0] = 0;
829             s->last_mv[0][0][1] = 0;
830             s->last_mv[0][1][0] = 0;
831             s->last_mv[0][1][1] = 0;
832             s->mv[0][0][0] = 0;
833             s->mv[0][0][1] = 0;
834         } else {
835             av_assert2(mb_type & MB_TYPE_L0L1);
836             // FIXME decide if MBs in field pictures are MB_TYPE_INTERLACED
837             /* get additional motion vector type */
838             if (s->picture_structure == PICT_FRAME && s->frame_pred_frame_dct)
839                 motion_type = MT_FRAME;
840             else {
841                 motion_type = get_bits(&s->gb, 2);
842                 if (s->picture_structure == PICT_FRAME && HAS_CBP(mb_type))
843                     s->interlaced_dct = get_bits1(&s->gb);
844             }
845
846             if (IS_QUANT(mb_type))
847                 s->qscale = get_qscale(s);
848
849             /* motion vectors */
850             s->mv_dir = (mb_type >> 13) & 3;
851             av_dlog(s->avctx, "motion_type=%d\n", motion_type);
852             switch (motion_type) {
853             case MT_FRAME: /* or MT_16X8 */
854                 if (s->picture_structure == PICT_FRAME) {
855                     mb_type |= MB_TYPE_16x16;
856                     s->mv_type = MV_TYPE_16X16;
857                     for (i = 0; i < 2; i++) {
858                         if (USES_LIST(mb_type, i)) {
859                             /* MT_FRAME */
860                             s->mv[i][0][0]= s->last_mv[i][0][0]= s->last_mv[i][1][0] =
861                                 mpeg_decode_motion(s, s->mpeg_f_code[i][0], s->last_mv[i][0][0]);
862                             s->mv[i][0][1]= s->last_mv[i][0][1]= s->last_mv[i][1][1] =
863                                 mpeg_decode_motion(s, s->mpeg_f_code[i][1], s->last_mv[i][0][1]);
864                             /* full_pel: only for MPEG-1 */
865                             if (s->full_pel[i]) {
866                                 s->mv[i][0][0] <<= 1;
867                                 s->mv[i][0][1] <<= 1;
868                             }
869                         }
870                     }
871                 } else {
872                     mb_type |= MB_TYPE_16x8 | MB_TYPE_INTERLACED;
873                     s->mv_type = MV_TYPE_16X8;
874                     for (i = 0; i < 2; i++) {
875                         if (USES_LIST(mb_type, i)) {
876                             /* MT_16X8 */
877                             for (j = 0; j < 2; j++) {
878                                 s->field_select[i][j] = get_bits1(&s->gb);
879                                 for (k = 0; k < 2; k++) {
880                                     val = mpeg_decode_motion(s, s->mpeg_f_code[i][k],
881                                                              s->last_mv[i][j][k]);
882                                     s->last_mv[i][j][k] = val;
883                                     s->mv[i][j][k]      = val;
884                                 }
885                             }
886                         }
887                     }
888                 }
889                 break;
890             case MT_FIELD:
891                 s->mv_type = MV_TYPE_FIELD;
892                 if (s->picture_structure == PICT_FRAME) {
893                     mb_type |= MB_TYPE_16x8 | MB_TYPE_INTERLACED;
894                     for (i = 0; i < 2; i++) {
895                         if (USES_LIST(mb_type, i)) {
896                             for (j = 0; j < 2; j++) {
897                                 s->field_select[i][j] = get_bits1(&s->gb);
898                                 val = mpeg_decode_motion(s, s->mpeg_f_code[i][0],
899                                                          s->last_mv[i][j][0]);
900                                 s->last_mv[i][j][0] = val;
901                                 s->mv[i][j][0]      = val;
902                                 av_dlog(s->avctx, "fmx=%d\n", val);
903                                 val = mpeg_decode_motion(s, s->mpeg_f_code[i][1],
904                                                          s->last_mv[i][j][1] >> 1);
905                                 s->last_mv[i][j][1] = val << 1;
906                                 s->mv[i][j][1]      = val;
907                                 av_dlog(s->avctx, "fmy=%d\n", val);
908                             }
909                         }
910                     }
911                 } else {
912                     av_assert0(!s->progressive_sequence);
913                     mb_type |= MB_TYPE_16x16 | MB_TYPE_INTERLACED;
914                     for (i = 0; i < 2; i++) {
915                         if (USES_LIST(mb_type, i)) {
916                             s->field_select[i][0] = get_bits1(&s->gb);
917                             for (k = 0; k < 2; k++) {
918                                 val = mpeg_decode_motion(s, s->mpeg_f_code[i][k],
919                                                          s->last_mv[i][0][k]);
920                                 s->last_mv[i][0][k] = val;
921                                 s->last_mv[i][1][k] = val;
922                                 s->mv[i][0][k]      = val;
923                             }
924                         }
925                     }
926                 }
927                 break;
928             case MT_DMV:
929                 if(s->progressive_sequence){
930                     av_log(s->avctx, AV_LOG_ERROR, "MT_DMV in progressive_sequence\n");
931                     return -1;
932                 }
933                 s->mv_type = MV_TYPE_DMV;
934                 for (i = 0; i < 2; i++) {
935                     if (USES_LIST(mb_type, i)) {
936                         int dmx, dmy, mx, my, m;
937                         const int my_shift = s->picture_structure == PICT_FRAME;
938
939                         mx = mpeg_decode_motion(s, s->mpeg_f_code[i][0],
940                                                 s->last_mv[i][0][0]);
941                         s->last_mv[i][0][0] = mx;
942                         s->last_mv[i][1][0] = mx;
943                         dmx = get_dmv(s);
944                         my  = mpeg_decode_motion(s, s->mpeg_f_code[i][1],
945                                                  s->last_mv[i][0][1] >> my_shift);
946                         dmy = get_dmv(s);
947
948
949                         s->last_mv[i][0][1] = my << my_shift;
950                         s->last_mv[i][1][1] = my << my_shift;
951
952                         s->mv[i][0][0] = mx;
953                         s->mv[i][0][1] = my;
954                         s->mv[i][1][0] = mx; // not used
955                         s->mv[i][1][1] = my; // not used
956
957                         if (s->picture_structure == PICT_FRAME) {
958                             mb_type |= MB_TYPE_16x16 | MB_TYPE_INTERLACED;
959
960                             // m = 1 + 2 * s->top_field_first;
961                             m = s->top_field_first ? 1 : 3;
962
963                             /* top -> top pred */
964                             s->mv[i][2][0] = ((mx * m + (mx > 0)) >> 1) + dmx;
965                             s->mv[i][2][1] = ((my * m + (my > 0)) >> 1) + dmy - 1;
966                             m = 4 - m;
967                             s->mv[i][3][0] = ((mx * m + (mx > 0)) >> 1) + dmx;
968                             s->mv[i][3][1] = ((my * m + (my > 0)) >> 1) + dmy + 1;
969                         } else {
970                             mb_type |= MB_TYPE_16x16;
971
972                             s->mv[i][2][0] = ((mx + (mx > 0)) >> 1) + dmx;
973                             s->mv[i][2][1] = ((my + (my > 0)) >> 1) + dmy;
974                             if (s->picture_structure == PICT_TOP_FIELD)
975                                 s->mv[i][2][1]--;
976                             else
977                                 s->mv[i][2][1]++;
978                         }
979                     }
980                 }
981                 break;
982             default:
983                 av_log(s->avctx, AV_LOG_ERROR, "00 motion_type at %d %d\n", s->mb_x, s->mb_y);
984                 return -1;
985             }
986         }
987
988         s->mb_intra = 0;
989         if (HAS_CBP(mb_type)) {
990             s->dsp.clear_blocks(s->block[0]);
991
992             cbp = get_vlc2(&s->gb, ff_mb_pat_vlc.table, MB_PAT_VLC_BITS, 1);
993             if (mb_block_count > 6) {
994                  cbp <<= mb_block_count - 6;
995                  cbp  |= get_bits(&s->gb, mb_block_count - 6);
996                  s->dsp.clear_blocks(s->block[6]);
997             }
998             if (cbp <= 0) {
999                 av_log(s->avctx, AV_LOG_ERROR, "invalid cbp %d at %d %d\n", cbp, s->mb_x, s->mb_y);
1000                 return -1;
1001             }
1002
1003 #if FF_API_XVMC
1004 FF_DISABLE_DEPRECATION_WARNINGS
1005             //if 1, we memcpy blocks in xvmcvideo
1006             if (CONFIG_MPEG_XVMC_DECODER && s->avctx->xvmc_acceleration > 1) {
1007                 ff_xvmc_pack_pblocks(s, cbp);
1008                 if (s->swap_uv) {
1009                     exchange_uv(s);
1010                 }
1011             }
1012 FF_ENABLE_DEPRECATION_WARNINGS
1013 #endif /* FF_API_XVMC */
1014
1015             if (s->codec_id == AV_CODEC_ID_MPEG2VIDEO) {
1016                 if (s->flags2 & CODEC_FLAG2_FAST) {
1017                     for (i = 0; i < 6; i++) {
1018                         if (cbp & 32) {
1019                             mpeg2_fast_decode_block_non_intra(s, *s->pblocks[i], i);
1020                         } else {
1021                             s->block_last_index[i] = -1;
1022                         }
1023                         cbp += cbp;
1024                     }
1025                 } else {
1026                     cbp <<= 12-mb_block_count;
1027
1028                     for (i = 0; i < mb_block_count; i++) {
1029                         if (cbp & (1 << 11)) {
1030                             if (mpeg2_decode_block_non_intra(s, *s->pblocks[i], i) < 0)
1031                                 return -1;
1032                         } else {
1033                             s->block_last_index[i] = -1;
1034                         }
1035                         cbp += cbp;
1036                     }
1037                 }
1038             } else {
1039                 if (s->flags2 & CODEC_FLAG2_FAST) {
1040                     for (i = 0; i < 6; i++) {
1041                         if (cbp & 32) {
1042                             mpeg1_fast_decode_block_inter(s, *s->pblocks[i], i);
1043                         } else {
1044                             s->block_last_index[i] = -1;
1045                         }
1046                         cbp += cbp;
1047                     }
1048                 } else {
1049                     for (i = 0; i < 6; i++) {
1050                         if (cbp & 32) {
1051                             if (mpeg1_decode_block_inter(s, *s->pblocks[i], i) < 0)
1052                                 return -1;
1053                         } else {
1054                             s->block_last_index[i] = -1;
1055                         }
1056                         cbp += cbp;
1057                     }
1058                 }
1059             }
1060         } else {
1061             for (i = 0; i < 12; i++)
1062                 s->block_last_index[i] = -1;
1063         }
1064     }
1065
1066     s->current_picture.mb_type[s->mb_x + s->mb_y * s->mb_stride] = mb_type;
1067
1068     return 0;
1069 }
1070
1071 static av_cold int mpeg_decode_init(AVCodecContext *avctx)
1072 {
1073     Mpeg1Context *s = avctx->priv_data;
1074     MpegEncContext *s2 = &s->mpeg_enc_ctx;
1075     int i;
1076
1077     /* we need some permutation to store matrices,
1078      * until MPV_common_init() sets the real permutation. */
1079     for (i = 0; i < 64; i++)
1080        s2->dsp.idct_permutation[i]=i;
1081
1082     ff_MPV_decode_defaults(s2);
1083
1084     s->mpeg_enc_ctx.avctx  = avctx;
1085     s->mpeg_enc_ctx.flags  = avctx->flags;
1086     s->mpeg_enc_ctx.flags2 = avctx->flags2;
1087     ff_mpeg12_common_init(&s->mpeg_enc_ctx);
1088     ff_mpeg12_init_vlcs();
1089
1090     s->mpeg_enc_ctx_allocated      = 0;
1091     s->mpeg_enc_ctx.picture_number = 0;
1092     s->repeat_field                = 0;
1093     s->mpeg_enc_ctx.codec_id       = avctx->codec->id;
1094     avctx->color_range = AVCOL_RANGE_MPEG;
1095     if (avctx->codec->id == AV_CODEC_ID_MPEG1VIDEO)
1096         avctx->chroma_sample_location = AVCHROMA_LOC_CENTER;
1097     else
1098         avctx->chroma_sample_location = AVCHROMA_LOC_LEFT;
1099     return 0;
1100 }
1101
1102 static int mpeg_decode_update_thread_context(AVCodecContext *avctx, const AVCodecContext *avctx_from)
1103 {
1104     Mpeg1Context *ctx = avctx->priv_data, *ctx_from = avctx_from->priv_data;
1105     MpegEncContext *s = &ctx->mpeg_enc_ctx, *s1 = &ctx_from->mpeg_enc_ctx;
1106     int err;
1107
1108     if (avctx == avctx_from || !ctx_from->mpeg_enc_ctx_allocated || !s1->context_initialized)
1109         return 0;
1110
1111     err = ff_mpeg_update_thread_context(avctx, avctx_from);
1112     if (err) return err;
1113
1114     if (!ctx->mpeg_enc_ctx_allocated)
1115         memcpy(s + 1, s1 + 1, sizeof(Mpeg1Context) - sizeof(MpegEncContext));
1116
1117     if (!(s->pict_type == AV_PICTURE_TYPE_B || s->low_delay))
1118         s->picture_number++;
1119
1120     return 0;
1121 }
1122
1123 static void quant_matrix_rebuild(uint16_t *matrix, const uint8_t *old_perm,
1124                                  const uint8_t *new_perm)
1125 {
1126     uint16_t temp_matrix[64];
1127     int i;
1128
1129     memcpy(temp_matrix, matrix, 64 * sizeof(uint16_t));
1130
1131     for (i = 0; i < 64; i++) {
1132         matrix[new_perm[i]] = temp_matrix[old_perm[i]];
1133     }
1134 }
1135
1136 static const enum AVPixelFormat mpeg1_hwaccel_pixfmt_list_420[] = {
1137 #if FF_API_XVMC
1138 #if CONFIG_MPEG_XVMC_DECODER
1139     AV_PIX_FMT_XVMC_MPEG2_IDCT,
1140     AV_PIX_FMT_XVMC_MPEG2_MC,
1141 #endif
1142 #endif /* FF_API_XVMC */
1143 #if CONFIG_MPEG1_VDPAU_HWACCEL
1144     AV_PIX_FMT_VDPAU_MPEG1,
1145     AV_PIX_FMT_VDPAU,
1146 #endif
1147     AV_PIX_FMT_YUV420P,
1148     AV_PIX_FMT_NONE
1149 };
1150
1151 static const enum AVPixelFormat mpeg2_hwaccel_pixfmt_list_420[] = {
1152 #if FF_API_XVMC
1153 #if CONFIG_MPEG_XVMC_DECODER
1154     AV_PIX_FMT_XVMC_MPEG2_IDCT,
1155     AV_PIX_FMT_XVMC_MPEG2_MC,
1156 #endif
1157 #endif /* FF_API_XVMC */
1158 #if CONFIG_MPEG2_VDPAU_HWACCEL
1159     AV_PIX_FMT_VDPAU_MPEG2,
1160     AV_PIX_FMT_VDPAU,
1161 #endif
1162 #if CONFIG_MPEG2_DXVA2_HWACCEL
1163     AV_PIX_FMT_DXVA2_VLD,
1164 #endif
1165 #if CONFIG_MPEG2_VAAPI_HWACCEL
1166     AV_PIX_FMT_VAAPI_VLD,
1167 #endif
1168     AV_PIX_FMT_YUV420P,
1169     AV_PIX_FMT_NONE
1170 };
1171
1172 static inline int uses_vdpau(AVCodecContext *avctx) {
1173     return avctx->pix_fmt == AV_PIX_FMT_VDPAU_MPEG1 || avctx->pix_fmt == AV_PIX_FMT_VDPAU_MPEG2;
1174 }
1175
1176 static enum AVPixelFormat mpeg_get_pixelformat(AVCodecContext *avctx)
1177 {
1178     Mpeg1Context *s1 = avctx->priv_data;
1179     MpegEncContext *s = &s1->mpeg_enc_ctx;
1180
1181     if(s->chroma_format < 2) {
1182         return ff_thread_get_format(avctx,
1183                                 avctx->codec_id == AV_CODEC_ID_MPEG1VIDEO ?
1184                                 mpeg1_hwaccel_pixfmt_list_420 :
1185                                 mpeg2_hwaccel_pixfmt_list_420);
1186     } else if(s->chroma_format == 2)
1187         return AV_PIX_FMT_YUV422P;
1188     else
1189         return AV_PIX_FMT_YUV444P;
1190 }
1191
1192 static void setup_hwaccel_for_pixfmt(AVCodecContext *avctx)
1193 {
1194 #if FF_API_XVMC
1195 FF_DISABLE_DEPRECATION_WARNINGS
1196     if (avctx->pix_fmt != AV_PIX_FMT_XVMC_MPEG2_IDCT && avctx->pix_fmt != AV_PIX_FMT_XVMC_MPEG2_MC) {
1197         avctx->xvmc_acceleration = 0;
1198     } else if (!avctx->xvmc_acceleration) {
1199         avctx->xvmc_acceleration = 2;
1200     }
1201 FF_ENABLE_DEPRECATION_WARNINGS
1202 #endif /* FF_API_XVMC */
1203     avctx->hwaccel = ff_find_hwaccel(avctx);
1204     // until then pix_fmt may be changed right after codec init
1205 #if FF_API_XVMC
1206     if (avctx->pix_fmt == AV_PIX_FMT_XVMC_MPEG2_IDCT ||
1207 #else
1208     if (
1209 #endif
1210         avctx->hwaccel || uses_vdpau(avctx))
1211         if (avctx->idct_algo == FF_IDCT_AUTO)
1212             avctx->idct_algo = FF_IDCT_SIMPLE;
1213 }
1214
1215 /* Call this function when we know all parameters.
1216  * It may be called in different places for MPEG-1 and MPEG-2. */
1217 static int mpeg_decode_postinit(AVCodecContext *avctx)
1218 {
1219     Mpeg1Context *s1 = avctx->priv_data;
1220     MpegEncContext *s = &s1->mpeg_enc_ctx;
1221     uint8_t old_permutation[64];
1222     int ret;
1223
1224     if ((s1->mpeg_enc_ctx_allocated == 0) ||
1225         avctx->coded_width  != s->width   ||
1226         avctx->coded_height != s->height  ||
1227         s1->save_width           != s->width                ||
1228         s1->save_height          != s->height               ||
1229         s1->save_aspect_info     != s->aspect_ratio_info    ||
1230         (s1->save_progressive_seq != s->progressive_sequence && (s->height&31)) ||
1231         0)
1232     {
1233
1234         if (s1->mpeg_enc_ctx_allocated) {
1235             ParseContext pc = s->parse_context;
1236             s->parse_context.buffer = 0;
1237             ff_MPV_common_end(s);
1238             s->parse_context = pc;
1239             s1->mpeg_enc_ctx_allocated = 0;
1240         }
1241
1242         if ((s->width == 0) || (s->height == 0))
1243             return -2;
1244
1245         ret = ff_set_dimensions(avctx, s->width, s->height);
1246         if (ret < 0)
1247             return ret;
1248
1249         if (avctx->codec_id == AV_CODEC_ID_MPEG2VIDEO && s->bit_rate) {
1250             avctx->rc_max_rate = s->bit_rate;
1251         } else if (avctx->codec_id == AV_CODEC_ID_MPEG1VIDEO && s->bit_rate &&
1252                    (s->bit_rate != 0x3FFFF*400 || s->vbv_delay != 0xFFFF)) {
1253             avctx->bit_rate = s->bit_rate;
1254         }
1255         s1->save_aspect_info     = s->aspect_ratio_info;
1256         s1->save_width           = s->width;
1257         s1->save_height          = s->height;
1258         s1->save_progressive_seq = s->progressive_sequence;
1259
1260         /* low_delay may be forced, in this case we will have B-frames
1261          * that behave like P-frames. */
1262         avctx->has_b_frames = !s->low_delay;
1263
1264         if (avctx->codec_id == AV_CODEC_ID_MPEG1VIDEO) {
1265             //MPEG-1 fps
1266             avctx->time_base.den = ff_mpeg12_frame_rate_tab[s->frame_rate_index].num;
1267             avctx->time_base.num = ff_mpeg12_frame_rate_tab[s->frame_rate_index].den;
1268             //MPEG-1 aspect
1269             avctx->sample_aspect_ratio = av_d2q(1.0/ff_mpeg1_aspect[s->aspect_ratio_info], 255);
1270             avctx->ticks_per_frame=1;
1271         } else {//MPEG-2
1272         //MPEG-2 fps
1273             av_reduce(&s->avctx->time_base.den,
1274                       &s->avctx->time_base.num,
1275                       ff_mpeg12_frame_rate_tab[s->frame_rate_index].num * s1->frame_rate_ext.num*2,
1276                       ff_mpeg12_frame_rate_tab[s->frame_rate_index].den * s1->frame_rate_ext.den,
1277                       1 << 30);
1278             avctx->ticks_per_frame = 2;
1279             //MPEG-2 aspect
1280             if (s->aspect_ratio_info > 1) {
1281                 AVRational dar =
1282                     av_mul_q(av_div_q(ff_mpeg2_aspect[s->aspect_ratio_info],
1283                                       (AVRational) {s1->pan_scan.width, s1->pan_scan.height}),
1284                              (AVRational) {s->width, s->height});
1285
1286                 // we ignore the spec here and guess a bit as reality does not match the spec, see for example
1287                 // res_change_ffmpeg_aspect.ts and sequence-display-aspect.mpg
1288                 // issue1613, 621, 562
1289                 if ((s1->pan_scan.width == 0) || (s1->pan_scan.height == 0) ||
1290                    (av_cmp_q(dar, (AVRational) {4, 3}) && av_cmp_q(dar, (AVRational) {16, 9}))) {
1291                     s->avctx->sample_aspect_ratio =
1292                         av_div_q(ff_mpeg2_aspect[s->aspect_ratio_info],
1293                                  (AVRational) {s->width, s->height});
1294                 } else {
1295                     s->avctx->sample_aspect_ratio =
1296                         av_div_q(ff_mpeg2_aspect[s->aspect_ratio_info],
1297                                  (AVRational) {s1->pan_scan.width, s1->pan_scan.height});
1298 //issue1613 4/3 16/9 -> 16/9
1299 //res_change_ffmpeg_aspect.ts 4/3 225/44 ->4/3
1300 //widescreen-issue562.mpg 4/3 16/9 -> 16/9
1301 //                    s->avctx->sample_aspect_ratio = av_mul_q(s->avctx->sample_aspect_ratio, (AVRational) {s->width, s->height});
1302                     av_dlog(avctx, "A %d/%d\n",
1303                             ff_mpeg2_aspect[s->aspect_ratio_info].num, ff_mpeg2_aspect[s->aspect_ratio_info].den);
1304                     av_dlog(avctx, "B %d/%d\n", s->avctx->sample_aspect_ratio.num,
1305                             s->avctx->sample_aspect_ratio.den);
1306                 }
1307             } else {
1308                 s->avctx->sample_aspect_ratio =
1309                     ff_mpeg2_aspect[s->aspect_ratio_info];
1310             }
1311         } // MPEG-2
1312
1313         avctx->pix_fmt = mpeg_get_pixelformat(avctx);
1314         setup_hwaccel_for_pixfmt(avctx);
1315
1316         /* Quantization matrices may need reordering
1317          * if DCT permutation is changed. */
1318         memcpy(old_permutation, s->dsp.idct_permutation, 64 * sizeof(uint8_t));
1319
1320         if (ff_MPV_common_init(s) < 0)
1321             return -2;
1322
1323         quant_matrix_rebuild(s->intra_matrix,        old_permutation, s->dsp.idct_permutation);
1324         quant_matrix_rebuild(s->inter_matrix,        old_permutation, s->dsp.idct_permutation);
1325         quant_matrix_rebuild(s->chroma_intra_matrix, old_permutation, s->dsp.idct_permutation);
1326         quant_matrix_rebuild(s->chroma_inter_matrix, old_permutation, s->dsp.idct_permutation);
1327
1328         s1->mpeg_enc_ctx_allocated = 1;
1329     }
1330     return 0;
1331 }
1332
1333 static int mpeg1_decode_picture(AVCodecContext *avctx,
1334                                 const uint8_t *buf, int buf_size)
1335 {
1336     Mpeg1Context *s1 = avctx->priv_data;
1337     MpegEncContext *s = &s1->mpeg_enc_ctx;
1338     int ref, f_code, vbv_delay;
1339
1340     init_get_bits(&s->gb, buf, buf_size*8);
1341
1342     ref = get_bits(&s->gb, 10); /* temporal ref */
1343     s->pict_type = get_bits(&s->gb, 3);
1344     if (s->pict_type == 0 || s->pict_type > 3)
1345         return -1;
1346
1347     vbv_delay = get_bits(&s->gb, 16);
1348     s->vbv_delay = vbv_delay;
1349     if (s->pict_type == AV_PICTURE_TYPE_P || s->pict_type == AV_PICTURE_TYPE_B) {
1350         s->full_pel[0] = get_bits1(&s->gb);
1351         f_code = get_bits(&s->gb, 3);
1352         if (f_code == 0 && (avctx->err_recognition & (AV_EF_BITSTREAM|AV_EF_COMPLIANT)))
1353             return -1;
1354         f_code += !f_code;
1355         s->mpeg_f_code[0][0] = f_code;
1356         s->mpeg_f_code[0][1] = f_code;
1357     }
1358     if (s->pict_type == AV_PICTURE_TYPE_B) {
1359         s->full_pel[1] = get_bits1(&s->gb);
1360         f_code = get_bits(&s->gb, 3);
1361         if (f_code == 0 && (avctx->err_recognition & (AV_EF_BITSTREAM|AV_EF_COMPLIANT)))
1362             return -1;
1363         f_code += !f_code;
1364         s->mpeg_f_code[1][0] = f_code;
1365         s->mpeg_f_code[1][1] = f_code;
1366     }
1367     s->current_picture.f.pict_type = s->pict_type;
1368     s->current_picture.f.key_frame = s->pict_type == AV_PICTURE_TYPE_I;
1369
1370     if (avctx->debug & FF_DEBUG_PICT_INFO)
1371         av_log(avctx, AV_LOG_DEBUG, "vbv_delay %d, ref %d type:%d\n", vbv_delay, ref, s->pict_type);
1372
1373     s->y_dc_scale = 8;
1374     s->c_dc_scale = 8;
1375     return 0;
1376 }
1377
1378 static void mpeg_decode_sequence_extension(Mpeg1Context *s1)
1379 {
1380     MpegEncContext *s= &s1->mpeg_enc_ctx;
1381     int horiz_size_ext, vert_size_ext;
1382     int bit_rate_ext;
1383
1384     skip_bits(&s->gb, 1); /* profile and level esc*/
1385     s->avctx->profile       = get_bits(&s->gb, 3);
1386     s->avctx->level         = get_bits(&s->gb, 4);
1387     s->progressive_sequence = get_bits1(&s->gb); /* progressive_sequence */
1388     s->chroma_format        = get_bits(&s->gb, 2); /* chroma_format 1=420, 2=422, 3=444 */
1389     horiz_size_ext          = get_bits(&s->gb, 2);
1390     vert_size_ext           = get_bits(&s->gb, 2);
1391     s->width  |= (horiz_size_ext << 12);
1392     s->height |= (vert_size_ext  << 12);
1393     bit_rate_ext = get_bits(&s->gb, 12);  /* XXX: handle it */
1394     s->bit_rate += (bit_rate_ext << 18) * 400;
1395     skip_bits1(&s->gb); /* marker */
1396     s->avctx->rc_buffer_size += get_bits(&s->gb, 8) * 1024 * 16 << 10;
1397
1398     s->low_delay = get_bits1(&s->gb);
1399     if (s->flags & CODEC_FLAG_LOW_DELAY)
1400         s->low_delay = 1;
1401
1402     s1->frame_rate_ext.num = get_bits(&s->gb, 2) + 1;
1403     s1->frame_rate_ext.den = get_bits(&s->gb, 5) + 1;
1404
1405     av_dlog(s->avctx, "sequence extension\n");
1406     s->codec_id      = s->avctx->codec_id = AV_CODEC_ID_MPEG2VIDEO;
1407
1408     if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1409         av_log(s->avctx, AV_LOG_DEBUG, "profile: %d, level: %d ps: %d cf:%d vbv buffer: %d, bitrate:%d\n",
1410                s->avctx->profile, s->avctx->level, s->progressive_sequence, s->chroma_format, s->avctx->rc_buffer_size, s->bit_rate);
1411
1412 }
1413
1414 static void mpeg_decode_sequence_display_extension(Mpeg1Context *s1)
1415 {
1416     MpegEncContext *s = &s1->mpeg_enc_ctx;
1417     int color_description, w, h;
1418
1419     skip_bits(&s->gb, 3); /* video format */
1420     color_description = get_bits1(&s->gb);
1421     if (color_description) {
1422         s->avctx->color_primaries = get_bits(&s->gb, 8);
1423         s->avctx->color_trc       = get_bits(&s->gb, 8);
1424         s->avctx->colorspace      = get_bits(&s->gb, 8);
1425     }
1426     w = get_bits(&s->gb, 14);
1427     skip_bits(&s->gb, 1); //marker
1428     h = get_bits(&s->gb, 14);
1429     // remaining 3 bits are zero padding
1430
1431     s1->pan_scan.width  = 16 * w;
1432     s1->pan_scan.height = 16 * h;
1433
1434     if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1435         av_log(s->avctx, AV_LOG_DEBUG, "sde w:%d, h:%d\n", w, h);
1436 }
1437
1438 static void mpeg_decode_picture_display_extension(Mpeg1Context *s1)
1439 {
1440     MpegEncContext *s = &s1->mpeg_enc_ctx;
1441     int i, nofco;
1442
1443     nofco = 1;
1444     if (s->progressive_sequence) {
1445         if (s->repeat_first_field) {
1446             nofco++;
1447             if (s->top_field_first)
1448                 nofco++;
1449         }
1450     } else {
1451         if (s->picture_structure == PICT_FRAME) {
1452             nofco++;
1453             if (s->repeat_first_field)
1454                 nofco++;
1455         }
1456     }
1457     for (i = 0; i < nofco; i++) {
1458         s1->pan_scan.position[i][0] = get_sbits(&s->gb, 16);
1459         skip_bits(&s->gb, 1); // marker
1460         s1->pan_scan.position[i][1] = get_sbits(&s->gb, 16);
1461         skip_bits(&s->gb, 1); // marker
1462     }
1463
1464     if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1465         av_log(s->avctx, AV_LOG_DEBUG, "pde (%d,%d) (%d,%d) (%d,%d)\n",
1466                s1->pan_scan.position[0][0], s1->pan_scan.position[0][1],
1467                s1->pan_scan.position[1][0], s1->pan_scan.position[1][1],
1468                s1->pan_scan.position[2][0], s1->pan_scan.position[2][1]);
1469 }
1470
1471 static int load_matrix(MpegEncContext *s, uint16_t matrix0[64], uint16_t matrix1[64], int intra)
1472 {
1473     int i;
1474
1475     for (i = 0; i < 64; i++) {
1476         int j = s->dsp.idct_permutation[ff_zigzag_direct[i]];
1477         int v = get_bits(&s->gb, 8);
1478         if (v == 0) {
1479             av_log(s->avctx, AV_LOG_ERROR, "matrix damaged\n");
1480             return -1;
1481         }
1482         if (intra && i == 0 && v != 8) {
1483             av_log(s->avctx, AV_LOG_DEBUG, "intra matrix specifies invalid DC quantizer %d, ignoring\n", v);
1484             v = 8; // needed by pink.mpg / issue1046
1485         }
1486         matrix0[j] = v;
1487         if (matrix1)
1488             matrix1[j] = v;
1489     }
1490     return 0;
1491 }
1492
1493 static void mpeg_decode_quant_matrix_extension(MpegEncContext *s)
1494 {
1495     av_dlog(s->avctx, "matrix extension\n");
1496
1497     if (get_bits1(&s->gb)) load_matrix(s, s->chroma_intra_matrix, s->intra_matrix, 1);
1498     if (get_bits1(&s->gb)) load_matrix(s, s->chroma_inter_matrix, s->inter_matrix, 0);
1499     if (get_bits1(&s->gb)) load_matrix(s, s->chroma_intra_matrix, NULL           , 1);
1500     if (get_bits1(&s->gb)) load_matrix(s, s->chroma_inter_matrix, NULL           , 0);
1501 }
1502
1503 static void mpeg_decode_picture_coding_extension(Mpeg1Context *s1)
1504 {
1505     MpegEncContext *s = &s1->mpeg_enc_ctx;
1506
1507     s->full_pel[0] = s->full_pel[1] = 0;
1508     s->mpeg_f_code[0][0] = get_bits(&s->gb, 4);
1509     s->mpeg_f_code[0][1] = get_bits(&s->gb, 4);
1510     s->mpeg_f_code[1][0] = get_bits(&s->gb, 4);
1511     s->mpeg_f_code[1][1] = get_bits(&s->gb, 4);
1512     if (!s->pict_type && s1->mpeg_enc_ctx_allocated) {
1513         av_log(s->avctx, AV_LOG_ERROR, "Missing picture start code, guessing missing values\n");
1514         if (s->mpeg_f_code[1][0] == 15 && s->mpeg_f_code[1][1] == 15) {
1515             if (s->mpeg_f_code[0][0] == 15 && s->mpeg_f_code[0][1] == 15)
1516                 s->pict_type = AV_PICTURE_TYPE_I;
1517             else
1518                 s->pict_type = AV_PICTURE_TYPE_P;
1519         } else
1520             s->pict_type = AV_PICTURE_TYPE_B;
1521         s->current_picture.f.pict_type = s->pict_type;
1522         s->current_picture.f.key_frame = s->pict_type == AV_PICTURE_TYPE_I;
1523     }
1524     s->mpeg_f_code[0][0] += !s->mpeg_f_code[0][0];
1525     s->mpeg_f_code[0][1] += !s->mpeg_f_code[0][1];
1526     s->mpeg_f_code[1][0] += !s->mpeg_f_code[1][0];
1527     s->mpeg_f_code[1][1] += !s->mpeg_f_code[1][1];
1528
1529     s->intra_dc_precision         = get_bits(&s->gb, 2);
1530     s->picture_structure          = get_bits(&s->gb, 2);
1531     s->top_field_first            = get_bits1(&s->gb);
1532     s->frame_pred_frame_dct       = get_bits1(&s->gb);
1533     s->concealment_motion_vectors = get_bits1(&s->gb);
1534     s->q_scale_type               = get_bits1(&s->gb);
1535     s->intra_vlc_format           = get_bits1(&s->gb);
1536     s->alternate_scan             = get_bits1(&s->gb);
1537     s->repeat_first_field         = get_bits1(&s->gb);
1538     s->chroma_420_type            = get_bits1(&s->gb);
1539     s->progressive_frame          = get_bits1(&s->gb);
1540
1541
1542     if (s->alternate_scan) {
1543         ff_init_scantable(s->dsp.idct_permutation, &s->inter_scantable, ff_alternate_vertical_scan);
1544         ff_init_scantable(s->dsp.idct_permutation, &s->intra_scantable, ff_alternate_vertical_scan);
1545     } else {
1546         ff_init_scantable(s->dsp.idct_permutation, &s->inter_scantable, ff_zigzag_direct);
1547         ff_init_scantable(s->dsp.idct_permutation, &s->intra_scantable, ff_zigzag_direct);
1548     }
1549
1550     /* composite display not parsed */
1551     av_dlog(s->avctx, "intra_dc_precision=%d\n", s->intra_dc_precision);
1552     av_dlog(s->avctx, "picture_structure=%d\n", s->picture_structure);
1553     av_dlog(s->avctx, "top field first=%d\n", s->top_field_first);
1554     av_dlog(s->avctx, "repeat first field=%d\n", s->repeat_first_field);
1555     av_dlog(s->avctx, "conceal=%d\n", s->concealment_motion_vectors);
1556     av_dlog(s->avctx, "intra_vlc_format=%d\n", s->intra_vlc_format);
1557     av_dlog(s->avctx, "alternate_scan=%d\n", s->alternate_scan);
1558     av_dlog(s->avctx, "frame_pred_frame_dct=%d\n", s->frame_pred_frame_dct);
1559     av_dlog(s->avctx, "progressive_frame=%d\n", s->progressive_frame);
1560 }
1561
1562 static int mpeg_field_start(MpegEncContext *s, const uint8_t *buf, int buf_size)
1563 {
1564     AVCodecContext *avctx = s->avctx;
1565     Mpeg1Context *s1 = (Mpeg1Context*)s;
1566
1567     /* start frame decoding */
1568     if (s->first_field || s->picture_structure == PICT_FRAME) {
1569         AVFrameSideData *pan_scan;
1570
1571         if (ff_MPV_frame_start(s, avctx) < 0)
1572             return -1;
1573
1574         ff_mpeg_er_frame_start(s);
1575
1576         /* first check if we must repeat the frame */
1577         s->current_picture_ptr->f.repeat_pict = 0;
1578         if (s->repeat_first_field) {
1579             if (s->progressive_sequence) {
1580                 if (s->top_field_first)
1581                     s->current_picture_ptr->f.repeat_pict = 4;
1582                 else
1583                     s->current_picture_ptr->f.repeat_pict = 2;
1584             } else if (s->progressive_frame) {
1585                 s->current_picture_ptr->f.repeat_pict = 1;
1586             }
1587         }
1588
1589         pan_scan = av_frame_new_side_data(&s->current_picture_ptr->f,
1590                                           AV_FRAME_DATA_PANSCAN,
1591                                           sizeof(s1->pan_scan));
1592         if (!pan_scan)
1593             return AVERROR(ENOMEM);
1594         memcpy(pan_scan->data, &s1->pan_scan, sizeof(s1->pan_scan));
1595
1596         if (s1->a53_caption) {
1597             AVFrameSideData *sd = av_frame_new_side_data(
1598                 &s->current_picture_ptr->f, AV_FRAME_DATA_A53_CC,
1599                 s1->a53_caption_size);
1600             if (sd)
1601                 memcpy(sd->data, s1->a53_caption, s1->a53_caption_size);
1602             av_freep(&s1->a53_caption);
1603         }
1604         if (HAVE_THREADS && (avctx->active_thread_type & FF_THREAD_FRAME))
1605             ff_thread_finish_setup(avctx);
1606     } else { // second field
1607         int i;
1608
1609         if (!s->current_picture_ptr) {
1610             av_log(s->avctx, AV_LOG_ERROR, "first field missing\n");
1611             return -1;
1612         }
1613
1614         if (s->avctx->hwaccel &&
1615             (s->avctx->slice_flags & SLICE_FLAG_ALLOW_FIELD)) {
1616             if (s->avctx->hwaccel->end_frame(s->avctx) < 0)
1617                 av_log(avctx, AV_LOG_ERROR, "hardware accelerator failed to decode first field\n");
1618         }
1619
1620         for (i = 0; i < 4; i++) {
1621             s->current_picture.f.data[i] = s->current_picture_ptr->f.data[i];
1622             if (s->picture_structure == PICT_BOTTOM_FIELD) {
1623                 s->current_picture.f.data[i] += s->current_picture_ptr->f.linesize[i];
1624             }
1625         }
1626     }
1627
1628     if (avctx->hwaccel) {
1629         if (avctx->hwaccel->start_frame(avctx, buf, buf_size) < 0)
1630             return -1;
1631     }
1632
1633 #if FF_API_XVMC
1634 FF_DISABLE_DEPRECATION_WARNINGS
1635 // MPV_frame_start will call this function too,
1636 // but we need to call it on every field
1637     if (CONFIG_MPEG_XVMC_DECODER && s->avctx->xvmc_acceleration)
1638         if (ff_xvmc_field_start(s, avctx) < 0)
1639             return -1;
1640 FF_ENABLE_DEPRECATION_WARNINGS
1641 #endif /* FF_API_XVMC */
1642
1643     return 0;
1644 }
1645
1646 #define DECODE_SLICE_ERROR -1
1647 #define DECODE_SLICE_OK     0
1648
1649 /**
1650  * Decode a slice.
1651  * MpegEncContext.mb_y must be set to the MB row from the startcode.
1652  * @return DECODE_SLICE_ERROR if the slice is damaged,
1653  *         DECODE_SLICE_OK if this slice is OK
1654  */
1655 static int mpeg_decode_slice(MpegEncContext *s, int mb_y,
1656                              const uint8_t **buf, int buf_size)
1657 {
1658     AVCodecContext *avctx = s->avctx;
1659     const int lowres      = s->avctx->lowres;
1660     const int field_pic   = s->picture_structure != PICT_FRAME;
1661
1662     s->resync_mb_x =
1663     s->resync_mb_y = -1;
1664
1665     av_assert0(mb_y < s->mb_height);
1666
1667     init_get_bits(&s->gb, *buf, buf_size * 8);
1668     if(s->codec_id != AV_CODEC_ID_MPEG1VIDEO && s->mb_height > 2800/16)
1669         skip_bits(&s->gb, 3);
1670
1671     ff_mpeg1_clean_buffers(s);
1672     s->interlaced_dct = 0;
1673
1674     s->qscale = get_qscale(s);
1675
1676     if (s->qscale == 0) {
1677         av_log(s->avctx, AV_LOG_ERROR, "qscale == 0\n");
1678         return -1;
1679     }
1680
1681     /* extra slice info */
1682     if (skip_1stop_8data_bits(&s->gb) < 0)
1683         return AVERROR_INVALIDDATA;
1684
1685     s->mb_x = 0;
1686
1687     if (mb_y == 0 && s->codec_tag == AV_RL32("SLIF")) {
1688         skip_bits1(&s->gb);
1689     } else {
1690         while (get_bits_left(&s->gb) > 0) {
1691             int code = get_vlc2(&s->gb, ff_mbincr_vlc.table,
1692                                 MBINCR_VLC_BITS, 2);
1693             if (code < 0) {
1694                 av_log(s->avctx, AV_LOG_ERROR, "first mb_incr damaged\n");
1695                 return -1;
1696             }
1697             if (code >= 33) {
1698                 if (code == 33) {
1699                     s->mb_x += 33;
1700                 }
1701                 /* otherwise, stuffing, nothing to do */
1702             } else {
1703                 s->mb_x += code;
1704                 break;
1705             }
1706         }
1707     }
1708
1709     if (s->mb_x >= (unsigned)s->mb_width) {
1710         av_log(s->avctx, AV_LOG_ERROR, "initial skip overflow\n");
1711         return -1;
1712     }
1713
1714     if (avctx->hwaccel) {
1715         const uint8_t *buf_end, *buf_start = *buf - 4; /* include start_code */
1716         int start_code = -1;
1717         buf_end = avpriv_find_start_code(buf_start + 2, *buf + buf_size, &start_code);
1718         if (buf_end < *buf + buf_size)
1719             buf_end -= 4;
1720         s->mb_y = mb_y;
1721         if (avctx->hwaccel->decode_slice(avctx, buf_start, buf_end - buf_start) < 0)
1722             return DECODE_SLICE_ERROR;
1723         *buf = buf_end;
1724         return DECODE_SLICE_OK;
1725     }
1726
1727     s->resync_mb_x = s->mb_x;
1728     s->resync_mb_y = s->mb_y = mb_y;
1729     s->mb_skip_run = 0;
1730     ff_init_block_index(s);
1731
1732     if (s->mb_y == 0 && s->mb_x == 0 && (s->first_field || s->picture_structure == PICT_FRAME)) {
1733         if (s->avctx->debug & FF_DEBUG_PICT_INFO) {
1734              av_log(s->avctx, AV_LOG_DEBUG, "qp:%d fc:%2d%2d%2d%2d %s %s %s %s %s dc:%d pstruct:%d fdct:%d cmv:%d qtype:%d ivlc:%d rff:%d %s\n",
1735                     s->qscale, s->mpeg_f_code[0][0], s->mpeg_f_code[0][1], s->mpeg_f_code[1][0], s->mpeg_f_code[1][1],
1736                     s->pict_type == AV_PICTURE_TYPE_I ? "I" : (s->pict_type == AV_PICTURE_TYPE_P ? "P" : (s->pict_type == AV_PICTURE_TYPE_B ? "B" : "S")),
1737                     s->progressive_sequence ? "ps" :"", s->progressive_frame ? "pf" : "", s->alternate_scan ? "alt" :"", s->top_field_first ? "top" :"",
1738                     s->intra_dc_precision, s->picture_structure, s->frame_pred_frame_dct, s->concealment_motion_vectors,
1739                     s->q_scale_type, s->intra_vlc_format, s->repeat_first_field, s->chroma_420_type ? "420" :"");
1740         }
1741     }
1742
1743     for (;;) {
1744 #if FF_API_XVMC
1745 FF_DISABLE_DEPRECATION_WARNINGS
1746         // If 1, we memcpy blocks in xvmcvideo.
1747         if (CONFIG_MPEG_XVMC_DECODER && s->avctx->xvmc_acceleration > 1)
1748             ff_xvmc_init_block(s); // set s->block
1749 FF_ENABLE_DEPRECATION_WARNINGS
1750 #endif /* FF_API_XVMC */
1751
1752         if (mpeg_decode_mb(s, s->block) < 0)
1753             return -1;
1754
1755         if (s->current_picture.motion_val[0] && !s->encoding) { // note motion_val is normally NULL unless we want to extract the MVs
1756             const int wrap = s->b8_stride;
1757             int xy         = s->mb_x * 2 + s->mb_y * 2 * wrap;
1758             int b8_xy      = 4 * (s->mb_x + s->mb_y * s->mb_stride);
1759             int motion_x, motion_y, dir, i;
1760
1761             for (i = 0; i < 2; i++) {
1762                 for (dir = 0; dir < 2; dir++) {
1763                     if (s->mb_intra || (dir == 1 && s->pict_type != AV_PICTURE_TYPE_B)) {
1764                         motion_x = motion_y = 0;
1765                     } else if (s->mv_type == MV_TYPE_16X16 || (s->mv_type == MV_TYPE_FIELD && field_pic)) {
1766                         motion_x = s->mv[dir][0][0];
1767                         motion_y = s->mv[dir][0][1];
1768                     } else /*if ((s->mv_type == MV_TYPE_FIELD) || (s->mv_type == MV_TYPE_16X8))*/ {
1769                         motion_x = s->mv[dir][i][0];
1770                         motion_y = s->mv[dir][i][1];
1771                     }
1772
1773                     s->current_picture.motion_val[dir][xy    ][0] = motion_x;
1774                     s->current_picture.motion_val[dir][xy    ][1] = motion_y;
1775                     s->current_picture.motion_val[dir][xy + 1][0] = motion_x;
1776                     s->current_picture.motion_val[dir][xy + 1][1] = motion_y;
1777                     s->current_picture.ref_index [dir][b8_xy    ] =
1778                     s->current_picture.ref_index [dir][b8_xy + 1] = s->field_select[dir][i];
1779                     av_assert2(s->field_select[dir][i] == 0 || s->field_select[dir][i] == 1);
1780                 }
1781                 xy += wrap;
1782                 b8_xy +=2;
1783             }
1784         }
1785
1786         s->dest[0] += 16 >> lowres;
1787         s->dest[1] +=(16 >> lowres) >> s->chroma_x_shift;
1788         s->dest[2] +=(16 >> lowres) >> s->chroma_x_shift;
1789
1790         ff_MPV_decode_mb(s, s->block);
1791
1792         if (++s->mb_x >= s->mb_width) {
1793             const int mb_size = 16 >> s->avctx->lowres;
1794
1795             ff_mpeg_draw_horiz_band(s, mb_size*(s->mb_y >> field_pic), mb_size);
1796             ff_MPV_report_decode_progress(s);
1797
1798             s->mb_x = 0;
1799             s->mb_y += 1 << field_pic;
1800
1801             if (s->mb_y >= s->mb_height) {
1802                 int left   = get_bits_left(&s->gb);
1803                 int is_d10 = s->chroma_format == 2 && s->pict_type == AV_PICTURE_TYPE_I && avctx->profile == 0 && avctx->level == 5
1804                              && s->intra_dc_precision == 2 && s->q_scale_type == 1 && s->alternate_scan == 0
1805                              && s->progressive_frame == 0 /* vbv_delay == 0xBBB || 0xE10*/;
1806
1807                 if (left >= 32 && !is_d10) {
1808                     GetBitContext gb = s->gb;
1809                     align_get_bits(&gb);
1810                     if (show_bits(&gb, 24) == 0x060E2B) {
1811                         av_log(avctx, AV_LOG_DEBUG, "Invalid MXF data found in video stream\n");
1812                         is_d10 = 1;
1813                     }
1814                 }
1815
1816                 if (left < 0 || (left && show_bits(&s->gb, FFMIN(left, 23)) && !is_d10)
1817                     || ((avctx->err_recognition & (AV_EF_BITSTREAM | AV_EF_AGGRESSIVE)) && left > 8)) {
1818                     av_log(avctx, AV_LOG_ERROR, "end mismatch left=%d %0X\n", left, show_bits(&s->gb, FFMIN(left, 23)));
1819                     return -1;
1820                 } else
1821                     goto eos;
1822             }
1823
1824             ff_init_block_index(s);
1825         }
1826
1827         /* skip mb handling */
1828         if (s->mb_skip_run == -1) {
1829             /* read increment again */
1830             s->mb_skip_run = 0;
1831             for (;;) {
1832                 int code = get_vlc2(&s->gb, ff_mbincr_vlc.table,
1833                                     MBINCR_VLC_BITS, 2);
1834                 if (code < 0) {
1835                     av_log(s->avctx, AV_LOG_ERROR, "mb incr damaged\n");
1836                     return -1;
1837                 }
1838                 if (code >= 33) {
1839                     if (code == 33) {
1840                         s->mb_skip_run += 33;
1841                     } else if (code == 35) {
1842                         if (s->mb_skip_run != 0 || show_bits(&s->gb, 15) != 0) {
1843                             av_log(s->avctx, AV_LOG_ERROR, "slice mismatch\n");
1844                             return -1;
1845                         }
1846                         goto eos; /* end of slice */
1847                     }
1848                     /* otherwise, stuffing, nothing to do */
1849                 } else {
1850                     s->mb_skip_run += code;
1851                     break;
1852                 }
1853             }
1854             if (s->mb_skip_run) {
1855                 int i;
1856                 if (s->pict_type == AV_PICTURE_TYPE_I) {
1857                     av_log(s->avctx, AV_LOG_ERROR, "skipped MB in I frame at %d %d\n", s->mb_x, s->mb_y);
1858                     return -1;
1859                 }
1860
1861                 /* skip mb */
1862                 s->mb_intra = 0;
1863                 for (i = 0; i < 12; i++)
1864                     s->block_last_index[i] = -1;
1865                 if (s->picture_structure == PICT_FRAME)
1866                     s->mv_type = MV_TYPE_16X16;
1867                 else
1868                     s->mv_type = MV_TYPE_FIELD;
1869                 if (s->pict_type == AV_PICTURE_TYPE_P) {
1870                     /* if P type, zero motion vector is implied */
1871                     s->mv_dir             = MV_DIR_FORWARD;
1872                     s->mv[0][0][0]        = s->mv[0][0][1]      = 0;
1873                     s->last_mv[0][0][0]   = s->last_mv[0][0][1] = 0;
1874                     s->last_mv[0][1][0]   = s->last_mv[0][1][1] = 0;
1875                     s->field_select[0][0] = (s->picture_structure - 1) & 1;
1876                 } else {
1877                     /* if B type, reuse previous vectors and directions */
1878                     s->mv[0][0][0] = s->last_mv[0][0][0];
1879                     s->mv[0][0][1] = s->last_mv[0][0][1];
1880                     s->mv[1][0][0] = s->last_mv[1][0][0];
1881                     s->mv[1][0][1] = s->last_mv[1][0][1];
1882                 }
1883             }
1884         }
1885     }
1886 eos: // end of slice
1887     *buf += (get_bits_count(&s->gb)-1)/8;
1888     av_dlog(s, "y %d %d %d %d\n", s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y);
1889     return 0;
1890 }
1891
1892 static int slice_decode_thread(AVCodecContext *c, void *arg)
1893 {
1894     MpegEncContext *s   = *(void**)arg;
1895     const uint8_t *buf  = s->gb.buffer;
1896     int mb_y            = s->start_mb_y;
1897     const int field_pic = s->picture_structure != PICT_FRAME;
1898
1899     s->er.error_count = (3 * (s->end_mb_y - s->start_mb_y) * s->mb_width) >> field_pic;
1900
1901     for (;;) {
1902         uint32_t start_code;
1903         int ret;
1904
1905         ret = mpeg_decode_slice(s, mb_y, &buf, s->gb.buffer_end - buf);
1906         emms_c();
1907         av_dlog(c, "ret:%d resync:%d/%d mb:%d/%d ts:%d/%d ec:%d\n",
1908                 ret, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y,
1909                 s->start_mb_y, s->end_mb_y, s->er.error_count);
1910         if (ret < 0) {
1911             if (c->err_recognition & AV_EF_EXPLODE)
1912                 return ret;
1913             if (s->resync_mb_x >= 0 && s->resync_mb_y >= 0)
1914                 ff_er_add_slice(&s->er, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, ER_AC_ERROR | ER_DC_ERROR | ER_MV_ERROR);
1915         } else {
1916             ff_er_add_slice(&s->er, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, ER_AC_END | ER_DC_END | ER_MV_END);
1917         }
1918
1919         if (s->mb_y == s->end_mb_y)
1920             return 0;
1921
1922         start_code = -1;
1923         buf = avpriv_find_start_code(buf, s->gb.buffer_end, &start_code);
1924         mb_y= start_code - SLICE_MIN_START_CODE;
1925         if(s->codec_id != AV_CODEC_ID_MPEG1VIDEO && s->mb_height > 2800/16)
1926             mb_y += (*buf&0xE0)<<2;
1927         mb_y <<= field_pic;
1928         if (s->picture_structure == PICT_BOTTOM_FIELD)
1929             mb_y++;
1930         if (mb_y < 0 || mb_y >= s->end_mb_y)
1931             return -1;
1932     }
1933 }
1934
1935 /**
1936  * Handle slice ends.
1937  * @return 1 if it seems to be the last slice
1938  */
1939 static int slice_end(AVCodecContext *avctx, AVFrame *pict)
1940 {
1941     Mpeg1Context *s1 = avctx->priv_data;
1942     MpegEncContext *s = &s1->mpeg_enc_ctx;
1943
1944     if (!s1->mpeg_enc_ctx_allocated || !s->current_picture_ptr)
1945         return 0;
1946
1947     if (s->avctx->hwaccel) {
1948         if (s->avctx->hwaccel->end_frame(s->avctx) < 0)
1949             av_log(avctx, AV_LOG_ERROR, "hardware accelerator failed to decode picture\n");
1950     }
1951
1952 #if FF_API_XVMC
1953 FF_DISABLE_DEPRECATION_WARNINGS
1954     if (CONFIG_MPEG_XVMC_DECODER && s->avctx->xvmc_acceleration)
1955         ff_xvmc_field_end(s);
1956 FF_ENABLE_DEPRECATION_WARNINGS
1957 #endif /* FF_API_XVMC */
1958
1959     /* end of slice reached */
1960     if (/*s->mb_y << field_pic == s->mb_height &&*/ !s->first_field && !s1->first_slice) {
1961         /* end of image */
1962
1963         ff_er_frame_end(&s->er);
1964
1965         ff_MPV_frame_end(s);
1966
1967         if (s->pict_type == AV_PICTURE_TYPE_B || s->low_delay) {
1968             int ret = av_frame_ref(pict, &s->current_picture_ptr->f);
1969             if (ret < 0)
1970                 return ret;
1971             ff_print_debug_info(s, s->current_picture_ptr, pict);
1972             ff_mpv_export_qp_table(s, pict, s->current_picture_ptr, FF_QSCALE_TYPE_MPEG2);
1973         } else {
1974             if (avctx->active_thread_type & FF_THREAD_FRAME)
1975                 s->picture_number++;
1976             /* latency of 1 frame for I- and P-frames */
1977             /* XXX: use another variable than picture_number */
1978             if (s->last_picture_ptr != NULL) {
1979                 int ret = av_frame_ref(pict, &s->last_picture_ptr->f);
1980                 if (ret < 0)
1981                     return ret;
1982                 ff_print_debug_info(s, s->last_picture_ptr, pict);
1983                 ff_mpv_export_qp_table(s, pict, s->last_picture_ptr, FF_QSCALE_TYPE_MPEG2);
1984             }
1985         }
1986
1987         return 1;
1988     } else {
1989         return 0;
1990     }
1991 }
1992
1993 static int mpeg1_decode_sequence(AVCodecContext *avctx,
1994                                  const uint8_t *buf, int buf_size)
1995 {
1996     Mpeg1Context *s1 = avctx->priv_data;
1997     MpegEncContext *s = &s1->mpeg_enc_ctx;
1998     int width, height;
1999     int i, v, j;
2000
2001     init_get_bits(&s->gb, buf, buf_size*8);
2002
2003     width  = get_bits(&s->gb, 12);
2004     height = get_bits(&s->gb, 12);
2005     if (width == 0 || height == 0) {
2006         av_log(avctx, AV_LOG_WARNING, "Invalid horizontal or vertical size "
2007                "value.\n");
2008         if (avctx->err_recognition & (AV_EF_BITSTREAM | AV_EF_COMPLIANT))
2009             return AVERROR_INVALIDDATA;
2010     }
2011     s->aspect_ratio_info = get_bits(&s->gb, 4);
2012     if (s->aspect_ratio_info == 0) {
2013         av_log(avctx, AV_LOG_ERROR, "aspect ratio has forbidden 0 value\n");
2014         if (avctx->err_recognition & (AV_EF_BITSTREAM | AV_EF_COMPLIANT))
2015             return -1;
2016     }
2017     s->frame_rate_index = get_bits(&s->gb, 4);
2018     if (s->frame_rate_index == 0 || s->frame_rate_index > 13)
2019         return -1;
2020     s->bit_rate = get_bits(&s->gb, 18) * 400;
2021     if (get_bits1(&s->gb) == 0) /* marker */
2022         return -1;
2023     s->width  = width;
2024     s->height = height;
2025
2026     s->avctx->rc_buffer_size = get_bits(&s->gb, 10) * 1024 * 16;
2027     skip_bits(&s->gb, 1);
2028
2029     /* get matrix */
2030     if (get_bits1(&s->gb)) {
2031         load_matrix(s, s->chroma_intra_matrix, s->intra_matrix, 1);
2032     } else {
2033         for (i = 0; i < 64; i++) {
2034             j = s->dsp.idct_permutation[i];
2035             v = ff_mpeg1_default_intra_matrix[i];
2036             s->intra_matrix[j]        = v;
2037             s->chroma_intra_matrix[j] = v;
2038         }
2039     }
2040     if (get_bits1(&s->gb)) {
2041         load_matrix(s, s->chroma_inter_matrix, s->inter_matrix, 0);
2042     } else {
2043         for (i = 0; i < 64; i++) {
2044             int j = s->dsp.idct_permutation[i];
2045             v = ff_mpeg1_default_non_intra_matrix[i];
2046             s->inter_matrix[j]        = v;
2047             s->chroma_inter_matrix[j] = v;
2048         }
2049     }
2050
2051     if (show_bits(&s->gb, 23) != 0) {
2052         av_log(s->avctx, AV_LOG_ERROR, "sequence header damaged\n");
2053         return -1;
2054     }
2055
2056     /* we set MPEG-2 parameters so that it emulates MPEG-1 */
2057     s->progressive_sequence = 1;
2058     s->progressive_frame    = 1;
2059     s->picture_structure    = PICT_FRAME;
2060     s->first_field          = 0;
2061     s->frame_pred_frame_dct = 1;
2062     s->chroma_format        = 1;
2063     s->codec_id             = s->avctx->codec_id = AV_CODEC_ID_MPEG1VIDEO;
2064     s->out_format           = FMT_MPEG1;
2065     s->swap_uv              = 0; // AFAIK VCR2 does not have SEQ_HEADER
2066     if (s->flags & CODEC_FLAG_LOW_DELAY)
2067         s->low_delay = 1;
2068
2069     if (s->avctx->debug & FF_DEBUG_PICT_INFO)
2070         av_log(s->avctx, AV_LOG_DEBUG, "vbv buffer: %d, bitrate:%d\n",
2071                s->avctx->rc_buffer_size, s->bit_rate);
2072
2073     return 0;
2074 }
2075
2076 static int vcr2_init_sequence(AVCodecContext *avctx)
2077 {
2078     Mpeg1Context *s1 = avctx->priv_data;
2079     MpegEncContext *s = &s1->mpeg_enc_ctx;
2080     int i, v;
2081
2082     /* start new MPEG-1 context decoding */
2083     s->out_format = FMT_MPEG1;
2084     if (s1->mpeg_enc_ctx_allocated) {
2085         ff_MPV_common_end(s);
2086         s1->mpeg_enc_ctx_allocated = 0;
2087     }
2088     s->width  = avctx->coded_width;
2089     s->height = avctx->coded_height;
2090     avctx->has_b_frames = 0; // true?
2091     s->low_delay = 1;
2092
2093     avctx->pix_fmt = mpeg_get_pixelformat(avctx);
2094     setup_hwaccel_for_pixfmt(avctx);
2095
2096     if (ff_MPV_common_init(s) < 0)
2097         return -1;
2098     s1->mpeg_enc_ctx_allocated = 1;
2099
2100     for (i = 0; i < 64; i++) {
2101         int j = s->dsp.idct_permutation[i];
2102         v = ff_mpeg1_default_intra_matrix[i];
2103         s->intra_matrix[j]        = v;
2104         s->chroma_intra_matrix[j] = v;
2105
2106         v = ff_mpeg1_default_non_intra_matrix[i];
2107         s->inter_matrix[j]        = v;
2108         s->chroma_inter_matrix[j] = v;
2109     }
2110
2111     s->progressive_sequence  = 1;
2112     s->progressive_frame     = 1;
2113     s->picture_structure     = PICT_FRAME;
2114     s->first_field           = 0;
2115     s->frame_pred_frame_dct  = 1;
2116     s->chroma_format         = 1;
2117     if (s->codec_tag == AV_RL32("BW10")) {
2118         s->codec_id              = s->avctx->codec_id = AV_CODEC_ID_MPEG1VIDEO;
2119     } else {
2120         s->swap_uv = 1; // in case of xvmc we need to swap uv for each MB
2121         s->codec_id              = s->avctx->codec_id = AV_CODEC_ID_MPEG2VIDEO;
2122     }
2123     s1->save_width           = s->width;
2124     s1->save_height          = s->height;
2125     s1->save_progressive_seq = s->progressive_sequence;
2126     return 0;
2127 }
2128
2129
2130 static int mpeg_decode_a53_cc(AVCodecContext *avctx,
2131                               const uint8_t *p, int buf_size)
2132 {
2133     Mpeg1Context *s1 = avctx->priv_data;
2134
2135     if (buf_size >= 6 &&
2136         p[0] == 'G' && p[1] == 'A' && p[2] == '9' && p[3] == '4' &&
2137         p[4] == 3 && (p[5] & 0x40)) {
2138         /* extract A53 Part 4 CC data */
2139         int cc_count = p[5] & 0x1f;
2140         if (cc_count > 0 && buf_size >= 7 + cc_count * 3) {
2141             av_freep(&s1->a53_caption);
2142             s1->a53_caption_size = cc_count * 3;
2143             s1->a53_caption = av_malloc(s1->a53_caption_size);
2144             if (s1->a53_caption) {
2145                 memcpy(s1->a53_caption, p + 7, s1->a53_caption_size);
2146             }
2147         }
2148         return 1;
2149     } else if (buf_size >= 11 &&
2150         p[0] == 'C' && p[1] == 'C' && p[2] == 0x01 && p[3] == 0xf8) {
2151         /* extract DVD CC data */
2152         int cc_count = 0;
2153         int i;
2154         // There is a caption count field in the data, but it is often
2155         // incorect.  So count the number of captions present.
2156         for (i = 5; i + 6 <= buf_size && ((p[i] & 0xfe) == 0xfe); i += 6)
2157             cc_count++;
2158         // Transform the DVD format into A53 Part 4 format
2159         if (cc_count > 0) {
2160             av_freep(&s1->a53_caption);
2161             s1->a53_caption_size = cc_count * 6;
2162             s1->a53_caption = av_malloc(s1->a53_caption_size);
2163             if (s1->a53_caption) {
2164                 uint8_t field1 = !!(p[4] & 0x80);
2165                 uint8_t *cap = s1->a53_caption;
2166                 p += 5;
2167                 for (i = 0; i < cc_count; i++) {
2168                     cap[0] = (p[0] == 0xff && field1) ? 0xfc : 0xfd;
2169                     cap[1] = p[1];
2170                     cap[2] = p[2];
2171                     cap[3] = (p[3] == 0xff && !field1) ? 0xfc : 0xfd;
2172                     cap[4] = p[4];
2173                     cap[5] = p[5];
2174                     cap += 6;
2175                     p += 6;
2176                 }
2177             }
2178         }
2179         return 1;
2180     }
2181     return 0;
2182 }
2183
2184 static void mpeg_decode_user_data(AVCodecContext *avctx,
2185                                   const uint8_t *p, int buf_size)
2186 {
2187     Mpeg1Context *s = avctx->priv_data;
2188     const uint8_t *buf_end = p + buf_size;
2189
2190     if(buf_size > 29){
2191         int i;
2192         for(i=0; i<20; i++)
2193             if(!memcmp(p+i, "\0TMPGEXS\0", 9)){
2194                 s->tmpgexs= 1;
2195             }
2196
2197 /*        for(i=0; !(!p[i-2] && !p[i-1] && p[i]==1) && i<buf_size; i++){
2198             av_log(avctx, AV_LOG_ERROR, "%c", p[i]);
2199         }
2200             av_log(avctx, AV_LOG_ERROR, "\n");*/
2201     }
2202
2203     /* we parse the DTG active format information */
2204     if (buf_end - p >= 5 &&
2205         p[0] == 'D' && p[1] == 'T' && p[2] == 'G' && p[3] == '1') {
2206         int flags = p[4];
2207         p += 5;
2208         if (flags & 0x80) {
2209             /* skip event id */
2210             p += 2;
2211         }
2212         if (flags & 0x40) {
2213             if (buf_end - p < 1)
2214                 return;
2215             avctx->dtg_active_format = p[0] & 0x0f;
2216         }
2217     } else if (buf_end - p >= 6 &&
2218                p[0] == 'J' && p[1] == 'P' && p[2] == '3' && p[3] == 'D' &&
2219                p[4] == 0x03) { // S3D_video_format_length
2220         // the 0x7F mask ignores the reserved_bit value
2221         const uint8_t S3D_video_format_type = p[5] & 0x7F;
2222
2223         if (S3D_video_format_type == 0x03 ||
2224             S3D_video_format_type == 0x04 ||
2225             S3D_video_format_type == 0x08 ||
2226             S3D_video_format_type == 0x23) {
2227             Mpeg1Context *s1   = avctx->priv_data;
2228             MpegEncContext *s  = &s1->mpeg_enc_ctx;
2229             AVStereo3D *stereo;
2230             if (!s->current_picture_ptr)
2231                 return;
2232
2233             stereo = av_stereo3d_create_side_data(&s->current_picture_ptr->f);
2234             if (!stereo)
2235                 return;
2236
2237             switch (S3D_video_format_type) {
2238             case 0x03:
2239                 stereo->type = AV_STEREO3D_SIDEBYSIDE;
2240                 break;
2241             case 0x04:
2242                 stereo->type = AV_STEREO3D_TOPBOTTOM;
2243                 break;
2244             case 0x08:
2245                 stereo->type = AV_STEREO3D_2D;
2246                 break;
2247             case 0x23:
2248                 stereo->type = AV_STEREO3D_SIDEBYSIDE_QUINCUNX;
2249                 break;
2250             }
2251         }
2252     } else if (mpeg_decode_a53_cc(avctx, p, buf_size)) {
2253         return;
2254     }
2255 }
2256
2257 static void mpeg_decode_gop(AVCodecContext *avctx,
2258                             const uint8_t *buf, int buf_size)
2259 {
2260     Mpeg1Context *s1  = avctx->priv_data;
2261     MpegEncContext *s = &s1->mpeg_enc_ctx;
2262     int broken_link;
2263     int64_t tc;
2264
2265     init_get_bits(&s->gb, buf, buf_size*8);
2266
2267     tc = avctx->timecode_frame_start = get_bits(&s->gb, 25);
2268
2269     s->closed_gop = get_bits1(&s->gb);
2270     /*broken_link indicate that after editing the
2271       reference frames of the first B-Frames after GOP I-Frame
2272       are missing (open gop)*/
2273     broken_link = get_bits1(&s->gb);
2274
2275     if (s->avctx->debug & FF_DEBUG_PICT_INFO) {
2276         char tcbuf[AV_TIMECODE_STR_SIZE];
2277         av_timecode_make_mpeg_tc_string(tcbuf, tc);
2278         av_log(s->avctx, AV_LOG_DEBUG,
2279                "GOP (%s) closed_gop=%d broken_link=%d\n",
2280                tcbuf, s->closed_gop, broken_link);
2281     }
2282 }
2283
2284 static int decode_chunks(AVCodecContext *avctx,
2285                          AVFrame *picture, int *got_output,
2286                          const uint8_t *buf, int buf_size)
2287 {
2288     Mpeg1Context *s = avctx->priv_data;
2289     MpegEncContext *s2 = &s->mpeg_enc_ctx;
2290     const uint8_t *buf_ptr = buf;
2291     const uint8_t *buf_end = buf + buf_size;
2292     int ret, input_size;
2293     int last_code = 0, skip_frame = 0;
2294     int picture_start_code_seen = 0;
2295
2296     for (;;) {
2297         /* find next start code */
2298         uint32_t start_code = -1;
2299         buf_ptr = avpriv_find_start_code(buf_ptr, buf_end, &start_code);
2300         if (start_code > 0x1ff) {
2301             if (!skip_frame) {
2302                 if (HAVE_THREADS && (avctx->active_thread_type & FF_THREAD_SLICE) &&
2303                     !avctx->hwaccel) {
2304                     int i;
2305                     av_assert0(avctx->thread_count > 1);
2306
2307                     avctx->execute(avctx, slice_decode_thread,  &s2->thread_context[0], NULL, s->slice_count, sizeof(void*));
2308                     for (i = 0; i < s->slice_count; i++)
2309                         s2->er.error_count += s2->thread_context[i]->er.error_count;
2310                 }
2311
2312                 if ((CONFIG_MPEG_VDPAU_DECODER || CONFIG_MPEG1_VDPAU_DECODER)
2313                     && uses_vdpau(avctx))
2314                     ff_vdpau_mpeg_picture_complete(s2, buf, buf_size, s->slice_count);
2315
2316                 ret = slice_end(avctx, picture);
2317                 if (ret < 0)
2318                     return ret;
2319                 else if (ret) {
2320                     if (s2->last_picture_ptr || s2->low_delay) //FIXME merge with the stuff in mpeg_decode_slice
2321                         *got_output = 1;
2322                 }
2323             }
2324             s2->pict_type = 0;
2325
2326             if (avctx->err_recognition & AV_EF_EXPLODE && s2->er.error_count)
2327                 return AVERROR_INVALIDDATA;
2328
2329             return FFMAX(0, buf_ptr - buf - s2->parse_context.last_index);
2330         }
2331
2332         input_size = buf_end - buf_ptr;
2333
2334         if (avctx->debug & FF_DEBUG_STARTCODE) {
2335             av_log(avctx, AV_LOG_DEBUG, "%3X at %td left %d\n", start_code, buf_ptr-buf, input_size);
2336         }
2337
2338         /* prepare data for next start code */
2339         switch (start_code) {
2340         case SEQ_START_CODE:
2341             if (last_code == 0) {
2342                 mpeg1_decode_sequence(avctx, buf_ptr, input_size);
2343                 if(buf != avctx->extradata)
2344                     s->sync=1;
2345             } else {
2346                 av_log(avctx, AV_LOG_ERROR, "ignoring SEQ_START_CODE after %X\n", last_code);
2347                 if (avctx->err_recognition & AV_EF_EXPLODE)
2348                     return AVERROR_INVALIDDATA;
2349             }
2350             break;
2351
2352         case PICTURE_START_CODE:
2353             if (picture_start_code_seen && s2->picture_structure == PICT_FRAME) {
2354                /* If it's a frame picture, there can't be more than one picture header.
2355                   Yet, it does happen and we need to handle it. */
2356                av_log(avctx, AV_LOG_WARNING, "ignoring extra picture following a frame-picture\n");
2357                break;
2358             }
2359             picture_start_code_seen = 1;
2360
2361             if (s2->width <= 0 || s2->height <= 0) {
2362                 av_log(avctx, AV_LOG_ERROR, "Invalid frame dimensions %dx%d.\n",
2363                        s2->width, s2->height);
2364                 return AVERROR_INVALIDDATA;
2365             }
2366
2367             if(s->tmpgexs){
2368                 s2->intra_dc_precision= 3;
2369                 s2->intra_matrix[0]= 1;
2370             }
2371             if (HAVE_THREADS && (avctx->active_thread_type & FF_THREAD_SLICE) &&
2372                 !avctx->hwaccel && s->slice_count) {
2373                 int i;
2374
2375                 avctx->execute(avctx, slice_decode_thread,
2376                                s2->thread_context, NULL,
2377                                s->slice_count, sizeof(void*));
2378                 for (i = 0; i < s->slice_count; i++)
2379                     s2->er.error_count += s2->thread_context[i]->er.error_count;
2380                 s->slice_count = 0;
2381             }
2382             if (last_code == 0 || last_code == SLICE_MIN_START_CODE) {
2383                 ret = mpeg_decode_postinit(avctx);
2384                 if (ret < 0) {
2385                     av_log(avctx, AV_LOG_ERROR, "mpeg_decode_postinit() failure\n");
2386                     return ret;
2387                 }
2388
2389                 /* we have a complete image: we try to decompress it */
2390                 if (mpeg1_decode_picture(avctx, buf_ptr, input_size) < 0)
2391                     s2->pict_type = 0;
2392                 s->first_slice = 1;
2393                 last_code = PICTURE_START_CODE;
2394             } else {
2395                 av_log(avctx, AV_LOG_ERROR, "ignoring pic after %X\n", last_code);
2396                 if (avctx->err_recognition & AV_EF_EXPLODE)
2397                     return AVERROR_INVALIDDATA;
2398             }
2399             break;
2400         case EXT_START_CODE:
2401             init_get_bits(&s2->gb, buf_ptr, input_size*8);
2402
2403             switch (get_bits(&s2->gb, 4)) {
2404             case 0x1:
2405                 if (last_code == 0) {
2406                 mpeg_decode_sequence_extension(s);
2407                 } else {
2408                     av_log(avctx, AV_LOG_ERROR, "ignoring seq ext after %X\n", last_code);
2409                     if (avctx->err_recognition & AV_EF_EXPLODE)
2410                         return AVERROR_INVALIDDATA;
2411                 }
2412                 break;
2413             case 0x2:
2414                 mpeg_decode_sequence_display_extension(s);
2415                 break;
2416             case 0x3:
2417                 mpeg_decode_quant_matrix_extension(s2);
2418                 break;
2419             case 0x7:
2420                 mpeg_decode_picture_display_extension(s);
2421                 break;
2422             case 0x8:
2423                 if (last_code == PICTURE_START_CODE) {
2424                     mpeg_decode_picture_coding_extension(s);
2425                 } else {
2426                     av_log(avctx, AV_LOG_ERROR, "ignoring pic cod ext after %X\n", last_code);
2427                     if (avctx->err_recognition & AV_EF_EXPLODE)
2428                         return AVERROR_INVALIDDATA;
2429                 }
2430                 break;
2431             }
2432             break;
2433         case USER_START_CODE:
2434             mpeg_decode_user_data(avctx, buf_ptr, input_size);
2435             break;
2436         case GOP_START_CODE:
2437             if (last_code == 0) {
2438                 s2->first_field=0;
2439                 mpeg_decode_gop(avctx, buf_ptr, input_size);
2440                 s->sync=1;
2441             } else {
2442                 av_log(avctx, AV_LOG_ERROR, "ignoring GOP_START_CODE after %X\n", last_code);
2443                 if (avctx->err_recognition & AV_EF_EXPLODE)
2444                     return AVERROR_INVALIDDATA;
2445             }
2446             break;
2447         default:
2448             if (start_code >= SLICE_MIN_START_CODE &&
2449                 start_code <= SLICE_MAX_START_CODE && last_code == PICTURE_START_CODE) {
2450
2451                 if (s2->progressive_sequence && !s2->progressive_frame) {
2452                     s2->progressive_frame = 1;
2453                     av_log(s2->avctx, AV_LOG_ERROR, "interlaced frame in progressive sequence, ignoring\n");
2454                 }
2455
2456                 if (s2->picture_structure == 0 || (s2->progressive_frame && s2->picture_structure != PICT_FRAME)) {
2457                     av_log(s2->avctx, AV_LOG_ERROR, "picture_structure %d invalid, ignoring\n", s2->picture_structure);
2458                     s2->picture_structure = PICT_FRAME;
2459                 }
2460
2461                 if (s2->progressive_sequence && !s2->frame_pred_frame_dct) {
2462                     av_log(s2->avctx, AV_LOG_WARNING, "invalid frame_pred_frame_dct\n");
2463                 }
2464
2465                 if (s2->picture_structure == PICT_FRAME) {
2466                     s2->first_field = 0;
2467                     s2->v_edge_pos  = 16 * s2->mb_height;
2468                 } else {
2469                     s2->first_field ^= 1;
2470                     s2->v_edge_pos   = 8 * s2->mb_height;
2471                     memset(s2->mbskip_table, 0, s2->mb_stride * s2->mb_height);
2472                 }
2473             }
2474             if (start_code >= SLICE_MIN_START_CODE &&
2475                 start_code <= SLICE_MAX_START_CODE && last_code != 0) {
2476                 const int field_pic = s2->picture_structure != PICT_FRAME;
2477                 int mb_y = start_code - SLICE_MIN_START_CODE;
2478                 last_code = SLICE_MIN_START_CODE;
2479                 if(s2->codec_id != AV_CODEC_ID_MPEG1VIDEO && s2->mb_height > 2800/16)
2480                     mb_y += (*buf_ptr&0xE0)<<2;
2481
2482                 mb_y <<= field_pic;
2483                 if (s2->picture_structure == PICT_BOTTOM_FIELD)
2484                     mb_y++;
2485
2486                 if (buf_end - buf_ptr < 2) {
2487                     av_log(s2->avctx, AV_LOG_ERROR, "slice too small\n");
2488                     return AVERROR_INVALIDDATA;
2489                 }
2490
2491                 if (mb_y >= s2->mb_height) {
2492                     av_log(s2->avctx, AV_LOG_ERROR, "slice below image (%d >= %d)\n", mb_y, s2->mb_height);
2493                     return -1;
2494                 }
2495
2496                 if (s2->last_picture_ptr == NULL) {
2497                 /* Skip B-frames if we do not have reference frames and gop is not closed */
2498                     if (s2->pict_type == AV_PICTURE_TYPE_B) {
2499                         if (!s2->closed_gop) {
2500                             skip_frame = 1;
2501                             break;
2502                         }
2503                     }
2504                 }
2505                 if (s2->pict_type == AV_PICTURE_TYPE_I || (s2->flags2 & CODEC_FLAG2_SHOW_ALL))
2506                     s->sync=1;
2507                 if (s2->next_picture_ptr == NULL) {
2508                 /* Skip P-frames if we do not have a reference frame or we have an invalid header. */
2509                     if (s2->pict_type == AV_PICTURE_TYPE_P && !s->sync) {
2510                         skip_frame = 1;
2511                         break;
2512                     }
2513                 }
2514                 if ((avctx->skip_frame >= AVDISCARD_NONREF && s2->pict_type == AV_PICTURE_TYPE_B) ||
2515                     (avctx->skip_frame >= AVDISCARD_NONKEY && s2->pict_type != AV_PICTURE_TYPE_I) ||
2516                      avctx->skip_frame >= AVDISCARD_ALL) {
2517                     skip_frame = 1;
2518                     break;
2519                 }
2520
2521                 if (!s->mpeg_enc_ctx_allocated)
2522                     break;
2523
2524                 if (s2->codec_id == AV_CODEC_ID_MPEG2VIDEO) {
2525                     if (mb_y < avctx->skip_top || mb_y >= s2->mb_height - avctx->skip_bottom)
2526                         break;
2527                 }
2528
2529                 if (!s2->pict_type) {
2530                     av_log(avctx, AV_LOG_ERROR, "Missing picture start code\n");
2531                     if (avctx->err_recognition & AV_EF_EXPLODE)
2532                         return AVERROR_INVALIDDATA;
2533                     break;
2534                 }
2535
2536                 if (s->first_slice) {
2537                     skip_frame = 0;
2538                     s->first_slice = 0;
2539                     if (mpeg_field_start(s2, buf, buf_size) < 0)
2540                         return -1;
2541                 }
2542                 if (!s2->current_picture_ptr) {
2543                     av_log(avctx, AV_LOG_ERROR, "current_picture not initialized\n");
2544                     return AVERROR_INVALIDDATA;
2545                 }
2546
2547                 if (uses_vdpau(avctx)) {
2548                     s->slice_count++;
2549                     break;
2550                 }
2551
2552                 if (HAVE_THREADS && (avctx->active_thread_type & FF_THREAD_SLICE) &&
2553                     !avctx->hwaccel) {
2554                     int threshold = (s2->mb_height * s->slice_count +
2555                                      s2->slice_context_count / 2) /
2556                                     s2->slice_context_count;
2557                     av_assert0(avctx->thread_count > 1);
2558                     if (threshold <= mb_y) {
2559                         MpegEncContext *thread_context = s2->thread_context[s->slice_count];
2560
2561                         thread_context->start_mb_y = mb_y;
2562                         thread_context->end_mb_y   = s2->mb_height;
2563                         if (s->slice_count) {
2564                             s2->thread_context[s->slice_count-1]->end_mb_y = mb_y;
2565                             ret = ff_update_duplicate_context(thread_context,
2566                                                               s2);
2567                             if (ret < 0)
2568                                 return ret;
2569                         }
2570                         init_get_bits(&thread_context->gb, buf_ptr, input_size*8);
2571                         s->slice_count++;
2572                     }
2573                     buf_ptr += 2; // FIXME add minimum number of bytes per slice
2574                 } else {
2575                     ret = mpeg_decode_slice(s2, mb_y, &buf_ptr, input_size);
2576                     emms_c();
2577
2578                     if (ret < 0) {
2579                         if (avctx->err_recognition & AV_EF_EXPLODE)
2580                             return ret;
2581                         if (s2->resync_mb_x >= 0 && s2->resync_mb_y >= 0)
2582                             ff_er_add_slice(&s2->er, s2->resync_mb_x, s2->resync_mb_y, s2->mb_x, s2->mb_y, ER_AC_ERROR | ER_DC_ERROR | ER_MV_ERROR);
2583                     } else {
2584                         ff_er_add_slice(&s2->er, s2->resync_mb_x, s2->resync_mb_y, s2->mb_x-1, s2->mb_y, ER_AC_END | ER_DC_END | ER_MV_END);
2585                     }
2586                 }
2587             }
2588             break;
2589         }
2590     }
2591 }
2592
2593 static int mpeg_decode_frame(AVCodecContext *avctx,
2594                              void *data, int *got_output,
2595                              AVPacket *avpkt)
2596 {
2597     const uint8_t *buf = avpkt->data;
2598     int ret;
2599     int buf_size = avpkt->size;
2600     Mpeg1Context *s = avctx->priv_data;
2601     AVFrame *picture = data;
2602     MpegEncContext *s2 = &s->mpeg_enc_ctx;
2603     av_dlog(avctx, "fill_buffer\n");
2604
2605     if (buf_size == 0 || (buf_size == 4 && AV_RB32(buf) == SEQ_END_CODE)) {
2606         /* special case for last picture */
2607         if (s2->low_delay == 0 && s2->next_picture_ptr) {
2608             int ret = av_frame_ref(picture, &s2->next_picture_ptr->f);
2609             if (ret < 0)
2610                 return ret;
2611
2612             s2->next_picture_ptr = NULL;
2613
2614             *got_output = 1;
2615         }
2616         return buf_size;
2617     }
2618
2619     if (s2->flags & CODEC_FLAG_TRUNCATED) {
2620         int next = ff_mpeg1_find_frame_end(&s2->parse_context, buf, buf_size, NULL);
2621
2622         if (ff_combine_frame(&s2->parse_context, next, (const uint8_t **)&buf, &buf_size) < 0)
2623             return buf_size;
2624     }
2625
2626     s2->codec_tag = avpriv_toupper4(avctx->codec_tag);
2627     if (s->mpeg_enc_ctx_allocated == 0 && (   s2->codec_tag == AV_RL32("VCR2")
2628                                            || s2->codec_tag == AV_RL32("BW10")
2629                                           ))
2630         vcr2_init_sequence(avctx);
2631
2632     s->slice_count = 0;
2633
2634     if (avctx->extradata && !s->extradata_decoded) {
2635         ret = decode_chunks(avctx, picture, got_output, avctx->extradata, avctx->extradata_size);
2636         if(*got_output) {
2637             av_log(avctx, AV_LOG_ERROR, "picture in extradata\n");
2638             *got_output = 0;
2639         }
2640         s->extradata_decoded = 1;
2641         if (ret < 0 && (avctx->err_recognition & AV_EF_EXPLODE)) {
2642             s2->current_picture_ptr = NULL;
2643             return ret;
2644         }
2645     }
2646
2647     ret = decode_chunks(avctx, picture, got_output, buf, buf_size);
2648     if (ret<0 || *got_output)
2649         s2->current_picture_ptr = NULL;
2650
2651     return ret;
2652 }
2653
2654
2655 static void flush(AVCodecContext *avctx)
2656 {
2657     Mpeg1Context *s = avctx->priv_data;
2658
2659     s->sync=0;
2660
2661     ff_mpeg_flush(avctx);
2662 }
2663
2664 static av_cold int mpeg_decode_end(AVCodecContext *avctx)
2665 {
2666     Mpeg1Context *s = avctx->priv_data;
2667
2668     if (s->mpeg_enc_ctx_allocated)
2669         ff_MPV_common_end(&s->mpeg_enc_ctx);
2670     av_freep(&s->a53_caption);
2671     return 0;
2672 }
2673
2674 static const AVProfile mpeg2_video_profiles[] = {
2675     { FF_PROFILE_MPEG2_422,          "4:2:2"              },
2676     { FF_PROFILE_MPEG2_HIGH,         "High"               },
2677     { FF_PROFILE_MPEG2_SS,           "Spatially Scalable" },
2678     { FF_PROFILE_MPEG2_SNR_SCALABLE, "SNR Scalable"       },
2679     { FF_PROFILE_MPEG2_MAIN,         "Main"               },
2680     { FF_PROFILE_MPEG2_SIMPLE,       "Simple"             },
2681     { FF_PROFILE_RESERVED,           "Reserved"           },
2682     { FF_PROFILE_RESERVED,           "Reserved"           },
2683     { FF_PROFILE_UNKNOWN },
2684 };
2685
2686
2687 AVCodec ff_mpeg1video_decoder = {
2688     .name                  = "mpeg1video",
2689     .long_name             = NULL_IF_CONFIG_SMALL("MPEG-1 video"),
2690     .type                  = AVMEDIA_TYPE_VIDEO,
2691     .id                    = AV_CODEC_ID_MPEG1VIDEO,
2692     .priv_data_size        = sizeof(Mpeg1Context),
2693     .init                  = mpeg_decode_init,
2694     .close                 = mpeg_decode_end,
2695     .decode                = mpeg_decode_frame,
2696     .capabilities          = CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 |
2697                              CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY |
2698                              CODEC_CAP_SLICE_THREADS,
2699     .flush                 = flush,
2700     .max_lowres            = 3,
2701     .update_thread_context = ONLY_IF_THREADS_ENABLED(mpeg_decode_update_thread_context)
2702 };
2703
2704 AVCodec ff_mpeg2video_decoder = {
2705     .name           = "mpeg2video",
2706     .long_name      = NULL_IF_CONFIG_SMALL("MPEG-2 video"),
2707     .type           = AVMEDIA_TYPE_VIDEO,
2708     .id             = AV_CODEC_ID_MPEG2VIDEO,
2709     .priv_data_size = sizeof(Mpeg1Context),
2710     .init           = mpeg_decode_init,
2711     .close          = mpeg_decode_end,
2712     .decode         = mpeg_decode_frame,
2713     .capabilities   = CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 |
2714                       CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY |
2715                       CODEC_CAP_SLICE_THREADS,
2716     .flush          = flush,
2717     .max_lowres     = 3,
2718     .profiles       = NULL_IF_CONFIG_SMALL(mpeg2_video_profiles),
2719 };
2720
2721 //legacy decoder
2722 AVCodec ff_mpegvideo_decoder = {
2723     .name           = "mpegvideo",
2724     .long_name      = NULL_IF_CONFIG_SMALL("MPEG-1 video"),
2725     .type           = AVMEDIA_TYPE_VIDEO,
2726     .id             = AV_CODEC_ID_MPEG2VIDEO,
2727     .priv_data_size = sizeof(Mpeg1Context),
2728     .init           = mpeg_decode_init,
2729     .close          = mpeg_decode_end,
2730     .decode         = mpeg_decode_frame,
2731     .capabilities   = CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY | CODEC_CAP_SLICE_THREADS,
2732     .flush          = flush,
2733     .max_lowres     = 3,
2734 };
2735
2736 #if FF_API_XVMC
2737 #if CONFIG_MPEG_XVMC_DECODER
2738 static av_cold int mpeg_mc_decode_init(AVCodecContext *avctx)
2739 {
2740     if (avctx->active_thread_type & FF_THREAD_SLICE)
2741         return -1;
2742     if (!(avctx->slice_flags & SLICE_FLAG_CODED_ORDER))
2743         return -1;
2744     if (!(avctx->slice_flags & SLICE_FLAG_ALLOW_FIELD)) {
2745         av_dlog(avctx, "mpeg12.c: XvMC decoder will work better if SLICE_FLAG_ALLOW_FIELD is set\n");
2746     }
2747     mpeg_decode_init(avctx);
2748
2749     avctx->pix_fmt           = AV_PIX_FMT_XVMC_MPEG2_IDCT;
2750     avctx->xvmc_acceleration = 2; // 2 - the blocks are packed!
2751
2752     return 0;
2753 }
2754
2755 AVCodec ff_mpeg_xvmc_decoder = {
2756     .name           = "mpegvideo_xvmc",
2757     .long_name      = NULL_IF_CONFIG_SMALL("MPEG-1/2 video XvMC (X-Video Motion Compensation)"),
2758     .type           = AVMEDIA_TYPE_VIDEO,
2759     .id             = AV_CODEC_ID_MPEG2VIDEO_XVMC,
2760     .priv_data_size = sizeof(Mpeg1Context),
2761     .init           = mpeg_mc_decode_init,
2762     .close          = mpeg_decode_end,
2763     .decode         = mpeg_decode_frame,
2764     .capabilities   = CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 |
2765                       CODEC_CAP_TRUNCATED| CODEC_CAP_HWACCEL | CODEC_CAP_DELAY,
2766     .flush          = flush,
2767 };
2768
2769 #endif
2770 #endif /* FF_API_XVMC */
2771
2772 #if CONFIG_MPEG_VDPAU_DECODER
2773 AVCodec ff_mpeg_vdpau_decoder = {
2774     .name           = "mpegvideo_vdpau",
2775     .long_name      = NULL_IF_CONFIG_SMALL("MPEG-1/2 video (VDPAU acceleration)"),
2776     .type           = AVMEDIA_TYPE_VIDEO,
2777     .id             = AV_CODEC_ID_MPEG2VIDEO,
2778     .priv_data_size = sizeof(Mpeg1Context),
2779     .init           = mpeg_decode_init,
2780     .close          = mpeg_decode_end,
2781     .decode         = mpeg_decode_frame,
2782     .capabilities   = CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED |
2783                       CODEC_CAP_HWACCEL_VDPAU | CODEC_CAP_DELAY,
2784     .flush          = flush,
2785 };
2786 #endif
2787
2788 #if CONFIG_MPEG1_VDPAU_DECODER
2789 AVCodec ff_mpeg1_vdpau_decoder = {
2790     .name           = "mpeg1video_vdpau",
2791     .long_name      = NULL_IF_CONFIG_SMALL("MPEG-1 video (VDPAU acceleration)"),
2792     .type           = AVMEDIA_TYPE_VIDEO,
2793     .id             = AV_CODEC_ID_MPEG1VIDEO,
2794     .priv_data_size = sizeof(Mpeg1Context),
2795     .init           = mpeg_decode_init,
2796     .close          = mpeg_decode_end,
2797     .decode         = mpeg_decode_frame,
2798     .capabilities   = CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED |
2799                       CODEC_CAP_HWACCEL_VDPAU | CODEC_CAP_DELAY,
2800     .flush          = flush,
2801 };
2802 #endif