From 659776f1b16715b413b672ab03381d0ddf786790 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Sat, 27 Feb 2010 11:23:14 +0100 Subject: [PATCH] assrender: Consume text buffers if they're to be displayed in the next 500ms Instead of only consuming them if they're to be display now. Consuming them then might make following buffers with the same timestamp to be too late. --- ext/assrender/gstassrender.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ext/assrender/gstassrender.c b/ext/assrender/gstassrender.c index 771be41..8a5603e 100644 --- a/ext/assrender/gstassrender.c +++ b/ext/assrender/gstassrender.c @@ -988,12 +988,7 @@ gst_ass_render_chain_video (GstPad * pad, GstBuffer * buffer) gst_segment_to_running_time (&render->video_segment, GST_FORMAT_TIME, GST_BUFFER_TIMESTAMP (buffer) + GST_BUFFER_DURATION (buffer)); - if (sub_running_time <= vid_running_time_end) { - gst_ass_render_process_text (render, render->subtitle_pending, - sub_running_time, sub_running_time_end - sub_running_time); - render->subtitle_pending = NULL; - g_cond_signal (render->subtitle_cond); - } else if (sub_running_time_end < vid_running_time) { + if (sub_running_time_end < vid_running_time) { gst_buffer_unref (render->subtitle_pending); GST_DEBUG_OBJECT (render, "Too late text buffer, dropping (%" GST_TIME_FORMAT " < %" @@ -1001,6 +996,11 @@ gst_ass_render_chain_video (GstPad * pad, GstBuffer * buffer) GST_TIME_ARGS (vid_running_time)); render->subtitle_pending = NULL; g_cond_signal (render->subtitle_cond); + } else if (sub_running_time <= vid_running_time_end + GST_SECOND / 2) { + gst_ass_render_process_text (render, render->subtitle_pending, + sub_running_time, sub_running_time_end - sub_running_time); + render->subtitle_pending = NULL; + g_cond_signal (render->subtitle_cond); } } g_mutex_unlock (render->subtitle_mutex); @@ -1100,7 +1100,7 @@ gst_ass_render_chain_text (GstPad * pad, GstBuffer * buffer) vid_running_time += gst_util_uint64_scale (GST_SECOND, render->fps_d, render->fps_n); - if (sub_running_time > vid_running_time) { + if (sub_running_time > vid_running_time + GST_SECOND / 2) { g_assert (render->subtitle_pending == NULL); g_mutex_lock (render->subtitle_mutex); if (G_UNLIKELY (render->subtitle_flushing)) { -- 2.7.4