summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2010-02-26 18:06:24 +0100
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2010-02-27 11:43:49 +0100
commit852be755dde44bbb6a9d276a16915d521ee8e2df (patch)
treea326504962c6a76f8268b71122e12eec54ab17b5
parent659776f1b16715b413b672ab03381d0ddf786790 (diff)
assrender: Drop text buffers before the segment start and clip running time end to the segment stop
-rw-r--r--ext/assrender/gstassrender.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/ext/assrender/gstassrender.c b/ext/assrender/gstassrender.c
index 8a5603e0a..73901c05d 100644
--- a/ext/assrender/gstassrender.c
+++ b/ext/assrender/gstassrender.c
@@ -1066,6 +1066,8 @@ gst_ass_render_chain_text (GstPad * pad, GstBuffer * buffer)
GstClockTime timestamp, duration;
GstClockTime sub_running_time, vid_running_time;
GstClockTime sub_running_time_end;
+ gint64 cstart, cstop;
+ gboolean in_seg;
if (render->subtitle_flushing) {
gst_buffer_unref (buffer);
@@ -1083,6 +1085,21 @@ gst_ass_render_chain_text (GstPad * pad, GstBuffer * buffer)
return GST_FLOW_OK;
}
+ in_seg =
+ gst_segment_clip (&render->subtitle_segment, GST_FORMAT_TIME, timestamp,
+ timestamp + duration, &cstart, &cstop);
+ if (!in_seg) {
+ GST_DEBUG_OBJECT (render,
+ "Text buffer before segment start (%" GST_TIME_FORMAT " < %"
+ GST_TIME_FORMAT ")", GST_TIME_ARGS (timestamp),
+ GST_TIME_ARGS (render->subtitle_segment.start));
+ gst_buffer_unref (buffer);
+ return GST_FLOW_OK;
+ }
+
+ GST_BUFFER_TIMESTAMP (buffer) = timestamp = cstart;
+ GST_BUFFER_DURATION (buffer) = duration = cstop - cstart;
+
gst_segment_set_last_stop (&render->subtitle_segment, GST_FORMAT_TIME,
GST_BUFFER_TIMESTAMP (buffer));