glfilter: Remove hard-coded pad templates
authorJan Schmidt <jan@centricular.com>
Thu, 6 Jul 2017 11:09:50 +0000 (21:09 +1000)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 9 Dec 2017 19:32:29 +0000 (19:32 +0000)
Add a function to install the default RGBA pad templates,
but don't make them required so that there can be
GstGLFilter sub-classes with different input/output
caps if they want. Remove the hard-coded RGBA restriction in
the set_caps_features call, as it will be taken care
of by intersecting with the pad templates.

Update all the sub-classes to match

16 files changed:
ext/gl/gstglbumper.c
ext/gl/gstglcolorbalance.c
ext/gl/gstglcolorscale.c
ext/gl/gstgldeinterlace.c
ext/gl/gstgldifferencematte.c
ext/gl/gstgleffects.c
ext/gl/gstglfilterapp.c
ext/gl/gstglfiltercube.c
ext/gl/gstglfilterglass.c
ext/gl/gstglfilterreflectedscreen.c
ext/gl/gstglfiltershader.c
ext/gl/gstgloverlay.c
ext/gl/gstgltransformation.c
ext/gl/gstglviewconvert.c
gst-libs/gst/gl/gstglfilter.c
gst-libs/gst/gl/gstglfilter.h

index 8dd812c..2b7bd6e 100644 (file)
@@ -280,6 +280,8 @@ gst_gl_bumper_class_init (GstGLBumperClass * klass)
   gobject_class->set_property = gst_gl_bumper_set_property;
   gobject_class->get_property = gst_gl_bumper_get_property;
 
+  gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass));
+
   GST_GL_FILTER_CLASS (klass)->filter_texture = gst_gl_bumper_filter_texture;
   GST_GL_FILTER_CLASS (klass)->display_init_cb = gst_gl_bumper_init_resources;
   GST_GL_FILTER_CLASS (klass)->display_reset_cb = gst_gl_bumper_reset_resources;
index c2482a3..7a8a5b1 100644 (file)
@@ -292,6 +292,8 @@ gst_gl_color_balance_class_init (GstGLColorBalanceClass * klass)
   GST_DEBUG_CATEGORY_INIT (glcolorbalance_debug, "glcolorbalance", 0,
       "glcolorbalance");
 
+  gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass));
+
   gobject_class->finalize = gst_gl_color_balance_finalize;
   gobject_class->set_property = gst_gl_color_balance_set_property;
   gobject_class->get_property = gst_gl_color_balance_get_property;
index b7b0709..3042734 100644 (file)
@@ -89,6 +89,8 @@ gst_gl_colorscale_class_init (GstGLColorscaleClass * klass)
   base_filter_class = GST_GL_BASE_FILTER_CLASS (klass);
   filter_class = GST_GL_FILTER_CLASS (klass);
 
+  gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass));
+
   gobject_class->set_property = gst_gl_colorscale_set_property;
   gobject_class->get_property = gst_gl_colorscale_get_property;
 
index dbc2c24..975128f 100644 (file)
@@ -241,6 +241,8 @@ gst_gl_deinterlace_class_init (GstGLDeinterlaceClass * klass)
   gobject_class = (GObjectClass *) klass;
   element_class = GST_ELEMENT_CLASS (klass);
 
+  gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass));
+
   gobject_class->set_property = gst_gl_deinterlace_set_property;
   gobject_class->get_property = gst_gl_deinterlace_get_property;
 
index aa1092a..c68bbbe 100644 (file)
@@ -215,6 +215,9 @@ gst_gl_differencematte_class_init (GstGLDifferenceMatteClass * klass)
 
   gobject_class = (GObjectClass *) klass;
   element_class = GST_ELEMENT_CLASS (klass);
+
+  gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass));
+
   gobject_class->set_property = gst_gl_differencematte_set_property;
   gobject_class->get_property = gst_gl_differencematte_get_property;
 
index d8a7da1..4377310 100644 (file)
@@ -327,6 +327,8 @@ gst_gl_effects_class_init (GstGLEffectsClass * klass)
 {
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
 
+  gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass));
+
   GST_BASE_TRANSFORM_CLASS (klass)->start = gst_gl_effects_init_resources;
   GST_BASE_TRANSFORM_CLASS (klass)->stop = gst_gl_effects_reset_resources;
 
index fc2e6ac..8426d03 100644 (file)
@@ -81,6 +81,8 @@ gst_gl_filter_app_class_init (GstGLFilterAppClass * klass)
   gobject_class = (GObjectClass *) klass;
   element_class = GST_ELEMENT_CLASS (klass);
 
+  gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass));
+
   gobject_class->set_property = gst_gl_filter_app_set_property;
   gobject_class->get_property = gst_gl_filter_app_get_property;
 
index 427782a..9e04ea0 100644 (file)
@@ -135,6 +135,8 @@ gst_gl_filter_cube_class_init (GstGLFilterCubeClass * klass)
   gobject_class = (GObjectClass *) klass;
   element_class = GST_ELEMENT_CLASS (klass);
 
+  gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass));
+
   gobject_class->set_property = gst_gl_filter_cube_set_property;
   gobject_class->get_property = gst_gl_filter_cube_get_property;
 
