From 628f773e6581f9c920c0feb35d1276b2a7423bb3 Mon Sep 17 00:00:00 2001 From: Stefan Kost Date: Wed, 7 Sep 2005 12:35:23 +0000 Subject: [PATCH] gst/: splitted gsttypefind into gsttypefind, gsttypefindfactory Original commit message from CVS: * gst/Makefile.am: * gst/elements/gstbufferstore.h: * gst/elements/gsttypefindelement.c: * gst/elements/gsttypefindelement.h: * gst/gst.h: * gst/gsttypefind.c: * gst/gsttypefind.h: * gst/gsttypefindfactory.c: (gst_type_find_factory_get_type), (gst_type_find_factory_class_init), (gst_type_find_factory_init), (gst_type_find_factory_dispose), (gst_type_find_factory_unload_thyself), (gst_type_find_load_plugin), (gst_type_find_factory_get_list), (gst_type_find_factory_get_caps), (gst_type_find_factory_get_extensions), (gst_type_find_factory_call_function): * gst/gsttypefindfactory.h: * gst/registries/gstlibxmlregistry.c: * gst/registries/gstxmlregistry.c: splitted gsttypefind into gsttypefind, gsttypefindfactory --- ChangeLog | 22 +++ gst/Makefile.am | 2 + gst/elements/gstbufferstore.h | 2 +- gst/elements/gsttypefindelement.c | 2 +- gst/elements/gsttypefindelement.h | 2 +- gst/gst.h | 1 + gst/gsttypefind.c | 238 +----------------------------- gst/gsttypefind.h | 51 +------ gst/gsttypefindfactory.c | 262 ++++++++++++++++++++++++++++++++++ gst/gsttypefindfactory.h | 80 +++++++++++ gst/registries/gstlibxmlregistry.c | 1 + gst/registries/gstxmlregistry.c | 1 + plugins/elements/gstbufferstore.h | 2 +- plugins/elements/gsttypefindelement.c | 2 +- plugins/elements/gsttypefindelement.h | 2 +- 15 files changed, 383 insertions(+), 287 deletions(-) create mode 100644 gst/gsttypefindfactory.c create mode 100644 gst/gsttypefindfactory.h diff --git a/ChangeLog b/ChangeLog index 832edc6..83a90ca 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,25 @@ +2005-09-07 Stefan Kost + + * gst/Makefile.am: + * gst/elements/gstbufferstore.h: + * gst/elements/gsttypefindelement.c: + * gst/elements/gsttypefindelement.h: + * gst/gst.h: + * gst/gsttypefind.c: + * gst/gsttypefind.h: + * gst/gsttypefindfactory.c: (gst_type_find_factory_get_type), + (gst_type_find_factory_class_init), (gst_type_find_factory_init), + (gst_type_find_factory_dispose), + (gst_type_find_factory_unload_thyself), + (gst_type_find_load_plugin), (gst_type_find_factory_get_list), + (gst_type_find_factory_get_caps), + (gst_type_find_factory_get_extensions), + (gst_type_find_factory_call_function): + * gst/gsttypefindfactory.h: + * gst/registries/gstlibxmlregistry.c: + * gst/registries/gstxmlregistry.c: + splitted gsttypefind into gsttypefind, gsttypefindfactory + 2005-09-07 Andy Wingo * gst/base/gstbasesink.c (gst_base_sink_activate_pull): Fix a race diff --git a/gst/Makefile.am b/gst/Makefile.am index d17de8c..b4c1d48 100644 --- a/gst/Makefile.am +++ b/gst/Makefile.am @@ -115,6 +115,7 @@ libgstreamer_@GST_MAJORMINOR@_la_SOURCES = \ $(GST_TRACE_SRC) \ gsttrashstack.c \ gsttypefind.c \ + gsttypefindfactory.c \ $(GST_URI_SRC) \ gsturitype.c \ gstutils.c \ @@ -191,6 +192,7 @@ gst_headers = \ gsttrace.h \ gsttrashstack.h \ gsttypefind.h \ + gsttypefindfactory.h \ gsturi.h \ gsturitype.h \ gstutils.h \ diff --git a/gst/elements/gstbufferstore.h b/gst/elements/gstbufferstore.h index 15fff8e..f6320f3 100644 --- a/gst/elements/gstbufferstore.h +++ b/gst/elements/gstbufferstore.h @@ -1,7 +1,7 @@ /* GStreamer * Copyright (C) 2003 Benjamin Otte * - * gsttypefind.h: keep an easily accessible list of all buffers + * gstbufferstore.h: keep an easily accessible list of all buffers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public diff --git a/gst/elements/gsttypefindelement.c b/gst/elements/gsttypefindelement.c index 66aba4f..320b5cc 100644 --- a/gst/elements/gsttypefindelement.c +++ b/gst/elements/gsttypefindelement.c @@ -1,7 +1,7 @@ /* GStreamer * Copyright (C) 2003 Benjamin Otte * - * gsttypefind.c: element that detects type of stream + * gsttypefindelement.c: element that detects type of stream * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public diff --git a/gst/elements/gsttypefindelement.h b/gst/elements/gsttypefindelement.h index 76b8e60..00908da 100644 --- a/gst/elements/gsttypefindelement.h +++ b/gst/elements/gsttypefindelement.h @@ -1,7 +1,7 @@ /* GStreamer * Copyright (C) 2003 Benjamin Otte * - * gsttypefind.h: element that detects type of stream + * gsttypefindelement.h: element that detects type of stream * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public diff --git a/gst/gst.h b/gst/gst.h index 81f6f0b..715291d 100644 --- a/gst/gst.h +++ b/gst/gst.h @@ -58,6 +58,7 @@ #include #include #include +#include #include #include #include diff --git a/gst/gsttypefind.c b/gst/gsttypefind.c index d579e70..0286236 100644 --- a/gst/gsttypefind.c +++ b/gst/gsttypefind.c @@ -1,7 +1,7 @@ /* GStreamer * Copyright (C) 2003 Benjamin Otte * - * gsttypefind.h: typefinding subsystem + * gsttypefind.c: typefinding subsystem * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -23,248 +23,16 @@ * @short_description: Stream type detection * */ - /** - * SECTION:gsttypefindfactory - * @short_description: Information about registered typefind functions - * - * These functions allow querying informations about registered typefind - * functions. How to create and register these functions is described in - * the section - * "Writing typefind functions". - * - * - * how to write a simple typefinder - * - * typedef struct { - * guint8 *data; - * guint size; - * guint probability; - * GstCaps *data; - * } MyTypeFind; - * static void - * my_peek (gpointer data, gint64 offset, guint size) - * { - * MyTypeFind *find = (MyTypeFind *) data; - * if (offset >= 0 && offset + size <= find->size) { - * return find->data + offset; - * } - * return NULL; - * } - * static void - * my_suggest (gpointer data, guint probability, GstCaps *caps) - * { - * MyTypeFind *find = (MyTypeFind *) data; - * if (probability > find->probability) { - * find->probability = probability; - * gst_caps_replace (&find->caps, caps); - * } - * } - * static GstCaps * - * find_type (guint8 *data, guint size) - * { - * 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); - * walk = g_list_next (walk) - * gst_type_find_factory_call_function (factory, &gst_find); - * } - * g_list_free (type_list); - * return find.caps; - * }; - * - * - * - * 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. - */ #include "gst_private.h" #include "gstinfo.h" #include "gsttypefind.h" +#include "gsttypefindfactory.h" #include "gstregistrypool.h" -GST_DEBUG_CATEGORY_STATIC (gst_type_find_debug); +GST_DEBUG_CATEGORY_EXTERN (gst_type_find_debug); #define GST_CAT_DEFAULT gst_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 void gst_type_find_factory_unload_thyself (GstPluginFeature * feature); - -static void gst_type_find_load_plugin (GstTypeFind * find, gpointer data); - -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; -} -static void -gst_type_find_factory_class_init (gpointer g_class, gpointer class_data) -{ - GstPluginFeatureClass *gstpluginfeature_class = - GST_PLUGIN_FEATURE_CLASS (g_class); - GObjectClass *object_class = G_OBJECT_CLASS (g_class); - - parent_class = g_type_class_peek_parent (g_class); - - object_class->dispose = gst_type_find_factory_dispose; - - gstpluginfeature_class->unload_thyself = - GST_DEBUG_FUNCPTR (gst_type_find_factory_unload_thyself); -} -static void -gst_type_find_factory_init (GTypeInstance * instance, gpointer g_class) -{ - GstTypeFindFactory *factory = GST_TYPE_FIND_FACTORY (instance); - - factory->user_data = factory; - factory->function = gst_type_find_load_plugin; -} -static void -gst_type_find_factory_dispose (GObject * object) -{ - GstTypeFindFactory *factory = GST_TYPE_FIND_FACTORY (object); - - if (factory->caps) { - gst_caps_unref (factory->caps); - factory->caps = NULL; - } - if (factory->extensions) { - g_strfreev (factory->extensions); - factory->extensions = NULL; - } -} -static void -gst_type_find_factory_unload_thyself (GstPluginFeature * feature) -{ - GstTypeFindFactory *factory = GST_TYPE_FIND_FACTORY (feature); - - factory->function = gst_type_find_load_plugin; - factory->user_data = factory; -} -static void -gst_type_find_load_plugin (GstTypeFind * find, gpointer data) -{ - GstTypeFindFactory *factory = GST_TYPE_FIND_FACTORY (data); - - GST_DEBUG_OBJECT (factory, "need to load typefind function %s", - GST_PLUGIN_FEATURE_NAME (factory)); - - if (gst_plugin_feature_ensure_loaded (GST_PLUGIN_FEATURE (factory))) { - if (factory->function == gst_type_find_load_plugin) { - /* looks like we didn't get a real typefind function */ - g_warning ("could not load valid typefind function for feature '%s'\n", - GST_PLUGIN_FEATURE_NAME (factory)); - } else { - g_assert (factory->function); - gst_type_find_factory_call_function (factory, find); - } - } -} - -/** - * 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 - */ -GList * -gst_type_find_factory_get_list (void) -{ - return gst_registry_pool_feature_list (GST_TYPE_TYPE_FIND_FACTORY); -} - -/** - * gst_type_find_factory_get_caps: - * @factory: a factory - * - * Gets the caps associated with a typefind factory. - * - * Returns: the #GstCaps associated with this factory - */ -const GstCaps * -gst_type_find_factory_get_caps (const GstTypeFindFactory * factory) -{ - g_return_val_if_fail (GST_IS_TYPE_FIND_FACTORY (factory), NULL); - - return factory->caps; -} - -/** - * gst_type_find_factory_get_extensions: - * @factory: a factory - * - * Gets the extensions associated with a typefind factory. 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 - * a 0-length list. - * - * Returns: a NULL-terminated array of extensions associated with this factory - */ -gchar ** -gst_type_find_factory_get_extensions (const GstTypeFindFactory * factory) -{ - g_return_val_if_fail (GST_IS_TYPE_FIND_FACTORY (factory), NULL); - - return factory->extensions; -} - -/** - * 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. - */ -void -gst_type_find_factory_call_function (const GstTypeFindFactory * factory, - GstTypeFind * find) -{ - g_return_if_fail (GST_IS_TYPE_FIND_FACTORY (factory)); - g_return_if_fail (find != NULL); - g_return_if_fail (find->peek != NULL); - g_return_if_fail (find->suggest != NULL); - - /* should never happen */ - g_assert (factory->function != NULL); - - factory->function (find, factory->user_data); -} - /** * gst_type_find_register: * @plugin: the GstPlugin to register with diff --git a/gst/gsttypefind.h b/gst/gsttypefind.h index 8e32189..531e969 100644 --- a/gst/gsttypefind.h +++ b/gst/gsttypefind.h @@ -29,16 +29,7 @@ G_BEGIN_DECLS -#define GST_TYPE_TYPE_FIND_FACTORY (gst_type_find_factory_get_type()) -#define GST_TYPE_FIND_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TYPE_FIND_FACTORY, GstTypeFindFactory)) -#define GST_IS_TYPE_FIND_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TYPE_FIND_FACTORY)) -#define GST_TYPE_FIND_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_TYPE_FIND_FACTORY, GstTypeFindFactoryClass)) -#define GST_IS_TYPE_FIND_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_TYPE_FIND_FACTORY)) -#define GST_TYPE_FIND_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_TYPE_FIND_FACTORY, GstTypeFindFactoryClass)) - typedef struct _GstTypeFind GstTypeFind; -typedef struct _GstTypeFindFactory GstTypeFindFactory; -typedef struct _GstTypeFindFactoryClass GstTypeFindFactoryClass; typedef void (* GstTypeFindFunction) (GstTypeFind *find, gpointer data); @@ -50,6 +41,11 @@ typedef enum { GST_TYPE_FIND_MAXIMUM = 100 } GstTypeFindProbability; +/** + * GstTypeFind: + * + * Object that stores typefind callbacks. + */ struct _GstTypeFind { /* private to the caller of the typefind function */ guint8 * (* peek) (gpointer data, @@ -68,31 +64,6 @@ struct _GstTypeFind { gpointer _gst_reserved[GST_PADDING]; }; -/** - * GstTypeFindFactory: - * - * Object that stores information about a typefind function. - */ -struct _GstTypeFindFactory { - GstPluginFeature feature; - /* */ - - GstTypeFindFunction function; - gchar ** extensions; - GstCaps * caps; /* FIXME: not yet saved in registry */ - - gpointer user_data; - - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstTypeFindFactoryClass { - GstPluginFeatureClass parent; - /* */ - - gpointer _gst_reserved[GST_PADDING]; -}; - /* typefind function interface */ guint8 * gst_type_find_peek (GstTypeFind * find, gint64 offset, @@ -111,18 +82,6 @@ gboolean gst_type_find_register (GstPlugin * plugin, const GstCaps * possible_caps, gpointer data); -/* typefinding interface */ - -GType gst_type_find_factory_get_type (void); - -GList * gst_type_find_factory_get_list (void); - -gchar ** gst_type_find_factory_get_extensions (const GstTypeFindFactory *factory); -const GstCaps * gst_type_find_factory_get_caps (const GstTypeFindFactory *factory); -void gst_type_find_factory_call_function (const GstTypeFindFactory *factory, - GstTypeFind *find); - - G_END_DECLS #endif /* __GST_TYPE_FIND_H__ */ diff --git a/gst/gsttypefindfactory.c b/gst/gsttypefindfactory.c new file mode 100644 index 0000000..c15d180 --- /dev/null +++ b/gst/gsttypefindfactory.c @@ -0,0 +1,262 @@ +/* GStreamer + * Copyright (C) 2003 Benjamin Otte + * + * gsttypefindfactory.c: typefinding subsystem + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * 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 + * functions. How to create and register these functions is described in + * the section + * "Writing typefind functions". + * + * + * how to write a simple typefinder + * + * typedef struct { + * guint8 *data; + * guint size; + * guint probability; + * GstCaps *data; + * } MyTypeFind; + * static void + * my_peek (gpointer data, gint64 offset, guint size) + * { + * MyTypeFind *find = (MyTypeFind *) data; + * if (offset >= 0 && offset + size <= find->size) { + * return find->data + offset; + * } + * return NULL; + * } + * static void + * my_suggest (gpointer data, guint probability, GstCaps *caps) + * { + * MyTypeFind *find = (MyTypeFind *) data; + * if (probability > find->probability) { + * find->probability = probability; + * gst_caps_replace (&find->caps, caps); + * } + * } + * static GstCaps * + * find_type (guint8 *data, guint size) + * { + * 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); + * walk = g_list_next (walk) + * gst_type_find_factory_call_function (factory, &gst_find); + * } + * g_list_free (type_list); + * return find.caps; + * }; + * + * + * + * 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. + */ + +#include "gst_private.h" +#include "gstinfo.h" +#include "gsttypefind.h" +#include "gsttypefindfactory.h" +#include "gstregistrypool.h" + +GST_DEBUG_CATEGORY (gst_type_find_debug); +#define GST_CAT_DEFAULT gst_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 void gst_type_find_factory_unload_thyself (GstPluginFeature * feature); + +static void gst_type_find_load_plugin (GstTypeFind * find, gpointer data); + +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; +} +static void +gst_type_find_factory_class_init (gpointer g_class, gpointer class_data) +{ + GstPluginFeatureClass *gstpluginfeature_class = + GST_PLUGIN_FEATURE_CLASS (g_class); + GObjectClass *object_class = G_OBJECT_CLASS (g_class); + + parent_class = g_type_class_peek_parent (g_class); + + object_class->dispose = gst_type_find_factory_dispose; + + gstpluginfeature_class->unload_thyself = + GST_DEBUG_FUNCPTR (gst_type_find_factory_unload_thyself); +} +static void +gst_type_find_factory_init (GTypeInstance * instance, gpointer g_class) +{ + GstTypeFindFactory *factory = GST_TYPE_FIND_FACTORY (instance); + + factory->user_data = factory; + factory->function = gst_type_find_load_plugin; +} +static void +gst_type_find_factory_dispose (GObject * object) +{ + GstTypeFindFactory *factory = GST_TYPE_FIND_FACTORY (object); + + if (factory->caps) { + gst_caps_unref (factory->caps); + factory->caps = NULL; + } + if (factory->extensions) { + g_strfreev (factory->extensions); + factory->extensions = NULL; + } +} +static void +gst_type_find_factory_unload_thyself (GstPluginFeature * feature) +{ + GstTypeFindFactory *factory = GST_TYPE_FIND_FACTORY (feature); + + factory->function = gst_type_find_load_plugin; + factory->user_data = factory; +} +static void +gst_type_find_load_plugin (GstTypeFind * find, gpointer data) +{ + GstTypeFindFactory *factory = GST_TYPE_FIND_FACTORY (data); + + GST_DEBUG_OBJECT (factory, "need to load typefind function %s", + GST_PLUGIN_FEATURE_NAME (factory)); + + if (gst_plugin_feature_ensure_loaded (GST_PLUGIN_FEATURE (factory))) { + if (factory->function == gst_type_find_load_plugin) { + /* looks like we didn't get a real typefind function */ + g_warning ("could not load valid typefind function for feature '%s'\n", + GST_PLUGIN_FEATURE_NAME (factory)); + } else { + g_assert (factory->function); + gst_type_find_factory_call_function (factory, find); + } + } +} + +/** + * 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 + */ +GList * +gst_type_find_factory_get_list (void) +{ + return gst_registry_pool_feature_list (GST_TYPE_TYPE_FIND_FACTORY); +} + +/** + * gst_type_find_factory_get_caps: + * @factory: a factory + * + * Gets the caps associated with a typefind factory. + * + * Returns: the #GstCaps associated with this factory + */ +const GstCaps * +gst_type_find_factory_get_caps (const GstTypeFindFactory * factory) +{ + g_return_val_if_fail (GST_IS_TYPE_FIND_FACTORY (factory), NULL); + + return factory->caps; +} + +/** + * gst_type_find_factory_get_extensions: + * @factory: a factory + * + * Gets the extensions associated with a typefind factory. 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 + * a 0-length list. + * + * Returns: a NULL-terminated array of extensions associated with this factory + */ +gchar ** +gst_type_find_factory_get_extensions (const GstTypeFindFactory * factory) +{ + g_return_val_if_fail (GST_IS_TYPE_FIND_FACTORY (factory), NULL); + + return factory->extensions; +} + +/** + * 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. + */ +void +gst_type_find_factory_call_function (const GstTypeFindFactory * factory, + GstTypeFind * find) +{ + g_return_if_fail (GST_IS_TYPE_FIND_FACTORY (factory)); + g_return_if_fail (find != NULL); + g_return_if_fail (find->peek != NULL); + g_return_if_fail (find->suggest != NULL); + + /* should never happen */ + g_assert (factory->function != NULL); + + factory->function (find, factory->user_data); +} diff --git a/gst/gsttypefindfactory.h b/gst/gsttypefindfactory.h new file mode 100644 index 0000000..d4424e7 --- /dev/null +++ b/gst/gsttypefindfactory.h @@ -0,0 +1,80 @@ +/* GStreamer + * Copyright (C) 2003 Benjamin Otte + * + * gsttypefindfactory.h: typefinding subsystem + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __GST_TYPE_FIND_FACTORY_H__ +#define __GST_TYPE_FIND_FACTORY_H__ + +#include +#include +#include +#include + +G_BEGIN_DECLS + +#define GST_TYPE_TYPE_FIND_FACTORY (gst_type_find_factory_get_type()) +#define GST_TYPE_FIND_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TYPE_FIND_FACTORY, GstTypeFindFactory)) +#define GST_IS_TYPE_FIND_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TYPE_FIND_FACTORY)) +#define GST_TYPE_FIND_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_TYPE_FIND_FACTORY, GstTypeFindFactoryClass)) +#define GST_IS_TYPE_FIND_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_TYPE_FIND_FACTORY)) +#define GST_TYPE_FIND_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_TYPE_FIND_FACTORY, GstTypeFindFactoryClass)) + +typedef struct _GstTypeFindFactory GstTypeFindFactory; +typedef struct _GstTypeFindFactoryClass GstTypeFindFactoryClass; + +/** + * GstTypeFindFactory: + * + * Object that stores information about a typefind function. + */ +struct _GstTypeFindFactory { + GstPluginFeature feature; + /* */ + + GstTypeFindFunction function; + gchar ** extensions; + GstCaps * caps; /* FIXME: not yet saved in registry */ + + gpointer user_data; + + gpointer _gst_reserved[GST_PADDING]; +}; + +struct _GstTypeFindFactoryClass { + GstPluginFeatureClass parent; + /* */ + + gpointer _gst_reserved[GST_PADDING]; +}; + +/* typefinding interface */ + +GType gst_type_find_factory_get_type (void); + +GList * gst_type_find_factory_get_list (void); + +gchar ** gst_type_find_factory_get_extensions (const GstTypeFindFactory *factory); +const GstCaps * gst_type_find_factory_get_caps (const GstTypeFindFactory *factory); +void gst_type_find_factory_call_function (const GstTypeFindFactory *factory, + GstTypeFind *find); + +G_END_DECLS + +#endif /* __GST_TYPE_FIND_FACTORY_H__ */ diff --git a/gst/registries/gstlibxmlregistry.c b/gst/registries/gstlibxmlregistry.c index 8ade175..d99ef86 100644 --- a/gst/registries/gstlibxmlregistry.c +++ b/gst/registries/gstlibxmlregistry.c @@ -54,6 +54,7 @@ #include #include #include +#include #include #include #include diff --git a/gst/registries/gstxmlregistry.c b/gst/registries/gstxmlregistry.c index 2faf9f9..e99f788 100644 --- a/gst/registries/gstxmlregistry.c +++ b/gst/registries/gstxmlregistry.c @@ -54,6 +54,7 @@ #include #include #include +#include #include #include diff --git a/plugins/elements/gstbufferstore.h b/plugins/elements/gstbufferstore.h index 15fff8e..f6320f3 100644 --- a/plugins/elements/gstbufferstore.h +++ b/plugins/elements/gstbufferstore.h @@ -1,7 +1,7 @@ /* GStreamer * Copyright (C) 2003 Benjamin Otte * - * gsttypefind.h: keep an easily accessible list of all buffers + * gstbufferstore.h: keep an easily accessible list of all buffers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public diff --git a/plugins/elements/gsttypefindelement.c b/plugins/elements/gsttypefindelement.c index 66aba4f..320b5cc 100644 --- a/plugins/elements/gsttypefindelement.c +++ b/plugins/elements/gsttypefindelement.c @@ -1,7 +1,7 @@ /* GStreamer * Copyright (C) 2003 Benjamin Otte * - * gsttypefind.c: element that detects type of stream + * gsttypefindelement.c: element that detects type of stream * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public diff --git a/plugins/elements/gsttypefindelement.h b/plugins/elements/gsttypefindelement.h index 76b8e60..00908da 100644 --- a/plugins/elements/gsttypefindelement.h +++ b/plugins/elements/gsttypefindelement.h @@ -1,7 +1,7 @@ /* GStreamer * Copyright (C) 2003 Benjamin Otte * - * gsttypefind.h: element that detects type of stream + * gsttypefindelement.h: element that detects type of stream * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public -- 2.7.4