summaryrefslogtreecommitdiffstats
path: root/player/video.c
diff options
context:
space:
mode:
Diffstat (limited to 'player/video.c')
-rw-r--r--player/video.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/player/video.c b/player/video.c
index 1a3cfb3b5f..9b73b438c4 100644
--- a/player/video.c
+++ b/player/video.c
@@ -494,12 +494,11 @@ static int video_output_image(struct MPContext *mpctx)
mp_pin_out_unread(vo_c->filter->f->pins[1], frame);
img = NULL;
r = VD_EOF;
- } else if (hrseek && mpctx->hrseek_lastframe) {
+ } else if (hrseek && (img->pts < mpctx->hrseek_pts - .005 ||
+ mpctx->hrseek_lastframe))
+ {
+ /* just skip - but save in case it was the last frame */
mp_image_setrefp(&mpctx->saved_frame, img);
- } else if (hrseek && img->pts < mpctx->hrseek_pts - .005) {
- /* just skip - but save if backstep active */
- if (mpctx->hrseek_backstep)
- mp_image_setrefp(&mpctx->saved_frame, img);
} else if (mpctx->video_status == STATUS_SYNCING &&
mpctx->playback_pts != MP_NOPTS_VALUE &&
img->pts < mpctx->playback_pts && !vo_c->is_coverart)
@@ -522,8 +521,8 @@ static int video_output_image(struct MPContext *mpctx)
}
}
- // Last-frame seek
- if (r <= 0 && hrseek && mpctx->hrseek_lastframe && mpctx->saved_frame) {
+ // If hr-seek went past EOF, use the last frame.
+ if (r <= 0 && hrseek && mpctx->saved_frame && r == VD_EOF) {
add_new_frame(mpctx, mpctx->saved_frame);
mpctx->saved_frame = NULL;
r = VD_PROGRESS;