Don't pass default GLib marshallers for signals

By passing NULL to `g_signal_new` instead of a marshaller, GLib will
actually internally optimize the signal (if the marshaller is available
in GLib itself) by also setting the valist marshaller. This makes the
signal emission a bit more performant than the regular marshalling,
which still needs to box into `GValue` and call libffi in case of a
generic marshaller.

Note that for custom marshallers, one would use
`g_signal_set_va_marshaller()` with the valist marshaller instead.
This commit is contained in:
Niels De Graef 2019-08-26 07:34:30 +02:00 committed by Nicolas Dufresne
parent a4aa2256d1
commit 4812c4087f
21 changed files with 42 additions and 55 deletions

View file

@ -364,7 +364,7 @@ gst_bin_class_init (GstBinClass * klass)
gst_bin_signals[ELEMENT_ADDED] =
g_signal_new ("element-added", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GstBinClass, element_added), NULL,
NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1, GST_TYPE_ELEMENT);
NULL, NULL, G_TYPE_NONE, 1, GST_TYPE_ELEMENT);
/**
* GstBin::element-removed:
* @bin: the #GstBin
@ -375,7 +375,7 @@ gst_bin_class_init (GstBinClass * klass)
gst_bin_signals[ELEMENT_REMOVED] =
g_signal_new ("element-removed", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GstBinClass, element_removed), NULL,
NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1, GST_TYPE_ELEMENT);
NULL, NULL, G_TYPE_NONE, 1, GST_TYPE_ELEMENT);
/**
* GstBin::deep-element-added:
* @bin: the #GstBin
@ -389,8 +389,7 @@ gst_bin_class_init (GstBinClass * klass)
gst_bin_signals[DEEP_ELEMENT_ADDED] =
g_signal_new ("deep-element-added", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GstBinClass, deep_element_added),
NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 2, GST_TYPE_BIN,
GST_TYPE_ELEMENT);
NULL, NULL, NULL, G_TYPE_NONE, 2, GST_TYPE_BIN, GST_TYPE_ELEMENT);
/**
* GstBin::deep-element-removed:
* @bin: the #GstBin
@ -404,8 +403,7 @@ gst_bin_class_init (GstBinClass * klass)
gst_bin_signals[DEEP_ELEMENT_REMOVED] =
g_signal_new ("deep-element-removed", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GstBinClass, deep_element_removed),
NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 2, GST_TYPE_BIN,
GST_TYPE_ELEMENT);
NULL, NULL, NULL, G_TYPE_NONE, 2, GST_TYPE_BIN, GST_TYPE_ELEMENT);
/**
* GstBin::do-latency:
* @bin: the #GstBin
@ -425,8 +423,7 @@ gst_bin_class_init (GstBinClass * klass)
gst_bin_signals[DO_LATENCY] =
g_signal_new ("do-latency", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstBinClass, do_latency),
_gst_boolean_accumulator, NULL, g_cclosure_marshal_generic,
G_TYPE_BOOLEAN, 0, G_TYPE_NONE);
_gst_boolean_accumulator, NULL, NULL, G_TYPE_BOOLEAN, 0, G_TYPE_NONE);
/**
* GstBin:message-forward:

View file

@ -201,7 +201,7 @@ gst_bus_class_init (GstBusClass * klass)
g_signal_new ("sync-message", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
G_STRUCT_OFFSET (GstBusClass, sync_message), NULL, NULL,
g_cclosure_marshal_generic, G_TYPE_NONE, 1, GST_TYPE_MESSAGE);
NULL, G_TYPE_NONE, 1, GST_TYPE_MESSAGE);
/**
* GstBus::message:
@ -216,7 +216,7 @@ gst_bus_class_init (GstBusClass * klass)
g_signal_new ("message", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
G_STRUCT_OFFSET (GstBusClass, message), NULL, NULL,
g_cclosure_marshal_generic, G_TYPE_NONE, 1, GST_TYPE_MESSAGE);
NULL, G_TYPE_NONE, 1, GST_TYPE_MESSAGE);
}
static void

View file

@ -536,7 +536,7 @@ gst_child_proxy_base_init (gpointer g_class)
signals[CHILD_ADDED] =
g_signal_new ("child-added", G_TYPE_FROM_CLASS (g_class),
G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GstChildProxyInterface,
child_added), NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE,
child_added), NULL, NULL, NULL, G_TYPE_NONE,
2, G_TYPE_OBJECT, G_TYPE_STRING);
/**
@ -550,7 +550,7 @@ gst_child_proxy_base_init (gpointer g_class)
signals[CHILD_REMOVED] =
g_signal_new ("child-removed", G_TYPE_FROM_CLASS (g_class),
G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GstChildProxyInterface,
child_removed), NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE,
child_removed), NULL, NULL, NULL, G_TYPE_NONE,
2, G_TYPE_OBJECT, G_TYPE_STRING);
initialized = TRUE;

View file

@ -760,8 +760,7 @@ gst_clock_class_init (GstClockClass * klass)
*/
gst_clock_signals[SIGNAL_SYNCED] =
g_signal_new ("synced", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
0, NULL, NULL,
g_cclosure_marshal_generic, G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
0, NULL, NULL, NULL, G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
}
static void

