3 * Copyright (c) 2000, 2001 Fabrice Bellard
4 * Copyright (c) 2002-2013 Michael Niedermayer <michaelni@gmx.at>
6 * This file is part of FFmpeg.
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.
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.
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
28 #define UNCHECKED_BITSTREAM_READER 1
31 #include "libavutil/attributes.h"
32 #include "libavutil/internal.h"
33 #include "libavutil/stereo3d.h"
36 #include "bytestream.h"
37 #include "error_resilience.h"
42 #include "mpeg12data.h"
43 #include "mpegutils.h"
44 #include "mpegvideo.h"
47 #include "vdpau_internal.h"
48 #include "xvmc_internal.h"
50 typedef struct Mpeg1Context
{
51 MpegEncContext mpeg_enc_ctx
;
52 int mpeg_enc_ctx_allocated
; /* true if decoding context allocated */
53 int repeat_field
; /* true if we must repeat the field */
54 AVPanScan pan_scan
; /* some temporary storage for the panscan */
63 int save_width
, save_height
, save_progressive_seq
;
64 AVRational frame_rate_ext
; /* MPEG-2 specific framerate modificator */
65 int sync
; /* Did we reach a sync point like a GOP/SEQ/KEYFrame? */
68 int extradata_decoded
;
71 #define MB_TYPE_ZERO_MV 0x20000000
73 static const uint32_t ptype2mb_type
[7] = {
75 MB_TYPE_L0
| MB_TYPE_CBP
| MB_TYPE_ZERO_MV
| MB_TYPE_16x16
,
77 MB_TYPE_L0
| MB_TYPE_CBP
,
78 MB_TYPE_QUANT
| MB_TYPE_INTRA
,
79 MB_TYPE_QUANT
| MB_TYPE_L0
| MB_TYPE_CBP
| MB_TYPE_ZERO_MV
| MB_TYPE_16x16
,
80 MB_TYPE_QUANT
| MB_TYPE_L0
| MB_TYPE_CBP
,
83 static const uint32_t btype2mb_type
[11] = {
86 MB_TYPE_L1
| MB_TYPE_CBP
,
88 MB_TYPE_L0
| MB_TYPE_CBP
,
90 MB_TYPE_L0L1
| MB_TYPE_CBP
,
91 MB_TYPE_QUANT
| MB_TYPE_INTRA
,
92 MB_TYPE_QUANT
| MB_TYPE_L1
| MB_TYPE_CBP
,
93 MB_TYPE_QUANT
| MB_TYPE_L0
| MB_TYPE_CBP
,
94 MB_TYPE_QUANT
| MB_TYPE_L0L1
| MB_TYPE_CBP
,
97 static const uint8_t non_linear_qscale
[32] = {
98 0, 1, 2, 3, 4, 5, 6, 7,
99 8, 10, 12, 14, 16, 18, 20, 22,
100 24, 28, 32, 36, 40, 44, 48, 52,
101 56, 64, 72, 80, 88, 96, 104, 112,
104 /* as H.263, but only 17 codes */
105 static int mpeg_decode_motion(MpegEncContext
*s
, int fcode
, int pred
)
107 int code
, sign
, val
, shift
;
109 code
= get_vlc2(&s
->gb
, ff_mv_vlc
.table
, MV_VLC_BITS
, 2);
115 sign
= get_bits1(&s
->gb
);
119 val
= (val
- 1) << shift
;
120 val
|= get_bits(&s
->gb
, shift
);
127 /* modulo decoding */
128 return sign_extend(val
, 5 + shift
);
131 #define check_scantable_index(ctx, x) \
134 av_log(ctx->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", \
135 ctx->mb_x, ctx->mb_y); \
136 return AVERROR_INVALIDDATA; \
140 static inline int mpeg1_decode_block_intra(MpegEncContext
*s
,
141 int16_t *block
, int n
)
143 int level
, dc
, diff
, i
, j
, run
;
145 RLTable
*rl
= &ff_rl_mpeg1
;
146 uint8_t *const scantable
= s
->intra_scantable
.permutated
;
147 const uint16_t *quant_matrix
= s
->intra_matrix
;
148 const int qscale
= s
->qscale
;
151 component
= (n
<= 3 ? 0 : n
- 4 + 1);
152 diff
= decode_dc(&s
->gb
, component
);
155 dc
= s
->last_dc
[component
];
157 s
->last_dc
[component
] = dc
;
158 block
[0] = dc
* quant_matrix
[0];
159 av_dlog(s
->avctx
, "dc=%d diff=%d\n", dc
, diff
);
162 OPEN_READER(re
, &s
->gb
);
163 UPDATE_CACHE(re
, &s
->gb
);
164 if (((int32_t)GET_CACHE(re
, &s
->gb
)) <= (int32_t)0xBFFFFFFF)
167 /* now quantify & encode AC coefficients */
169 GET_RL_VLC(level
, run
, re
, &s
->gb
, rl
->rl_vlc
[0],
174 check_scantable_index(s
, i
);
176 level
= (level
* qscale
* quant_matrix
[j
]) >> 4;
177 level
= (level
- 1) | 1;
178 level
= (level
^ SHOW_SBITS(re
, &s
->gb
, 1)) -
179 SHOW_SBITS(re
, &s
->gb
, 1);
180 SKIP_BITS(re
, &s
->gb
, 1);
183 run
= SHOW_UBITS(re
, &s
->gb
, 6) + 1;
184 LAST_SKIP_BITS(re
, &s
->gb
, 6);
185 UPDATE_CACHE(re
, &s
->gb
);
186 level
= SHOW_SBITS(re
, &s
->gb
, 8);
187 SKIP_BITS(re
, &s
->gb
, 8);
189 level
= SHOW_UBITS(re
, &s
->gb
, 8) - 256;
190 SKIP_BITS(re
, &s
->gb
, 8);
191 } else if (level
== 0) {
192 level
= SHOW_UBITS(re
, &s
->gb
, 8);
193 SKIP_BITS(re
, &s
->gb
, 8);
196 check_scantable_index(s
, i
);
200 level
= (level
* qscale
* quant_matrix
[j
]) >> 4;
201 level
= (level
- 1) | 1;
204 level
= (level
* qscale
* quant_matrix
[j
]) >> 4;
205 level
= (level
- 1) | 1;
210 if (((int32_t)GET_CACHE(re
, &s
->gb
)) <= (int32_t)0xBFFFFFFF)
213 UPDATE_CACHE(re
, &s
->gb
);
216 LAST_SKIP_BITS(re
, &s
->gb
, 2);
217 CLOSE_READER(re
, &s
->gb
);
219 s
->block_last_index
[n
] = i
;
223 int ff_mpeg1_decode_block_intra(MpegEncContext
*s
, int16_t *block
, int n
)
225 return mpeg1_decode_block_intra(s
, block
, n
);
228 static inline int mpeg1_decode_block_inter(MpegEncContext
*s
,
229 int16_t *block
, int n
)
231 int level
, i
, j
, run
;
232 RLTable
*rl
= &ff_rl_mpeg1
;
233 uint8_t *const scantable
= s
->intra_scantable
.permutated
;
234 const uint16_t *quant_matrix
= s
->inter_matrix
;
235 const int qscale
= s
->qscale
;
238 OPEN_READER(re
, &s
->gb
);
240 // special case for first coefficient, no need to add second VLC table
241 UPDATE_CACHE(re
, &s
->gb
);
242 if (((int32_t) GET_CACHE(re
, &s
->gb
)) < 0) {
243 level
= (3 * qscale
* quant_matrix
[0]) >> 5;
244 level
= (level
- 1) | 1;
245 if (GET_CACHE(re
, &s
->gb
) & 0x40000000)
249 SKIP_BITS(re
, &s
->gb
, 2);
250 if (((int32_t) GET_CACHE(re
, &s
->gb
)) <= (int32_t) 0xBFFFFFFF)
253 /* now quantify & encode AC coefficients */
255 GET_RL_VLC(level
, run
, re
, &s
->gb
, rl
->rl_vlc
[0],
260 check_scantable_index(s
, i
);
262 level
= ((level
* 2 + 1) * qscale
* quant_matrix
[j
]) >> 5;
263 level
= (level
- 1) | 1;
264 level
= (level
^ SHOW_SBITS(re
, &s
->gb
, 1)) -
265 SHOW_SBITS(re
, &s
->gb
, 1);
266 SKIP_BITS(re
, &s
->gb
, 1);
269 run
= SHOW_UBITS(re
, &s
->gb
, 6) + 1;
270 LAST_SKIP_BITS(re
, &s
->gb
, 6);
271 UPDATE_CACHE(re
, &s
->gb
);
272 level
= SHOW_SBITS(re
, &s
->gb
, 8);
273 SKIP_BITS(re
, &s
->gb
, 8);
275 level
= SHOW_UBITS(re
, &s
->gb
, 8) - 256;
276 SKIP_BITS(re
, &s
->gb
, 8);
277 } else if (level
== 0) {
278 level
= SHOW_UBITS(re
, &s
->gb
, 8);
279 SKIP_BITS(re
, &s
->gb
, 8);
282 check_scantable_index(s
, i
);
286 level
= ((level
* 2 + 1) * qscale
* quant_matrix
[j
]) >> 5;
287 level
= (level
- 1) | 1;
290 level
= ((level
* 2 + 1) * qscale
* quant_matrix
[j
]) >> 5;
291 level
= (level
- 1) | 1;
296 if (((int32_t) GET_CACHE(re
, &s
->gb
)) <= (int32_t) 0xBFFFFFFF)
298 UPDATE_CACHE(re
, &s
->gb
);
301 LAST_SKIP_BITS(re
, &s
->gb
, 2);
302 CLOSE_READER(re
, &s
->gb
);
304 s
->block_last_index
[n
] = i
;
309 * Note: this function can read out of range and crash for corrupt streams.
310 * Changing this would eat up any speed benefits it has.
311 * Do not use "fast" flag if you need the code to be robust.
313 static inline int mpeg1_fast_decode_block_inter(MpegEncContext
*s
,
314 int16_t *block
, int n
)
316 int level
, i
, j
, run
;
317 RLTable
*rl
= &ff_rl_mpeg1
;
318 uint8_t *const scantable
= s
->intra_scantable
.permutated
;
319 const int qscale
= s
->qscale
;
322 OPEN_READER(re
, &s
->gb
);
324 // Special case for first coefficient, no need to add second VLC table.
325 UPDATE_CACHE(re
, &s
->gb
);
326 if (((int32_t) GET_CACHE(re
, &s
->gb
)) < 0) {
327 level
= (3 * qscale
) >> 1;
328 level
= (level
- 1) | 1;
329 if (GET_CACHE(re
, &s
->gb
) & 0x40000000)
333 SKIP_BITS(re
, &s
->gb
, 2);
334 if (((int32_t) GET_CACHE(re
, &s
->gb
)) <= (int32_t) 0xBFFFFFFF)
338 /* now quantify & encode AC coefficients */
340 GET_RL_VLC(level
, run
, re
, &s
->gb
, rl
->rl_vlc
[0],
345 check_scantable_index(s
, i
);
347 level
= ((level
* 2 + 1) * qscale
) >> 1;
348 level
= (level
- 1) | 1;
349 level
= (level
^ SHOW_SBITS(re
, &s
->gb
, 1)) -
350 SHOW_SBITS(re
, &s
->gb
, 1);
351 SKIP_BITS(re
, &s
->gb
, 1);
354 run
= SHOW_UBITS(re
, &s
->gb
, 6) + 1;
355 LAST_SKIP_BITS(re
, &s
->gb
, 6);
356 UPDATE_CACHE(re
, &s
->gb
);
357 level
= SHOW_SBITS(re
, &s
->gb
, 8);
358 SKIP_BITS(re
, &s
->gb
, 8);
360 level
= SHOW_UBITS(re
, &s
->gb
, 8) - 256;
361 SKIP_BITS(re
, &s
->gb
, 8);
362 } else if (level
== 0) {
363 level
= SHOW_UBITS(re
, &s
->gb
, 8);
364 SKIP_BITS(re
, &s
->gb
, 8);
367 check_scantable_index(s
, i
);
371 level
= ((level
* 2 + 1) * qscale
) >> 1;
372 level
= (level
- 1) | 1;
375 level
= ((level
* 2 + 1) * qscale
) >> 1;
376 level
= (level
- 1) | 1;
381 if (((int32_t) GET_CACHE(re
, &s
->gb
)) <= (int32_t) 0xBFFFFFFF)
383 UPDATE_CACHE(re
, &s
->gb
);
386 LAST_SKIP_BITS(re
, &s
->gb
, 2);
387 CLOSE_READER(re
, &s
->gb
);
389 s
->block_last_index
[n
] = i
;
393 static inline int mpeg2_decode_block_non_intra(MpegEncContext
*s
,
394 int16_t *block
, int n
)
396 int level
, i
, j
, run
;
397 RLTable
*rl
= &ff_rl_mpeg1
;
398 uint8_t *const scantable
= s
->intra_scantable
.permutated
;
399 const uint16_t *quant_matrix
;
400 const int qscale
= s
->qscale
;
406 OPEN_READER(re
, &s
->gb
);
409 quant_matrix
= s
->inter_matrix
;
411 quant_matrix
= s
->chroma_inter_matrix
;
413 // Special case for first coefficient, no need to add second VLC table.
414 UPDATE_CACHE(re
, &s
->gb
);
415 if (((int32_t) GET_CACHE(re
, &s
->gb
)) < 0) {
416 level
= (3 * qscale
* quant_matrix
[0]) >> 5;
417 if (GET_CACHE(re
, &s
->gb
) & 0x40000000)
422 SKIP_BITS(re
, &s
->gb
, 2);
423 if (((int32_t) GET_CACHE(re
, &s
->gb
)) <= (int32_t) 0xBFFFFFFF)
427 /* now quantify & encode AC coefficients */
429 GET_RL_VLC(level
, run
, re
, &s
->gb
, rl
->rl_vlc
[0],
434 check_scantable_index(s
, i
);
436 level
= ((level
* 2 + 1) * qscale
* quant_matrix
[j
]) >> 5;
437 level
= (level
^ SHOW_SBITS(re
, &s
->gb
, 1)) -
438 SHOW_SBITS(re
, &s
->gb
, 1);
439 SKIP_BITS(re
, &s
->gb
, 1);
442 run
= SHOW_UBITS(re
, &s
->gb
, 6) + 1;
443 LAST_SKIP_BITS(re
, &s
->gb
, 6);
444 UPDATE_CACHE(re
, &s
->gb
);
445 level
= SHOW_SBITS(re
, &s
->gb
, 12);
446 SKIP_BITS(re
, &s
->gb
, 12);
449 check_scantable_index(s
, i
);
452 level
= ((-level
* 2 + 1) * qscale
* quant_matrix
[j
]) >> 5;
455 level
= ((level
* 2 + 1) * qscale
* quant_matrix
[j
]) >> 5;
461 if (((int32_t) GET_CACHE(re
, &s
->gb
)) <= (int32_t) 0xBFFFFFFF)
463 UPDATE_CACHE(re
, &s
->gb
);
466 LAST_SKIP_BITS(re
, &s
->gb
, 2);
467 CLOSE_READER(re
, &s
->gb
);
469 block
[63] ^= (mismatch
& 1);
471 s
->block_last_index
[n
] = i
;
476 * Note: this function can read out of range and crash for corrupt streams.
477 * Changing this would eat up any speed benefits it has.
478 * Do not use "fast" flag if you need the code to be robust.
480 static inline int mpeg2_fast_decode_block_non_intra(MpegEncContext
*s
,
481 int16_t *block
, int n
)
483 int level
, i
, j
, run
;
484 RLTable
*rl
= &ff_rl_mpeg1
;
485 uint8_t *const scantable
= s
->intra_scantable
.permutated
;
486 const int qscale
= s
->qscale
;
487 OPEN_READER(re
, &s
->gb
);
490 // special case for first coefficient, no need to add second VLC table
491 UPDATE_CACHE(re
, &s
->gb
);
492 if (((int32_t) GET_CACHE(re
, &s
->gb
)) < 0) {
493 level
= (3 * qscale
) >> 1;
494 if (GET_CACHE(re
, &s
->gb
) & 0x40000000)
498 SKIP_BITS(re
, &s
->gb
, 2);
499 if (((int32_t) GET_CACHE(re
, &s
->gb
)) <= (int32_t) 0xBFFFFFFF)
503 /* now quantify & encode AC coefficients */
505 GET_RL_VLC(level
, run
, re
, &s
->gb
, rl
->rl_vlc
[0], TEX_VLC_BITS
, 2, 0);
510 level
= ((level
* 2 + 1) * qscale
) >> 1;
511 level
= (level
^ SHOW_SBITS(re
, &s
->gb
, 1)) -
512 SHOW_SBITS(re
, &s
->gb
, 1);
513 SKIP_BITS(re
, &s
->gb
, 1);
516 run
= SHOW_UBITS(re
, &s
->gb
, 6) + 1;
517 LAST_SKIP_BITS(re
, &s
->gb
, 6);
518 UPDATE_CACHE(re
, &s
->gb
);
519 level
= SHOW_SBITS(re
, &s
->gb
, 12);
520 SKIP_BITS(re
, &s
->gb
, 12);
525 level
= ((-level
* 2 + 1) * qscale
) >> 1;
528 level
= ((level
* 2 + 1) * qscale
) >> 1;
533 if (((int32_t) GET_CACHE(re
, &s
->gb
)) <= (int32_t) 0xBFFFFFFF || i
> 63)
536 UPDATE_CACHE(re
, &s
->gb
);
539 LAST_SKIP_BITS(re
, &s
->gb
, 2);
540 CLOSE_READER(re
, &s
->gb
);
541 s
->block_last_index
[n
] = i
;
545 static inline int mpeg2_decode_block_intra(MpegEncContext
*s
,
546 int16_t *block
, int n
)
548 int level
, dc
, diff
, i
, j
, run
;
551 uint8_t *const scantable
= s
->intra_scantable
.permutated
;
552 const uint16_t *quant_matrix
;
553 const int qscale
= s
->qscale
;
558 quant_matrix
= s
->intra_matrix
;
561 quant_matrix
= s
->chroma_intra_matrix
;
562 component
= (n
& 1) + 1;
564 diff
= decode_dc(&s
->gb
, component
);
567 dc
= s
->last_dc
[component
];
569 s
->last_dc
[component
] = dc
;
570 block
[0] = dc
<< (3 - s
->intra_dc_precision
);
571 av_dlog(s
->avctx
, "dc=%d\n", block
[0]);
572 mismatch
= block
[0] ^ 1;
574 if (s
->intra_vlc_format
)
580 OPEN_READER(re
, &s
->gb
);
581 /* now quantify & encode AC coefficients */
583 UPDATE_CACHE(re
, &s
->gb
);
584 GET_RL_VLC(level
, run
, re
, &s
->gb
, rl
->rl_vlc
[0],
589 } else if (level
!= 0) {
591 check_scantable_index(s
, i
);
593 level
= (level
* qscale
* quant_matrix
[j
]) >> 4;
594 level
= (level
^ SHOW_SBITS(re
, &s
->gb
, 1)) -
595 SHOW_SBITS(re
, &s
->gb
, 1);
596 LAST_SKIP_BITS(re
, &s
->gb
, 1);
599 run
= SHOW_UBITS(re
, &s
->gb
, 6) + 1;
600 LAST_SKIP_BITS(re
, &s
->gb
, 6);
601 UPDATE_CACHE(re
, &s
->gb
);
602 level
= SHOW_SBITS(re
, &s
->gb
, 12);
603 SKIP_BITS(re
, &s
->gb
, 12);
605 check_scantable_index(s
, i
);
608 level
= (-level
* qscale
* quant_matrix
[j
]) >> 4;
611 level
= (level
* qscale
* quant_matrix
[j
]) >> 4;
618 CLOSE_READER(re
, &s
->gb
);
620 block
[63] ^= mismatch
& 1;
622 s
->block_last_index
[n
] = i
;
627 * Note: this function can read out of range and crash for corrupt streams.
628 * Changing this would eat up any speed benefits it has.
629 * Do not use "fast" flag if you need the code to be robust.
631 static inline int mpeg2_fast_decode_block_intra(MpegEncContext
*s
,
632 int16_t *block
, int n
)
634 int level
, dc
, diff
, i
, j
, run
;
637 uint8_t *const scantable
= s
->intra_scantable
.permutated
;
638 const uint16_t *quant_matrix
;
639 const int qscale
= s
->qscale
;
643 quant_matrix
= s
->intra_matrix
;
646 quant_matrix
= s
->chroma_intra_matrix
;
647 component
= (n
& 1) + 1;
649 diff
= decode_dc(&s
->gb
, component
);
652 dc
= s
->last_dc
[component
];
654 s
->last_dc
[component
] = dc
;
655 block
[0] = dc
<< (3 - s
->intra_dc_precision
);
657 if (s
->intra_vlc_format
)
663 OPEN_READER(re
, &s
->gb
);
664 /* now quantify & encode AC coefficients */
666 UPDATE_CACHE(re
, &s
->gb
);
667 GET_RL_VLC(level
, run
, re
, &s
->gb
, rl
->rl_vlc
[0],
670 if (level
>= 64 || i
> 63) {
672 } else if (level
!= 0) {
675 level
= (level
* qscale
* quant_matrix
[j
]) >> 4;
676 level
= (level
^ SHOW_SBITS(re
, &s
->gb
, 1)) -
677 SHOW_SBITS(re
, &s
->gb
, 1);
678 LAST_SKIP_BITS(re
, &s
->gb
, 1);
681 run
= SHOW_UBITS(re
, &s
->gb
, 6) + 1;
682 LAST_SKIP_BITS(re
, &s
->gb
, 6);
683 UPDATE_CACHE(re
, &s
->gb
);
684 level
= SHOW_SBITS(re
, &s
->gb
, 12);
685 SKIP_BITS(re
, &s
->gb
, 12);
689 level
= (-level
* qscale
* quant_matrix
[j
]) >> 4;
692 level
= (level
* qscale
* quant_matrix
[j
]) >> 4;
698 CLOSE_READER(re
, &s
->gb
);
701 s
->block_last_index
[n
] = i
;
705 /******************************************/
708 static inline int get_dmv(MpegEncContext
*s
)
710 if (get_bits1(&s
->gb
))
711 return 1 - (get_bits1(&s
->gb
) << 1);
716 static inline int get_qscale(MpegEncContext
*s
)
718 int qscale
= get_bits(&s
->gb
, 5);
720 return non_linear_qscale
[qscale
];
726 /* motion type (for MPEG-2) */
732 static int mpeg_decode_mb(MpegEncContext
*s
, int16_t block
[12][64])
734 int i
, j
, k
, cbp
, val
, mb_type
, motion_type
;
735 const int mb_block_count
= 4 + (1 << s
->chroma_format
);
738 av_dlog(s
->avctx
, "decode_mb: x=%d y=%d\n", s
->mb_x
, s
->mb_y
);
740 av_assert2(s
->mb_skipped
== 0);
742 if (s
->mb_skip_run
-- != 0) {
743 if (s
->pict_type
== AV_PICTURE_TYPE_P
) {
745 s
->current_picture
.mb_type
[s
->mb_x
+ s
->mb_y
* s
->mb_stride
] =
746 MB_TYPE_SKIP
| MB_TYPE_L0
| MB_TYPE_16x16
;
751 mb_type
= s
->current_picture
.mb_type
[s
->mb_x
+ s
->mb_y
* s
->mb_stride
- 1];
753 // FIXME not sure if this is allowed in MPEG at all
754 mb_type
= s
->current_picture
.mb_type
[s
->mb_width
+ (s
->mb_y
- 1) * s
->mb_stride
- 1];
755 if (IS_INTRA(mb_type
)) {
756 av_log(s
->avctx
, AV_LOG_ERROR
, "skip with previntra\n");
757 return AVERROR_INVALIDDATA
;
759 s
->current_picture
.mb_type
[s
->mb_x
+ s
->mb_y
* s
->mb_stride
] =
760 mb_type
| MB_TYPE_SKIP
;
762 if ((s
->mv
[0][0][0] | s
->mv
[0][0][1] | s
->mv
[1][0][0] | s
->mv
[1][0][1]) == 0)
769 switch (s
->pict_type
) {
771 case AV_PICTURE_TYPE_I
:
772 if (get_bits1(&s
->gb
) == 0) {
773 if (get_bits1(&s
->gb
) == 0) {
774 av_log(s
->avctx
, AV_LOG_ERROR
,
775 "invalid mb type in I Frame at %d %d\n",
777 return AVERROR_INVALIDDATA
;
779 mb_type
= MB_TYPE_QUANT
| MB_TYPE_INTRA
;
781 mb_type
= MB_TYPE_INTRA
;
784 case AV_PICTURE_TYPE_P
:
785 mb_type
= get_vlc2(&s
->gb
, ff_mb_ptype_vlc
.table
, MB_PTYPE_VLC_BITS
, 1);
787 av_log(s
->avctx
, AV_LOG_ERROR
,
788 "invalid mb type in P Frame at %d %d\n", s
->mb_x
, s
->mb_y
);
789 return AVERROR_INVALIDDATA
;
791 mb_type
= ptype2mb_type
[mb_type
];
793 case AV_PICTURE_TYPE_B
:
794 mb_type
= get_vlc2(&s
->gb
, ff_mb_btype_vlc
.table
, MB_BTYPE_VLC_BITS
, 1);
796 av_log(s
->avctx
, AV_LOG_ERROR
,
797 "invalid mb type in B Frame at %d %d\n", s
->mb_x
, s
->mb_y
);
798 return AVERROR_INVALIDDATA
;
800 mb_type
= btype2mb_type
[mb_type
];
803 av_dlog(s
->avctx
, "mb_type=%x\n", mb_type
);
804 // motion_type = 0; /* avoid warning */
805 if (IS_INTRA(mb_type
)) {
806 s
->bdsp
.clear_blocks(s
->block
[0]);
808 if (!s
->chroma_y_shift
)
809 s
->bdsp
.clear_blocks(s
->block
[6]);
811 /* compute DCT type */
812 // FIXME: add an interlaced_dct coded var?
813 if (s
->picture_structure
== PICT_FRAME
&&
814 !s
->frame_pred_frame_dct
)
815 s
->interlaced_dct
= get_bits1(&s
->gb
);
817 if (IS_QUANT(mb_type
))
818 s
->qscale
= get_qscale(s
);
820 if (s
->concealment_motion_vectors
) {
821 /* just parse them */
822 if (s
->picture_structure
!= PICT_FRAME
)
823 skip_bits1(&s
->gb
); /* field select */
826 s
->last_mv
[0][0][0] =
827 s
->last_mv
[0][1][0] = mpeg_decode_motion(s
, s
->mpeg_f_code
[0][0],
828 s
->last_mv
[0][0][0]);
830 s
->last_mv
[0][0][1] =
831 s
->last_mv
[0][1][1] = mpeg_decode_motion(s
, s
->mpeg_f_code
[0][1],
832 s
->last_mv
[0][0][1]);
834 skip_bits1(&s
->gb
); /* marker */
836 /* reset mv prediction */
837 memset(s
->last_mv
, 0, sizeof(s
->last_mv
));
840 // if 1, we memcpy blocks in xvmcvideo
841 if ((CONFIG_MPEG1_XVMC_HWACCEL
|| CONFIG_MPEG2_XVMC_HWACCEL
) && s
->pack_pblocks
)
842 ff_xvmc_pack_pblocks(s
, -1); // inter are always full blocks
844 if (s
->codec_id
== AV_CODEC_ID_MPEG2VIDEO
) {
845 if (s
->flags2
& CODEC_FLAG2_FAST
) {
846 for (i
= 0; i
< 6; i
++)
847 mpeg2_fast_decode_block_intra(s
, *s
->pblocks
[i
], i
);
849 for (i
= 0; i
< mb_block_count
; i
++)
850 if ((ret
= mpeg2_decode_block_intra(s
, *s
->pblocks
[i
], i
)) < 0)
854 for (i
= 0; i
< 6; i
++)
855 if ((ret
= mpeg1_decode_block_intra(s
, *s
->pblocks
[i
], i
)) < 0)
859 if (mb_type
& MB_TYPE_ZERO_MV
) {
860 av_assert2(mb_type
& MB_TYPE_CBP
);
862 s
->mv_dir
= MV_DIR_FORWARD
;
863 if (s
->picture_structure
== PICT_FRAME
) {
864 if (s
->picture_structure
== PICT_FRAME
865 && !s
->frame_pred_frame_dct
)
866 s
->interlaced_dct
= get_bits1(&s
->gb
);
867 s
->mv_type
= MV_TYPE_16X16
;
869 s
->mv_type
= MV_TYPE_FIELD
;
870 mb_type
|= MB_TYPE_INTERLACED
;
871 s
->field_select
[0][0] = s
->picture_structure
- 1;
874 if (IS_QUANT(mb_type
))
875 s
->qscale
= get_qscale(s
);
877 s
->last_mv
[0][0][0] = 0;
878 s
->last_mv
[0][0][1] = 0;
879 s
->last_mv
[0][1][0] = 0;
880 s
->last_mv
[0][1][1] = 0;
884 av_assert2(mb_type
& MB_TYPE_L0L1
);
885 // FIXME decide if MBs in field pictures are MB_TYPE_INTERLACED
886 /* get additional motion vector type */
887 if (s
->picture_structure
== PICT_FRAME
&& s
->frame_pred_frame_dct
) {
888 motion_type
= MT_FRAME
;
890 motion_type
= get_bits(&s
->gb
, 2);
891 if (s
->picture_structure
== PICT_FRAME
&& HAS_CBP(mb_type
))
892 s
->interlaced_dct
= get_bits1(&s
->gb
);
895 if (IS_QUANT(mb_type
))
896 s
->qscale
= get_qscale(s
);
899 s
->mv_dir
= (mb_type
>> 13) & 3;
900 av_dlog(s
->avctx
, "motion_type=%d\n", motion_type
);
901 switch (motion_type
) {
902 case MT_FRAME
: /* or MT_16X8 */
903 if (s
->picture_structure
== PICT_FRAME
) {
904 mb_type
|= MB_TYPE_16x16
;
905 s
->mv_type
= MV_TYPE_16X16
;
906 for (i
= 0; i
< 2; i
++) {
907 if (USES_LIST(mb_type
, i
)) {
910 s
->last_mv
[i
][0][0] =
911 s
->last_mv
[i
][1][0] =
912 mpeg_decode_motion(s
, s
->mpeg_f_code
[i
][0],
913 s
->last_mv
[i
][0][0]);
915 s
->last_mv
[i
][0][1] =
916 s
->last_mv
[i
][1][1] =
917 mpeg_decode_motion(s
, s
->mpeg_f_code
[i
][1],
918 s
->last_mv
[i
][0][1]);
919 /* full_pel: only for MPEG-1 */
920 if (s
->full_pel
[i
]) {
921 s
->mv
[i
][0][0] <<= 1;
922 s
->mv
[i
][0][1] <<= 1;
927 mb_type
|= MB_TYPE_16x8
| MB_TYPE_INTERLACED
;
928 s
->mv_type
= MV_TYPE_16X8
;
929 for (i
= 0; i
< 2; i
++) {
930 if (USES_LIST(mb_type
, i
)) {
932 for (j
= 0; j
< 2; j
++) {
933 s
->field_select
[i
][j
] = get_bits1(&s
->gb
);
934 for (k
= 0; k
< 2; k
++) {
935 val
= mpeg_decode_motion(s
, s
->mpeg_f_code
[i
][k
],
936 s
->last_mv
[i
][j
][k
]);
937 s
->last_mv
[i
][j
][k
] = val
;
938 s
->mv
[i
][j
][k
] = val
;
946 s
->mv_type
= MV_TYPE_FIELD
;
947 if (s
->picture_structure
== PICT_FRAME
) {
948 mb_type
|= MB_TYPE_16x8
| MB_TYPE_INTERLACED
;
949 for (i
= 0; i
< 2; i
++) {
950 if (USES_LIST(mb_type
, i
)) {
951 for (j
= 0; j
< 2; j
++) {
952 s
->field_select
[i
][j
] = get_bits1(&s
->gb
);
953 val
= mpeg_decode_motion(s
, s
->mpeg_f_code
[i
][0],
954 s
->last_mv
[i
][j
][0]);
955 s
->last_mv
[i
][j
][0] = val
;
956 s
->mv
[i
][j
][0] = val
;
957 av_dlog(s
->avctx
, "fmx=%d\n", val
);
958 val
= mpeg_decode_motion(s
, s
->mpeg_f_code
[i
][1],
959 s
->last_mv
[i
][j
][1] >> 1);
960 s
->last_mv
[i
][j
][1] = val
<< 1;
961 s
->mv
[i
][j
][1] = val
;
962 av_dlog(s
->avctx
, "fmy=%d\n", val
);
967 av_assert0(!s
->progressive_sequence
);
968 mb_type
|= MB_TYPE_16x16
| MB_TYPE_INTERLACED
;
969 for (i
= 0; i
< 2; i
++) {
970 if (USES_LIST(mb_type
, i
)) {
971 s
->field_select
[i
][0] = get_bits1(&s
->gb
);
972 for (k
= 0; k
< 2; k
++) {
973 val
= mpeg_decode_motion(s
, s
->mpeg_f_code
[i
][k
],
974 s
->last_mv
[i
][0][k
]);
975 s
->last_mv
[i
][0][k
] = val
;
976 s
->last_mv
[i
][1][k
] = val
;
977 s
->mv
[i
][0][k
] = val
;
984 if (s
->progressive_sequence
){
985 av_log(s
->avctx
, AV_LOG_ERROR
, "MT_DMV in progressive_sequence\n");
986 return AVERROR_INVALIDDATA
;
988 s
->mv_type
= MV_TYPE_DMV
;
989 for (i
= 0; i
< 2; i
++) {
990 if (USES_LIST(mb_type
, i
)) {
991 int dmx
, dmy
, mx
, my
, m
;
992 const int my_shift
= s
->picture_structure
== PICT_FRAME
;
994 mx
= mpeg_decode_motion(s
, s
->mpeg_f_code
[i
][0],
995 s
->last_mv
[i
][0][0]);
996 s
->last_mv
[i
][0][0] = mx
;
997 s
->last_mv
[i
][1][0] = mx
;
999 my
= mpeg_decode_motion(s
, s
->mpeg_f_code
[i
][1],
1000 s
->last_mv
[i
][0][1] >> my_shift
);
1004 s
->last_mv
[i
][0][1] = my
<< my_shift
;
1005 s
->last_mv
[i
][1][1] = my
<< my_shift
;
1007 s
->mv
[i
][0][0] = mx
;
1008 s
->mv
[i
][0][1] = my
;
1009 s
->mv
[i
][1][0] = mx
; // not used
1010 s
->mv
[i
][1][1] = my
; // not used
1012 if (s
->picture_structure
== PICT_FRAME
) {
1013 mb_type
|= MB_TYPE_16x16
| MB_TYPE_INTERLACED
;
1015 // m = 1 + 2 * s->top_field_first;
1016 m
= s
->top_field_first
? 1 : 3;
1018 /* top -> top pred */
1019 s
->mv
[i
][2][0] = ((mx
* m
+ (mx
> 0)) >> 1) + dmx
;
1020 s
->mv
[i
][2][1] = ((my
* m
+ (my
> 0)) >> 1) + dmy
- 1;
1022 s
->mv
[i
][3][0] = ((mx
* m
+ (mx
> 0)) >> 1) + dmx
;
1023 s
->mv
[i
][3][1] = ((my
* m
+ (my
> 0)) >> 1) + dmy
+ 1;
1025 mb_type
|= MB_TYPE_16x16
;
1027 s
->mv
[i
][2][0] = ((mx
+ (mx
> 0)) >> 1) + dmx
;
1028 s
->mv
[i
][2][1] = ((my
+ (my
> 0)) >> 1) + dmy
;
1029 if (s
->picture_structure
== PICT_TOP_FIELD
)
1038 av_log(s
->avctx
, AV_LOG_ERROR
,
1039 "00 motion_type at %d %d\n", s
->mb_x
, s
->mb_y
);
1040 return AVERROR_INVALIDDATA
;
1045 if (HAS_CBP(mb_type
)) {
1046 s
->bdsp
.clear_blocks(s
->block
[0]);
1048 cbp
= get_vlc2(&s
->gb
, ff_mb_pat_vlc
.table
, MB_PAT_VLC_BITS
, 1);
1049 if (mb_block_count
> 6) {
1050 cbp
<<= mb_block_count
- 6;
1051 cbp
|= get_bits(&s
->gb
, mb_block_count
- 6);
1052 s
->bdsp
.clear_blocks(s
->block
[6]);
1055 av_log(s
->avctx
, AV_LOG_ERROR
,
1056 "invalid cbp %d at %d %d\n", cbp
, s
->mb_x
, s
->mb_y
);
1057 return AVERROR_INVALIDDATA
;
1060 // if 1, we memcpy blocks in xvmcvideo
1061 if ((CONFIG_MPEG1_XVMC_HWACCEL
|| CONFIG_MPEG2_XVMC_HWACCEL
) && s
->pack_pblocks
)
1062 ff_xvmc_pack_pblocks(s
, cbp
);
1064 if (s
->codec_id
== AV_CODEC_ID_MPEG2VIDEO
) {
1065 if (s
->flags2
& CODEC_FLAG2_FAST
) {
1066 for (i
= 0; i
< 6; i
++) {
1068 mpeg2_fast_decode_block_non_intra(s
, *s
->pblocks
[i
], i
);
1070 s
->block_last_index
[i
] = -1;
1074 cbp
<<= 12 - mb_block_count
;
1076 for (i
= 0; i
< mb_block_count
; i
++) {
1077 if (cbp
& (1 << 11)) {
1078 if ((ret
= mpeg2_decode_block_non_intra(s
, *s
->pblocks
[i
], i
)) < 0)
1081 s
->block_last_index
[i
] = -1;
1087 if (s
->flags2
& CODEC_FLAG2_FAST
) {
1088 for (i
= 0; i
< 6; i
++) {
1090 mpeg1_fast_decode_block_inter(s
, *s
->pblocks
[i
], i
);
1092 s
->block_last_index
[i
] = -1;
1096 for (i
= 0; i
< 6; i
++) {
1098 if ((ret
= mpeg1_decode_block_inter(s
, *s
->pblocks
[i
], i
)) < 0)
1101 s
->block_last_index
[i
] = -1;
1108 for (i
= 0; i
< 12; i
++)
1109 s
->block_last_index
[i
] = -1;
1113 s
->current_picture
.mb_type
[s
->mb_x
+ s
->mb_y
* s
->mb_stride
] = mb_type
;
1118 static av_cold
int mpeg_decode_init(AVCodecContext
*avctx
)
1120 Mpeg1Context
*s
= avctx
->priv_data
;
1121 MpegEncContext
*s2
= &s
->mpeg_enc_ctx
;
1123 ff_mpv_decode_defaults(s2
);
1125 if ( avctx
->codec_tag
!= AV_RL32("VCR2")
1126 && avctx
->codec_tag
!= AV_RL32("BW10"))
1127 avctx
->coded_width
= avctx
->coded_height
= 0; // do not trust dimensions from input
1128 ff_mpv_decode_init(s2
, avctx
);
1130 s
->mpeg_enc_ctx
.avctx
= avctx
;
1132 /* we need some permutation to store matrices,
1133 * until the decoder sets the real permutation. */
1134 ff_mpv_idct_init(s2
);
1135 ff_mpeg12_common_init(&s
->mpeg_enc_ctx
);
1136 ff_mpeg12_init_vlcs();
1138 s
->mpeg_enc_ctx_allocated
= 0;
1139 s
->mpeg_enc_ctx
.picture_number
= 0;
1140 s
->repeat_field
= 0;
1141 s
->mpeg_enc_ctx
.codec_id
= avctx
->codec
->id
;
1142 avctx
->color_range
= AVCOL_RANGE_MPEG
;
1143 if (avctx
->codec
->id
== AV_CODEC_ID_MPEG1VIDEO
)
1144 avctx
->chroma_sample_location
= AVCHROMA_LOC_CENTER
;
1146 avctx
->chroma_sample_location
= AVCHROMA_LOC_LEFT
;
1150 static int mpeg_decode_update_thread_context(AVCodecContext
*avctx
,
1151 const AVCodecContext
*avctx_from
)
1153 Mpeg1Context
*ctx
= avctx
->priv_data
, *ctx_from
= avctx_from
->priv_data
;
1154 MpegEncContext
*s
= &ctx
->mpeg_enc_ctx
, *s1
= &ctx_from
->mpeg_enc_ctx
;
1157 if (avctx
== avctx_from
||
1158 !ctx_from
->mpeg_enc_ctx_allocated
||
1159 !s1
->context_initialized
)
1162 err
= ff_mpeg_update_thread_context(avctx
, avctx_from
);
1166 if (!ctx
->mpeg_enc_ctx_allocated
)
1167 memcpy(s
+ 1, s1
+ 1, sizeof(Mpeg1Context
) - sizeof(MpegEncContext
));
1169 if (!(s
->pict_type
== AV_PICTURE_TYPE_B
|| s
->low_delay
))
1170 s
->picture_number
++;
1175 static void quant_matrix_rebuild(uint16_t *matrix
, const uint8_t *old_perm
,
1176 const uint8_t *new_perm
)
1178 uint16_t temp_matrix
[64];
1181 memcpy(temp_matrix
, matrix
, 64 * sizeof(uint16_t));
1183 for (i
= 0; i
< 64; i
++)
1184 matrix
[new_perm
[i
]] = temp_matrix
[old_perm
[i
]];
1187 static const enum AVPixelFormat mpeg1_hwaccel_pixfmt_list_420
[] = {
1188 #if CONFIG_MPEG1_XVMC_HWACCEL
1191 #if CONFIG_MPEG1_VDPAU_HWACCEL
1192 AV_PIX_FMT_VDPAU_MPEG1
,
1199 static const enum AVPixelFormat mpeg2_hwaccel_pixfmt_list_420
[] = {
1200 #if CONFIG_MPEG2_XVMC_HWACCEL
1203 #if CONFIG_MPEG2_VDPAU_HWACCEL
1204 AV_PIX_FMT_VDPAU_MPEG2
,
1207 #if CONFIG_MPEG2_DXVA2_HWACCEL
1208 AV_PIX_FMT_DXVA2_VLD
,
1210 #if CONFIG_MPEG2_VAAPI_HWACCEL
1211 AV_PIX_FMT_VAAPI_VLD
,
1217 static const enum AVPixelFormat mpeg12_pixfmt_list_422
[] = {
1222 static const enum AVPixelFormat mpeg12_pixfmt_list_444
[] = {
1227 static inline int uses_vdpau(AVCodecContext
*avctx
) {
1228 return avctx
->pix_fmt
== AV_PIX_FMT_VDPAU_MPEG1
|| avctx
->pix_fmt
== AV_PIX_FMT_VDPAU_MPEG2
;
1231 static enum AVPixelFormat
mpeg_get_pixelformat(AVCodecContext
*avctx
)
1233 Mpeg1Context
*s1
= avctx
->priv_data
;
1234 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
1235 const enum AVPixelFormat
*pix_fmts
;
1237 if (s
->chroma_format
< 2)
1238 pix_fmts
= avctx
->codec_id
== AV_CODEC_ID_MPEG1VIDEO
?
1239 mpeg1_hwaccel_pixfmt_list_420
:
1240 mpeg2_hwaccel_pixfmt_list_420
;
1241 else if (s
->chroma_format
== 2)
1242 pix_fmts
= mpeg12_pixfmt_list_422
;
1244 pix_fmts
= mpeg12_pixfmt_list_444
;
1246 return ff_thread_get_format(avctx
, pix_fmts
);
1249 static void setup_hwaccel_for_pixfmt(AVCodecContext
*avctx
)
1251 // until then pix_fmt may be changed right after codec init
1252 if (avctx
->hwaccel
|| uses_vdpau(avctx
))
1253 if (avctx
->idct_algo
== FF_IDCT_AUTO
)
1254 avctx
->idct_algo
= FF_IDCT_SIMPLE
;
1256 if (avctx
->hwaccel
&& avctx
->pix_fmt
== AV_PIX_FMT_XVMC
) {
1257 Mpeg1Context
*s1
= avctx
->priv_data
;
1258 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
1260 s
->pack_pblocks
= 1;
1262 avctx
->xvmc_acceleration
= 2;
1263 #endif /* FF_API_XVMC */
1267 /* Call this function when we know all parameters.
1268 * It may be called in different places for MPEG-1 and MPEG-2. */
1269 static int mpeg_decode_postinit(AVCodecContext
*avctx
)
1271 Mpeg1Context
*s1
= avctx
->priv_data
;
1272 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
1273 uint8_t old_permutation
[64];
1276 if ((s1
->mpeg_enc_ctx_allocated
== 0) ||
1277 avctx
->coded_width
!= s
->width
||
1278 avctx
->coded_height
!= s
->height
||
1279 s1
->save_width
!= s
->width
||
1280 s1
->save_height
!= s
->height
||
1281 s1
->save_aspect_info
!= s
->aspect_ratio_info
||
1282 (s1
->save_progressive_seq
!= s
->progressive_sequence
&& FFALIGN(s
->height
, 16) != FFALIGN(s
->height
, 32)) ||
1284 if (s1
->mpeg_enc_ctx_allocated
) {
1285 ParseContext pc
= s
->parse_context
;
1286 s
->parse_context
.buffer
= 0;
1287 ff_mpv_common_end(s
);
1288 s
->parse_context
= pc
;
1289 s1
->mpeg_enc_ctx_allocated
= 0;
1292 if ((s
->width
== 0) || (s
->height
== 0))
1295 ret
= ff_set_dimensions(avctx
, s
->width
, s
->height
);
1299 if (avctx
->codec_id
== AV_CODEC_ID_MPEG2VIDEO
&& s
->bit_rate
) {
1300 avctx
->rc_max_rate
= s
->bit_rate
;
1301 } else if (avctx
->codec_id
== AV_CODEC_ID_MPEG1VIDEO
&& s
->bit_rate
&&
1302 (s
->bit_rate
!= 0x3FFFF*400 || s
->vbv_delay
!= 0xFFFF)) {
1303 avctx
->bit_rate
= s
->bit_rate
;
1305 s1
->save_aspect_info
= s
->aspect_ratio_info
;
1306 s1
->save_width
= s
->width
;
1307 s1
->save_height
= s
->height
;
1308 s1
->save_progressive_seq
= s
->progressive_sequence
;
1310 /* low_delay may be forced, in this case we will have B-frames
1311 * that behave like P-frames. */
1312 avctx
->has_b_frames
= !s
->low_delay
;
1314 if (avctx
->codec_id
== AV_CODEC_ID_MPEG1VIDEO
) {
1316 avctx
->framerate
= ff_mpeg12_frame_rate_tab
[s
->frame_rate_index
];
1318 avctx
->sample_aspect_ratio
= av_d2q(1.0 / ff_mpeg1_aspect
[s
->aspect_ratio_info
], 255);
1319 avctx
->ticks_per_frame
= 1;
1322 av_reduce(&s
->avctx
->framerate
.num
,
1323 &s
->avctx
->framerate
.den
,
1324 ff_mpeg12_frame_rate_tab
[s
->frame_rate_index
].num
* s1
->frame_rate_ext
.num
,
1325 ff_mpeg12_frame_rate_tab
[s
->frame_rate_index
].den
* s1
->frame_rate_ext
.den
,
1327 avctx
->ticks_per_frame
= 2;
1329 if (s
->aspect_ratio_info
> 1) {
1331 av_mul_q(av_div_q(ff_mpeg2_aspect
[s
->aspect_ratio_info
],
1332 (AVRational
) { s1
->pan_scan
.width
,
1333 s1
->pan_scan
.height
}),
1334 (AVRational
) { s
->width
, s
->height
});
1336 /* We ignore the spec here and guess a bit as reality does not
1337 * match the spec, see for example res_change_ffmpeg_aspect.ts
1338 * and sequence-display-aspect.mpg.
1339 * issue1613, 621, 562 */
1340 if ((s1
->pan_scan
.width
== 0) || (s1
->pan_scan
.height
== 0) ||
1341 (av_cmp_q(dar
, (AVRational
) { 4, 3 }) &&
1342 av_cmp_q(dar
, (AVRational
) { 16, 9 }))) {
1343 s
->avctx
->sample_aspect_ratio
=
1344 av_div_q(ff_mpeg2_aspect
[s
->aspect_ratio_info
],
1345 (AVRational
) { s
->width
, s
->height
});
1347 s
->avctx
->sample_aspect_ratio
=
1348 av_div_q(ff_mpeg2_aspect
[s
->aspect_ratio_info
],
1349 (AVRational
) { s1
->pan_scan
.width
, s1
->pan_scan
.height
});
1350 // issue1613 4/3 16/9 -> 16/9
1351 // res_change_ffmpeg_aspect.ts 4/3 225/44 ->4/3
1352 // widescreen-issue562.mpg 4/3 16/9 -> 16/9
1353 // s->avctx->sample_aspect_ratio = av_mul_q(s->avctx->sample_aspect_ratio, (AVRational) {s->width, s->height});
1354 av_dlog(avctx
, "A %d/%d\n",
1355 ff_mpeg2_aspect
[s
->aspect_ratio_info
].num
,
1356 ff_mpeg2_aspect
[s
->aspect_ratio_info
].den
);
1357 av_dlog(avctx
, "B %d/%d\n", s
->avctx
->sample_aspect_ratio
.num
,
1358 s
->avctx
->sample_aspect_ratio
.den
);
1361 s
->avctx
->sample_aspect_ratio
=
1362 ff_mpeg2_aspect
[s
->aspect_ratio_info
];
1366 ff_set_sar(s
->avctx
, s
->avctx
->sample_aspect_ratio
);
1368 avctx
->pix_fmt
= mpeg_get_pixelformat(avctx
);
1369 setup_hwaccel_for_pixfmt(avctx
);
1371 /* Quantization matrices may need reordering
1372 * if DCT permutation is changed. */
1373 memcpy(old_permutation
, s
->idsp
.idct_permutation
, 64 * sizeof(uint8_t));
1375 ff_mpv_idct_init(s
);
1376 if (ff_mpv_common_init(s
) < 0)
1379 quant_matrix_rebuild(s
->intra_matrix
, old_permutation
, s
->idsp
.idct_permutation
);
1380 quant_matrix_rebuild(s
->inter_matrix
, old_permutation
, s
->idsp
.idct_permutation
);
1381 quant_matrix_rebuild(s
->chroma_intra_matrix
, old_permutation
, s
->idsp
.idct_permutation
);
1382 quant_matrix_rebuild(s
->chroma_inter_matrix
, old_permutation
, s
->idsp
.idct_permutation
);
1384 s1
->mpeg_enc_ctx_allocated
= 1;
1389 static int mpeg1_decode_picture(AVCodecContext
*avctx
, const uint8_t *buf
,
1392 Mpeg1Context
*s1
= avctx
->priv_data
;
1393 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
1394 int ref
, f_code
, vbv_delay
;
1396 init_get_bits(&s
->gb
, buf
, buf_size
* 8);
1398 ref
= get_bits(&s
->gb
, 10); /* temporal ref */
1399 s
->pict_type
= get_bits(&s
->gb
, 3);
1400 if (s
->pict_type
== 0 || s
->pict_type
> 3)
1401 return AVERROR_INVALIDDATA
;
1403 vbv_delay
= get_bits(&s
->gb
, 16);
1404 s
->vbv_delay
= vbv_delay
;
1405 if (s
->pict_type
== AV_PICTURE_TYPE_P
||
1406 s
->pict_type
== AV_PICTURE_TYPE_B
) {
1407 s
->full_pel
[0] = get_bits1(&s
->gb
);
1408 f_code
= get_bits(&s
->gb
, 3);
1409 if (f_code
== 0 && (avctx
->err_recognition
& (AV_EF_BITSTREAM
|AV_EF_COMPLIANT
)))
1410 return AVERROR_INVALIDDATA
;
1412 s
->mpeg_f_code
[0][0] = f_code
;
1413 s
->mpeg_f_code
[0][1] = f_code
;
1415 if (s
->pict_type
== AV_PICTURE_TYPE_B
) {
1416 s
->full_pel
[1] = get_bits1(&s
->gb
);
1417 f_code
= get_bits(&s
->gb
, 3);
1418 if (f_code
== 0 && (avctx
->err_recognition
& (AV_EF_BITSTREAM
|AV_EF_COMPLIANT
)))
1419 return AVERROR_INVALIDDATA
;
1421 s
->mpeg_f_code
[1][0] = f_code
;
1422 s
->mpeg_f_code
[1][1] = f_code
;
1424 s
->current_picture
.f
->pict_type
= s
->pict_type
;
1425 s
->current_picture
.f
->key_frame
= s
->pict_type
== AV_PICTURE_TYPE_I
;
1427 if (avctx
->debug
& FF_DEBUG_PICT_INFO
)
1428 av_log(avctx
, AV_LOG_DEBUG
,
1429 "vbv_delay %d, ref %d type:%d\n", vbv_delay
, ref
, s
->pict_type
);
1436 static void mpeg_decode_sequence_extension(Mpeg1Context
*s1
)
1438 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
1439 int horiz_size_ext
, vert_size_ext
;
1442 skip_bits(&s
->gb
, 1); /* profile and level esc*/
1443 s
->avctx
->profile
= get_bits(&s
->gb
, 3);
1444 s
->avctx
->level
= get_bits(&s
->gb
, 4);
1445 s
->progressive_sequence
= get_bits1(&s
->gb
); /* progressive_sequence */
1446 s
->chroma_format
= get_bits(&s
->gb
, 2); /* chroma_format 1=420, 2=422, 3=444 */
1447 horiz_size_ext
= get_bits(&s
->gb
, 2);
1448 vert_size_ext
= get_bits(&s
->gb
, 2);
1449 s
->width
|= (horiz_size_ext
<< 12);
1450 s
->height
|= (vert_size_ext
<< 12);
1451 bit_rate_ext
= get_bits(&s
->gb
, 12); /* XXX: handle it */
1452 s
->bit_rate
+= (bit_rate_ext
<< 18) * 400;
1453 skip_bits1(&s
->gb
); /* marker */
1454 s
->avctx
->rc_buffer_size
+= get_bits(&s
->gb
, 8) * 1024 * 16 << 10;
1456 s
->low_delay
= get_bits1(&s
->gb
);
1457 if (s
->flags
& CODEC_FLAG_LOW_DELAY
)
1460 s1
->frame_rate_ext
.num
= get_bits(&s
->gb
, 2) + 1;
1461 s1
->frame_rate_ext
.den
= get_bits(&s
->gb
, 5) + 1;
1463 av_dlog(s
->avctx
, "sequence extension\n");
1464 s
->codec_id
= s
->avctx
->codec_id
= AV_CODEC_ID_MPEG2VIDEO
;
1466 if (s
->avctx
->debug
& FF_DEBUG_PICT_INFO
)
1467 av_log(s
->avctx
, AV_LOG_DEBUG
,
1468 "profile: %d, level: %d ps: %d cf:%d vbv buffer: %d, bitrate:%d\n",
1469 s
->avctx
->profile
, s
->avctx
->level
, s
->progressive_sequence
, s
->chroma_format
,
1470 s
->avctx
->rc_buffer_size
, s
->bit_rate
);
1473 static void mpeg_decode_sequence_display_extension(Mpeg1Context
*s1
)
1475 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
1476 int color_description
, w
, h
;
1478 skip_bits(&s
->gb
, 3); /* video format */
1479 color_description
= get_bits1(&s
->gb
);
1480 if (color_description
) {
1481 s
->avctx
->color_primaries
= get_bits(&s
->gb
, 8);
1482 s
->avctx
->color_trc
= get_bits(&s
->gb
, 8);
1483 s
->avctx
->colorspace
= get_bits(&s
->gb
, 8);
1485 w
= get_bits(&s
->gb
, 14);
1486 skip_bits(&s
->gb
, 1); // marker
1487 h
= get_bits(&s
->gb
, 14);
1488 // remaining 3 bits are zero padding
1490 s1
->pan_scan
.width
= 16 * w
;
1491 s1
->pan_scan
.height
= 16 * h
;
1493 if (s
->avctx
->debug
& FF_DEBUG_PICT_INFO
)
1494 av_log(s
->avctx
, AV_LOG_DEBUG
, "sde w:%d, h:%d\n", w
, h
);
1497 static void mpeg_decode_picture_display_extension(Mpeg1Context
*s1
)
1499 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
1503 if (s
->progressive_sequence
) {
1504 if (s
->repeat_first_field
) {
1506 if (s
->top_field_first
)
1510 if (s
->picture_structure
== PICT_FRAME
) {
1512 if (s
->repeat_first_field
)
1516 for (i
= 0; i
< nofco
; i
++) {
1517 s1
->pan_scan
.position
[i
][0] = get_sbits(&s
->gb
, 16);
1518 skip_bits(&s
->gb
, 1); // marker
1519 s1
->pan_scan
.position
[i
][1] = get_sbits(&s
->gb
, 16);
1520 skip_bits(&s
->gb
, 1); // marker
1523 if (s
->avctx
->debug
& FF_DEBUG_PICT_INFO
)
1524 av_log(s
->avctx
, AV_LOG_DEBUG
,
1525 "pde (%"PRId16
",%"PRId16
") (%"PRId16
",%"PRId16
") (%"PRId16
",%"PRId16
")\n",
1526 s1
->pan_scan
.position
[0][0], s1
->pan_scan
.position
[0][1],
1527 s1
->pan_scan
.position
[1][0], s1
->pan_scan
.position
[1][1],
1528 s1
->pan_scan
.position
[2][0], s1
->pan_scan
.position
[2][1]);
1531 static int load_matrix(MpegEncContext
*s
, uint16_t matrix0
[64],
1532 uint16_t matrix1
[64], int intra
)
1536 for (i
= 0; i
< 64; i
++) {
1537 int j
= s
->idsp
.idct_permutation
[ff_zigzag_direct
[i
]];
1538 int v
= get_bits(&s
->gb
, 8);
1540 av_log(s
->avctx
, AV_LOG_ERROR
, "matrix damaged\n");
1541 return AVERROR_INVALIDDATA
;
1543 if (intra
&& i
== 0 && v
!= 8) {
1544 av_log(s
->avctx
, AV_LOG_DEBUG
, "intra matrix specifies invalid DC quantizer %d, ignoring\n", v
);
1545 v
= 8; // needed by pink.mpg / issue1046
1554 static void mpeg_decode_quant_matrix_extension(MpegEncContext
*s
)
1556 av_dlog(s
->avctx
, "matrix extension\n");
1558 if (get_bits1(&s
->gb
))
1559 load_matrix(s
, s
->chroma_intra_matrix
, s
->intra_matrix
, 1);
1560 if (get_bits1(&s
->gb
))
1561 load_matrix(s
, s
->chroma_inter_matrix
, s
->inter_matrix
, 0);
1562 if (get_bits1(&s
->gb
))
1563 load_matrix(s
, s
->chroma_intra_matrix
, NULL
, 1);
1564 if (get_bits1(&s
->gb
))
1565 load_matrix(s
, s
->chroma_inter_matrix
, NULL
, 0);
1568 static void mpeg_decode_picture_coding_extension(Mpeg1Context
*s1
)
1570 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
1572 s
->full_pel
[0] = s
->full_pel
[1] = 0;
1573 s
->mpeg_f_code
[0][0] = get_bits(&s
->gb
, 4);
1574 s
->mpeg_f_code
[0][1] = get_bits(&s
->gb
, 4);
1575 s
->mpeg_f_code
[1][0] = get_bits(&s
->gb
, 4);
1576 s
->mpeg_f_code
[1][1] = get_bits(&s
->gb
, 4);
1577 if (!s
->pict_type
&& s1
->mpeg_enc_ctx_allocated
) {
1578 av_log(s
->avctx
, AV_LOG_ERROR
,
1579 "Missing picture start code, guessing missing values\n");
1580 if (s
->mpeg_f_code
[1][0] == 15 && s
->mpeg_f_code
[1][1] == 15) {
1581 if (s
->mpeg_f_code
[0][0] == 15 && s
->mpeg_f_code
[0][1] == 15)
1582 s
->pict_type
= AV_PICTURE_TYPE_I
;
1584 s
->pict_type
= AV_PICTURE_TYPE_P
;
1586 s
->pict_type
= AV_PICTURE_TYPE_B
;
1587 s
->current_picture
.f
->pict_type
= s
->pict_type
;
1588 s
->current_picture
.f
->key_frame
= s
->pict_type
== AV_PICTURE_TYPE_I
;
1590 s
->mpeg_f_code
[0][0] += !s
->mpeg_f_code
[0][0];
1591 s
->mpeg_f_code
[0][1] += !s
->mpeg_f_code
[0][1];
1592 s
->mpeg_f_code
[1][0] += !s
->mpeg_f_code
[1][0];
1593 s
->mpeg_f_code
[1][1] += !s
->mpeg_f_code
[1][1];
1595 s
->intra_dc_precision
= get_bits(&s
->gb
, 2);
1596 s
->picture_structure
= get_bits(&s
->gb
, 2);
1597 s
->top_field_first
= get_bits1(&s
->gb
);
1598 s
->frame_pred_frame_dct
= get_bits1(&s
->gb
);
1599 s
->concealment_motion_vectors
= get_bits1(&s
->gb
);
1600 s
->q_scale_type
= get_bits1(&s
->gb
);
1601 s
->intra_vlc_format
= get_bits1(&s
->gb
);
1602 s
->alternate_scan
= get_bits1(&s
->gb
);
1603 s
->repeat_first_field
= get_bits1(&s
->gb
);
1604 s
->chroma_420_type
= get_bits1(&s
->gb
);
1605 s
->progressive_frame
= get_bits1(&s
->gb
);
1607 if (s
->alternate_scan
) {
1608 ff_init_scantable(s
->idsp
.idct_permutation
, &s
->inter_scantable
, ff_alternate_vertical_scan
);
1609 ff_init_scantable(s
->idsp
.idct_permutation
, &s
->intra_scantable
, ff_alternate_vertical_scan
);
1611 ff_init_scantable(s
->idsp
.idct_permutation
, &s
->inter_scantable
, ff_zigzag_direct
);
1612 ff_init_scantable(s
->idsp
.idct_permutation
, &s
->intra_scantable
, ff_zigzag_direct
);
1615 /* composite display not parsed */
1616 av_dlog(s
->avctx
, "intra_dc_precision=%d\n", s
->intra_dc_precision
);
1617 av_dlog(s
->avctx
, "picture_structure=%d\n", s
->picture_structure
);
1618 av_dlog(s
->avctx
, "top field first=%d\n", s
->top_field_first
);
1619 av_dlog(s
->avctx
, "repeat first field=%d\n", s
->repeat_first_field
);
1620 av_dlog(s
->avctx
, "conceal=%d\n", s
->concealment_motion_vectors
);
1621 av_dlog(s
->avctx
, "intra_vlc_format=%d\n", s
->intra_vlc_format
);
1622 av_dlog(s
->avctx
, "alternate_scan=%d\n", s
->alternate_scan
);
1623 av_dlog(s
->avctx
, "frame_pred_frame_dct=%d\n", s
->frame_pred_frame_dct
);
1624 av_dlog(s
->avctx
, "progressive_frame=%d\n", s
->progressive_frame
);
1627 static int mpeg_field_start(MpegEncContext
*s
, const uint8_t *buf
, int buf_size
)
1629 AVCodecContext
*avctx
= s
->avctx
;
1630 Mpeg1Context
*s1
= (Mpeg1Context
*) s
;
1633 /* start frame decoding */
1634 if (s
->first_field
|| s
->picture_structure
== PICT_FRAME
) {
1635 AVFrameSideData
*pan_scan
;
1637 if ((ret
= ff_mpv_frame_start(s
, avctx
)) < 0)
1640 ff_mpeg_er_frame_start(s
);
1642 /* first check if we must repeat the frame */
1643 s
->current_picture_ptr
->f
->repeat_pict
= 0;
1644 if (s
->repeat_first_field
) {
1645 if (s
->progressive_sequence
) {
1646 if (s
->top_field_first
)
1647 s
->current_picture_ptr
->f
->repeat_pict
= 4;
1649 s
->current_picture_ptr
->f
->repeat_pict
= 2;
1650 } else if (s
->progressive_frame
) {
1651 s
->current_picture_ptr
->f
->repeat_pict
= 1;
1655 pan_scan
= av_frame_new_side_data(s
->current_picture_ptr
->f
,
1656 AV_FRAME_DATA_PANSCAN
,
1657 sizeof(s1
->pan_scan
));
1659 return AVERROR(ENOMEM
);
1660 memcpy(pan_scan
->data
, &s1
->pan_scan
, sizeof(s1
->pan_scan
));
1662 if (s1
->a53_caption
) {
1663 AVFrameSideData
*sd
= av_frame_new_side_data(
1664 s
->current_picture_ptr
->f
, AV_FRAME_DATA_A53_CC
,
1665 s1
->a53_caption_size
);
1667 memcpy(sd
->data
, s1
->a53_caption
, s1
->a53_caption_size
);
1668 av_freep(&s1
->a53_caption
);
1671 if (s1
->has_stereo3d
) {
1672 AVStereo3D
*stereo
= av_stereo3d_create_side_data(s
->current_picture_ptr
->f
);
1674 return AVERROR(ENOMEM
);
1676 *stereo
= s1
->stereo3d
;
1677 s1
->has_stereo3d
= 0;
1681 AVFrameSideData
*sd
=
1682 av_frame_new_side_data(s
->current_picture_ptr
->f
,
1683 AV_FRAME_DATA_AFD
, 1);
1685 return AVERROR(ENOMEM
);
1687 *sd
->data
= s1
->afd
;
1691 if (HAVE_THREADS
&& (avctx
->active_thread_type
& FF_THREAD_FRAME
))
1692 ff_thread_finish_setup(avctx
);
1693 } else { // second field
1696 if (!s
->current_picture_ptr
) {
1697 av_log(s
->avctx
, AV_LOG_ERROR
, "first field missing\n");
1701 if (s
->avctx
->hwaccel
&&
1702 (s
->avctx
->slice_flags
& SLICE_FLAG_ALLOW_FIELD
)) {
1703 if (s
->avctx
->hwaccel
->end_frame(s
->avctx
) < 0)
1704 av_log(avctx
, AV_LOG_ERROR
,
1705 "hardware accelerator failed to decode first field\n");
1708 for (i
= 0; i
< 4; i
++) {
1709 s
->current_picture
.f
->data
[i
] = s
->current_picture_ptr
->f
->data
[i
];
1710 if (s
->picture_structure
== PICT_BOTTOM_FIELD
)
1711 s
->current_picture
.f
->data
[i
] +=
1712 s
->current_picture_ptr
->f
->linesize
[i
];
1716 if (avctx
->hwaccel
) {
1717 if ((ret
= avctx
->hwaccel
->start_frame(avctx
, buf
, buf_size
)) < 0)
1724 #define DECODE_SLICE_ERROR -1
1725 #define DECODE_SLICE_OK 0
1729 * MpegEncContext.mb_y must be set to the MB row from the startcode.
1730 * @return DECODE_SLICE_ERROR if the slice is damaged,
1731 * DECODE_SLICE_OK if this slice is OK
1733 static int mpeg_decode_slice(MpegEncContext
*s
, int mb_y
,
1734 const uint8_t **buf
, int buf_size
)
1736 AVCodecContext
*avctx
= s
->avctx
;
1737 const int lowres
= s
->avctx
->lowres
;
1738 const int field_pic
= s
->picture_structure
!= PICT_FRAME
;
1742 s
->resync_mb_y
= -1;
1744 av_assert0(mb_y
< s
->mb_height
);
1746 init_get_bits(&s
->gb
, *buf
, buf_size
* 8);
1747 if (s
->codec_id
!= AV_CODEC_ID_MPEG1VIDEO
&& s
->mb_height
> 2800/16)
1748 skip_bits(&s
->gb
, 3);
1750 ff_mpeg1_clean_buffers(s
);
1751 s
->interlaced_dct
= 0;
1753 s
->qscale
= get_qscale(s
);
1755 if (s
->qscale
== 0) {
1756 av_log(s
->avctx
, AV_LOG_ERROR
, "qscale == 0\n");
1757 return AVERROR_INVALIDDATA
;
1760 /* extra slice info */
1761 if (skip_1stop_8data_bits(&s
->gb
) < 0)
1762 return AVERROR_INVALIDDATA
;
1766 if (mb_y
== 0 && s
->codec_tag
== AV_RL32("SLIF")) {
1769 while (get_bits_left(&s
->gb
) > 0) {
1770 int code
= get_vlc2(&s
->gb
, ff_mbincr_vlc
.table
,
1771 MBINCR_VLC_BITS
, 2);
1773 av_log(s
->avctx
, AV_LOG_ERROR
, "first mb_incr damaged\n");
1774 return AVERROR_INVALIDDATA
;
1779 /* otherwise, stuffing, nothing to do */
1787 if (s
->mb_x
>= (unsigned) s
->mb_width
) {
1788 av_log(s
->avctx
, AV_LOG_ERROR
, "initial skip overflow\n");
1789 return AVERROR_INVALIDDATA
;
1792 if (avctx
->hwaccel
&& avctx
->hwaccel
->decode_slice
) {
1793 const uint8_t *buf_end
, *buf_start
= *buf
- 4; /* include start_code */
1794 int start_code
= -1;
1795 buf_end
= avpriv_find_start_code(buf_start
+ 2, *buf
+ buf_size
, &start_code
);
1796 if (buf_end
< *buf
+ buf_size
)
1799 if (avctx
->hwaccel
->decode_slice(avctx
, buf_start
, buf_end
- buf_start
) < 0)
1800 return DECODE_SLICE_ERROR
;
1802 return DECODE_SLICE_OK
;
1805 s
->resync_mb_x
= s
->mb_x
;
1806 s
->resync_mb_y
= s
->mb_y
= mb_y
;
1808 ff_init_block_index(s
);
1810 if (s
->mb_y
== 0 && s
->mb_x
== 0 && (s
->first_field
|| s
->picture_structure
== PICT_FRAME
)) {
1811 if (s
->avctx
->debug
& FF_DEBUG_PICT_INFO
) {
1812 av_log(s
->avctx
, AV_LOG_DEBUG
,
1813 "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",
1815 s
->mpeg_f_code
[0][0], s
->mpeg_f_code
[0][1],
1816 s
->mpeg_f_code
[1][0], s
->mpeg_f_code
[1][1],
1817 s
->pict_type
== AV_PICTURE_TYPE_I
? "I" :
1818 (s
->pict_type
== AV_PICTURE_TYPE_P
? "P" :
1819 (s
->pict_type
== AV_PICTURE_TYPE_B
? "B" : "S")),
1820 s
->progressive_sequence
? "ps" : "",
1821 s
->progressive_frame
? "pf" : "",
1822 s
->alternate_scan
? "alt" : "",
1823 s
->top_field_first
? "top" : "",
1824 s
->intra_dc_precision
, s
->picture_structure
,
1825 s
->frame_pred_frame_dct
, s
->concealment_motion_vectors
,
1826 s
->q_scale_type
, s
->intra_vlc_format
,
1827 s
->repeat_first_field
, s
->chroma_420_type
? "420" : "");
1832 // If 1, we memcpy blocks in xvmcvideo.
1833 if ((CONFIG_MPEG1_XVMC_HWACCEL
|| CONFIG_MPEG2_XVMC_HWACCEL
) && s
->pack_pblocks
)
1834 ff_xvmc_init_block(s
); // set s->block
1836 if ((ret
= mpeg_decode_mb(s
, s
->block
)) < 0)
1839 // Note motion_val is normally NULL unless we want to extract the MVs.
1840 if (s
->current_picture
.motion_val
[0] && !s
->encoding
) {
1841 const int wrap
= s
->b8_stride
;
1842 int xy
= s
->mb_x
* 2 + s
->mb_y
* 2 * wrap
;
1843 int b8_xy
= 4 * (s
->mb_x
+ s
->mb_y
* s
->mb_stride
);
1844 int motion_x
, motion_y
, dir
, i
;
1846 for (i
= 0; i
< 2; i
++) {
1847 for (dir
= 0; dir
< 2; dir
++) {
1849 (dir
== 1 && s
->pict_type
!= AV_PICTURE_TYPE_B
)) {
1850 motion_x
= motion_y
= 0;
1851 } else if (s
->mv_type
== MV_TYPE_16X16
||
1852 (s
->mv_type
== MV_TYPE_FIELD
&& field_pic
)) {
1853 motion_x
= s
->mv
[dir
][0][0];
1854 motion_y
= s
->mv
[dir
][0][1];
1855 } else { /* if ((s->mv_type == MV_TYPE_FIELD) || (s->mv_type == MV_TYPE_16X8)) */
1856 motion_x
= s
->mv
[dir
][i
][0];
1857 motion_y
= s
->mv
[dir
][i
][1];
1860 s
->current_picture
.motion_val
[dir
][xy
][0] = motion_x
;
1861 s
->current_picture
.motion_val
[dir
][xy
][1] = motion_y
;
1862 s
->current_picture
.motion_val
[dir
][xy
+ 1][0] = motion_x
;
1863 s
->current_picture
.motion_val
[dir
][xy
+ 1][1] = motion_y
;
1864 s
->current_picture
.ref_index
[dir
][b8_xy
] =
1865 s
->current_picture
.ref_index
[dir
][b8_xy
+ 1] = s
->field_select
[dir
][i
];
1866 av_assert2(s
->field_select
[dir
][i
] == 0 ||
1867 s
->field_select
[dir
][i
] == 1);
1874 s
->dest
[0] += 16 >> lowres
;
1875 s
->dest
[1] +=(16 >> lowres
) >> s
->chroma_x_shift
;
1876 s
->dest
[2] +=(16 >> lowres
) >> s
->chroma_x_shift
;
1878 ff_mpv_decode_mb(s
, s
->block
);
1880 if (++s
->mb_x
>= s
->mb_width
) {
1881 const int mb_size
= 16 >> s
->avctx
->lowres
;
1883 ff_mpeg_draw_horiz_band(s
, mb_size
* (s
->mb_y
>> field_pic
), mb_size
);
1884 ff_mpv_report_decode_progress(s
);
1887 s
->mb_y
+= 1 << field_pic
;
1889 if (s
->mb_y
>= s
->mb_height
) {
1890 int left
= get_bits_left(&s
->gb
);
1891 int is_d10
= s
->chroma_format
== 2 &&
1892 s
->pict_type
== AV_PICTURE_TYPE_I
&&
1893 avctx
->profile
== 0 && avctx
->level
== 5 &&
1894 s
->intra_dc_precision
== 2 &&
1895 s
->q_scale_type
== 1 && s
->alternate_scan
== 0 &&
1896 s
->progressive_frame
== 0
1897 /* vbv_delay == 0xBBB || 0xE10 */;
1899 if (left
>= 32 && !is_d10
) {
1900 GetBitContext gb
= s
->gb
;
1901 align_get_bits(&gb
);
1902 if (show_bits(&gb
, 24) == 0x060E2B) {
1903 av_log(avctx
, AV_LOG_DEBUG
, "Invalid MXF data found in video stream\n");
1909 (left
&& show_bits(&s
->gb
, FFMIN(left
, 23)) && !is_d10
) ||
1910 ((avctx
->err_recognition
& (AV_EF_BITSTREAM
| AV_EF_AGGRESSIVE
)) && left
> 8)) {
1911 av_log(avctx
, AV_LOG_ERROR
, "end mismatch left=%d %0X\n",
1912 left
, show_bits(&s
->gb
, FFMIN(left
, 23)));
1917 // There are some files out there which are missing the last slice
1918 // in cases where the slice is completely outside the visible
1919 // area, we detect this here instead of running into the end expecting
1921 if (s
->mb_y
>= ((s
->height
+ 15) >> 4) &&
1922 s
->progressive_frame
&&
1923 !s
->progressive_sequence
&&
1924 get_bits_left(&s
->gb
) <= 8 &&
1925 get_bits_left(&s
->gb
) >= 0 &&
1926 s
->mb_skip_run
== -1 &&
1927 show_bits(&s
->gb
, 8) == 0)
1930 ff_init_block_index(s
);
1933 /* skip mb handling */
1934 if (s
->mb_skip_run
== -1) {
1935 /* read increment again */
1938 int code
= get_vlc2(&s
->gb
, ff_mbincr_vlc
.table
,
1939 MBINCR_VLC_BITS
, 2);
1941 av_log(s
->avctx
, AV_LOG_ERROR
, "mb incr damaged\n");
1942 return AVERROR_INVALIDDATA
;
1946 s
->mb_skip_run
+= 33;
1947 } else if (code
== 35) {
1948 if (s
->mb_skip_run
!= 0 || show_bits(&s
->gb
, 15) != 0) {
1949 av_log(s
->avctx
, AV_LOG_ERROR
, "slice mismatch\n");
1952 goto eos
; /* end of slice */
1954 /* otherwise, stuffing, nothing to do */
1956 s
->mb_skip_run
+= code
;
1960 if (s
->mb_skip_run
) {
1962 if (s
->pict_type
== AV_PICTURE_TYPE_I
) {
1963 av_log(s
->avctx
, AV_LOG_ERROR
,
1964 "skipped MB in I frame at %d %d\n", s
->mb_x
, s
->mb_y
);
1965 return AVERROR_INVALIDDATA
;
1970 for (i
= 0; i
< 12; i
++)
1971 s
->block_last_index
[i
] = -1;
1972 if (s
->picture_structure
== PICT_FRAME
)
1973 s
->mv_type
= MV_TYPE_16X16
;
1975 s
->mv_type
= MV_TYPE_FIELD
;
1976 if (s
->pict_type
== AV_PICTURE_TYPE_P
) {
1977 /* if P type, zero motion vector is implied */
1978 s
->mv_dir
= MV_DIR_FORWARD
;
1979 s
->mv
[0][0][0] = s
->mv
[0][0][1] = 0;
1980 s
->last_mv
[0][0][0] = s
->last_mv
[0][0][1] = 0;
1981 s
->last_mv
[0][1][0] = s
->last_mv
[0][1][1] = 0;
1982 s
->field_select
[0][0] = (s
->picture_structure
- 1) & 1;
1984 /* if B type, reuse previous vectors and directions */
1985 s
->mv
[0][0][0] = s
->last_mv
[0][0][0];
1986 s
->mv
[0][0][1] = s
->last_mv
[0][0][1];
1987 s
->mv
[1][0][0] = s
->last_mv
[1][0][0];
1988 s
->mv
[1][0][1] = s
->last_mv
[1][0][1];
1993 eos
: // end of slice
1994 if (get_bits_left(&s
->gb
) < 0) {
1995 av_log(s
, AV_LOG_ERROR
, "overread %d\n", -get_bits_left(&s
->gb
));
1996 return AVERROR_INVALIDDATA
;
1998 *buf
+= (get_bits_count(&s
->gb
) - 1) / 8;
1999 av_dlog(s
, "y %d %d %d %d\n", s
->resync_mb_x
, s
->resync_mb_y
, s
->mb_x
, s
->mb_y
);
2003 static int slice_decode_thread(AVCodecContext
*c
, void *arg
)
2005 MpegEncContext
*s
= *(void **) arg
;
2006 const uint8_t *buf
= s
->gb
.buffer
;
2007 int mb_y
= s
->start_mb_y
;
2008 const int field_pic
= s
->picture_structure
!= PICT_FRAME
;
2010 s
->er
.error_count
= (3 * (s
->end_mb_y
- s
->start_mb_y
) * s
->mb_width
) >> field_pic
;
2013 uint32_t start_code
;
2016 ret
= mpeg_decode_slice(s
, mb_y
, &buf
, s
->gb
.buffer_end
- buf
);
2018 av_dlog(c
, "ret:%d resync:%d/%d mb:%d/%d ts:%d/%d ec:%d\n",
2019 ret
, s
->resync_mb_x
, s
->resync_mb_y
, s
->mb_x
, s
->mb_y
,
2020 s
->start_mb_y
, s
->end_mb_y
, s
->er
.error_count
);
2022 if (c
->err_recognition
& AV_EF_EXPLODE
)
2024 if (s
->resync_mb_x
>= 0 && s
->resync_mb_y
>= 0)
2025 ff_er_add_slice(&s
->er
, s
->resync_mb_x
, s
->resync_mb_y
,
2027 ER_AC_ERROR
| ER_DC_ERROR
| ER_MV_ERROR
);
2029 ff_er_add_slice(&s
->er
, s
->resync_mb_x
, s
->resync_mb_y
,
2030 s
->mb_x
- 1, s
->mb_y
,
2031 ER_AC_END
| ER_DC_END
| ER_MV_END
);
2034 if (s
->mb_y
== s
->end_mb_y
)
2038 buf
= avpriv_find_start_code(buf
, s
->gb
.buffer_end
, &start_code
);
2039 mb_y
= start_code
- SLICE_MIN_START_CODE
;
2040 if (s
->codec_id
!= AV_CODEC_ID_MPEG1VIDEO
&& s
->mb_height
> 2800/16)
2041 mb_y
+= (*buf
&0xE0)<<2;
2043 if (s
->picture_structure
== PICT_BOTTOM_FIELD
)
2045 if (mb_y
< 0 || mb_y
>= s
->end_mb_y
)
2051 * Handle slice ends.
2052 * @return 1 if it seems to be the last slice
2054 static int slice_end(AVCodecContext
*avctx
, AVFrame
*pict
)
2056 Mpeg1Context
*s1
= avctx
->priv_data
;
2057 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
2059 if (!s1
->mpeg_enc_ctx_allocated
|| !s
->current_picture_ptr
)
2062 if (s
->avctx
->hwaccel
) {
2063 if (s
->avctx
->hwaccel
->end_frame(s
->avctx
) < 0)
2064 av_log(avctx
, AV_LOG_ERROR
,
2065 "hardware accelerator failed to decode picture\n");
2068 /* end of slice reached */
2069 if (/* s->mb_y << field_pic == s->mb_height && */ !s
->first_field
&& !s1
->first_slice
) {
2072 ff_er_frame_end(&s
->er
);
2074 ff_mpv_frame_end(s
);
2076 if (s
->pict_type
== AV_PICTURE_TYPE_B
|| s
->low_delay
) {
2077 int ret
= av_frame_ref(pict
, s
->current_picture_ptr
->f
);
2080 ff_print_debug_info(s
, s
->current_picture_ptr
, pict
);
2081 ff_mpv_export_qp_table(s
, pict
, s
->current_picture_ptr
, FF_QSCALE_TYPE_MPEG2
);
2083 if (avctx
->active_thread_type
& FF_THREAD_FRAME
)
2084 s
->picture_number
++;
2085 /* latency of 1 frame for I- and P-frames */
2086 /* XXX: use another variable than picture_number */
2087 if (s
->last_picture_ptr
) {
2088 int ret
= av_frame_ref(pict
, s
->last_picture_ptr
->f
);
2091 ff_print_debug_info(s
, s
->last_picture_ptr
, pict
);
2092 ff_mpv_export_qp_table(s
, pict
, s
->last_picture_ptr
, FF_QSCALE_TYPE_MPEG2
);
2102 static int mpeg1_decode_sequence(AVCodecContext
*avctx
,
2103 const uint8_t *buf
, int buf_size
)
2105 Mpeg1Context
*s1
= avctx
->priv_data
;
2106 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
2110 init_get_bits(&s
->gb
, buf
, buf_size
* 8);
2112 width
= get_bits(&s
->gb
, 12);
2113 height
= get_bits(&s
->gb
, 12);
2114 if (width
== 0 || height
== 0) {
2115 av_log(avctx
, AV_LOG_WARNING
,
2116 "Invalid horizontal or vertical size value.\n");
2117 if (avctx
->err_recognition
& (AV_EF_BITSTREAM
| AV_EF_COMPLIANT
))
2118 return AVERROR_INVALIDDATA
;
2120 s
->aspect_ratio_info
= get_bits(&s
->gb
, 4);
2121 if (s
->aspect_ratio_info
== 0) {
2122 av_log(avctx
, AV_LOG_ERROR
, "aspect ratio has forbidden 0 value\n");
2123 if (avctx
->err_recognition
& (AV_EF_BITSTREAM
| AV_EF_COMPLIANT
))
2124 return AVERROR_INVALIDDATA
;
2126 s
->frame_rate_index
= get_bits(&s
->gb
, 4);
2127 if (s
->frame_rate_index
== 0 || s
->frame_rate_index
> 13) {
2128 av_log(avctx
, AV_LOG_WARNING
, "frame_rate_index %d is invalid\n", s
->frame_rate_index
);
2129 s
->frame_rate_index
= 1;
2131 s
->bit_rate
= get_bits(&s
->gb
, 18) * 400;
2132 if (get_bits1(&s
->gb
) == 0) { /* marker */
2133 av_log(avctx
, AV_LOG_ERROR
, "Marker in sequence header missing\n");
2134 return AVERROR_INVALIDDATA
;
2139 s
->avctx
->rc_buffer_size
= get_bits(&s
->gb
, 10) * 1024 * 16;
2140 skip_bits(&s
->gb
, 1);
2143 if (get_bits1(&s
->gb
)) {
2144 load_matrix(s
, s
->chroma_intra_matrix
, s
->intra_matrix
, 1);
2146 for (i
= 0; i
< 64; i
++) {
2147 j
= s
->idsp
.idct_permutation
[i
];
2148 v
= ff_mpeg1_default_intra_matrix
[i
];
2149 s
->intra_matrix
[j
] = v
;
2150 s
->chroma_intra_matrix
[j
] = v
;
2153 if (get_bits1(&s
->gb
)) {
2154 load_matrix(s
, s
->chroma_inter_matrix
, s
->inter_matrix
, 0);
2156 for (i
= 0; i
< 64; i
++) {
2157 int j
= s
->idsp
.idct_permutation
[i
];
2158 v
= ff_mpeg1_default_non_intra_matrix
[i
];
2159 s
->inter_matrix
[j
] = v
;
2160 s
->chroma_inter_matrix
[j
] = v
;
2164 if (show_bits(&s
->gb
, 23) != 0) {
2165 av_log(s
->avctx
, AV_LOG_ERROR
, "sequence header damaged\n");
2166 return AVERROR_INVALIDDATA
;
2169 /* We set MPEG-2 parameters so that it emulates MPEG-1. */
2170 s
->progressive_sequence
= 1;
2171 s
->progressive_frame
= 1;
2172 s
->picture_structure
= PICT_FRAME
;
2174 s
->frame_pred_frame_dct
= 1;
2175 s
->chroma_format
= 1;
2177 s
->avctx
->codec_id
= AV_CODEC_ID_MPEG1VIDEO
;
2178 s
->out_format
= FMT_MPEG1
;
2179 s
->swap_uv
= 0; // AFAIK VCR2 does not have SEQ_HEADER
2180 if (s
->flags
& CODEC_FLAG_LOW_DELAY
)
2183 if (s
->avctx
->debug
& FF_DEBUG_PICT_INFO
)
2184 av_log(s
->avctx
, AV_LOG_DEBUG
, "vbv buffer: %d, bitrate:%d, aspect_ratio_info: %d \n",
2185 s
->avctx
->rc_buffer_size
, s
->bit_rate
, s
->aspect_ratio_info
);
2190 static int vcr2_init_sequence(AVCodecContext
*avctx
)
2192 Mpeg1Context
*s1
= avctx
->priv_data
;
2193 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
2197 /* start new MPEG-1 context decoding */
2198 s
->out_format
= FMT_MPEG1
;
2199 if (s1
->mpeg_enc_ctx_allocated
) {
2200 ff_mpv_common_end(s
);
2201 s1
->mpeg_enc_ctx_allocated
= 0;
2203 s
->width
= avctx
->coded_width
;
2204 s
->height
= avctx
->coded_height
;
2205 avctx
->has_b_frames
= 0; // true?
2208 avctx
->pix_fmt
= mpeg_get_pixelformat(avctx
);
2209 setup_hwaccel_for_pixfmt(avctx
);
2211 ff_mpv_idct_init(s
);
2212 if ((ret
= ff_mpv_common_init(s
)) < 0)
2214 s1
->mpeg_enc_ctx_allocated
= 1;
2216 for (i
= 0; i
< 64; i
++) {
2217 int j
= s
->idsp
.idct_permutation
[i
];
2218 v
= ff_mpeg1_default_intra_matrix
[i
];
2219 s
->intra_matrix
[j
] = v
;
2220 s
->chroma_intra_matrix
[j
] = v
;
2222 v
= ff_mpeg1_default_non_intra_matrix
[i
];
2223 s
->inter_matrix
[j
] = v
;
2224 s
->chroma_inter_matrix
[j
] = v
;
2227 s
->progressive_sequence
= 1;
2228 s
->progressive_frame
= 1;
2229 s
->picture_structure
= PICT_FRAME
;
2231 s
->frame_pred_frame_dct
= 1;
2232 s
->chroma_format
= 1;
2233 if (s
->codec_tag
== AV_RL32("BW10")) {
2234 s
->codec_id
= s
->avctx
->codec_id
= AV_CODEC_ID_MPEG1VIDEO
;
2236 s
->swap_uv
= 1; // in case of xvmc we need to swap uv for each MB
2237 s
->codec_id
= s
->avctx
->codec_id
= AV_CODEC_ID_MPEG2VIDEO
;
2239 s1
->save_width
= s
->width
;
2240 s1
->save_height
= s
->height
;
2241 s1
->save_progressive_seq
= s
->progressive_sequence
;
2245 static int mpeg_decode_a53_cc(AVCodecContext
*avctx
,
2246 const uint8_t *p
, int buf_size
)
2248 Mpeg1Context
*s1
= avctx
->priv_data
;
2250 if (buf_size
>= 6 &&
2251 p
[0] == 'G' && p
[1] == 'A' && p
[2] == '9' && p
[3] == '4' &&
2252 p
[4] == 3 && (p
[5] & 0x40)) {
2253 /* extract A53 Part 4 CC data */
2254 int cc_count
= p
[5] & 0x1f;
2255 if (cc_count
> 0 && buf_size
>= 7 + cc_count
* 3) {
2256 av_freep(&s1
->a53_caption
);
2257 s1
->a53_caption_size
= cc_count
* 3;
2258 s1
->a53_caption
= av_malloc(s1
->a53_caption_size
);
2259 if (s1
->a53_caption
)
2260 memcpy(s1
->a53_caption
, p
+ 7, s1
->a53_caption_size
);
2263 } else if (buf_size
>= 11 &&
2264 p
[0] == 'C' && p
[1] == 'C' && p
[2] == 0x01 && p
[3] == 0xf8) {
2265 /* extract DVD CC data */
2268 // There is a caption count field in the data, but it is often
2269 // incorect. So count the number of captions present.
2270 for (i
= 5; i
+ 6 <= buf_size
&& ((p
[i
] & 0xfe) == 0xfe); i
+= 6)
2272 // Transform the DVD format into A53 Part 4 format
2274 av_freep(&s1
->a53_caption
);
2275 s1
->a53_caption_size
= cc_count
* 6;
2276 s1
->a53_caption
= av_malloc(s1
->a53_caption_size
);
2277 if (s1
->a53_caption
) {
2278 uint8_t field1
= !!(p
[4] & 0x80);
2279 uint8_t *cap
= s1
->a53_caption
;
2281 for (i
= 0; i
< cc_count
; i
++) {
2282 cap
[0] = (p
[0] == 0xff && field1
) ? 0xfc : 0xfd;
2285 cap
[3] = (p
[3] == 0xff && !field1
) ? 0xfc : 0xfd;
2298 static void mpeg_decode_user_data(AVCodecContext
*avctx
,
2299 const uint8_t *p
, int buf_size
)
2301 Mpeg1Context
*s
= avctx
->priv_data
;
2302 const uint8_t *buf_end
= p
+ buf_size
;
2303 Mpeg1Context
*s1
= avctx
->priv_data
;
2308 if (!memcmp(p
+i
, "\0TMPGEXS\0", 9)){
2312 /* for(i=0; !(!p[i-2] && !p[i-1] && p[i]==1) && i<buf_size; i++){
2313 av_log(avctx, AV_LOG_ERROR, "%c", p[i]);
2315 av_log(avctx, AV_LOG_ERROR, "\n");*/
2318 /* we parse the DTG active format information */
2319 if (buf_end
- p
>= 5 &&
2320 p
[0] == 'D' && p
[1] == 'T' && p
[2] == 'G' && p
[3] == '1') {
2328 if (buf_end
- p
< 1)
2331 FF_DISABLE_DEPRECATION_WARNINGS
2332 avctx
->dtg_active_format
= p
[0] & 0x0f;
2333 FF_ENABLE_DEPRECATION_WARNINGS
2334 #endif /* FF_API_AFD */
2336 s1
->afd
= p
[0] & 0x0f;
2338 } else if (buf_end
- p
>= 6 &&
2339 p
[0] == 'J' && p
[1] == 'P' && p
[2] == '3' && p
[3] == 'D' &&
2340 p
[4] == 0x03) { // S3D_video_format_length
2341 // the 0x7F mask ignores the reserved_bit value
2342 const uint8_t S3D_video_format_type
= p
[5] & 0x7F;
2344 if (S3D_video_format_type
== 0x03 ||
2345 S3D_video_format_type
== 0x04 ||
2346 S3D_video_format_type
== 0x08 ||
2347 S3D_video_format_type
== 0x23) {
2349 s1
->has_stereo3d
= 1;
2351 switch (S3D_video_format_type
) {
2353 s1
->stereo3d
.type
= AV_STEREO3D_SIDEBYSIDE
;
2356 s1
->stereo3d
.type
= AV_STEREO3D_TOPBOTTOM
;
2359 s1
->stereo3d
.type
= AV_STEREO3D_2D
;
2362 s1
->stereo3d
.type
= AV_STEREO3D_SIDEBYSIDE_QUINCUNX
;
2366 } else if (mpeg_decode_a53_cc(avctx
, p
, buf_size
)) {
2371 static void mpeg_decode_gop(AVCodecContext
*avctx
,
2372 const uint8_t *buf
, int buf_size
)
2374 Mpeg1Context
*s1
= avctx
->priv_data
;
2375 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
2379 init_get_bits(&s
->gb
, buf
, buf_size
* 8);
2381 tc
= avctx
->timecode_frame_start
= get_bits(&s
->gb
, 25);
2383 s
->closed_gop
= get_bits1(&s
->gb
);
2384 /* broken_link indicate that after editing the
2385 * reference frames of the first B-Frames after GOP I-Frame
2386 * are missing (open gop) */
2387 broken_link
= get_bits1(&s
->gb
);
2389 if (s
->avctx
->debug
& FF_DEBUG_PICT_INFO
) {
2390 char tcbuf
[AV_TIMECODE_STR_SIZE
];
2391 av_timecode_make_mpeg_tc_string(tcbuf
, tc
);
2392 av_log(s
->avctx
, AV_LOG_DEBUG
,
2393 "GOP (%s) closed_gop=%d broken_link=%d\n",
2394 tcbuf
, s
->closed_gop
, broken_link
);
2398 static int decode_chunks(AVCodecContext
*avctx
, AVFrame
*picture
,
2399 int *got_output
, const uint8_t *buf
, int buf_size
)
2401 Mpeg1Context
*s
= avctx
->priv_data
;
2402 MpegEncContext
*s2
= &s
->mpeg_enc_ctx
;
2403 const uint8_t *buf_ptr
= buf
;
2404 const uint8_t *buf_end
= buf
+ buf_size
;
2405 int ret
, input_size
;
2406 int last_code
= 0, skip_frame
= 0;
2407 int picture_start_code_seen
= 0;
2410 /* find next start code */
2411 uint32_t start_code
= -1;
2412 buf_ptr
= avpriv_find_start_code(buf_ptr
, buf_end
, &start_code
);
2413 if (start_code
> 0x1ff) {
2416 (avctx
->active_thread_type
& FF_THREAD_SLICE
) &&
2419 av_assert0(avctx
->thread_count
> 1);
2421 avctx
->execute(avctx
, slice_decode_thread
,
2422 &s2
->thread_context
[0], NULL
,
2423 s
->slice_count
, sizeof(void *));
2424 for (i
= 0; i
< s
->slice_count
; i
++)
2425 s2
->er
.error_count
+= s2
->thread_context
[i
]->er
.error_count
;
2428 if ((CONFIG_MPEG_VDPAU_DECODER
|| CONFIG_MPEG1_VDPAU_DECODER
)
2429 && uses_vdpau(avctx
))
2430 ff_vdpau_mpeg_picture_complete(s2
, buf
, buf_size
, s
->slice_count
);
2432 ret
= slice_end(avctx
, picture
);
2436 // FIXME: merge with the stuff in mpeg_decode_slice
2437 if (s2
->last_picture_ptr
|| s2
->low_delay
)
2443 if (avctx
->err_recognition
& AV_EF_EXPLODE
&& s2
->er
.error_count
)
2444 return AVERROR_INVALIDDATA
;
2446 return FFMAX(0, buf_ptr
- buf
- s2
->parse_context
.last_index
);
2449 input_size
= buf_end
- buf_ptr
;
2451 if (avctx
->debug
& FF_DEBUG_STARTCODE
)
2452 av_log(avctx
, AV_LOG_DEBUG
, "%3"PRIX32
" at %"PTRDIFF_SPECIFIER
" left %d\n",
2453 start_code
, buf_ptr
- buf
, input_size
);
2455 /* prepare data for next start code */
2456 switch (start_code
) {
2457 case SEQ_START_CODE
:
2458 if (last_code
== 0) {
2459 mpeg1_decode_sequence(avctx
, buf_ptr
, input_size
);
2460 if (buf
!= avctx
->extradata
)
2463 av_log(avctx
, AV_LOG_ERROR
,
2464 "ignoring SEQ_START_CODE after %X\n", last_code
);
2465 if (avctx
->err_recognition
& AV_EF_EXPLODE
)
2466 return AVERROR_INVALIDDATA
;
2470 case PICTURE_START_CODE
:
2471 if (picture_start_code_seen
&& s2
->picture_structure
== PICT_FRAME
) {
2472 /* If it's a frame picture, there can't be more than one picture header.
2473 Yet, it does happen and we need to handle it. */
2474 av_log(avctx
, AV_LOG_WARNING
, "ignoring extra picture following a frame-picture\n");
2477 picture_start_code_seen
= 1;
2479 if (s2
->width
<= 0 || s2
->height
<= 0) {
2480 av_log(avctx
, AV_LOG_ERROR
, "Invalid frame dimensions %dx%d.\n",
2481 s2
->width
, s2
->height
);
2482 return AVERROR_INVALIDDATA
;
2486 s2
->intra_dc_precision
= 3;
2487 s2
->intra_matrix
[0]= 1;
2489 if (HAVE_THREADS
&& (avctx
->active_thread_type
& FF_THREAD_SLICE
) &&
2490 !avctx
->hwaccel
&& s
->slice_count
) {
2493 avctx
->execute(avctx
, slice_decode_thread
,
2494 s2
->thread_context
, NULL
,
2495 s
->slice_count
, sizeof(void *));
2496 for (i
= 0; i
< s
->slice_count
; i
++)
2497 s2
->er
.error_count
+= s2
->thread_context
[i
]->er
.error_count
;
2500 if (last_code
== 0 || last_code
== SLICE_MIN_START_CODE
) {
2501 ret
= mpeg_decode_postinit(avctx
);
2503 av_log(avctx
, AV_LOG_ERROR
,
2504 "mpeg_decode_postinit() failure\n");
2508 /* We have a complete image: we try to decompress it. */
2509 if (mpeg1_decode_picture(avctx
, buf_ptr
, input_size
) < 0)
2512 last_code
= PICTURE_START_CODE
;
2514 av_log(avctx
, AV_LOG_ERROR
,
2515 "ignoring pic after %X\n", last_code
);
2516 if (avctx
->err_recognition
& AV_EF_EXPLODE
)
2517 return AVERROR_INVALIDDATA
;
2520 case EXT_START_CODE
:
2521 init_get_bits(&s2
->gb
, buf_ptr
, input_size
* 8);
2523 switch (get_bits(&s2
->gb
, 4)) {
2525 if (last_code
== 0) {
2526 mpeg_decode_sequence_extension(s
);
2528 av_log(avctx
, AV_LOG_ERROR
,
2529 "ignoring seq ext after %X\n", last_code
);
2530 if (avctx
->err_recognition
& AV_EF_EXPLODE
)
2531 return AVERROR_INVALIDDATA
;
2535 mpeg_decode_sequence_display_extension(s
);
2538 mpeg_decode_quant_matrix_extension(s2
);
2541 mpeg_decode_picture_display_extension(s
);
2544 if (last_code
== PICTURE_START_CODE
) {
2545 mpeg_decode_picture_coding_extension(s
);
2547 av_log(avctx
, AV_LOG_ERROR
,
2548 "ignoring pic cod ext after %X\n", last_code
);
2549 if (avctx
->err_recognition
& AV_EF_EXPLODE
)
2550 return AVERROR_INVALIDDATA
;
2555 case USER_START_CODE
:
2556 mpeg_decode_user_data(avctx
, buf_ptr
, input_size
);
2558 case GOP_START_CODE
:
2559 if (last_code
== 0) {
2560 s2
->first_field
= 0;
2561 mpeg_decode_gop(avctx
, buf_ptr
, input_size
);
2564 av_log(avctx
, AV_LOG_ERROR
,
2565 "ignoring GOP_START_CODE after %X\n", last_code
);
2566 if (avctx
->err_recognition
& AV_EF_EXPLODE
)
2567 return AVERROR_INVALIDDATA
;
2571 if (start_code
>= SLICE_MIN_START_CODE
&&
2572 start_code
<= SLICE_MAX_START_CODE
&& last_code
== PICTURE_START_CODE
) {
2573 if (s2
->progressive_sequence
&& !s2
->progressive_frame
) {
2574 s2
->progressive_frame
= 1;
2575 av_log(s2
->avctx
, AV_LOG_ERROR
,
2576 "interlaced frame in progressive sequence, ignoring\n");
2579 if (s2
->picture_structure
== 0 ||
2580 (s2
->progressive_frame
&& s2
->picture_structure
!= PICT_FRAME
)) {
2581 av_log(s2
->avctx
, AV_LOG_ERROR
,
2582 "picture_structure %d invalid, ignoring\n",
2583 s2
->picture_structure
);
2584 s2
->picture_structure
= PICT_FRAME
;
2587 if (s2
->progressive_sequence
&& !s2
->frame_pred_frame_dct
)
2588 av_log(s2
->avctx
, AV_LOG_WARNING
, "invalid frame_pred_frame_dct\n");
2590 if (s2
->picture_structure
== PICT_FRAME
) {
2591 s2
->first_field
= 0;
2592 s2
->v_edge_pos
= 16 * s2
->mb_height
;
2594 s2
->first_field
^= 1;
2595 s2
->v_edge_pos
= 8 * s2
->mb_height
;
2596 memset(s2
->mbskip_table
, 0, s2
->mb_stride
* s2
->mb_height
);
2599 if (start_code
>= SLICE_MIN_START_CODE
&&
2600 start_code
<= SLICE_MAX_START_CODE
&& last_code
!= 0) {
2601 const int field_pic
= s2
->picture_structure
!= PICT_FRAME
;
2602 int mb_y
= start_code
- SLICE_MIN_START_CODE
;
2603 last_code
= SLICE_MIN_START_CODE
;
2604 if (s2
->codec_id
!= AV_CODEC_ID_MPEG1VIDEO
&& s2
->mb_height
> 2800/16)
2605 mb_y
+= (*buf_ptr
&0xE0)<<2;
2608 if (s2
->picture_structure
== PICT_BOTTOM_FIELD
)
2611 if (buf_end
- buf_ptr
< 2) {
2612 av_log(s2
->avctx
, AV_LOG_ERROR
, "slice too small\n");
2613 return AVERROR_INVALIDDATA
;
2616 if (mb_y
>= s2
->mb_height
) {
2617 av_log(s2
->avctx
, AV_LOG_ERROR
,
2618 "slice below image (%d >= %d)\n", mb_y
, s2
->mb_height
);
2619 return AVERROR_INVALIDDATA
;
2622 if (!s2
->last_picture_ptr
) {
2623 /* Skip B-frames if we do not have reference frames and
2624 * GOP is not closed. */
2625 if (s2
->pict_type
== AV_PICTURE_TYPE_B
) {
2626 if (!s2
->closed_gop
) {
2632 if (s2
->pict_type
== AV_PICTURE_TYPE_I
|| (s2
->flags2
& CODEC_FLAG2_SHOW_ALL
))
2634 if (!s2
->next_picture_ptr
) {
2635 /* Skip P-frames if we do not have a reference frame or
2636 * we have an invalid header. */
2637 if (s2
->pict_type
== AV_PICTURE_TYPE_P
&& !s
->sync
) {
2642 if ((avctx
->skip_frame
>= AVDISCARD_NONREF
&&
2643 s2
->pict_type
== AV_PICTURE_TYPE_B
) ||
2644 (avctx
->skip_frame
>= AVDISCARD_NONKEY
&&
2645 s2
->pict_type
!= AV_PICTURE_TYPE_I
) ||
2646 avctx
->skip_frame
>= AVDISCARD_ALL
) {
2651 if (!s
->mpeg_enc_ctx_allocated
)
2654 if (s2
->codec_id
== AV_CODEC_ID_MPEG2VIDEO
) {
2655 if (mb_y
< avctx
->skip_top
||
2656 mb_y
>= s2
->mb_height
- avctx
->skip_bottom
)
2660 if (!s2
->pict_type
) {
2661 av_log(avctx
, AV_LOG_ERROR
, "Missing picture start code\n");
2662 if (avctx
->err_recognition
& AV_EF_EXPLODE
)
2663 return AVERROR_INVALIDDATA
;
2667 if (s
->first_slice
) {
2670 if ((ret
= mpeg_field_start(s2
, buf
, buf_size
)) < 0)
2673 if (!s2
->current_picture_ptr
) {
2674 av_log(avctx
, AV_LOG_ERROR
,
2675 "current_picture not initialized\n");
2676 return AVERROR_INVALIDDATA
;
2679 if (uses_vdpau(avctx
)) {
2685 (avctx
->active_thread_type
& FF_THREAD_SLICE
) &&
2687 int threshold
= (s2
->mb_height
* s
->slice_count
+
2688 s2
->slice_context_count
/ 2) /
2689 s2
->slice_context_count
;
2690 av_assert0(avctx
->thread_count
> 1);
2691 if (threshold
<= mb_y
) {
2692 MpegEncContext
*thread_context
= s2
->thread_context
[s
->slice_count
];
2694 thread_context
->start_mb_y
= mb_y
;
2695 thread_context
->end_mb_y
= s2
->mb_height
;
2696 if (s
->slice_count
) {
2697 s2
->thread_context
[s
->slice_count
- 1]->end_mb_y
= mb_y
;
2698 ret
= ff_update_duplicate_context(thread_context
, s2
);
2702 init_get_bits(&thread_context
->gb
, buf_ptr
, input_size
* 8);
2705 buf_ptr
+= 2; // FIXME add minimum number of bytes per slice
2707 ret
= mpeg_decode_slice(s2
, mb_y
, &buf_ptr
, input_size
);
2711 if (avctx
->err_recognition
& AV_EF_EXPLODE
)
2713 if (s2
->resync_mb_x
>= 0 && s2
->resync_mb_y
>= 0)
2714 ff_er_add_slice(&s2
->er
, s2
->resync_mb_x
,
2715 s2
->resync_mb_y
, s2
->mb_x
, s2
->mb_y
,
2716 ER_AC_ERROR
| ER_DC_ERROR
| ER_MV_ERROR
);
2718 ff_er_add_slice(&s2
->er
, s2
->resync_mb_x
,
2719 s2
->resync_mb_y
, s2
->mb_x
- 1, s2
->mb_y
,
2720 ER_AC_END
| ER_DC_END
| ER_MV_END
);
2729 static int mpeg_decode_frame(AVCodecContext
*avctx
, void *data
,
2730 int *got_output
, AVPacket
*avpkt
)
2732 const uint8_t *buf
= avpkt
->data
;
2734 int buf_size
= avpkt
->size
;
2735 Mpeg1Context
*s
= avctx
->priv_data
;
2736 AVFrame
*picture
= data
;
2737 MpegEncContext
*s2
= &s
->mpeg_enc_ctx
;
2739 if (buf_size
== 0 || (buf_size
== 4 && AV_RB32(buf
) == SEQ_END_CODE
)) {
2740 /* special case for last picture */
2741 if (s2
->low_delay
== 0 && s2
->next_picture_ptr
) {
2742 int ret
= av_frame_ref(picture
, s2
->next_picture_ptr
->f
);
2746 s2
->next_picture_ptr
= NULL
;
2753 if (s2
->flags
& CODEC_FLAG_TRUNCATED
) {
2754 int next
= ff_mpeg1_find_frame_end(&s2
->parse_context
, buf
,
2757 if (ff_combine_frame(&s2
->parse_context
, next
,
2758 (const uint8_t **) &buf
, &buf_size
) < 0)
2762 s2
->codec_tag
= avpriv_toupper4(avctx
->codec_tag
);
2763 if (s
->mpeg_enc_ctx_allocated
== 0 && ( s2
->codec_tag
== AV_RL32("VCR2")
2764 || s2
->codec_tag
== AV_RL32("BW10")
2766 vcr2_init_sequence(avctx
);
2770 if (avctx
->extradata
&& !s
->extradata_decoded
) {
2771 ret
= decode_chunks(avctx
, picture
, got_output
,
2772 avctx
->extradata
, avctx
->extradata_size
);
2774 av_log(avctx
, AV_LOG_ERROR
, "picture in extradata\n");
2777 s
->extradata_decoded
= 1;
2778 if (ret
< 0 && (avctx
->err_recognition
& AV_EF_EXPLODE
)) {
2779 s2
->current_picture_ptr
= NULL
;
2784 ret
= decode_chunks(avctx
, picture
, got_output
, buf
, buf_size
);
2785 if (ret
<0 || *got_output
)
2786 s2
->current_picture_ptr
= NULL
;
2791 static void flush(AVCodecContext
*avctx
)
2793 Mpeg1Context
*s
= avctx
->priv_data
;
2797 ff_mpeg_flush(avctx
);
2800 static av_cold
int mpeg_decode_end(AVCodecContext
*avctx
)
2802 Mpeg1Context
*s
= avctx
->priv_data
;
2804 if (s
->mpeg_enc_ctx_allocated
)
2805 ff_mpv_common_end(&s
->mpeg_enc_ctx
);
2806 av_freep(&s
->a53_caption
);
2810 static const AVProfile mpeg2_video_profiles
[] = {
2811 { FF_PROFILE_MPEG2_422
, "4:2:2" },
2812 { FF_PROFILE_MPEG2_HIGH
, "High" },
2813 { FF_PROFILE_MPEG2_SS
, "Spatially Scalable" },
2814 { FF_PROFILE_MPEG2_SNR_SCALABLE
, "SNR Scalable" },
2815 { FF_PROFILE_MPEG2_MAIN
, "Main" },
2816 { FF_PROFILE_MPEG2_SIMPLE
, "Simple" },
2817 { FF_PROFILE_RESERVED
, "Reserved" },
2818 { FF_PROFILE_RESERVED
, "Reserved" },
2819 { FF_PROFILE_UNKNOWN
},
2822 AVCodec ff_mpeg1video_decoder
= {
2823 .name
= "mpeg1video",
2824 .long_name
= NULL_IF_CONFIG_SMALL("MPEG-1 video"),
2825 .type
= AVMEDIA_TYPE_VIDEO
,
2826 .id
= AV_CODEC_ID_MPEG1VIDEO
,
2827 .priv_data_size
= sizeof(Mpeg1Context
),
2828 .init
= mpeg_decode_init
,
2829 .close
= mpeg_decode_end
,
2830 .decode
= mpeg_decode_frame
,
2831 .capabilities
= CODEC_CAP_DRAW_HORIZ_BAND
| CODEC_CAP_DR1
|
2832 CODEC_CAP_TRUNCATED
| CODEC_CAP_DELAY
|
2833 CODEC_CAP_SLICE_THREADS
,
2836 .update_thread_context
= ONLY_IF_THREADS_ENABLED(mpeg_decode_update_thread_context
)
2839 AVCodec ff_mpeg2video_decoder
= {
2840 .name
= "mpeg2video",
2841 .long_name
= NULL_IF_CONFIG_SMALL("MPEG-2 video"),
2842 .type
= AVMEDIA_TYPE_VIDEO
,
2843 .id
= AV_CODEC_ID_MPEG2VIDEO
,
2844 .priv_data_size
= sizeof(Mpeg1Context
),
2845 .init
= mpeg_decode_init
,
2846 .close
= mpeg_decode_end
,
2847 .decode
= mpeg_decode_frame
,
2848 .capabilities
= CODEC_CAP_DRAW_HORIZ_BAND
| CODEC_CAP_DR1
|
2849 CODEC_CAP_TRUNCATED
| CODEC_CAP_DELAY
|
2850 CODEC_CAP_SLICE_THREADS
,
2853 .profiles
= NULL_IF_CONFIG_SMALL(mpeg2_video_profiles
),
2857 AVCodec ff_mpegvideo_decoder
= {
2858 .name
= "mpegvideo",
2859 .long_name
= NULL_IF_CONFIG_SMALL("MPEG-1 video"),
2860 .type
= AVMEDIA_TYPE_VIDEO
,
2861 .id
= AV_CODEC_ID_MPEG2VIDEO
,
2862 .priv_data_size
= sizeof(Mpeg1Context
),
2863 .init
= mpeg_decode_init
,
2864 .close
= mpeg_decode_end
,
2865 .decode
= mpeg_decode_frame
,
2866 .capabilities
= CODEC_CAP_DRAW_HORIZ_BAND
| CODEC_CAP_DR1
| CODEC_CAP_TRUNCATED
| CODEC_CAP_DELAY
| CODEC_CAP_SLICE_THREADS
,
2872 #if CONFIG_MPEG_XVMC_DECODER
2873 static av_cold
int mpeg_mc_decode_init(AVCodecContext
*avctx
)
2875 if (avctx
->active_thread_type
& FF_THREAD_SLICE
)
2877 if (!(avctx
->slice_flags
& SLICE_FLAG_CODED_ORDER
))
2879 if (!(avctx
->slice_flags
& SLICE_FLAG_ALLOW_FIELD
)) {
2880 av_dlog(avctx
, "mpeg12.c: XvMC decoder will work better if SLICE_FLAG_ALLOW_FIELD is set\n");
2882 mpeg_decode_init(avctx
);
2884 avctx
->pix_fmt
= AV_PIX_FMT_XVMC_MPEG2_IDCT
;
2885 avctx
->xvmc_acceleration
= 2; // 2 - the blocks are packed!
2890 AVCodec ff_mpeg_xvmc_decoder
= {
2891 .name
= "mpegvideo_xvmc",
2892 .long_name
= NULL_IF_CONFIG_SMALL("MPEG-1/2 video XvMC (X-Video Motion Compensation)"),
2893 .type
= AVMEDIA_TYPE_VIDEO
,
2894 .id
= AV_CODEC_ID_MPEG2VIDEO_XVMC
,
2895 .priv_data_size
= sizeof(Mpeg1Context
),
2896 .init
= mpeg_mc_decode_init
,
2897 .close
= mpeg_decode_end
,
2898 .decode
= mpeg_decode_frame
,
2899 .capabilities
= CODEC_CAP_DRAW_HORIZ_BAND
| CODEC_CAP_DR1
|
2900 CODEC_CAP_TRUNCATED
| CODEC_CAP_HWACCEL
| CODEC_CAP_DELAY
,
2905 #endif /* FF_API_XVMC */
2907 #if CONFIG_MPEG_VDPAU_DECODER
2908 AVCodec ff_mpeg_vdpau_decoder
= {
2909 .name
= "mpegvideo_vdpau",
2910 .long_name
= NULL_IF_CONFIG_SMALL("MPEG-1/2 video (VDPAU acceleration)"),
2911 .type
= AVMEDIA_TYPE_VIDEO
,
2912 .id
= AV_CODEC_ID_MPEG2VIDEO
,
2913 .priv_data_size
= sizeof(Mpeg1Context
),
2914 .init
= mpeg_decode_init
,
2915 .close
= mpeg_decode_end
,
2916 .decode
= mpeg_decode_frame
,
2917 .capabilities
= CODEC_CAP_DR1
| CODEC_CAP_TRUNCATED
|
2918 CODEC_CAP_HWACCEL_VDPAU
| CODEC_CAP_DELAY
,
2923 #if CONFIG_MPEG1_VDPAU_DECODER
2924 AVCodec ff_mpeg1_vdpau_decoder
= {
2925 .name
= "mpeg1video_vdpau",
2926 .long_name
= NULL_IF_CONFIG_SMALL("MPEG-1 video (VDPAU acceleration)"),
2927 .type
= AVMEDIA_TYPE_VIDEO
,
2928 .id
= AV_CODEC_ID_MPEG1VIDEO
,
2929 .priv_data_size
= sizeof(Mpeg1Context
),
2930 .init
= mpeg_decode_init
,
2931 .close
= mpeg_decode_end
,
2932 .decode
= mpeg_decode_frame
,
2933 .capabilities
= CODEC_CAP_DR1
| CODEC_CAP_TRUNCATED
|
2934 CODEC_CAP_HWACCEL_VDPAU
| CODEC_CAP_DELAY
,