diff options
author | Anssi Hannula <anssi.hannula@iki.fi> | 2012-01-17 16:05:41 +0200 |
---|---|---|
committer | Tim-Philipp Müller <tim.muller@collabora.co.uk> | 2012-01-23 17:01:24 +0000 |
commit | 2183d62048cdb303465fbc50fb08aa407c245b1a (patch) | |
tree | 617881b2f7ffacc0535435ee1f10aa571272394d | |
parent | 880e981f6a36c49eedd6c22cb2c1ddd5b664b424 (diff) |
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.
-rw-r--r-- | gst/playback/gstsubtitleoverlay.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/gst/playback/gstsubtitleoverlay.c b/gst/playback/gstsubtitleoverlay.c index 061d04942..a3e96c73d 100644 --- a/gst/playback/gstsubtitleoverlay.c +++ b/gst/playback/gstsubtitleoverlay.c @@ -1503,6 +1503,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; |