decodebin/playbin/playsink/subtitleoverlay: Post async-done on state change failures
authorSebastian Dröge <sebastian@centricular.com>
Sat, 17 Oct 2015 19:25:22 +0000 (22:25 +0300)
committerSebastian Dröge <sebastian@centricular.com>
Tue, 20 Oct 2015 07:15:58 +0000 (10:15 +0300)
https://bugzilla.gnome.org/show_bug.cgi?id=756611

gst/playback/gstdecodebin2.c
gst/playback/gstplaybin2.c
gst/playback/gstplaysink.c
gst/playback/gstsubtitleoverlay.c

index 71336b0..cf3a2d1 100644 (file)
@@ -5190,6 +5190,7 @@ activate_failed:
   {
     GST_DEBUG_OBJECT (element,
         "element failed to change states -- activation problem?");
+    do_async_done (dbin);
     return GST_STATE_CHANGE_FAILURE;
   }
 }
index b4e90fc..0fde6c2 100644 (file)
@@ -5779,6 +5779,8 @@ gst_play_bin_change_state (GstElement * element, GstStateChange transition)
   /* ERRORS */
 failure:
   {
+    do_async_done (playbin);
+
     if (transition == GST_STATE_CHANGE_READY_TO_PAUSED) {
       GstSourceGroup *curr_group;
 
index 6c5a2cf..1685692 100644 (file)
@@ -4961,6 +4961,7 @@ activate_failed:
   {
     GST_DEBUG_OBJECT (element,
         "element failed to change states -- activation problem?");
+    do_async_done (playsink);
     return GST_STATE_CHANGE_FAILURE;
   }
 }
index 3f24fd5..719eebb 100644 (file)
@@ -1333,8 +1333,11 @@ gst_subtitle_overlay_change_state (GstElement * element,
 
     bret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
     GST_DEBUG_OBJECT (self, "Base class state changed returned: %d", bret);
-    if (G_UNLIKELY (bret == GST_STATE_CHANGE_FAILURE))
+    if (G_UNLIKELY (bret == GST_STATE_CHANGE_FAILURE)) {
+      do_async_done (self);
       return ret;
+    }
+
     else if (bret == GST_STATE_CHANGE_ASYNC)
       ret = bret;
     else if (G_UNLIKELY (bret == GST_STATE_CHANGE_NO_PREROLL)) {