aggregator: Remove klass->sinkpads_type

This posed problems for the python bindings (and possibly others).

Instead, subclasses now use add_pad_template_with_gtype.

https://bugzilla.gnome.org/show_bug.cgi?id=789986
This commit is contained in:
Mathieu Duponchelle 2017-11-06 21:07:51 +01:00
parent 96e9eb1fd3
commit 14f886b7b0
6 changed files with 28 additions and 24 deletions

View file

@ -270,7 +270,6 @@ gst_gl_base_mixer_class_init (GstGLBaseMixerClass * klass)
GST_DEBUG_FUNCPTR (gst_gl_base_mixer_set_context); GST_DEBUG_FUNCPTR (gst_gl_base_mixer_set_context);
element_class->change_state = gst_gl_base_mixer_change_state; element_class->change_state = gst_gl_base_mixer_change_state;
agg_class->sinkpads_type = GST_TYPE_GL_BASE_MIXER_PAD;
agg_class->sink_query = gst_gl_base_mixer_sink_query; agg_class->sink_query = gst_gl_base_mixer_sink_query;
agg_class->src_query = gst_gl_base_mixer_src_query; agg_class->src_query = gst_gl_base_mixer_src_query;
agg_class->src_activate = gst_gl_base_mixer_src_activate_mode; agg_class->src_activate = gst_gl_base_mixer_src_activate_mode;

View file

@ -365,9 +365,9 @@ gst_gl_mixer_class_init (GstGLMixerClass * klass)
gobject_class->set_property = gst_gl_mixer_set_property; gobject_class->set_property = gst_gl_mixer_set_property;
gst_element_class_add_static_pad_template (element_class, &src_factory); gst_element_class_add_static_pad_template (element_class, &src_factory);
gst_element_class_add_static_pad_template (element_class, &sink_factory); gst_element_class_add_static_pad_template_with_gtype (element_class,
&sink_factory, GST_TYPE_GL_MIXER_PAD);
agg_class->sinkpads_type = GST_TYPE_GL_MIXER_PAD;
agg_class->sink_query = gst_gl_mixer_sink_query; agg_class->sink_query = gst_gl_mixer_sink_query;
agg_class->src_query = gst_gl_mixer_src_query; agg_class->src_query = gst_gl_mixer_src_query;
agg_class->stop = gst_gl_mixer_stop; agg_class->stop = gst_gl_mixer_stop;

View file

@ -180,9 +180,9 @@ gst_gl_stereo_mix_class_init (GstGLStereoMixClass * klass)
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
gst_element_class_add_static_pad_template (element_class, &src_factory); gst_element_class_add_static_pad_template (element_class, &src_factory);
gst_element_class_add_static_pad_template (element_class, &sink_factory); gst_element_class_add_static_pad_template_with_gtype (element_class,
&sink_factory, GST_TYPE_GL_STEREO_MIX_PAD);
agg_class->sinkpads_type = GST_TYPE_GL_STEREO_MIX_PAD;
agg_class->stop = gst_gl_stereo_mix_stop; agg_class->stop = gst_gl_stereo_mix_stop;
agg_class->start = gst_gl_stereo_mix_start; agg_class->start = gst_gl_stereo_mix_start;
agg_class->src_query = gst_gl_stereo_mix_src_query; agg_class->src_query = gst_gl_stereo_mix_src_query;

View file

