const GstMetaInfo * gst_meta_register (GType api, const gchar * impl, gsize size, GstMetaInitFunction init_func, GstMetaFreeFunction free_func, GstMetaTransformFunction transform_func) { GstMetaInfo *info; g_return_val_if_fail (api != 0, NULL); g_return_val_if_fail (impl != NULL, NULL); g_return_val_if_fail (size != 0, NULL); info = g_slice_new (GstMetaInfo); info->api = api; info->type = g_pointer_type_register_static (impl); info->size = size; info->init_func = init_func; info->free_func = free_func; info->transform_func = transform_func; GST_CAT_DEBUG (GST_CAT_META, "register \"%s\" implementing \"%s\" of size %" G_GSIZE_FORMAT, impl, g_type_name (api), size); g_rw_lock_writer_lock (&lock); g_hash_table_insert (metainfo, (gpointer) impl, (gpointer) info); g_rw_lock_writer_unlock (&lock); return info; }
/** * gst_meta_api_type_register: * @api: an API to register * @tags: tags for @api * * Register and return a GType for the @api and associate it with * @tags. * * Returns: a unique GType for @api. */ GType gst_meta_api_type_register (const gchar * api, const gchar ** tags) { GType type; g_return_val_if_fail (api != NULL, 0); g_return_val_if_fail (tags != NULL, 0); GST_CAT_DEBUG (GST_CAT_META, "register API \"%s\"", api); type = g_pointer_type_register_static (api); if (type != 0) { gint i; for (i = 0; tags[i]; i++) { GST_CAT_DEBUG (GST_CAT_META, " adding tag \"%s\"", tags[i]); g_type_set_qdata (type, g_quark_from_string (tags[i]), GINT_TO_POINTER (TRUE)); } } g_type_set_qdata (type, g_quark_from_string ("tags"), g_strdupv ((gchar **) tags)); return type; }
GType iris_thread_get_type (void) { static GType thread_type = 0; if (G_UNLIKELY (!thread_type)) thread_type = g_pointer_type_register_static ("IrisThread"); return thread_type; }
GType _gda_slist_get_type (void) { static GType type = 0; if (G_UNLIKELY (type == 0)) { static GMutex registering; g_mutex_lock (®istering); if (type == 0) type = g_pointer_type_register_static ("GdaSList"); g_mutex_unlock (®istering); } return type; }
const GstMetaInfo * gst_meta_register (GType api, const gchar * impl, gsize size, GstMetaInitFunction init_func, GstMetaFreeFunction free_func, GstMetaTransformFunction transform_func) { GstMetaInfo *info; GType type; g_return_val_if_fail (api != 0, NULL); g_return_val_if_fail (impl != NULL, NULL); g_return_val_if_fail (size != 0, NULL); /* first try to register the implementation name. It's possible * that this fails because it was already registered. Don't warn, * glib did this for us already. */ type = g_pointer_type_register_static (impl); if (type == 0) return NULL; info = g_slice_new (GstMetaInfo); info->api = api; info->type = type; info->size = size; info->init_func = init_func; info->free_func = free_func; info->transform_func = transform_func; GST_CAT_DEBUG (GST_CAT_META, "register \"%s\" implementing \"%s\" of size %" G_GSIZE_FORMAT, impl, g_type_name (api), size); g_rw_lock_writer_lock (&lock); g_hash_table_insert (metainfo, (gpointer) impl, (gpointer) info); g_rw_lock_writer_unlock (&lock); return info; }