asfdemux: Only use segment.start as seek_time if it is relative
authorThiago Santos <ts.santos@partner.samsung.com>
Tue, 24 Sep 2013 17:08:10 +0000 (10:08 -0700)
committerThiago Santos <ts.santos@partner.samsung.com>
Tue, 24 Sep 2013 21:43:34 +0000 (14:43 -0700)
Relying on the gst_segment_do_seek results for getting the
seeking time should not be used if seek type is SET because the
do_seek function makes the 'cur` position of the seek normalized
on the segment range. This means that seeking beyond the end of the
file might not result in instant EOS as it will end up seeking to
the final ts of the file.

In asf seeking to the final timestamp can lead to seeking to the last
keyframe, meaning a few seconds of video will still be played, which should
not be the desired behavior when seeking beyong file limits.

gst/asfdemux/gstasfdemux.c

index 0432503a07a388e82564290efcdb534c83fbdb48..a19d223ce61d6956766e567b7273d27825986d4e 100644 (file)
@@ -719,7 +719,10 @@ gst_asf_demux_handle_seek_event (GstASFDemux * demux, GstEvent * event)
   GST_DEBUG_OBJECT (demux, "seeking to time %" GST_TIME_FORMAT ", segment: "
       "%" GST_SEGMENT_FORMAT, GST_TIME_ARGS (segment.start), &segment);
 
-  seek_time = segment.start;
+  if (cur_type != GST_SEEK_TYPE_SET)
+    seek_time = segment.start;
+  else
+    seek_time = cur;
 
   /* FIXME: should check the KEY_UNIT flag; need to adjust position to
    * real start of data and segment_start to indexed time for key unit seek*/