glfilter: Remove hard-coded pad templates

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
This commit is contained in:
Jan Schmidt 2017-07-06 21:09:50 +10:00
parent cb3a65a19a
commit 6083ad6287
16 changed files with 42 additions and 8 deletions

View file

@ -280,6 +280,8 @@ gst_gl_bumper_class_init (GstGLBumperClass * klass)
gobject_class->set_property = gst_gl_bumper_set_property; gobject_class->set_property = gst_gl_bumper_set_property;
gobject_class->get_property = gst_gl_bumper_get_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)->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_init_cb = gst_gl_bumper_init_resources;
GST_GL_FILTER_CLASS (klass)->display_reset_cb = gst_gl_bumper_reset_resources; GST_GL_FILTER_CLASS (klass)->display_reset_cb = gst_gl_bumper_reset_resources;

View file

@ -292,6 +292,8 @@ gst_gl_color_balance_class_init (GstGLColorBalanceClass * klass)
GST_DEBUG_CATEGORY_INIT (glcolorbalance_debug, "glcolorbalance", 0, GST_DEBUG_CATEGORY_INIT (glcolorbalance_debug, "glcolorbalance", 0,
"glcolorbalance"); "glcolorbalance");
gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass));
gobject_class->finalize = gst_gl_color_balance_finalize; gobject_class->finalize = gst_gl_color_balance_finalize;
gobject_class->set_property = gst_gl_color_balance_set_property; gobject_class->set_property = gst_gl_color_balance_set_property;
gobject_class->get_property = gst_gl_color_balance_get_property; gobject_class->get_property = gst_gl_color_balance_get_property;

View file

@ -89,6 +89,8 @@ gst_gl_colorscale_class_init (GstGLColorscaleClass * klass)
base_filter_class = GST_GL_BASE_FILTER_CLASS (klass); base_filter_class = GST_GL_BASE_FILTER_CLASS (klass);
filter_class = GST_GL_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->set_property = gst_gl_colorscale_set_property;
gobject_class->get_property = gst_gl_colorscale_get_property; gobject_class->get_property = gst_gl_colorscale_get_property;

View file

