From e4837b2d423e728bc294fb77c0d01b957c78848f Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 4 May 2013 02:59:42 +0200 Subject: core: ignore backstep command if demuxer is not capable Also, mark demuxer as not capable if DVD playback is done. The problem with DVD is that playback time (stream_pts) is not reported frame-exact, and the time is a "guess" at best. --- core/mplayer.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'core/mplayer.c') diff --git a/core/mplayer.c b/core/mplayer.c index 20838b9ff8..5d8976c491 100644 --- a/core/mplayer.c +++ b/core/mplayer.c @@ -3590,7 +3590,8 @@ static void run_playloop(struct MPContext *mpctx) if (mpctx->backstep_active) { double current_pts = mpctx->last_vo_pts; mpctx->backstep_active = false; - if (mpctx->sh_video && current_pts != MP_NOPTS_VALUE) { + bool demuxer_ok = mpctx->demuxer && mpctx->demuxer->accurate_seek; + if (demuxer_ok && mpctx->sh_video && current_pts != MP_NOPTS_VALUE) { double seek_pts = find_previous_pts(mpctx, current_pts); if (seek_pts != MP_NOPTS_VALUE) { queue_seek(mpctx, MPSEEK_ABSOLUTE, seek_pts, 1); @@ -3617,9 +3618,11 @@ static void run_playloop(struct MPContext *mpctx) // Note that current_pts should be part of the index, // otherwise we can't find the previous frame, so set the // seek target an arbitrary amount of time after it. - mpctx->hrseek_pts = current_pts + 10.0; - mpctx->hrseek_framedrop = false; - mpctx->backstep_active = true; + if (mpctx->hrseek_active) { + mpctx->hrseek_pts = current_pts + 10.0; + mpctx->hrseek_framedrop = false; + mpctx->backstep_active = true; + } } else { mpctx->backstep_active = true; } -- cgit v1.2.3