uridecodebin: Set source element to READY before querying it
authorThibault Saunier <tsaunier@igalia.com>
Tue, 31 Jan 2023 16:21:48 +0000 (13:21 -0300)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Tue, 21 Feb 2023 12:07:57 +0000 (12:07 +0000)
Generating the source element is done when uridecodebin is doing the
READY to PAUSED state change, so it is reasonable to set the new source
element to that state.

This also allows detecting early failures with backing libraries or
hardware (checks done in NULL->READY).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4016>

subprojects/gst-plugins-base/gst/playback/gsturidecodebin.c

index a128d92..0e7ab34 100644 (file)
@@ -2309,6 +2309,10 @@ setup_source (GstURIDecodeBin * decoder)
   /* stream admin setup */
   decoder->streams = g_hash_table_new_full (NULL, NULL, NULL, free_stream);
 
+  if (gst_element_set_state (source,
+          GST_STATE_READY) != GST_STATE_CHANGE_SUCCESS)
+    goto state_fail;
+
   /* see if the source element emits raw audio/video all by itself,
    * if so, we can create streams for the pads and be done with it.
    * Also check that is has source pads, if not, we assume it will
@@ -2372,6 +2376,12 @@ no_source:
     /* error message was already posted */
     return FALSE;
   }
+state_fail:
+  {
+    GST_ELEMENT_ERROR (decoder, CORE, FAILED,
+        (_("Source element can't be prepared")), (NULL));
+    return FALSE;
+  }
 invalid_source:
   {
     GST_ELEMENT_ERROR (decoder, CORE, FAILED,