resindvdbin: Post missing decoder messages if one is missing
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 1 Oct 2009 12:52:06 +0000 (14:52 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 1 Oct 2009 12:52:06 +0000 (14:52 +0200)
For video this is an error, for audio only a warning.

ext/resindvd/Makefile.am
ext/resindvd/resindvdbin.c

index 89232a5..c5f758f 100644 (file)
@@ -21,6 +21,7 @@ libresindvd_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) \
 $(GST_CFLAGS) $(DVDNAV_CFLAGS)
 libresindvd_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
 -lgstinterfaces-$(GST_MAJORMINOR) -lgstvideo-$(GST_MAJORMINOR) \
+-lgstpbutils-$(GST_MAJORMINOR) \
 $(GST_BASE_LIBS) $(GST_LIBS) $(DVDNAV_LIBS)
 libresindvd_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libresindvd_la_LIBTOOLFLAGS = --tag=disable-static
index 5f0d103..bd04afe 100644 (file)
@@ -24,6 +24,7 @@
 #include <string.h>
 
 #include <gst/gst.h>
+#include <gst/pbutils/missing-plugins.h>
 
 #include "resindvdbin.h"
 #include "resindvdsrc.h"
@@ -753,9 +754,21 @@ demux_pad_added (GstElement * element, GstPad * pad, RsnDvdBin * dvdbin)
         gst_element_get_request_pad (dvdbin->pieces[DVD_ELEM_AUD_SELECT],
         "sink%d");
   } else {
-    /* FIXME: Consider and fire a missing-element message here */
+    GstStructure *s;
+
     GST_DEBUG_OBJECT (dvdbin, "Ignoring unusable pad w/ caps %" GST_PTR_FORMAT,
         caps);
+    gst_element_post_message (GST_ELEMENT_CAST (dvdbin),
+        gst_missing_decoder_message_new (GST_ELEMENT_CAST (dvdbin), caps));
+
+    s = gst_caps_get_structure (caps, 0);
+    if (g_str_has_prefix ("video/", gst_structure_get_name (s))) {
+      GST_ELEMENT_ERROR (dvdbin, STREAM, CODEC_NOT_FOUND, (NULL),
+          ("No MPEG video decoder found"));
+    } else {
+      GST_ELEMENT_WARNING (dvdbin, STREAM, CODEC_NOT_FOUND, (NULL),
+          ("No MPEG video decoder found"));
+    }
   }
 
   gst_caps_unref (caps);