From 04472352aedb88884fa4dc9be5ab37ef3980e87d Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 14 Feb 2015 15:13:58 +0100 Subject: player: fix audio-device-list updates The way the AO wakes up the playloop has nothing to do with events; instead we must query the events on the AO once the playloop was woken up. Querying the events in every playloop iteration is thus the correct way to do this. --- player/command.c | 5 +++++ player/command.h | 2 ++ player/playloop.c | 1 + 3 files changed, 8 insertions(+) (limited to 'player') diff --git a/player/command.c b/player/command.c index b8a0a7b5ce..9378f53df0 100644 --- a/player/command.c +++ b/player/command.c @@ -4875,6 +4875,11 @@ static void command_event(struct MPContext *mpctx, int event, void *arg) // Update chapters - does nothing if something else is visible. set_osd_bar_chapters(mpctx, OSD_BAR_SEEK); } +} + +void handle_command_updates(struct MPContext *mpctx) +{ + struct command_ctx *ctx = mpctx->command_ctx; // This is a bit messy: ao_hotplug wakes up the player, and then we have // to recheck the state. Then the client(s) will read the property. diff --git a/player/command.h b/player/command.h index 945d686786..2e5bdfe546 100644 --- a/player/command.h +++ b/player/command.h @@ -36,6 +36,8 @@ int mp_property_do(const char* name, int action, void* val, void mp_notify(struct MPContext *mpctx, int event, void *arg); void mp_notify_property(struct MPContext *mpctx, const char *property); +void handle_command_updates(struct MPContext *mpctx); + int mp_get_property_id(const char *name); uint64_t mp_get_property_event_mask(const char *name); diff --git a/player/playloop.c b/player/playloop.c index defc6ba6f3..9471664e10 100644 --- a/player/playloop.c +++ b/player/playloop.c @@ -986,6 +986,7 @@ void run_playloop(struct MPContext *mpctx) handle_cursor_autohide(mpctx); handle_vo_events(mpctx); handle_heartbeat_cmd(mpctx); + handle_command_updates(mpctx); fill_audio_out_buffers(mpctx, endpts); write_video(mpctx, endpts); -- cgit v1.2.3