From 66bfd0e8aef6c08167c5742e096e5cc96246d984 Mon Sep 17 00:00:00 2001 From: Vivia Nikolaidou Date: Wed, 17 Feb 2021 15:15:09 +0200 Subject: [PATCH] h265parse: Detect height change on field-based interlaced files The first time update_src_caps is called, there's no frame parsed yet, therefore we don't know whether the file has alternate-field interlacing mode. If we run it again after we have a frame, it might be that now we have the SEI pic_struct parsed, and therefore we know that it's field-based interlaced, and therefore the height must be multiplied by two. Earlier on this was not detected as a change. Part-of: --- gst/videoparsers/gsth265parse.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gst/videoparsers/gsth265parse.c b/gst/videoparsers/gsth265parse.c index 0e6a9a9b53..7f45337f92 100644 --- a/gst/videoparsers/gsth265parse.c +++ b/gst/videoparsers/gsth265parse.c @@ -2026,12 +2026,14 @@ gst_h265_parse_update_src_caps (GstH265Parse * h265parse, GstCaps * caps) crop_width = sps->width; crop_height = sps->height; } + if (gst_h265_parse_is_field_interlaced (h265parse)) { + crop_height *= 2; + } if (G_UNLIKELY (h265parse->width != crop_width || h265parse->height != crop_height)) { h265parse->width = crop_width; - h265parse->height = gst_h265_parse_is_field_interlaced (h265parse) ? - crop_height * 2 : crop_height; + h265parse->height = crop_height; GST_INFO_OBJECT (h265parse, "resolution changed %dx%d", h265parse->width, h265parse->height); modified = TRUE;