diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2010-02-27 11:23:14 +0100 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2010-02-27 11:43:49 +0100 |
commit | 659776f1b16715b413b672ab03381d0ddf786790 (patch) | |
tree | f14a32e5ffc36db9e6797cb17673145dadb4955c | |
parent | bcdb7d48512cfb9224e84ec11a02596ce80d43d8 (diff) |
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.
-rw-r--r-- | ext/assrender/gstassrender.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/ext/assrender/gstassrender.c b/ext/assrender/gstassrender.c index 771be41d1..8a5603e0a 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)) { |