mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-24 02:31:03 +00:00
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.
This commit is contained in:
parent
71f70c98ef
commit
dd8f9aca92
1 changed files with 9 additions and 0 deletions
|
@ -1400,6 +1400,15 @@ gst_subtitle_overlay_change_state (GstElement * element,
|
||||||
break;
|
break;
|
||||||
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
||||||
GST_DEBUG_OBJECT (self, "State change PAUSED->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);
|
do_async_done (self);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue