diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2010-02-26 18:06:24 +0100 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2010-02-27 11:43:49 +0100 |
commit | 852be755dde44bbb6a9d276a16915d521ee8e2df (patch) | |
tree | a326504962c6a76f8268b71122e12eec54ab17b5 /ext/assrender | |
parent | 659776f1b16715b413b672ab03381d0ddf786790 (diff) | |
download | gstreamer-plugins-bad-852be755dde44bbb6a9d276a16915d521ee8e2df.tar.gz |
assrender: Drop text buffers before the segment start and clip running time end to the segment stop
Diffstat (limited to 'ext/assrender')
-rw-r--r-- | ext/assrender/gstassrender.c | 17 |
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)); |