From 00d20b044ce7b9340401c25a4b7d06e67ecf2bc0 Mon Sep 17 00:00:00 2001 From: Jan Schmidt Date: Thu, 29 Sep 2016 04:55:14 +1000 Subject: [PATCH] splitmuxsrc: Handle stop point from segment If the seek stop point (or start, during reverse play) was within the segment we just finished, go EOS immediately instead of proceeding through all other parts and sending 0 length seeks to them. https://bugzilla.gnome.org/show_bug.cgi?id=772138 --- gst/multifile/gstsplitmuxsrc.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/gst/multifile/gstsplitmuxsrc.c b/gst/multifile/gstsplitmuxsrc.c index 383e8b5313..209d29f9bf 100644 --- a/gst/multifile/gstsplitmuxsrc.c +++ b/gst/multifile/gstsplitmuxsrc.c @@ -945,6 +945,28 @@ gst_splitmux_end_of_part (GstSplitMuxSrc * splitmux, SplitMuxSrcPad * splitpad) if (gst_splitmux_part_is_eos (splitmux->parts[splitpad->cur_part])) gst_splitmux_part_reader_deactivate (splitmux->parts[cur_part]); + if (splitmux->play_segment.rate >= 0.0) { + if (splitmux->play_segment.stop != -1) { + GstClockTime part_end = + gst_splitmux_part_reader_get_end_offset (splitmux->parts[cur_part]); + if (part_end >= splitmux->play_segment.stop) { + GST_DEBUG_OBJECT (splitmux, + "Stop position was within that part. Finishing"); + next_part = -1; + } + } + } else { + if (splitmux->play_segment.start != -1) { + GstClockTime part_start = + gst_splitmux_part_reader_get_start_offset (splitmux->parts[cur_part]); + if (part_start >= splitmux->play_segment.start) { + GST_DEBUG_OBJECT (splitmux, + "Start position was within that part. Finishing"); + next_part = -1; + } + } + } + if (next_part != -1) { GST_DEBUG_OBJECT (splitmux, "At EOS on pad %" GST_PTR_FORMAT " moving to part %d", splitpad, next_part);