summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFreyr666 <sky_rider_93@mail.ru>2018-11-23 16:41:38 +0300
committerTim-Philipp Müller <tim@centricular.com>2019-05-01 17:05:30 +0100
commit35885397be8bb844d08de07a17b8e9fef63ee761 (patch)
tree7cd79fb3ce37e10f4b349ce43cead5d4b237a10a
parentc9edd55f5328541eb782d4d9da6c46d5b18871d6 (diff)
downloadgstreamer-plugins-base-35885397be8bb844d08de07a17b8e9fef63ee761.tar.gz
opengl: gldeinterlace: remove interlace-mode from srcpad's caps
This fixes output caps format, so the output frames are not interlaced anymore
-rw-r--r--ext/gl/gstgldeinterlace.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/ext/gl/gstgldeinterlace.c b/ext/gl/gstgldeinterlace.c
index 3b26715dc..68b0fc425 100644
--- a/ext/gl/gstgldeinterlace.c
+++ b/ext/gl/gstgldeinterlace.c
@@ -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)