index ea20239..160543f 100644 (file)
@@ -153,6 +153,8 @@ gst_gl_filter_glass_class_init (GstGLFilterGlassClass * klass)
   gobject_class = (GObjectClass *) klass;
   element_class = GST_ELEMENT_CLASS (klass);
 
+  gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass));
+
   gobject_class->set_property = gst_gl_filter_glass_set_property;
   gobject_class->get_property = gst_gl_filter_glass_get_property;
 
index 62ccd9b..2ca090c 100644 (file)
@@ -91,6 +91,8 @@ gst_gl_filter_reflected_screen_class_init (GstGLFilterReflectedScreenClass *
   gobject_class = (GObjectClass *) klass;
   element_class = GST_ELEMENT_CLASS (klass);
 
+  gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass));
+
   gobject_class->set_property = gst_gl_filter_reflected_screen_set_property;
   gobject_class->get_property = gst_gl_filter_reflected_screen_get_property;
 
index 8f5a990..06a6195 100644 (file)
@@ -115,6 +115,8 @@ gst_gl_filtershader_class_init (GstGLFilterShaderClass * klass)
   gobject_class = (GObjectClass *) klass;
   element_class = GST_ELEMENT_CLASS (klass);
 
+  gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass));
+
   gobject_class->finalize = gst_gl_filtershader_finalize;
   gobject_class->set_property = gst_gl_filtershader_set_property;
   gobject_class->get_property = gst_gl_filtershader_get_property;
index 173d118..864ea64 100644 (file)
@@ -189,6 +189,8 @@ gst_gl_overlay_class_init (GstGLOverlayClass * klass)
   gobject_class = (GObjectClass *) klass;
   element_class = GST_ELEMENT_CLASS (klass);
 
+  gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass));
+
   gobject_class->set_property = gst_gl_overlay_set_property;
   gobject_class->get_property = gst_gl_overlay_get_property;
 
index 729a9f6..047fc73 100644 (file)
@@ -129,6 +129,8 @@ gst_gl_transformation_class_init (GstGLTransformationClass * klass)
   element_class = GST_ELEMENT_CLASS (klass);
   base_transform_class = GST_BASE_TRANSFORM_CLASS (klass);
 
+  gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass));
+
   gobject_class->set_property = gst_gl_transformation_set_property;
   gobject_class->get_property = gst_gl_transformation_get_property;
 
index 670305c..eafa084 100644 (file)
@@ -101,6 +101,8 @@ gst_gl_view_convert_element_class_init (GstGLViewConvertElementClass * klass)
   gobject_class = (GObjectClass *) klass;
   element_class = GST_ELEMENT_CLASS (klass);
 
+  gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass));
+
   gobject_class->set_property = gst_gl_view_convert_element_set_property;
   gobject_class->get_property = gst_gl_view_convert_element_get_property;
   gobject_class->dispose = gst_gl_view_convert_dispose;
index e702a1e..544d79d 100644 (file)
@@ -118,14 +118,22 @@ static void gst_gl_filter_gl_stop (GstGLBaseFilter * filter);
 static gboolean gst_gl_filter_gl_set_caps (GstGLBaseFilter * bt,
     GstCaps * incaps, GstCaps * outcaps);
 
+void
+gst_gl_filter_add_rgba_pad_templates (GstGLFilterClass * klass)
+{
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  gst_element_class_add_static_pad_template (element_class,
+      &gst_gl_filter_src_pad_template);
+  gst_element_class_add_static_pad_template (element_class,
+      &gst_gl_filter_sink_pad_template);
+}
+
 static void
 gst_gl_filter_class_init (GstGLFilterClass * klass)
 {
   GObjectClass *gobject_class;
-  GstElementClass *element_class;
 
   gobject_class = (GObjectClass *) klass;
-  element_class = GST_ELEMENT_CLASS (klass);
 
   gobject_class->set_property = gst_gl_filter_set_property;
   gobject_class->get_property = gst_gl_filter_get_property;
@@ -146,11 +154,6 @@ gst_gl_filter_class_init (GstGLFilterClass * klass)
   GST_GL_BASE_FILTER_CLASS (klass)->gl_set_caps = gst_gl_filter_gl_set_caps;
 
   klass->transform_internal_caps = default_transform_internal_caps;
-
-  gst_element_class_add_static_pad_template (element_class,
-      &gst_gl_filter_src_pad_template);
-  gst_element_class_add_static_pad_template (element_class,
-      &gst_gl_filter_sink_pad_template);
 }
 
 static void
@@ -618,7 +621,6 @@ gst_gl_filter_set_caps_features (const GstCaps * caps,
         gst_caps_features_from_string (GST_CAPS_FEATURE_MEMORY_GL_MEMORY));
   }
 
-  gst_caps_set_simple (ret, "format", G_TYPE_STRING, "RGBA", NULL);
   return ret;
 }
 
index 8b278d8..9dbb537 100644 (file)
@@ -119,6 +119,9 @@ struct _GstGLFilterClass
 };
 
 GST_EXPORT
+void gst_gl_filter_add_rgba_pad_templates (GstGLFilterClass *klass);
+
+GST_EXPORT
 gboolean gst_gl_filter_filter_texture (GstGLFilter * filter, GstBuffer * inbuf,
                                        GstBuffer * outbuf);