Пример #1
0
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;
      }
  }
}
Пример #2
0
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));
}