summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorFreyr666 <sky_rider_93@mail.ru>2018-11-23 16:41:38 +0300
committerMatthew Waters <matthew@centricular.com>2018-11-30 02:09:50 +0000
commit7e92aa5bca31556ed232507bf8e8ca317808ec0f (patch)
tree42a39a623fe88b297f27cf1aad971edb34f13825 /ext
parentd5f2b5dcfa98c5c79e8045b8d249f48b3a82bfb9 (diff)
opengl: gldeinterlace: remove interlace-mode from srcpad's caps
This fixes output caps format, so the output frames are not interlaced anymore
Diffstat (limited to 'ext')
-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 3b26715dcd..68b0fc425b 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)