summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/mplayer.c11
-rw-r--r--demux/demux.c2
2 files changed, 9 insertions, 4 deletions
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;
}
diff --git a/demux/demux.c b/demux/demux.c
index 305d414bfa..06b1a35d0f 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -925,6 +925,8 @@ static struct demuxer *open_given_type(struct MPOpts *opts,
if (stream_manages_timeline(demuxer->stream)) {
// Incorrect, but fixes some behavior with DVD/BD
demuxer->ts_resets_possible = false;
+ // Doesn't work, because stream_pts is a "guess".
+ demuxer->accurate_seek = false;
}
demuxer_sort_chapters(demuxer);
return demuxer;