diff options
author | wm4 <wm4@nowhere> | 2014-02-24 22:49:07 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2014-02-24 22:50:25 +0100 |
commit | 0adb8a9aaf1e1c76300d717a0a3dd04849e70d1d (patch) | |
tree | 3dd2387c4eacd986a25a6025fac2e99aad621396 /player/client.c | |
parent | 5d7007c6448660b2bdbc7758db7f486157ff1fa2 (diff) | |
download | mpv-0adb8a9aaf1e1c76300d717a0a3dd04849e70d1d.tar.bz2 mpv-0adb8a9aaf1e1c76300d717a0a3dd04849e70d1d.tar.xz |
client API: report pause/unpause reason
Not sure about this... might redo.
At least this provides a case of a broadcasted event, which requires
per-event data allocation.
See github issue #576.
Diffstat (limited to 'player/client.c')
-rw-r--r-- | player/client.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/player/client.c b/player/client.c index eaf91c45a8..886ae5b0c8 100644 --- a/player/client.c +++ b/player/client.c @@ -324,23 +324,37 @@ static void status_reply(struct mpv_handle *ctx, int event, send_reply(ctx, userdata, &reply); } +// set ev->data to a new copy of the original data +static void dup_event_data(struct mpv_event *ev) +{ + switch (ev->event_id) { + case MPV_EVENT_PAUSE: + case MPV_EVENT_UNPAUSE: + ev->data = talloc_memdup(NULL, ev->data, sizeof(mpv_event_pause_reason)); + break; + default: + // Doesn't use events with memory allocation. + if (ev->data) + abort(); + } +} + void mp_client_broadcast_event(struct MPContext *mpctx, int event, void *data) { struct mp_client_api *clients = mpctx->clients; - struct mpv_event event_data = { - .event_id = event, - .data = data, - }; - pthread_mutex_lock(&clients->lock); - for (int n = 0; n < clients->num_clients; n++) + for (int n = 0; n < clients->num_clients; n++) { + struct mpv_event event_data = { + .event_id = event, + .data = data, + }; + dup_event_data(&event_data); send_event(clients->clients[n], &event_data); + } pthread_mutex_unlock(&clients->lock); - - talloc_free(data); } int mp_client_send_event(struct MPContext *mpctx, const char *client_name, |