From 389dd4e3d00ee0e9657586cab0bb46b47d3e5f37 Mon Sep 17 00:00:00 2001 From: Jan Schmidt Date: Wed, 28 Dec 2016 22:49:27 +1100 Subject: [PATCH] splitmuxsrc: Pass seek flags when activating. Pass all seek flags when activating a part based on a seek, so that SNAP flags are preserved. --- gst/multifile/gstsplitmuxpartreader.c | 8 ++++---- gst/multifile/gstsplitmuxpartreader.h | 2 +- gst/multifile/gstsplitmuxsrc.c | 12 +++++++----- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/gst/multifile/gstsplitmuxpartreader.c b/gst/multifile/gstsplitmuxpartreader.c index de814fb8a3..40a444b496 100644 --- a/gst/multifile/gstsplitmuxpartreader.c +++ b/gst/multifile/gstsplitmuxpartreader.c @@ -815,12 +815,12 @@ gst_splitmux_part_reader_seek_to_time_locked (GstSplitMuxPartReader * reader, /* Map the passed segment to 'internal' time from 0 to length of this piece and seek. Lock cannot be held */ static gboolean gst_splitmux_part_reader_seek_to_segment (GstSplitMuxPartReader * reader, - GstSegment * target_seg) + GstSegment * target_seg, GstSeekFlags extra_flags) { GstSeekFlags flags; GstClockTime start = 0, stop = GST_CLOCK_TIME_NONE; - flags = target_seg->flags | GST_SEEK_FLAG_FLUSH; + flags = target_seg->flags | GST_SEEK_FLAG_FLUSH | extra_flags; SPLITMUX_PART_LOCK (reader); if (target_seg->start >= reader->start_offset) @@ -1167,11 +1167,11 @@ gst_splitmux_part_reader_set_location (GstSplitMuxPartReader * reader, gboolean gst_splitmux_part_reader_activate (GstSplitMuxPartReader * reader, - GstSegment * seg) + GstSegment * seg, GstSeekFlags extra_flags) { GST_DEBUG_OBJECT (reader, "Activating part reader"); - if (!gst_splitmux_part_reader_seek_to_segment (reader, seg)) { + if (!gst_splitmux_part_reader_seek_to_segment (reader, seg, extra_flags)) { GST_ERROR_OBJECT (reader, "Failed to seek part to %" GST_SEGMENT_FORMAT, seg); return FALSE; diff --git a/gst/multifile/gstsplitmuxpartreader.h b/gst/multifile/gstsplitmuxpartreader.h index 95d920fc54..03b8b5cecd 100644 --- a/gst/multifile/gstsplitmuxpartreader.h +++ b/gst/multifile/gstsplitmuxpartreader.h @@ -101,7 +101,7 @@ void gst_splitmux_part_reader_set_location (GstSplitMuxPartReader *reader, const gchar *path); gboolean gst_splitmux_part_is_eos (GstSplitMuxPartReader *reader); -gboolean gst_splitmux_part_reader_activate (GstSplitMuxPartReader *part, GstSegment *seg); +gboolean gst_splitmux_part_reader_activate (GstSplitMuxPartReader *part, GstSegment *seg, GstSeekFlags extra_flags); void gst_splitmux_part_reader_deactivate (GstSplitMuxPartReader *part); gboolean gst_splitmux_part_reader_is_active (GstSplitMuxPartReader *part); diff --git a/gst/multifile/gstsplitmuxsrc.c b/gst/multifile/gstsplitmuxsrc.c index a8cba94f61..add398bccd 100644 --- a/gst/multifile/gstsplitmuxsrc.c +++ b/gst/multifile/gstsplitmuxsrc.c @@ -575,7 +575,8 @@ flushing: } static gboolean -gst_splitmux_src_activate_part (GstSplitMuxSrc * splitmux, guint part) +gst_splitmux_src_activate_part (GstSplitMuxSrc * splitmux, guint part, + GstSeekFlags extra_flags) { GList *cur; @@ -583,7 +584,7 @@ gst_splitmux_src_activate_part (GstSplitMuxSrc * splitmux, guint part) splitmux->cur_part = part; if (!gst_splitmux_part_reader_activate (splitmux->parts[part], - &splitmux->play_segment)) + &splitmux->play_segment, extra_flags)) return FALSE; SPLITMUX_SRC_PADS_LOCK (splitmux); @@ -693,7 +694,7 @@ gst_splitmux_src_start (GstSplitMuxSrc * splitmux) GST_INFO_OBJECT (splitmux, "All parts prepared. Total duration %" GST_TIME_FORMAT " Activating first part", GST_TIME_ARGS (total_duration)); - ret = gst_splitmux_src_activate_part (splitmux, 0); + ret = gst_splitmux_src_activate_part (splitmux, 0, GST_SEEK_FLAG_NONE); if (ret == FALSE) goto failed_first_part; done: @@ -996,7 +997,8 @@ gst_splitmux_end_of_part (GstSplitMuxSrc * splitmux, SplitMuxSrcPad * splitpad) GST_DEBUG_OBJECT (splitpad, "First pad to change part. Activating part %d with seg %" GST_SEGMENT_FORMAT, next_part, &tmp); - if (!gst_splitmux_part_reader_activate (splitpad->reader, &tmp)) + if (!gst_splitmux_part_reader_activate (splitpad->reader, &tmp, + GST_SEEK_FLAG_NONE)) goto error; } splitmux->cur_part = next_part; @@ -1168,7 +1170,7 @@ splitmux_src_pad_event (GstPad * pad, GstObject * parent, GstEvent * event) GST_TIME_FORMAT, GST_TIME_ARGS (position), i, GST_TIME_ARGS (position - part_start)); - ret = gst_splitmux_src_activate_part (splitmux, i); + ret = gst_splitmux_src_activate_part (splitmux, i, flags); SPLITMUX_SRC_UNLOCK (splitmux); } default: