From 4d6aa0f83121c7c19561124ccff0f59faa4dca97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Sat, 17 Oct 2015 22:25:22 +0300 Subject: [PATCH] decodebin/playbin/playsink/subtitleoverlay: Post async-done on state change failures https://bugzilla.gnome.org/show_bug.cgi?id=756611 --- gst/playback/gstdecodebin2.c | 1 + gst/playback/gstplaybin2.c | 2 ++ gst/playback/gstplaysink.c | 1 + gst/playback/gstsubtitleoverlay.c | 5 ++++- 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/gst/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c index bb74a24cc3..89bd41e70f 100644 --- a/gst/playback/gstdecodebin2.c +++ b/gst/playback/gstdecodebin2.c @@ -5147,6 +5147,7 @@ activate_failed: { GST_DEBUG_OBJECT (element, "element failed to change states -- activation problem?"); + do_async_done (dbin); return GST_STATE_CHANGE_FAILURE; } } diff --git a/gst/playback/gstplaybin2.c b/gst/playback/gstplaybin2.c index 22faf8a3c7..050cd898a5 100644 --- a/gst/playback/gstplaybin2.c +++ b/gst/playback/gstplaybin2.c @@ -5782,6 +5782,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; diff --git a/gst/playback/gstplaysink.c b/gst/playback/gstplaysink.c index 6c5a2cfeb1..1685692d9e 100644 --- a/gst/playback/gstplaysink.c +++ b/gst/playback/gstplaysink.c @@ -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; } } diff --git a/gst/playback/gstsubtitleoverlay.c b/gst/playback/gstsubtitleoverlay.c index 3f24fd5df0..719eebb507 100644 --- a/gst/playback/gstsubtitleoverlay.c +++ b/gst/playback/gstsubtitleoverlay.c @@ -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)) {