static void
gst_qtdemux_adjust_seek (GstQTDemux * qtdemux, gint64 desired_time,
- gint64 * key_time, gint64 * key_offset)
+ gboolean use_sparse, gint64 * key_time, gint64 * key_offset)
{
guint64 min_offset;
gint64 min_byte_offset = -1;
str = qtdemux->streams[n];
+ if (str->sparse && !use_sparse)
+ continue;
+
seg_idx = gst_qtdemux_find_segment (qtdemux, str, desired_time);
GST_DEBUG_OBJECT (qtdemux, "align segment %d", seg_idx);
/* find reasonable corresponding BYTE position,
* also try to mind about keyframes, since we can not go back a bit for them
* later on */
- gst_qtdemux_adjust_seek (qtdemux, cur, &key_cur, &byte_cur);
+ gst_qtdemux_adjust_seek (qtdemux, cur, FALSE, &key_cur, &byte_cur);
if (byte_cur == -1)
goto abort_seek;
if ((segment->flags & GST_SEEK_FLAG_KEY_UNIT) && !qtdemux->fragmented) {
gint64 min_offset;
- gst_qtdemux_adjust_seek (qtdemux, desired_offset, &min_offset, NULL);
+ gst_qtdemux_adjust_seek (qtdemux, desired_offset, TRUE, &min_offset, NULL);
GST_DEBUG_OBJECT (qtdemux, "keyframe seek, align to %"
GST_TIME_FORMAT, GST_TIME_ARGS (min_offset));
desired_offset = min_offset;