View file

@ -151,13 +151,11 @@ gst_device_provider_class_init (GstDeviceProviderClass * klass)
gst_device_provider_signals[PROVIDER_HIDDEN] =
g_signal_new ("provider-hidden", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, 0, NULL,
NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1, G_TYPE_STRING);
G_SIGNAL_RUN_FIRST, 0, NULL, NULL, NULL, G_TYPE_NONE, 1, G_TYPE_STRING);
gst_device_provider_signals[PROVIDER_UNHIDDEN] =
g_signal_new ("provider-unhidden", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, 0, NULL,
NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1, G_TYPE_STRING);
G_SIGNAL_RUN_FIRST, 0, NULL, NULL, NULL, G_TYPE_NONE, 1, G_TYPE_STRING);
}
static void

View file

@ -232,7 +232,7 @@ gst_element_class_init (GstElementClass * klass)
gst_element_signals[PAD_ADDED] =
g_signal_new ("pad-added", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstElementClass, pad_added), NULL, NULL,
g_cclosure_marshal_generic, G_TYPE_NONE, 1, GST_TYPE_PAD);
NULL, G_TYPE_NONE, 1, GST_TYPE_PAD);
/**
* GstElement::pad-removed:
* @gstelement: the object which received the signal
@ -243,7 +243,7 @@ gst_element_class_init (GstElementClass * klass)
gst_element_signals[PAD_REMOVED] =
g_signal_new ("pad-removed", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstElementClass, pad_removed), NULL, NULL,
g_cclosure_marshal_generic, G_TYPE_NONE, 1, GST_TYPE_PAD);
NULL, G_TYPE_NONE, 1, GST_TYPE_PAD);
/**
* GstElement::no-more-pads:
* @gstelement: the object which received the signal
@ -255,7 +255,7 @@ gst_element_class_init (GstElementClass * klass)
gst_element_signals[NO_MORE_PADS] =
g_signal_new ("no-more-pads", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstElementClass, no_more_pads), NULL,
NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 0);
NULL, NULL, G_TYPE_NONE, 0);
gobject_class->dispose = gst_element_dispose;
gobject_class->finalize = gst_element_finalize;

View file

@ -186,8 +186,7 @@ gst_object_class_init (GstObjectClass * klass)
g_signal_new ("deep-notify", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE | G_SIGNAL_DETAILED |
G_SIGNAL_NO_HOOKS, G_STRUCT_OFFSET (GstObjectClass, deep_notify), NULL,
NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 2, GST_TYPE_OBJECT,
G_TYPE_PARAM);
NULL, NULL, G_TYPE_NONE, 2, GST_TYPE_OBJECT, G_TYPE_PARAM);
klass->path_string_separator = "/";

View file

@ -344,7 +344,7 @@ gst_pad_class_init (GstPadClass * klass)
gst_pad_signals[PAD_LINKED] =
g_signal_new ("linked", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstPadClass, linked), NULL, NULL,
g_cclosure_marshal_generic, G_TYPE_NONE, 1, GST_TYPE_PAD);
NULL, G_TYPE_NONE, 1, GST_TYPE_PAD);
/**
* GstPad::unlinked:
* @pad: the pad that emitted the signal
@ -355,7 +355,7 @@ gst_pad_class_init (GstPadClass * klass)
gst_pad_signals[PAD_UNLINKED] =
g_signal_new ("unlinked", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstPadClass, unlinked), NULL, NULL,
g_cclosure_marshal_generic, G_TYPE_NONE, 1, GST_TYPE_PAD);
NULL, G_TYPE_NONE, 1, GST_TYPE_PAD);
pspec_caps = g_param_spec_boxed ("caps", "Caps",
"The capabilities of the pad", GST_TYPE_CAPS,

View file

@ -146,7 +146,7 @@ gst_pad_template_class_init (GstPadTemplateClass * klass)
gst_pad_template_signals[TEMPL_PAD_CREATED] =
g_signal_new ("pad-created", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstPadTemplateClass, pad_created),
NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1, GST_TYPE_PAD);
NULL, NULL, NULL, G_TYPE_NONE, 1, GST_TYPE_PAD);
gobject_class->dispose = gst_pad_template_dispose;

View file

@ -215,8 +215,7 @@ gst_registry_class_init (GstRegistryClass * klass)
*/
gst_registry_signals[PLUGIN_ADDED] =
g_signal_new ("plugin-added", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic,
G_TYPE_NONE, 1, GST_TYPE_PLUGIN);
G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 1, GST_TYPE_PLUGIN);
/**
* GstRegistry::feature-added:
@ -228,7 +227,7 @@ gst_registry_class_init (GstRegistryClass * klass)
*/
gst_registry_signals[FEATURE_ADDED] =
g_signal_new ("feature-added", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic,
G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL,
G_TYPE_NONE, 1, GST_TYPE_PLUGIN_FEATURE);
gobject_class->finalize = gst_registry_finalize;

