throw an error for mime types spider can't handle
authorThomas Vander Stichele <thomas@apestaart.org>
Tue, 17 Feb 2004 17:59:32 +0000 (17:59 +0000)
committerThomas Vander Stichele <thomas@apestaart.org>
Tue, 17 Feb 2004 17:59:32 +0000 (17:59 +0000)
Original commit message from CVS:
throw an error for mime types spider can't handle

gst/autoplug/gstspider.c
po/POTFILES.in

index 3b12efa..b77794f 100644 (file)
@@ -45,6 +45,7 @@
 #  include "config.h"
 #endif
 
+#include "../gst-i18n-lib.h"
 #include "gstspider.h"
 #include "gstspideridentity.h"
 #include "gstsearchfuncs.h"
@@ -387,6 +388,42 @@ gst_spider_identity_plug (GstSpiderIdentity *ident)
   /* return if we're already plugged */
   if (ident->plugged) return;
 
+  /* check if there is at least one element factory that can handle the
+     identity's src caps */
+  {
+    GstCaps *src_caps = gst_pad_get_caps (ident->src);
+    if (! gst_caps_is_empty (src_caps) && ! gst_caps_is_any (src_caps))
+    {
+      const char *mime;
+      GList *factories;
+      GstPadTemplate *padtemp;
+      gboolean found = FALSE;
+
+      mime = gst_structure_get_name (gst_caps_get_structure (src_caps, 0));
+
+      factories = spider->factories;
+      while (factories)
+      {
+        if ((padtemp = gst_autoplug_can_connect_src (factories->data, src_caps)))
+        {
+          const GstCaps *caps = gst_pad_template_get_caps (padtemp);
+          GST_DEBUG ("can connect src to pad template: %" GST_PTR_FORMAT, caps);
+          found = TRUE;
+        }
+        factories = factories->next;
+      }
+      if (!found)
+      {
+        GST_ELEMENT_ERROR (spider, STREAM, CODEC_NOT_FOUND,
+                           (_("There is no element present to handle the stream's mime type %s."), mime),
+                           (NULL));
+       return;
+      }
+    }
+  }
+
+
+
   /* get the direction of our ident */
   if (GST_PAD_PEER (ident->sink))
   {
index c435222..8ad24d4 100644 (file)
@@ -4,6 +4,7 @@ gst/gst.c
 gst/gstelement.c
 gst/gsterror.c
 gst/gsttag.c
+gst/autoplug/gstspider.c
 gst/elements/gstfakesink.c
 gst/elements/gstfilesink.c
 gst/elements/gstfilesrc.c