mpeg2enc: fix interlace-mode detection
authorMathieu Duponchelle <mathieu@centricular.com>
Thu, 5 Aug 2021 21:11:26 +0000 (23:11 +0200)
committerMathieu Duponchelle <mathieu@centricular.com>
Thu, 5 Aug 2021 21:12:32 +0000 (23:12 +0200)
Previously, the code was always assuming progressive input,
fix this by looking at the caps.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2455>

ext/mpeg2enc/gstmpeg2encpicturereader.cc

index 2bdd23d..3641b61 100644 (file)
@@ -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);