parsebin: Don't try to continue autoplugging a parser if we got raw caps
authorSebastian Dröge <sebastian@centricular.com>
Fri, 6 Jul 2018 07:51:37 +0000 (10:51 +0300)
committerSebastian Dröge <sebastian@centricular.com>
Fri, 6 Jul 2018 15:49:39 +0000 (17:49 +0200)
Otherwise we'll fail with an unhelpful message that no decoder for the
raw caps was found if a container contains raw media.

gst/playback/gstparsebin.c

index aee542c..d8fc232 100644 (file)
 #include "gstplay-enum.h"
 #include "gstplayback.h"
 #include "gstplaybackutils.h"
+#include "gstrawcaps.h"
 
 /* generic templates */
 static GstStaticPadTemplate parse_bin_sink_template =
@@ -1103,9 +1104,18 @@ static gboolean
 gst_parse_bin_autoplug_continue (GstElement * element, GstPad * pad,
     GstCaps * caps)
 {
+  static GstStaticCaps raw_caps = GST_STATIC_CAPS (DEFAULT_RAW_CAPS);
+
+  GST_DEBUG_OBJECT (element, "caps %" GST_PTR_FORMAT, caps);
+
+  /* If it matches our target caps, expose it */
+  if (gst_caps_can_intersect (caps, gst_static_caps_get (&raw_caps))) {
+    GST_DEBUG_OBJECT (element, "autoplug-continue returns FALSE");
+    return FALSE;
+  }
+
   GST_DEBUG_OBJECT (element, "autoplug-continue returns TRUE");
 
-  /* by default we always continue */
   return TRUE;
 }