@ -55,6 +55,14 @@
#define GST_CAT_DEFAULT gst_gl_video_mixer_debug #define GST_CAT_DEFAULT gst_gl_video_mixer_debug
GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT); GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink_%u",
GST_PAD_SINK,
GST_PAD_REQUEST,
GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
(GST_CAPS_FEATURE_MEMORY_GL_MEMORY,
"RGBA"))
);
#define GST_TYPE_GL_VIDEO_MIXER_BACKGROUND (gst_gl_video_mixer_background_get_type()) #define GST_TYPE_GL_VIDEO_MIXER_BACKGROUND (gst_gl_video_mixer_background_get_type())
static GType static GType
gst_gl_video_mixer_background_get_type (void) gst_gl_video_mixer_background_get_type (void)
@ -862,6 +870,9 @@ gst_gl_video_mixer_class_init (GstGLVideoMixerClass * klass)
"Filter/Effect/Video/Compositor", "OpenGL video_mixer", "Filter/Effect/Video/Compositor", "OpenGL video_mixer",
"Matthew Waters <matthew@centricular.com>"); "Matthew Waters <matthew@centricular.com>");
gst_element_class_add_static_pad_template_with_gtype (element_class,
&sink_factory, GST_TYPE_GL_VIDEO_MIXER_PAD);
g_object_class_install_property (gobject_class, PROP_BACKGROUND, g_object_class_install_property (gobject_class, PROP_BACKGROUND,
g_param_spec_enum ("background", "Background", "Background type", g_param_spec_enum ("background", "Background", "Background type",
GST_TYPE_GL_VIDEO_MIXER_BACKGROUND, GST_TYPE_GL_VIDEO_MIXER_BACKGROUND,
@ -875,7 +886,6 @@ gst_gl_video_mixer_class_init (GstGLVideoMixerClass * klass)
vagg_class->update_caps = _update_caps; vagg_class->update_caps = _update_caps;
agg_class->sinkpads_type = GST_TYPE_GL_VIDEO_MIXER_PAD;
agg_class->fixate_src_caps = _fixate_caps; agg_class->fixate_src_caps = _fixate_caps;
agg_class->propose_allocation = gst_gl_video_mixer_propose_allocation; agg_class->propose_allocation = gst_gl_video_mixer_propose_allocation;

View file

@ -692,8 +692,6 @@ static gboolean
gst_video_aggregator_default_negotiated_src_caps (GstAggregator * agg, gst_video_aggregator_default_negotiated_src_caps (GstAggregator * agg,
GstCaps * caps) GstCaps * caps)
{ {
GstVideoAggregatorPadClass *vaggpad_klass = g_type_class_peek
(GST_AGGREGATOR_GET_CLASS (agg)->sinkpads_type);
GstVideoAggregator *vagg = GST_VIDEO_AGGREGATOR (agg); GstVideoAggregator *vagg = GST_VIDEO_AGGREGATOR (agg);
gboolean at_least_one_alpha = FALSE; gboolean at_least_one_alpha = FALSE;
const GstVideoFormatInfo *finfo; const GstVideoFormatInfo *finfo;
@ -741,16 +739,17 @@ gst_video_aggregator_default_negotiated_src_caps (GstAggregator * agg,
return FALSE; return FALSE;
} }
if (vaggpad_klass->set_info) {
/* Then browse the sinks once more, setting or unsetting conversion if needed */ /* Then browse the sinks once more, setting or unsetting conversion if needed */
for (l = GST_ELEMENT (vagg)->sinkpads; l; l = l->next) { for (l = GST_ELEMENT (vagg)->sinkpads; l; l = l->next) {
GstVideoAggregatorPad *pad = GST_VIDEO_AGGREGATOR_PAD (l->data); GstVideoAggregatorPad *pad = GST_VIDEO_AGGREGATOR_PAD (l->data);
GstVideoAggregatorPadClass *vaggpad_klass =
GST_VIDEO_AGGREGATOR_PAD_GET_CLASS (pad);
if (!vaggpad_klass->set_info (pad, vagg, &pad->info, &vagg->info)) { if (vaggpad_klass->set_info
&& !vaggpad_klass->set_info (pad, vagg, &pad->info, &vagg->info)) {
return FALSE; return FALSE;
} }
} }
}
if (vagg->priv->current_caps == NULL || if (vagg->priv->current_caps == NULL ||
gst_caps_is_equal (caps, vagg->priv->current_caps) == FALSE) { gst_caps_is_equal (caps, vagg->priv->current_caps) == FALSE) {
@ -1305,6 +1304,7 @@ clean_pad (GstElement * agg, GstPad * pad, gpointer user_data)
GstVideoAggregatorPadClass *vaggpad_class = GstVideoAggregatorPadClass *vaggpad_class =
GST_VIDEO_AGGREGATOR_PAD_GET_CLASS (pad); GST_VIDEO_AGGREGATOR_PAD_GET_CLASS (pad);
if (vaggpad_class->clean_frame)
vaggpad_class->clean_frame (vpad, vagg); vaggpad_class->clean_frame (vpad, vagg);
return TRUE; return TRUE;
@ -1318,8 +1318,6 @@ gst_video_aggregator_do_aggregate (GstVideoAggregator * vagg,
GstFlowReturn ret = GST_FLOW_OK; GstFlowReturn ret = GST_FLOW_OK;
GstElementClass *klass = GST_ELEMENT_GET_CLASS (vagg); GstElementClass *klass = GST_ELEMENT_GET_CLASS (vagg);
GstVideoAggregatorClass *vagg_klass = (GstVideoAggregatorClass *) klass; GstVideoAggregatorClass *vagg_klass = (GstVideoAggregatorClass *) klass;
GstVideoAggregatorPadClass *vaggpad_class = g_type_class_peek
(GST_AGGREGATOR_CLASS (klass)->sinkpads_type);
g_assert (vagg_klass->aggregate_frames != NULL); g_assert (vagg_klass->aggregate_frames != NULL);
g_assert (vagg_klass->get_output_buffer != NULL); g_assert (vagg_klass->get_output_buffer != NULL);
@ -1345,9 +1343,7 @@ gst_video_aggregator_do_aggregate (GstVideoAggregator * vagg,
ret = vagg_klass->aggregate_frames (vagg, *outbuf); ret = vagg_klass->aggregate_frames (vagg, *outbuf);
if (vaggpad_class->clean_frame) {
gst_element_foreach_sink_pad (GST_ELEMENT_CAST (vagg), clean_pad, NULL); gst_element_foreach_sink_pad (GST_ELEMENT_CAST (vagg), clean_pad, NULL);
}
return ret; return ret;
} }
@ -2189,7 +2185,6 @@ gst_video_aggregator_class_init (GstVideoAggregatorClass * klass)
gstelement_class->release_pad = gstelement_class->release_pad =
GST_DEBUG_FUNCPTR (gst_video_aggregator_release_pad); GST_DEBUG_FUNCPTR (gst_video_aggregator_release_pad);
agg_class->sinkpads_type = GST_TYPE_VIDEO_AGGREGATOR_PAD;
agg_class->start = gst_video_aggregator_start; agg_class->start = gst_video_aggregator_start;
agg_class->stop = gst_video_aggregator_stop; agg_class->stop = gst_video_aggregator_stop;
agg_class->sink_query = gst_video_aggregator_sink_query; agg_class->sink_query = gst_video_aggregator_sink_query;

View file

@ -1223,7 +1223,6 @@ gst_compositor_class_init (GstCompositorClass * klass)
gobject_class->get_property = gst_compositor_get_property; gobject_class->get_property = gst_compositor_get_property;
gobject_class->set_property = gst_compositor_set_property; gobject_class->set_property = gst_compositor_set_property;
agg_class->sinkpads_type = GST_TYPE_COMPOSITOR_PAD;
agg_class->sink_query = _sink_query; agg_class->sink_query = _sink_query;
agg_class->fixate_src_caps = _fixate_caps; agg_class->fixate_src_caps = _fixate_caps;
agg_class->negotiated_src_caps = _negotiated_caps; agg_class->negotiated_src_caps = _negotiated_caps;
@ -1235,7 +1234,8 @@ gst_compositor_class_init (GstCompositorClass * klass)
DEFAULT_BACKGROUND, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); DEFAULT_BACKGROUND, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
gst_element_class_add_static_pad_template (gstelement_class, &src_factory); gst_element_class_add_static_pad_template (gstelement_class, &src_factory);
gst_element_class_add_static_pad_template (gstelement_class, &sink_factory); gst_element_class_add_static_pad_template_with_gtype (gstelement_class,
&sink_factory, GST_TYPE_COMPOSITOR_PAD);
gst_element_class_set_static_metadata (gstelement_class, "Compositor", gst_element_class_set_static_metadata (gstelement_class, "Compositor",
"Filter/Editor/Video/Compositor", "Filter/Editor/Video/Compositor",