diff options
author | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2009-07-09 18:13:49 +0300 |
---|---|---|
committer | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2009-07-09 18:13:49 +0300 |
commit | d9977e1c818d589e83e8dc2f0da84ad2e4960d86 (patch) | |
tree | d59770ca8c54df8e2453d7f8c13a9e5d67492537 /libmpdemux/demux_mkv.c | |
parent | 87366694d82c8d4c7f0bc210e6baa0ccd651d0c2 (diff) | |
download | mpv-d9977e1c818d589e83e8dc2f0da84ad2e4960d86.tar.bz2 mpv-d9977e1c818d589e83e8dc2f0da84ad2e4960d86.tar.xz |
demux_mkv: Make seeks more precise in some cases
When seeking backward, after seeking to the file position specified by
an index entry skip packets until the timecode of that index entry.
The existence of the entry should guarantee a keyframe there before
the seek target time.
Diffstat (limited to 'libmpdemux/demux_mkv.c')
-rw-r--r-- | libmpdemux/demux_mkv.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/libmpdemux/demux_mkv.c b/libmpdemux/demux_mkv.c index 4f44646b56..e4b3540913 100644 --- a/libmpdemux/demux_mkv.c +++ b/libmpdemux/demux_mkv.c @@ -2963,6 +2963,7 @@ demux_mkv_seek (demuxer_t *demuxer, float rel_seek_secs, float audio_delay, int free_cached_dps (demuxer); if (!(flags & SEEK_FACTOR)) /* time in secs */ { + mkv_index_t *index = NULL; mkv_demuxer_t *mkv_d = (mkv_demuxer_t *) demuxer->priv; stream_t *s = demuxer->stream; int64_t target_timecode = 0, diff, min_diff=0xFFFFFFFFFFFFFFFLL; @@ -3032,7 +3033,6 @@ demux_mkv_seek (demuxer_t *demuxer, float rel_seek_secs, float audio_delay, int } else { - mkv_index_t *index = NULL; int seek_id = (demuxer->video->id < 0) ? demuxer->audio->id : demuxer->video->id; /* let's find the entry in the indexes with the smallest */ @@ -3077,7 +3077,7 @@ demux_mkv_seek (demuxer_t *demuxer, float rel_seek_secs, float audio_delay, int if (flags & SEEK_FORWARD) mkv_d->skip_to_timecode = target_timecode; else - mkv_d->skip_to_timecode = 0; + mkv_d->skip_to_timecode = index ? index->timecode : 0; mkv_d->a_skip_to_keyframe = 1; demux_mkv_fill_buffer(demuxer, NULL); |