opengl: gldeinterlace: remove interlace-mode from srcpad's caps
authorFreyr666 <sky_rider_93@mail.ru>
Fri, 23 Nov 2018 13:41:38 +0000 (16:41 +0300)
committerMatthew Waters <matthew@centricular.com>
Fri, 30 Nov 2018 02:09:50 +0000 (02:09 +0000)
This fixes output caps format, so the output frames are not interlaced anymore

ext/gl/gstgldeinterlace.c

index 3b26715..68b0fc4 100644 (file)
@@ -62,6 +62,8 @@ static void gst_gl_deinterlace_get_property (GObject * object,
 
 static gboolean gst_gl_deinterlace_start (GstBaseTransform * trans);
 static gboolean gst_gl_deinterlace_reset (GstBaseTransform * trans);
+static GstCaps *gst_gl_deinterlace_transform_internal_caps (GstGLFilter * filter,
+    GstPadDirection direction, GstCaps * caps, GstCaps * caps_filter);
 static gboolean gst_gl_deinterlace_init_fbo (GstGLFilter * filter);
 static gboolean gst_gl_deinterlace_filter (GstGLFilter * filter,
     GstBuffer * inbuf, GstBuffer * outbuf);
@@ -264,6 +266,8 @@ gst_gl_deinterlace_class_init (GstGLDeinterlaceClass * klass)
   GST_BASE_TRANSFORM_CLASS (klass)->start = gst_gl_deinterlace_start;
   GST_BASE_TRANSFORM_CLASS (klass)->stop = gst_gl_deinterlace_reset;
 
+  GST_GL_FILTER_CLASS (klass)->transform_internal_caps =
+      gst_gl_deinterlace_transform_internal_caps;
   GST_GL_FILTER_CLASS (klass)->filter = gst_gl_deinterlace_filter;
   GST_GL_FILTER_CLASS (klass)->filter_texture =
       gst_gl_deinterlace_filter_texture;
@@ -327,6 +331,26 @@ gst_gl_deinterlace_reset (GstBaseTransform * trans)
   return GST_BASE_TRANSFORM_CLASS (parent_class)->stop (trans);
 }
 
+static GstCaps *
+gst_gl_deinterlace_transform_internal_caps (GstGLFilter * filter,
+    GstPadDirection direction, GstCaps * caps, GstCaps * caps_filter)
+{
+  gint len;
+  GstCaps *res;
+  GstStructure *s;
+
+  res = gst_caps_copy (caps);
+
+  for (len = gst_caps_get_size (res); len > 0; len--) {
+    s = gst_caps_get_structure (res, len - 1);
+    if (direction == GST_PAD_SINK) {
+      gst_structure_remove_field (s, "interlace-mode");
+    }
+  }
+
+  return res;
+}
+
 static void
 gst_gl_deinterlace_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)