If a key unit seek is performed with a time position that matches
the offset of a keyframe, but not its actual PTS, we need to
adjust the segment nevertheless.
For example consider the following case:
* stream starts with a keyframe at 0 nanosecond, lasting 40 milliseconds
* user does a key unit seek at 20 milliseconds
* we don't adjust the segment as the time position is "over" a keyframe
* we push a segment that starts at 20 milliseconds
* we push a buffer with PTS == 0
* an element downstream (eg rtponviftimestamp) tries to calculate the
stream time of the buffer, fails to do so and drops it
if (next && kindex == -1)
kindex = gst_qtdemux_find_keyframe (qtdemux, str, index, FALSE);
- /* if the keyframe is at a different position, we need to update the
- * requested seek time */
- if (index != kindex) {
+ /* Update the requested time whenever a keyframe was found, to make it
+ * accurate and avoid having the first buffer fall outside of the segment
+ */
+ if (kindex != -1) {
index = kindex;
/* get timestamp of keyframe */