@ -241,6 +241,8 @@ gst_gl_deinterlace_class_init (GstGLDeinterlaceClass * klass)
gobject_class = (GObjectClass *) klass; gobject_class = (GObjectClass *) klass;
element_class = GST_ELEMENT_CLASS (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->set_property = gst_gl_deinterlace_set_property;
gobject_class->get_property = gst_gl_deinterlace_get_property; gobject_class->get_property = gst_gl_deinterlace_get_property;

View file

@ -215,6 +215,9 @@ gst_gl_differencematte_class_init (GstGLDifferenceMatteClass * klass)
gobject_class = (GObjectClass *) klass; gobject_class = (GObjectClass *) klass;
element_class = GST_ELEMENT_CLASS (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->set_property = gst_gl_differencematte_set_property;
gobject_class->get_property = gst_gl_differencematte_get_property; gobject_class->get_property = gst_gl_differencematte_get_property;

View file

@ -327,6 +327,8 @@ gst_gl_effects_class_init (GstGLEffectsClass * klass)
{ {
GstElementClass *element_class = GST_ELEMENT_CLASS (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)->start = gst_gl_effects_init_resources;
GST_BASE_TRANSFORM_CLASS (klass)->stop = gst_gl_effects_reset_resources; GST_BASE_TRANSFORM_CLASS (klass)->stop = gst_gl_effects_reset_resources;

View file

@ -81,6 +81,8 @@ gst_gl_filter_app_class_init (GstGLFilterAppClass * klass)
gobject_class = (GObjectClass *) klass; gobject_class = (GObjectClass *) klass;
element_class = GST_ELEMENT_CLASS (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->set_property = gst_gl_filter_app_set_property;
gobject_class->get_property = gst_gl_filter_app_get_property; gobject_class->get_property = gst_gl_filter_app_get_property;

View file

@ -135,6 +135,8 @@ gst_gl_filter_cube_class_init (GstGLFilterCubeClass * klass)
gobject_class = (GObjectClass *) klass; gobject_class = (GObjectClass *) klass;
element_class = GST_ELEMENT_CLASS (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->set_property = gst_gl_filter_cube_set_property;
gobject_class->get_property = gst_gl_filter_cube_get_property; gobject_class->get_property = gst_gl_filter_cube_get_property;

View file

@ -153,6 +153,8 @@ gst_gl_filter_glass_class_init (GstGLFilterGlassClass * klass)
gobject_class = (GObjectClass *) klass; gobject_class = (GObjectClass *) klass;
element_class = GST_ELEMENT_CLASS (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->set_property = gst_gl_filter_glass_set_property;
gobject_class->get_property = gst_gl_filter_glass_get_property; gobject_class->get_property = gst_gl_filter_glass_get_property;

View file

@ -91,6 +91,8 @@ gst_gl_filter_reflected_screen_class_init (GstGLFilterReflectedScreenClass *
gobject_class = (GObjectClass *) klass; gobject_class = (GObjectClass *) klass;
element_class = GST_ELEMENT_CLASS (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->set_property = gst_gl_filter_reflected_screen_set_property;
gobject_class->get_property = gst_gl_filter_reflected_screen_get_property; gobject_class->get_property = gst_gl_filter_reflected_screen_get_property;

View file

@ -115,6 +115,8 @@ gst_gl_filtershader_class_init (GstGLFilterShaderClass * klass)
gobject_class = (GObjectClass *) klass; gobject_class = (GObjectClass *) klass;
element_class = GST_ELEMENT_CLASS (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->finalize = gst_gl_filtershader_finalize;
gobject_class->set_property = gst_gl_filtershader_set_property; gobject_class->set_property = gst_gl_filtershader_set_property;
gobject_class->get_property = gst_gl_filtershader_get_property; gobject_class->get_property = gst_gl_filtershader_get_property;

View file

@ -189,6 +189,8 @@ gst_gl_overlay_class_init (GstGLOverlayClass * klass)
gobject_class = (GObjectClass *) klass; gobject_class = (GObjectClass *) klass;
element_class = GST_ELEMENT_CLASS (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->set_property = gst_gl_overlay_set_property;
gobject_class->get_property = gst_gl_overlay_get_property; gobject_class->get_property = gst_gl_overlay_get_property;

View file

@ -129,6 +129,8 @@ gst_gl_transformation_class_init (GstGLTransformationClass * klass)
element_class = GST_ELEMENT_CLASS (klass); element_class = GST_ELEMENT_CLASS (klass);
base_transform_class = GST_BASE_TRANSFORM_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->set_property = gst_gl_transformation_set_property;
gobject_class->get_property = gst_gl_transformation_get_property; gobject_class->get_property = gst_gl_transformation_get_property;

View file

@ -101,6 +101,8 @@ gst_gl_view_convert_element_class_init (GstGLViewConvertElementClass * klass)
gobject_class = (GObjectClass *) klass; gobject_class = (GObjectClass *) klass;
element_class = GST_ELEMENT_CLASS (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->set_property = gst_gl_view_convert_element_set_property;
gobject_class->get_property = gst_gl_view_convert_element_get_property; gobject_class->get_property = gst_gl_view_convert_element_get_property;
gobject_class->dispose = gst_gl_view_convert_dispose; gobject_class->dispose = gst_gl_view_convert_dispose;

View file

@ -118,14 +118,22 @@ static void gst_gl_filter_gl_stop (GstGLBaseFilter * filter);
static gboolean gst_gl_filter_gl_set_caps (GstGLBaseFilter * bt, static gboolean gst_gl_filter_gl_set_caps (GstGLBaseFilter * bt,
GstCaps * incaps, GstCaps * outcaps); 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 static void
gst_gl_filter_class_init (GstGLFilterClass * klass) gst_gl_filter_class_init (GstGLFilterClass * klass)
{ {
GObjectClass *gobject_class; GObjectClass *gobject_class;
GstElementClass *element_class;
gobject_class = (GObjectClass *) klass; gobject_class = (GObjectClass *) klass;
element_class = GST_ELEMENT_CLASS (klass);
gobject_class->set_property = gst_gl_filter_set_property; gobject_class->set_property = gst_gl_filter_set_property;
gobject_class->get_property = gst_gl_filter_get_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; GST_GL_BASE_FILTER_CLASS (klass)->gl_set_caps = gst_gl_filter_gl_set_caps;
klass->transform_internal_caps = default_transform_internal_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 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_features_from_string (GST_CAPS_FEATURE_MEMORY_GL_MEMORY));
} }
gst_caps_set_simple (ret, "format", G_TYPE_STRING, "RGBA", NULL);
return ret; return ret;
} }

View file

@ -118,6 +118,9 @@ struct _GstGLFilterClass
gpointer _padding[GST_PADDING]; gpointer _padding[GST_PADDING];
}; };
GST_EXPORT
void gst_gl_filter_add_rgba_pad_templates (GstGLFilterClass *klass);
GST_EXPORT GST_EXPORT
gboolean gst_gl_filter_filter_texture (GstGLFilter * filter, GstBuffer * inbuf, gboolean gst_gl_filter_filter_texture (GstGLFilter * filter, GstBuffer * inbuf,
GstBuffer * outbuf); GstBuffer * outbuf);