From: Sebastian Dröge Date: Sat, 27 Feb 2010 10:23:14 +0000 (+0100) Subject: assrender: Consume text buffers if they're to be displayed in the next 500ms X-Git-Tag: 1.19.3~507^2~17391 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=659776f1b16715b413b672ab03381d0ddf786790;p=platform%2Fupstream%2Fgstreamer.git 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. --- 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)) {