summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-01-26 12:29:27 +0100
committerwm4 <wm4@nowhere>2015-01-26 12:29:27 +0100
commit792db4eee3173f15eb5003f571509d9eb7c12dcf (patch)
tree08029b84faddfbced2e47602c2d44ec5c1db7da2
parent751830da32ae2645d9f9f7b9704891b12ea99123 (diff)
downloadmpv-792db4eee3173f15eb5003f571509d9eb7c12dcf.tar.bz2
mpv-792db4eee3173f15eb5003f571509d9eb7c12dcf.tar.xz
player: fix framestep over timeline segment boundaries
This was subtly broken by commit a937ba20. Instead of framestepping over the timeline segment boundary, it would just unpause playback, because seeking now resets mpctx->step_frames. This was especially apparent when doing something like "mpv *.jpg --merge-files". Fix by restoring the step_frames field specifically if the seek is done for switching segment boundaries. Hopefully the number fields which need such an exception on seeking won't grow and turn this code into a mess.
-rw-r--r--player/playloop.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/player/playloop.c b/player/playloop.c
index e88bd80382..c5b8f0d4f7 100644
--- a/player/playloop.c
+++ b/player/playloop.c
@@ -169,6 +169,7 @@ static int mp_seek(MPContext *mpctx, struct seek_params seek,
{
struct MPOpts *opts = mpctx->opts;
uint64_t prev_seek_ts = mpctx->vo_pts_history_seek_ts;
+ int prev_step = mpctx->step_frames;
if (!mpctx->demuxer)
return -1;
@@ -267,6 +268,7 @@ static int mp_seek(MPContext *mpctx, struct seek_params seek,
if (timeline_fallthrough) {
// Important if video reinit happens.
mpctx->vo_pts_history_seek_ts = prev_seek_ts;
+ mpctx->step_frames = prev_step;
} else {
mpctx->vo_pts_history_seek_ts++;
mpctx->backstep_active = false;