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: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2022>
This commit is contained in:
Vivia Nikolaidou 2021-02-17 15:15:09 +02:00 committed by GStreamer Merge Bot
parent de83bd6b2f
commit 66bfd0e8ae

View 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;