play: Improve pipeline states
authorWim Taymans <wtaymans@redhat.com>
Mon, 21 Apr 2014 13:35:32 +0000 (15:35 +0200)
committerWim Taymans <wtaymans@redhat.com>
Mon, 21 Apr 2014 13:40:33 +0000 (15:40 +0200)
First set the pipeline to the PAUSED state to check if we are dealing
with a live pipeline or not. Then move to the desired state.

If we don't do this, it is possible that we receive a BUFFERING message
before we know that the pipeline is live and we would set the pipeline
to PAUSED and deadlock.

tools/gst-play.c

index c3e0167..b2afb5d 100644 (file)
@@ -396,7 +396,7 @@ play_uri (GstPlay * play, const gchar * next_uri)
 
   g_object_set (play->playbin, "uri", next_uri, NULL);
 
-  sret = gst_element_set_state (play->playbin, play->desired_state);
+  sret = gst_element_set_state (play->playbin, GST_STATE_PAUSED);
   switch (sret) {
     case GST_STATE_CHANGE_FAILURE:
       /* ignore, we should get an error message posted on the bus */
@@ -411,6 +411,8 @@ play_uri (GstPlay * play, const gchar * next_uri)
     default:
       break;
   }
+  if (play->desired_state != GST_STATE_PAUSED)
+    sret = gst_element_set_state (play->playbin, play->desired_state);
 }
 
 /* returns FALSE if we have reached the end of the playlist */