From: Thomas Mundt <[email protected]> Default field order to top field first when interlaced frame is detected and pic_struct_present_flag is not set. Since bottom field first comes from the old NTSC standard and it is not used with HD anymore I think it´s straight forward to favor the majority.
Bug-Id: ffmpeg ticket #3147 Signed-off-by: Thomas Mundt <[email protected]> Signed-off-by: Michael Niedermayer <[email protected]> Signed-off-by: Vittorio Giovara <[email protected]> --- libavcodec/h264.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libavcodec/h264.c b/libavcodec/h264.c index ec57d6d..c35bb9a 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -758,7 +758,7 @@ static void decode_postinit(H264Context *h, int setup_finished) /* Derive top_field_first from field pocs. */ cur->f->top_field_first = cur->field_poc[0] < cur->field_poc[1]; } else { - if (cur->f->interlaced_frame || h->sps.pic_struct_present_flag) { + if (h->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_pic_struct == SEI_PIC_STRUCT_TOP_BOTTOM || @@ -766,6 +766,10 @@ static void decode_postinit(H264Context *h, int setup_finished) 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; } else { /* Most likely progressive */ cur->f->top_field_first = 0; -- 1.9.5 (Apple Git-50.3) _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
