diff options
-rw-r--r-- | demux/demux_mkv.c | 16 |
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; } |