GstTypeFindFactory
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
/* FIXME: compile this? ;) */
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.
Writing typefind functions
Object that stores information about a typefind function
Class belonging to #GstTypeFindFactory.
@parent:
@Returns:
@factory:
@Returns:
@factory:
@Returns:
@factory:
@find: