uridecodebin: post proper error message if decodebin2/typefind elements are missing
authorTim-Philipp Müller <tim.muller@collabora.co.uk>
Wed, 16 Mar 2011 10:19:42 +0000 (10:19 +0000)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Wed, 16 Mar 2011 10:19:42 +0000 (10:19 +0000)
Post better error messages in case typefind/decodebin2 are missing or
could not be loaded for some reason (e.g. because they inadvertently
got blacklisted).

https://bugzilla.gnome.org/show_bug.cgi?id=644892

gst/playback/gsturidecodebin.c

index f4551e3b4fe1aee759fcc2b3ae03d68e44d9b1ab..bf1058349fc79887bd3766435739f9321a55aa31 100644 (file)
@@ -1539,6 +1539,11 @@ make_decoder (GstURIDecodeBin * decoder)
 
     if (!decodebin)
       goto no_decodebin;
+
+    /* sanity check */
+    if (decodebin->numsinkpads == 0)
+      goto no_typefind;
+
     /* connect signals to proxy */
     g_signal_connect (decodebin, "unknown-type",
         G_CALLBACK (proxy_unknown_type_signal), decoder);
@@ -1609,6 +1614,15 @@ make_decoder (GstURIDecodeBin * decoder)
 no_decodebin:
   {
     post_missing_plugin_error (GST_ELEMENT_CAST (decoder), "decodebin2");
+    GST_ELEMENT_ERROR (decoder, CORE, MISSING_PLUGIN, (NULL),
+        ("No decodebin2 element, check your installation"));
+    return NULL;
+  }
+no_typefind:
+  {
+    gst_object_unref (decodebin);
+    GST_ELEMENT_ERROR (decoder, CORE, MISSING_PLUGIN, (NULL),
+        ("No typefind element, decodebin2 is unusable, check your installation"));
     return NULL;
   }
 }
@@ -1762,6 +1776,8 @@ setup_streaming (GstURIDecodeBin * decoder)
 no_typefind:
   {
     post_missing_plugin_error (GST_ELEMENT_CAST (decoder), "typefind");
+    GST_ELEMENT_ERROR (decoder, CORE, MISSING_PLUGIN, (NULL),
+        ("No typefind element, check your installation"));
     return FALSE;
   }
 could_not_link: