dashdemux: Subtract the period start when seeking based on a template
authorSebastian Dröge <sebastian@centricular.com>
Thu, 25 Jun 2015 18:19:34 +0000 (20:19 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Thu, 25 Jun 2015 21:36:09 +0000 (23:36 +0200)
Otherwise we will look for segments after the period usually. The seek
timestamp is relative to the start of the first period and we have to
select a segment relative to the current period's start.

ext/dash/gstmpdparser.c

index 69927cc..d5f9956 100644 (file)
@@ -3614,6 +3614,7 @@ gst_mpd_client_stream_seek (GstMpdClient * client, GstActiveStream * stream,
   } else {
     GstClockTime duration =
         gst_mpd_client_get_segment_duration (client, stream, NULL);
+    GstStreamPeriod *stream_period = gst_mpdparser_get_stream_period (client);
     guint segments_count = gst_mpd_client_get_segments_counts (client, stream);
 
     g_return_val_if_fail (stream->cur_seg_template->
@@ -3621,6 +3622,12 @@ gst_mpd_client_stream_seek (GstMpdClient * client, GstActiveStream * stream,
     if (!GST_CLOCK_TIME_IS_VALID (duration)) {
       return FALSE;
     }
+
+    if (ts > stream_period->start)
+      ts -= stream_period->start;
+    else
+      ts = 0;
+
     index = ts / duration;
     if (segments_count > 0 && index >= segments_count) {
       stream->segment_index = segments_count;