summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
authormosu <mosu@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-09-15 21:03:49 +0000
committermosu <mosu@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-09-15 21:03:49 +0000
commit6fcc59b42fba06fcb1dd97d3dcab87157d177be0 (patch)
tree65b3f47033244d7ac5466febb89312503a4d3be7 /libmpdemux
parent3ddcf7ba1e3bbdc300d24462c7e669349a67ca74 (diff)
downloadmpv-6fcc59b42fba06fcb1dd97d3dcab87157d177be0.tar.bz2
mpv-6fcc59b42fba06fcb1dd97d3dcab87157d177be0.tar.xz
Different decision making for seeking which takes the direction into account.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@10875 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/demux_mkv.cpp23
1 files changed, 21 insertions, 2 deletions
diff --git a/libmpdemux/demux_mkv.cpp b/libmpdemux/demux_mkv.cpp
index 27d7f2d2e1..1a074e68b1 100644
--- a/libmpdemux/demux_mkv.cpp
+++ b/libmpdemux/demux_mkv.cpp
@@ -2426,9 +2426,28 @@ extern "C" void demux_mkv_seek(demuxer_t *demuxer, float rel_seek_secs,
if (!index->entries[k].is_key)
continue;
diff = target_timecode - (int64_t)index->entries[k].timecode;
- if ((diff > 0) && (diff < min_diff)) {
+ if ((target_timecode <= (mkv_d->last_pts * 1000)) &&
+ (diff >= 0) && (diff < min_diff)) {
min_diff = diff;
- entry = & index->entries[k];
+ entry = &index->entries[k];
+ mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] seek BACK, solution: last_pts: "
+ "%d, target: %d, diff: %d, entry->timecode: %d, PREV diff: "
+ "%d, k: %d\n", (int)(mkv_d->last_pts * 1000),
+ (int)target_timecode, (int)diff, (int)entry->timecode,
+ k > 0 ? (int)(index->entries[k - 1].timecode -
+ target_timecode) : 0, k);
+
+ } else if ((target_timecode > (mkv_d->last_pts * 1000)) &&
+ (diff < 0) && (-diff < min_diff)) {
+ min_diff = -diff;
+ entry = &index->entries[k];
+ mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] seek FORW, solution: last_pts: "
+ "%d, target: %d, diff: %d, entry->timecode: %d, NEXT diff: "
+ "%d, k: %d\n", (int)(mkv_d->last_pts * 1000),
+ (int)target_timecode, (int)diff, (int)entry->timecode,
+ k < index->num_entries ?
+ (int)(index->entries[k + 1].timecode - target_timecode) :
+ 0, k);
}
}
break;