View file

@ -120,7 +120,7 @@ gst_stream_collection_class_init (GstStreamCollectionClass * klass)
g_signal_new ("stream-notify", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE | G_SIGNAL_DETAILED |
G_SIGNAL_NO_HOOKS, G_STRUCT_OFFSET (GstStreamCollectionClass,
stream_notify), NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE,
stream_notify), NULL, NULL, NULL, G_TYPE_NONE,
2, GST_TYPE_STREAM, G_TYPE_PARAM);
gobject_class->dispose = gst_stream_collection_dispose;

View file

@ -3075,8 +3075,7 @@ gst_aggregator_pad_class_init (GstAggregatorPadClass * klass)
*/
gst_aggregator_pad_signals[PAD_SIGNAL_BUFFER_CONSUMED] =
g_signal_new ("buffer-consumed", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_generic,
G_TYPE_NONE, 1, GST_TYPE_BUFFER);
G_SIGNAL_RUN_FIRST, 0, NULL, NULL, NULL, G_TYPE_NONE, 1, GST_TYPE_BUFFER);
/**
* GstAggregatorPad:emit-signals:

View file

@ -156,7 +156,7 @@ gst_data_queue_class_init (GstDataQueueClass * klass)
gst_data_queue_signals[SIGNAL_EMPTY] =
g_signal_new ("empty", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GstDataQueueClass, empty), NULL, NULL,
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
NULL, G_TYPE_NONE, 0);
/**
* GstDataQueue::full: (skip)
@ -170,7 +170,7 @@ gst_data_queue_class_init (GstDataQueueClass * klass)
gst_data_queue_signals[SIGNAL_FULL] =
g_signal_new ("full", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GstDataQueueClass, full), NULL, NULL,
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
NULL, G_TYPE_NONE, 0);
/* properties */
g_object_class_install_property (gobject_class, PROP_CUR_LEVEL_BYTES,

View file

@ -161,7 +161,7 @@ gst_index_class_init (GstIndexClass * klass)
gst_index_signals[ENTRY_ADDED] =
g_signal_new ("entry-added", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstIndexClass, entry_added), NULL, NULL,
g_cclosure_marshal_generic, G_TYPE_NONE, 1, GST_TYPE_INDEX_ENTRY);
NULL, G_TYPE_NONE, 1, GST_TYPE_INDEX_ENTRY);
gobject_class->set_property = gst_index_set_property;
gobject_class->get_property = gst_index_get_property;

