dashdemux: don't wait for the whole duration of a fragment when seeking
authorLouis-Francis Ratté-Boulianne <louis-francis.ratte-boulianne@collabora.co.uk>
Wed, 23 Jan 2013 18:20:25 +0000 (13:20 -0500)
committerThiago Santos <thiago.sousa.santos@collabora.com>
Wed, 8 May 2013 21:14:33 +0000 (18:14 -0300)
ext/dash/gstdashdemux.c
ext/dash/gstdashdemux.h

index fe79c5e..6bfeeb4 100644 (file)
@@ -1030,16 +1030,18 @@ gst_dash_demux_stream_loop (GstDashDemux * demux)
       goto error_pushing;
   }
   demux->need_segment = FALSE;
+  demux->last_position_shift = demux->position_shift;
   demux->position_shift = 0;
   g_list_free (listfragment);
   if (GST_STATE (demux) == GST_STATE_PLAYING) {
     /* Wait for the duration of a fragment before resuming this task */
     g_get_current_time (&demux->next_push);
     g_time_val_add (&demux->next_push,
-        gst_mpd_client_get_next_fragment_duration (demux->client)
-        / GST_SECOND * G_USEC_PER_SEC);
+        (gst_mpd_client_get_next_fragment_duration (demux->client) -
+         demux->last_position_shift) / GST_SECOND * G_USEC_PER_SEC);
     GST_DEBUG_OBJECT (demux, "Next push scheduled at %s",
         g_time_val_to_iso8601 (&demux->next_push));
+    demux->last_position_shift = 0;
   } else {
     /* The pipeline is now set up, wait until playback begins */
     goto pause_streaming;
index 7150968..9508361 100644 (file)
@@ -96,6 +96,7 @@ struct _GstDashDemux
   /* Position in the stream */
   GstClockTime position;
   GstClockTime position_shift;
+  GstClockTime last_position_shift;
   gboolean need_segment;
   /* Download rate */
   guint64 dnl_rate;