Commit 9aebea0a authored by Sebastian Dröge's avatar Sebastian Dröge Committed by Michael Niedermayer

avcodec/h264: Set CORRUPT flag on output frames that are not fully recovered

In the merge commit 78265fcf this behaviour
was broken and the CORRUPT flag would never ever be set on a frame. However
the flag on the AVCodecContext was taken into account properly, including
AV_CODEC_FLAG2_SHOW_ALL.

The reason for this was that the recovered field of the next output picture
was always set to TRUE whenever one of the two AVCodecContext flags was set,
which made it impossible to detect later, before outputting, if the frame was
really recovered or not. Now don't set it to TRUE unless the frame is really
recovered and check the AVCodecContext flags right before outputting.
Signed-off-by: 's avatarSebastian Dröge <sebastian@centricular.com>
Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
parent 503d8bf7
......@@ -1556,8 +1556,6 @@ again:
// "recovered".
if (h->nal_unit_type == NAL_IDR_SLICE)
h->frame_recovered |= FRAME_RECOVERED_IDR;
h->frame_recovered |= 3*!!(avctx->flags2 & AV_CODEC_FLAG2_SHOW_ALL);
h->frame_recovered |= 3*!!(avctx->flags & AV_CODEC_FLAG_OUTPUT_CORRUPT);
#if 1
h->cur_pic_ptr->recovered |= h->frame_recovered;
#else
......@@ -1863,7 +1861,8 @@ static int h264_decode_frame(AVCodecContext *avctx, void *data,
/* Wait for second field. */
*got_frame = 0;
if (h->next_output_pic && (
if (h->next_output_pic && ((avctx->flags & AV_CODEC_FLAG_OUTPUT_CORRUPT) ||
(avctx->flags2 & AV_CODEC_FLAG2_SHOW_ALL) ||
h->next_output_pic->recovered)) {
if (!h->next_output_pic->recovered)
h->next_output_pic->f->flags |= AV_FRAME_FLAG_CORRUPT;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment