static void gst_my_typefind_function (GstTypeFind * tf, gpointer d) { GstPnmInfoMngrResult r = GST_PNM_INFO_MNGR_RESULT_READING; GstPnmInfoMngr mngr = { 0, }; guint i; guint8 *data = NULL; for (i = 0; r == GST_PNM_INFO_MNGR_RESULT_READING; i++) { data = gst_type_find_peek (tf, i, 1); if (!data) break; r = gst_pnm_info_mngr_scan (&mngr, data, 1); } switch (r) { case GST_PNM_INFO_MNGR_RESULT_READING: case GST_PNM_INFO_MNGR_RESULT_FAILED: return; case GST_PNM_INFO_MNGR_RESULT_FINISHED: switch (mngr.info.type) { case GST_PNM_TYPE_BITMAP_ASCII: case GST_PNM_TYPE_BITMAP_RAW: gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY, BITMAP_CAPS); return; case GST_PNM_TYPE_GRAYMAP_ASCII: case GST_PNM_TYPE_GRAYMAP_RAW: gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY, GRAYMAP_CAPS); return; case GST_PNM_TYPE_PIXMAP_ASCII: case GST_PNM_TYPE_PIXMAP_RAW: gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY, PIXMAP_CAPS); return; } } }
static void dash_type_find (GstTypeFind * tf, gpointer unused) { if (xml_check_first_element (tf, "MPD", 3, FALSE) || xml_check_first_element (tf, "mpd", 3, FALSE)) { gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, DASH_CAPS); } }
static void gst_gdk_pixbuf_type_find (GstTypeFind * tf, gpointer ignore) { guint8 *data; GdkPixbufLoader *pixbuf_loader; GdkPixbufFormat *format; data = gst_type_find_peek (tf, 0, GST_GDK_PIXBUF_TYPE_FIND_SIZE); if (data == NULL) return; GST_DEBUG ("creating new loader"); pixbuf_loader = gdk_pixbuf_loader_new (); gdk_pixbuf_loader_write (pixbuf_loader, data, GST_GDK_PIXBUF_TYPE_FIND_SIZE, NULL); format = gdk_pixbuf_loader_get_format (pixbuf_loader); if (format != NULL) { GstCaps *caps; gchar **p; gchar **mlist = gdk_pixbuf_format_get_mime_types (format); for (p = mlist; *p; ++p) { GST_DEBUG ("suggesting mime type %s", *p); caps = gst_caps_new_simple (*p, NULL); gst_type_find_suggest (tf, GST_TYPE_FIND_MINIMUM, caps); gst_caps_free (caps); } g_strfreev (mlist); } GST_DEBUG ("closing pixbuf loader, hope it doesn't hang ..."); /* librsvg 2.4.x has a bug where it triggers an endless loop in trying to close a gzip that's not an svg; fixed upstream but no good way to work around it */ gdk_pixbuf_loader_close (pixbuf_loader, NULL); GST_DEBUG ("closed pixbuf loader"); g_object_unref (G_OBJECT (pixbuf_loader)); }