* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
+
/**
* SECTION:gsttypefindfactory
* @short_description: Information about registered typefind functions
*
- * These functions allow querying informations about registered typefind
+ * These functions allow querying informations about registered typefind
* functions. How to create and register these functions is described in
* the section <link linkend="gstreamer-Writing-typefind-functions">
* "Writing typefind functions"</link>.
* GList *walk, *type_list;
* MyTypeFind find = {data, size, 0, NULL};
* GstTypeFind gst_find = {my_peek, my_suggest, &find, };
- *
* walk = type_list = gst_type_find_factory_get_list ();
* while (walk) {
* GstTypeFindFactory *factory = GST_TYPE_FIND_FACTORY (walk->data);
* </programlisting>
* </example>
*
- * The above example shows how to write a very simple typefinder that identifies
- * the given data. You can get quite a bit more complicated than that though.
+ * The above example shows how to write a very simple typefinder that
+ * identifies the given data. You can get quite a bit more complicated than
+ * that though.
+ *
+ * Last reviewed on 2005-11-09 (0.9.4)
*/
#include "gst_private.h"
#include "gsttypefindfactory.h"
#include "gstregistry.h"
-GST_DEBUG_CATEGORY (gst_type_find_debug);
-#define GST_CAT_DEFAULT gst_type_find_debug
+GST_DEBUG_CATEGORY (type_find_debug);
+#define GST_CAT_DEFAULT type_find_debug
-static void gst_type_find_factory_class_init (gpointer g_class,
- gpointer class_data);
-static void gst_type_find_factory_init (GTypeInstance * instance,
- gpointer g_class);
static void gst_type_find_factory_dispose (GObject * object);
-static GstPluginFeatureClass *parent_class = NULL;
-
-GType
-gst_type_find_factory_get_type (void)
-{
- static GType typefind_type = 0;
-
- if (!typefind_type) {
- static const GTypeInfo typefind_info = {
- sizeof (GstTypeFindFactoryClass),
- NULL,
- NULL,
- gst_type_find_factory_class_init,
- NULL,
- NULL,
- sizeof (GstTypeFindFactory),
- 0,
- gst_type_find_factory_init,
- NULL
- };
-
- typefind_type = g_type_register_static (GST_TYPE_PLUGIN_FEATURE,
- "GstTypeFindFactory", &typefind_info, 0);
- GST_DEBUG_CATEGORY_INIT (gst_type_find_debug, "GST_TYPEFIND",
- GST_DEBUG_FG_GREEN, "typefinding subsystem");
- }
-
- return typefind_type;
+#define _do_init \
+{ \
+ GST_DEBUG_CATEGORY_INIT (type_find_debug, "GST_TYPEFIND", \
+ GST_DEBUG_FG_GREEN, "typefinding subsystem"); \
}
+#define gst_type_find_factory_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstTypeFindFactory, gst_type_find_factory,
+ GST_TYPE_PLUGIN_FEATURE, _do_init);
+
static void
-gst_type_find_factory_class_init (gpointer g_class, gpointer class_data)
+gst_type_find_factory_class_init (GstTypeFindFactoryClass * klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS (g_class);
-
- parent_class = g_type_class_peek_parent (g_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->dispose = gst_type_find_factory_dispose;
}
static void
-gst_type_find_factory_init (GTypeInstance * instance, gpointer g_class)
+gst_type_find_factory_init (GstTypeFindFactory * factory)
{
- GstTypeFindFactory *factory = GST_TYPE_FIND_FACTORY (instance);
-
factory->user_data = factory;
+ factory->user_data_notify = NULL;
}
static void
g_strfreev (factory->extensions);
factory->extensions = NULL;
}
+ if (factory->user_data_notify && factory->user_data) {
+ factory->user_data_notify (factory->user_data);
+ factory->user_data = NULL;
+ }
+
+ G_OBJECT_CLASS (parent_class)->dispose (object);
}
/**
* gst_type_find_factory_get_list:
*
* Gets the list of all registered typefind factories. You must free the
- * list using g_list_free.
- *
- * Returns: the list of all registered typefind factories
+ * list using gst_plugin_feature_list_free().
+ *
+ * The returned factories are sorted by highest rank first, and then by
+ * factory name. (behaviour change since 0.10.26)
+ *
+ * Free-function: gst_plugin_feature_list_free
+ *
+ * Returns: (transfer full) (element-type Gst.TypeFindFactory): the list of all
+ * registered #GstTypeFindFactory.
*/
GList *
gst_type_find_factory_get_list (void)
{
- return gst_registry_get_feature_list (gst_registry_get_default (),
+ return gst_registry_get_feature_list (gst_registry_get (),
GST_TYPE_TYPE_FIND_FACTORY);
}
/**
* gst_type_find_factory_get_caps:
- * @factory: a factory
- *
- * Gets the caps associated with a typefind factory.
+ * @factory: A #GstTypeFindFactory
*
- * Returns: the #GstCaps associated with this factory
+ * Gets the #GstCaps associated with a typefind factory.
+ *
+ * Returns: (transfer none): the #GstCaps associated with this factory
*/
GstCaps *
gst_type_find_factory_get_caps (GstTypeFindFactory * factory)
/**
* gst_type_find_factory_get_extensions:
- * @factory: a factory
- *
- * Gets the extensions associated with a typefind factory. The returned
+ * @factory: A #GstTypeFindFactory
+ *
+ * Gets the extensions associated with a #GstTypeFindFactory. The returned
* array should not be changed. If you need to change stuff in it, you should
- * copy it using g_stdupv(). This function may return NULL to indicate
+ * copy it using g_strdupv(). This function may return NULL to indicate
* a 0-length list.
*
- * Returns: a NULL-terminated array of extensions associated with this factory
+ * Returns: (transfer none) (array zero-terminated=1) (element-type utf8): a
+ * NULL-terminated array of extensions associated with this factory
*/
gchar **
gst_type_find_factory_get_extensions (GstTypeFindFactory * factory)
/**
* gst_type_find_factory_call_function:
- * @factory: a factory
- * @find: a properly setup #GstTypeFind entry. The get_data and suggest_type
- * members must be set.
- *
- * Calls the typefinding function associated with this factory.
+ * @factory: A #GstTypeFindFactory
+ * @find: (transfer none): a properly setup #GstTypeFind entry. The get_data
+ * and suggest_type members must be set.
+ *
+ * Calls the #GstTypeFindFunction associated with this factory.
*/
void
gst_type_find_factory_call_function (GstTypeFindFactory * factory,
g_return_if_fail (find->peek != NULL);
g_return_if_fail (find->suggest != NULL);
- /* gst_plugin_feature_load will steal our ref */
- gst_object_ref (factory);
new_factory =
GST_TYPE_FIND_FACTORY (gst_plugin_feature_load (GST_PLUGIN_FEATURE
(factory)));
if (new_factory) {
- g_assert (new_factory->function != NULL);
-
- new_factory->function (find, new_factory->user_data);
+ if (new_factory->function)
+ new_factory->function (find, new_factory->user_data);
gst_object_unref (new_factory);
}
}