diff options
author | wm4 <wm4@nowhere> | 2016-08-20 14:46:38 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2016-08-20 14:46:38 +0200 |
commit | af103aebd73609fa143b07805082a23525c8a306 (patch) | |
tree | c104ac9f6fcb1f17ae36d6a80b864271197ab2b3 /player/misc.c | |
parent | 969c0115220603b298ea31a2ebe4717ca966b0cc (diff) | |
download | mpv-af103aebd73609fa143b07805082a23525c8a306.tar.bz2 mpv-af103aebd73609fa143b07805082a23525c8a306.tar.xz |
player: update Windows playback state asynchronously
Doing this required synchronizing with the VO thread, which could lead
to audio dropouts if the VO was frozen (which can happen in practice if
e.g. an opengl_cb user is not doing what the API demands).
Add a way to send asynchronous VOCTRLs, and use that for the playback
state. In theory, it would be better to make this status update a
several function and to "merge" several queued update, but that would be
slightly more effort/code, and the update is so infrequent that the
merging would never happen anyway.
The change to vo_destroy() is to make sure all queued asynchronous
reuqests are finished before making the vo_thread exit.
Even though it's only used on MS Windows, it's run on any platform with
any VO, which makes this worse.
Diffstat (limited to 'player/misc.c')
-rw-r--r-- | player/misc.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/player/misc.c b/player/misc.c index bd65fb9d5b..c9e25a3966 100644 --- a/player/misc.c +++ b/player/misc.c @@ -149,8 +149,8 @@ void update_vo_playback_state(struct MPContext *mpctx) if ((oldstate.playing && oldstate.taskbar_progress) || (newstate.playing && newstate.taskbar_progress)) { - vo_control(mpctx->video_out, - VOCTRL_UPDATE_PLAYBACK_STATE, &newstate); + vo_control_async(mpctx->video_out, + VOCTRL_UPDATE_PLAYBACK_STATE, &newstate); } mpctx->vo_playback_state = newstate; } |