From dd8f9aca92df070157172bdeb97c93c33a3d5c22 Mon Sep 17 00:00:00 2001 From: Anssi Hannula Date: Tue, 17 Jan 2012 16:05:41 +0200 Subject: [PATCH] subtitleoverlay: fix state change stall on PAUSED->READY->PAUSED After a PAUSED->READY change the sink pads are currently not set to blocking state. When the element is set back to PAUSED, the change will be done asynchronously, but as the _pad_blocked_cb() callback is now not called, the state change never completes. Fix that by setting the sink pads to blocking state on a PAUSED->READY change, which ensures that the _pad_blocked_cb() is called when needed on any future READY->PAUSED change. The sink pads are already put to blocking state on NULL->READY change, so this behavior is consistent. Fixes bug #668097. --- gst/playback/gstsubtitleoverlay.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/gst/playback/gstsubtitleoverlay.c b/gst/playback/gstsubtitleoverlay.c index 3d93c27308..126ffd2af7 100644 --- a/gst/playback/gstsubtitleoverlay.c +++ b/gst/playback/gstsubtitleoverlay.c @@ -1400,6 +1400,15 @@ gst_subtitle_overlay_change_state (GstElement * element, break; case GST_STATE_CHANGE_PAUSED_TO_READY: GST_DEBUG_OBJECT (self, "State change PAUSED->READY"); + + /* Set the pads back to blocking state */ + GST_SUBTITLE_OVERLAY_LOCK (self); + gst_pad_set_blocked_async_full (self->video_block_pad, TRUE, + _pad_blocked_cb, self, NULL); + gst_pad_set_blocked_async_full (self->subtitle_block_pad, TRUE, + _pad_blocked_cb, self, NULL); + GST_SUBTITLE_OVERLAY_UNLOCK (self); + do_async_done (self); break; -- 2.34.1