h265parse: Detect height change on field-based interlaced files
authorVivia Nikolaidou <vivia@ahiru.eu>
Wed, 17 Feb 2021 13:15:09 +0000 (15:15 +0200)
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 17 Feb 2021 13:46:41 +0000 (13:46 +0000)
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: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2022>

gst/videoparsers/gsth265parse.c

index 0e6a9a9..7f45337 100644 (file)
@@ -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;