diff options
Diffstat (limited to 'demux')
-rw-r--r-- | demux/demux.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/demux/demux.c b/demux/demux.c index 89e608f891..3bfb7e0126 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -1256,8 +1256,6 @@ static void perform_backward_seek(struct demux_internal *in) target = PTS_OR_DEF(target, in->d_thread->start_time); - target -= in->opts->back_seek_size; - MP_VERBOSE(in, "triggering backward seek to get more packets\n"); queue_seek(in, target, SEEK_SATAN | SEEK_HR, false); in->reading = true; @@ -1390,6 +1388,15 @@ static void find_backward_restart_pos(struct demux_stream *ds) assert(0); // target must be in list } + double seek_pts = MP_NOPTS_VALUE; + for (struct demux_packet *cur = target; cur; cur = cur->next) { + seek_pts = MP_PTS_MIN(seek_pts, cur->pts); + if (cur->next && cur->next->keyframe) + break; + } + if (seek_pts != MP_NOPTS_VALUE) + ds->back_seek_pos = seek_pts; + ds->back_restarting = false; ds->back_range_started = false; ds->back_range_min = got_preroll + 1; @@ -1417,6 +1424,7 @@ resume_earlier: } } + ds->back_seek_pos -= in->opts->back_seek_size; in->need_back_seek = true; } |