deinterlace: Drop "field-order" field while transforming caps
authorSeungha Yang <seungha@centricular.com>
Tue, 25 May 2021 15:23:56 +0000 (00:23 +0900)
committerSeungha Yang <seungha@centricular.com>
Thu, 27 May 2021 12:58:30 +0000 (12:58 +0000)
Like other basetransform subclasses are doing, drop field
which can be converted by deinterlace.

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

gst/deinterlace/gstdeinterlace.c

index 750e68f..3fba2d2 100644 (file)
@@ -2539,11 +2539,18 @@ gst_deinterlace_getcaps (GstDeinterlace * self, GstPad * pad, GstCaps * filter)
   for (len = gst_caps_get_size (tmp2); len > 0; len--) {
     GstStructure *s = gst_caps_get_structure (tmp2, len - 1);
 
-    if (pad == self->sinkpad)
+    /* Drop fields which can be converted by us.
+     * Specifically "field-order" here.
+     * "field-order" with "progressive" and/or
+     * unspecified "interlace-mode" would cause negotiation issue */
+    gst_structure_remove_field (s, "field-order");
+
+    if (pad == self->sinkpad) {
       gst_structure_remove_field (s, "interlace-mode");
-    else
+    } else {
       gst_structure_set (s, "interlace-mode", G_TYPE_STRING, "progressive",
           NULL);
+    }
   }
 
   if (self->user_set_fields == GST_DEINTERLACE_ALL) {