From 4c625bd569b6697e04a95d8b0f8c6a24a5476958 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 4 Nov 2009 13:11:44 +0100 Subject: [PATCH] assrender: Return WRONG_STATE from the subtitle chain when flushing --- ext/assrender/gstassrender.c | 9 ++++++++- ext/assrender/gstassrender.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ext/assrender/gstassrender.c b/ext/assrender/gstassrender.c index fdb8c8e..a88615e 100644 --- a/ext/assrender/gstassrender.c +++ b/ext/assrender/gstassrender.c @@ -262,8 +262,10 @@ gst_assrender_change_state (GstElement * element, GstStateChange transition) GstStateChangeReturn ret; switch (transition) { - case GST_STATE_CHANGE_NULL_TO_READY: case GST_STATE_CHANGE_READY_TO_PAUSED: + render->subtitle_flushing = FALSE; + break; + case GST_STATE_CHANGE_NULL_TO_READY: case GST_STATE_CHANGE_PAUSED_TO_PLAYING: default: break; @@ -612,6 +614,9 @@ gst_assrender_chain_text (GstPad * pad, GstBuffer * buffer) render = GST_ASSRENDER (GST_PAD_PARENT (pad)); + if (render->subtitle_flushing) + return GST_FLOW_WRONG_STATE; + timestamp = GST_BUFFER_TIMESTAMP (buffer); if (timestamp > render->video_segment.last_stop) { @@ -741,6 +746,7 @@ gst_assrender_event_text (GstPad * pad, GstEvent * event) break; } case GST_EVENT_FLUSH_STOP: + render->subtitle_flushing = FALSE; gst_event_unref (event); ret = TRUE; break; @@ -761,6 +767,7 @@ gst_assrender_event_text (GstPad * pad, GstEvent * event) if (render->subtitle_pending) gst_buffer_unref (render->subtitle_pending); render->subtitle_pending = NULL; + render->subtitle_flushing = TRUE; g_cond_signal (render->subtitle_cond); g_mutex_unlock (render->subtitle_mutex); gst_event_unref (event); diff --git a/ext/assrender/gstassrender.h b/ext/assrender/gstassrender.h index 04babcf..0a91f4c 100644 --- a/ext/assrender/gstassrender.h +++ b/ext/assrender/gstassrender.h @@ -55,6 +55,7 @@ struct _Gstassrender GMutex *subtitle_mutex; GCond *subtitle_cond; GstBuffer *subtitle_pending; + gboolean subtitle_flushing; ASS_Library *ass_library; ASS_Renderer *ass_renderer; -- 2.7.4