diff options
-rw-r--r-- | player/playloop.c | 4 | ||||
-rw-r--r-- | video/out/vo.c | 9 |
2 files changed, 10 insertions, 3 deletions
diff --git a/player/playloop.c b/player/playloop.c index e73ad61788..de3e0aea9a 100644 --- a/player/playloop.c +++ b/player/playloop.c @@ -180,8 +180,8 @@ void update_screensaver_state(struct MPContext *mpctx) bool saver_state = mpctx->opts->pause || !mpctx->opts->stop_screensaver || !mpctx->playback_initialized; - vo_control(mpctx->video_out, saver_state ? VOCTRL_RESTORE_SCREENSAVER - : VOCTRL_KILL_SCREENSAVER, NULL); + vo_control_async(mpctx->video_out, saver_state ? VOCTRL_RESTORE_SCREENSAVER + : VOCTRL_KILL_SCREENSAVER, NULL); } void add_step_frame(struct MPContext *mpctx, int dir) diff --git a/video/out/vo.c b/video/out/vo.c index f0c865d269..3eb338d2d7 100644 --- a/video/out/vo.c +++ b/video/out/vo.c @@ -581,6 +581,9 @@ void vo_control_async(struct vo *vo, int request, void *data) case VOCTRL_UPDATE_PLAYBACK_STATE: d[2] = ta_xdup_ptrtype(d, (struct voctrl_playback_state *)data); break; + case VOCTRL_KILL_SCREENSAVER: + case VOCTRL_RESTORE_SCREENSAVER: + break; default: abort(); // requires explicit support } @@ -933,9 +936,13 @@ static void *vo_thread(void *ptr) bool redraw = in->request_redraw; bool send_reset = in->send_reset; in->send_reset = false; + bool send_pause = in->paused != vo_paused; + vo_paused = in->paused; pthread_mutex_unlock(&in->lock); if (send_reset) vo->driver->control(vo, VOCTRL_RESET, NULL); + if (send_pause) + vo->driver->control(vo, vo_paused ? VOCTRL_PAUSE : VOCTRL_RESUME, NULL); if (wait_until > now && redraw) { do_redraw(vo); // now is a good time continue; @@ -958,9 +965,9 @@ void vo_set_paused(struct vo *vo, bool paused) if (in->paused && in->dropped_frame) in->request_redraw = true; reset_vsync_timings(vo); + wakeup_locked(vo); } pthread_mutex_unlock(&in->lock); - vo_control(vo, paused ? VOCTRL_PAUSE : VOCTRL_RESUME, NULL); } int64_t vo_get_drop_count(struct vo *vo) |