summaryrefslogtreecommitdiffstats
path: root/demux/demux_mkv.c
diff options
context:
space:
mode:
Diffstat (limited to 'demux/demux_mkv.c')
-rw-r--r--demux/demux_mkv.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c
index 0b51d9386e..417ac1ba38 100644
--- a/demux/demux_mkv.c
+++ b/demux/demux_mkv.c
@@ -2722,6 +2722,22 @@ static struct mkv_index *seek_with_cues(struct demuxer *demuxer, int seek_id,
prev_target = index_pos;
}
}
+ if (mkv_d->index_has_durations) {
+ // If there are no earlier subtitles overlapping with the
+ // target cluster, then disable preroll-seeking.
+ bool overlap = false;
+ for (size_t i = 0; i < mkv_d->num_indexes; i++) {
+ struct mkv_index *cur = &mkv_d->indexes[i];
+ overlap = cur->timecode <= index->timecode &&
+ cur->timecode + cur->duration > index->timecode &&
+ cur->filepos >= prev_target &&
+ cur->filepos != seek_pos;
+ if (overlap)
+ break;
+ }
+ if (!overlap)
+ prev_target = 0;
+ }
if (prev_target)
seek_pos = prev_target;
}