summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2010-02-27 11:23:14 +0100
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2010-02-27 11:43:49 +0100
commit659776f1b16715b413b672ab03381d0ddf786790 (patch)
treef14a32e5ffc36db9e6797cb17673145dadb4955c
parentbcdb7d48512cfb9224e84ec11a02596ce80d43d8 (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.c14
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)) {