From c5d725652d7ac514505a3e653e0e41cbca202230 Mon Sep 17 00:00:00 2001 From: Mathieu Duponchelle Date: Thu, 5 Aug 2021 23:11:26 +0200 Subject: [PATCH] mpeg2enc: fix interlace-mode detection Previously, the code was always assuming progressive input, fix this by looking at the caps. Part-of: --- ext/mpeg2enc/gstmpeg2encpicturereader.cc | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/ext/mpeg2enc/gstmpeg2encpicturereader.cc b/ext/mpeg2enc/gstmpeg2encpicturereader.cc index 2bdd23d3d9..3641b613a0 100644 --- a/ext/mpeg2enc/gstmpeg2encpicturereader.cc +++ b/ext/mpeg2enc/gstmpeg2encpicturereader.cc @@ -61,6 +61,7 @@ GstMpeg2EncPictureReader::StreamPictureParams (MPEG2EncInVidParams & strm) const GValue *par_val; y4m_ratio_t fps; y4m_ratio_t par; + const gchar *interlace_mode; if (!gst_structure_get_int (structure, "width", &width)) width = -1; @@ -90,7 +91,24 @@ GstMpeg2EncPictureReader::StreamPictureParams (MPEG2EncInVidParams & strm) strm.horizontal_size = width; strm.vertical_size = height; - strm.interlacing_code = Y4M_ILACE_NONE; + interlace_mode = gst_structure_get_string (structure, "interlace-mode"); + + if (!g_strcmp0(interlace_mode, "interleaved")) { + const gchar *field_order = gst_structure_get_string(structure, "field-order"); + + if (!g_strcmp0(field_order, "bottom-field-first")) { + strm.interlacing_code = Y4M_ILACE_BOTTOM_FIRST; + } else if (!g_strcmp0(field_order, "top-field-first")) { + strm.interlacing_code = Y4M_ILACE_TOP_FIRST; + } else { + GST_WARNING ("No field-order in caps, assuming top field first"); + strm.interlacing_code = Y4M_ILACE_TOP_FIRST; + } + } else if (!g_strcmp0(interlace_mode, "mixed")) { + strm.interlacing_code = Y4M_ILACE_MIXED; + } else { + strm.interlacing_code = Y4M_ILACE_NONE; + } strm.aspect_ratio_code = mpeg_guess_mpeg_aspect_code (2, par, strm.horizontal_size, strm.vertical_size);