View file

@ -481,8 +481,7 @@ gst_timed_value_control_source_class_init (GstTimedValueControlSourceClass
gst_timed_value_control_source_signals[VALUE_CHANGED_SIGNAL] =
g_signal_new ("value-changed", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, 0, NULL,
NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1,
gst_control_point_get_type ());
NULL, NULL, G_TYPE_NONE, 1, gst_control_point_get_type ());
/**
* GstTimedValueControlSource::value-added
@ -497,8 +496,7 @@ gst_timed_value_control_source_class_init (GstTimedValueControlSourceClass
gst_timed_value_control_source_signals[VALUE_ADDED_SIGNAL] =
g_signal_new ("value-added", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, 0, NULL,
NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1,
gst_control_point_get_type ());
NULL, NULL, G_TYPE_NONE, 1, gst_control_point_get_type ());
/**
* GstTimedValueControlSource::value-removed
@ -513,8 +511,7 @@ gst_timed_value_control_source_class_init (GstTimedValueControlSourceClass
gst_timed_value_control_source_signals[VALUE_REMOVED_SIGNAL] =
g_signal_new ("value-removed", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST, 0, NULL,
NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1,
gst_control_point_get_type ());
NULL, NULL, G_TYPE_NONE, 1, gst_control_point_get_type ());
gobject_class->finalize = gst_timed_value_control_source_finalize;

View file

@ -207,8 +207,8 @@ gst_fake_sink_class_init (GstFakeSinkClass * klass)
gst_fake_sink_signals[SIGNAL_HANDOFF] =
g_signal_new ("handoff", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstFakeSinkClass, handoff), NULL, NULL,
g_cclosure_marshal_generic, G_TYPE_NONE, 2,
GST_TYPE_BUFFER | G_SIGNAL_TYPE_STATIC_SCOPE, GST_TYPE_PAD);
NULL, G_TYPE_NONE, 2, GST_TYPE_BUFFER | G_SIGNAL_TYPE_STATIC_SCOPE,
GST_TYPE_PAD);
/**
* GstFakeSink::preroll-handoff:
@ -221,7 +221,7 @@ gst_fake_sink_class_init (GstFakeSinkClass * klass)
gst_fake_sink_signals[SIGNAL_PREROLL_HANDOFF] =
g_signal_new ("preroll-handoff", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstFakeSinkClass, preroll_handoff),
NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 2,
NULL, NULL, NULL, G_TYPE_NONE, 2,
GST_TYPE_BUFFER | G_SIGNAL_TYPE_STATIC_SCOPE, GST_TYPE_PAD);
gst_element_class_set_static_metadata (gstelement_class,

View file

@ -332,8 +332,8 @@ gst_fake_src_class_init (GstFakeSrcClass * klass)
gst_fake_src_signals[SIGNAL_HANDOFF] =
g_signal_new ("handoff", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstFakeSrcClass, handoff), NULL, NULL,
g_cclosure_marshal_generic, G_TYPE_NONE, 2,
GST_TYPE_BUFFER | G_SIGNAL_TYPE_STATIC_SCOPE, GST_TYPE_PAD);
NULL, G_TYPE_NONE, 2, GST_TYPE_BUFFER | G_SIGNAL_TYPE_STATIC_SCOPE,
GST_TYPE_PAD);
gst_element_class_set_static_metadata (gstelement_class,
"Fake Source",

View file

@ -262,8 +262,7 @@ gst_identity_class_init (GstIdentityClass * klass)
gst_identity_signals[SIGNAL_HANDOFF] =
g_signal_new ("handoff", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstIdentityClass, handoff), NULL, NULL,
g_cclosure_marshal_generic, G_TYPE_NONE, 1,
GST_TYPE_BUFFER | G_SIGNAL_TYPE_STATIC_SCOPE);
NULL, G_TYPE_NONE, 1, GST_TYPE_BUFFER | G_SIGNAL_TYPE_STATIC_SCOPE);
gobject_class->finalize = gst_identity_finalize;

View file

@ -507,7 +507,7 @@ gst_multi_queue_class_init (GstMultiQueueClass * klass)
gst_multi_queue_signals[SIGNAL_UNDERRUN] =
g_signal_new ("underrun", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GstMultiQueueClass, underrun), NULL, NULL,
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
NULL, G_TYPE_NONE, 0);
/**
* GstMultiQueue::overrun:
@ -523,7 +523,7 @@ gst_multi_queue_class_init (GstMultiQueueClass * klass)
gst_multi_queue_signals[SIGNAL_OVERRUN] =
g_signal_new ("overrun", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GstMultiQueueClass, overrun), NULL, NULL,
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
NULL, G_TYPE_NONE, 0);
/* PROPERTIES */

