summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-08-25 21:31:37 +0200
committerwm4 <wm4@nowhere>2015-08-25 21:31:37 +0200
commit6238491688791a23b333c8450fa910fd5a71ac56 (patch)
tree33f58b12dc71e44cc7bab3b1967865f582d0ab55
parentcf94fce4670cc43a805f8ab90e5f805cb57ff310 (diff)
downloadmpv-6238491688791a23b333c8450fa910fd5a71ac56.tar.bz2
mpv-6238491688791a23b333c8450fa910fd5a71ac56.tar.xz
vo_opengl: force redraw when framestepping with interpolation
This might fix some problems when framestepping with interpolation enabled. The problem here is that we want to show the non-interpolated frame while paused. Framestepping is like unpausing the video for a frame, and then pausing again. This draws an interpolated frame, and redrawing on pausing is supposed to take care of this. This possibly didn't always work, because vo->want_redraw is not checked by the vo_control() code path. So wake up the VO thread (which takes care of servicing redraw requests, kind of) explicitly. The correct solution is getting rid of the public-writable want_redraw field and replacing it with a new vo_request_redraw() function, but this can come later.
-rw-r--r--video/out/vo_opengl.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/video/out/vo_opengl.c b/video/out/vo_opengl.c
index 6c42531629..3985ac48a4 100644
--- a/video/out/vo_opengl.c
+++ b/video/out/vo_opengl.c
@@ -342,8 +342,10 @@ static int control(struct vo *vo, uint32_t request, void *data)
gl_video_reset(p->renderer);
return true;
case VOCTRL_PAUSE:
- if (gl_video_showing_interpolated_frame(p->renderer))
+ if (gl_video_showing_interpolated_frame(p->renderer)) {
vo->want_redraw = true;
+ vo_wakeup(vo);
+ }
return true;
}