When seeking a file where codec delay is greater than 0, the timecode can become negative after offsetting by the codec delay. Failing to cast to a signed int64 will cause the check against skip_to_timecode to evaluate true for these negative values. This breaks the "skip_to" seek mechanism. --- libavformat/matroskadec.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index f3d701f..60b1b34 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -3150,7 +3150,10 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, if (matroska->skip_to_keyframe && track->type != MATROSKA_TRACK_TYPE_SUBTITLE) { - if (timecode < matroska->skip_to_timecode) + // Compare signed timecodes. Timecode may be negative due to codec delay + // offset. We don't support timestamps greater than int64_t anyway - see + // AVPacket's pts. + if ((int64_t)timecode < (int64_t)(matroska->skip_to_timecode)) return res; if (is_keyframe) matroska->skip_to_keyframe = 0; -- 2.8.0.rc3.226.g39d4020 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel