summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gst/autoplug/gstspider.c37
-rw-r--r--po/POTFILES.in1
2 files changed, 38 insertions, 0 deletions
diff --git a/gst/autoplug/gstspider.c b/gst/autoplug/gstspider.c
index 3b12efad2..b77794f31 100644
--- a/gst/autoplug/gstspider.c
+++ b/gst/autoplug/gstspider.c
@@ -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))
{
diff --git a/po/POTFILES.in b/po/POTFILES.in
index c43522251..8ad24d40b 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -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