View file

@ -273,7 +273,7 @@ gst_queue_class_init (GstQueueClass * klass)
gst_queue_signals[SIGNAL_UNDERRUN] =
g_signal_new ("underrun", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GstQueueClass, underrun), NULL, NULL,
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
NULL, G_TYPE_NONE, 0);
/**
* GstQueue::running:
* @queue: the queue instance
@ -285,7 +285,7 @@ gst_queue_class_init (GstQueueClass * klass)
gst_queue_signals[SIGNAL_RUNNING] =
g_signal_new ("running", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GstQueueClass, running), NULL, NULL,
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
NULL, G_TYPE_NONE, 0);
/**
* GstQueue::overrun:
* @queue: the queue instance
@ -298,7 +298,7 @@ gst_queue_class_init (GstQueueClass * klass)
gst_queue_signals[SIGNAL_OVERRUN] =
g_signal_new ("overrun", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GstQueueClass, overrun), NULL, NULL,
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
NULL, G_TYPE_NONE, 0);
/**
* GstQueue::pushing:
* @queue: the queue instance
@ -309,7 +309,7 @@ gst_queue_class_init (GstQueueClass * klass)
gst_queue_signals[SIGNAL_PUSHING] =
g_signal_new ("pushing", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GstQueueClass, pushing), NULL, NULL,
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
NULL, G_TYPE_NONE, 0);
/* properties */
g_object_class_install_property (gobject_class, PROP_CUR_LEVEL_BYTES,

View file

@ -272,7 +272,7 @@ gst_type_find_element_class_init (GstTypeFindElementClass * typefind_class)
gst_type_find_element_signals[HAVE_TYPE] = g_signal_new ("have-type",
G_TYPE_FROM_CLASS (typefind_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstTypeFindElementClass, have_type), NULL, NULL,
g_cclosure_marshal_generic, G_TYPE_NONE, 2,
NULL, G_TYPE_NONE, 2,
G_TYPE_UINT, GST_TYPE_CAPS | G_SIGNAL_TYPE_STATIC_SCOPE);
typefind_class->have_type =