In particular cases, it is possible to initialize top_field_first but not interlaced_frame. Make sure to correctly tag a frame as interlaced when this happens.
Signed-off-by: Vittorio Giovara <vittorio.giov...@gmail.com> --- Please CC. Vittorio libavcodec/h264_slice.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c index 91a3b25..eeb5202 100644 --- a/libavcodec/h264_slice.c +++ b/libavcodec/h264_slice.c @@ -1174,20 +1174,23 @@ static int h264_export_frame_props(H264Context *h) if (cur->field_poc[0] != cur->field_poc[1]) { /* Derive top_field_first from field pocs. */ - cur->f->top_field_first = cur->field_poc[0] < cur->field_poc[1]; + cur->f->interlaced_frame = + cur->f->top_field_first = cur->field_poc[0] < cur->field_poc[1]; } else { if (sps->pic_struct_present_flag) { /* Use picture timing SEI information. Even if it is a * information of a past frame, better than nothing. */ if (h->sei.picture_timing.pic_struct == SEI_PIC_STRUCT_TOP_BOTTOM || - h->sei.picture_timing.pic_struct == SEI_PIC_STRUCT_TOP_BOTTOM_TOP) - cur->f->top_field_first = 1; - else + h->sei.picture_timing.pic_struct == SEI_PIC_STRUCT_TOP_BOTTOM_TOP) { + cur->f->interlaced_frame = + cur->f->top_field_first = 1; + } else cur->f->top_field_first = 0; } else if (cur->f->interlaced_frame) { /* Default to top field first when pic_struct_present_flag * is not set but interlaced frame detected */ - cur->f->top_field_first = 1; + cur->f->interlaced_frame = + cur->f->top_field_first = 1; } else { /* Most likely progressive */ cur->f->top_field_first = 0; -- 2.10.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel