summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demux/demux.c7
-rw-r--r--demux/demux_mkv.c2
-rw-r--r--demux/stheader.h2
3 files changed, 10 insertions, 1 deletions
diff --git a/demux/demux.c b/demux/demux.c
index 019a8469c7..967b0b176f 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -1687,8 +1687,11 @@ static void adjust_seek_range_on_packet(struct demux_stream *ds,
if (queue->keyframe_latest) {
queue->keyframe_latest->kf_seek_pts = queue->keyframe_pts;
double old_end = queue->range->seek_end;
- if (queue->seek_start == MP_NOPTS_VALUE)
+ if (queue->seek_start == MP_NOPTS_VALUE) {
queue->seek_start = queue->keyframe_pts;
+ if (queue->seek_start != MP_NOPTS_VALUE)
+ queue->seek_start += ds->sh->seek_preroll;
+ }
if (queue->keyframe_end_pts != MP_NOPTS_VALUE)
queue->seek_end = queue->keyframe_end_pts;
queue->is_eof = !dp;
@@ -2982,6 +2985,8 @@ static void switch_current_range(struct demux_internal *in,
static struct demux_packet *find_seek_target(struct demux_queue *queue,
double pts, int flags)
{
+ pts -= queue->ds->sh->seek_preroll;
+
struct demux_packet *start = queue->head;
for (int n = 0; n < queue->num_index; n++) {
if (queue->index[n]->kf_seek_pts > pts)
diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c
index 67eb9c7af6..24279f7267 100644
--- a/demux/demux_mkv.c
+++ b/demux/demux_mkv.c
@@ -1836,6 +1836,8 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track)
sh_a->extradata = extradata;
sh_a->extradata_size = extradata_len;
+ sh->seek_preroll = track->codec_delay;
+
demux_add_sh_stream(demuxer, sh);
return 0;
diff --git a/demux/stheader.h b/demux/stheader.h
index beca0fabf7..198f16cd49 100644
--- a/demux/stheader.h
+++ b/demux/stheader.h
@@ -55,6 +55,8 @@ struct sh_stream {
bool missing_timestamps;
+ double seek_preroll;
+
// stream is a picture (such as album art)
struct demux_packet *attached_picture;