From 95c1b7d0a3da5c13d48ec2344e64971e81583da9 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 31 Oct 2018 14:31:49 +0000 Subject: [PATCH] remote: add exported signal Add a signal to notify when a proxy id has been expored. Use this in the stream to signal the configure state. --- src/pipewire/private.h | 1 + src/pipewire/remote.c | 5 ++++- src/pipewire/remote.h | 2 ++ src/pipewire/stream.c | 7 +++++++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/pipewire/private.h b/src/pipewire/private.h index ae066df4a..872a1afbf 100644 --- a/src/pipewire/private.h +++ b/src/pipewire/private.h @@ -516,6 +516,7 @@ struct pw_proxy { #define pw_remote_events_sync_reply(r,s) pw_remote_events_emit(r, sync_reply, 0, s) #define pw_remote_events_state_changed(r,o,s,e) pw_remote_events_emit(r, state_changed, 0, o, s, e) #define pw_remote_events_error(r,i,res,e) pw_remote_events_emit(r, error, 0, i, res, e) +#define pw_remote_events_exported(r,i) pw_remote_events_emit(r, exported, 0, i) struct pw_remote { struct pw_core *core; /**< core */ diff --git a/src/pipewire/remote.c b/src/pipewire/remote.c index 3ee0f9f2a..f1f2670b4 100644 --- a/src/pipewire/remote.c +++ b/src/pipewire/remote.c @@ -742,6 +742,7 @@ static void client_node_transport(void *object, uint32_t node_id, { struct pw_proxy *proxy = object; struct node_data *data = proxy->user_data; + struct pw_remote *remote = proxy->remote; clean_transport(data); @@ -751,12 +752,14 @@ static void client_node_transport(void *object, uint32_t node_id, proxy, readfd, writefd, node_id); data->rtwritefd = writefd; - data->rtsocket_source = pw_loop_add_io(proxy->remote->core->data_loop, + data->rtsocket_source = pw_loop_add_io(remote->core->data_loop, readfd, SPA_IO_ERR | SPA_IO_HUP, true, on_rtsocket_condition, proxy); if (data->node->active) pw_client_node_proxy_set_active(data->node_proxy, true); + + pw_remote_events_exported(remote, proxy->id); } static void add_port_update(struct pw_proxy *proxy, struct pw_port *port, uint32_t change_mask) diff --git a/src/pipewire/remote.h b/src/pipewire/remote.h index 2cfb45837..c2c5cbc01 100644 --- a/src/pipewire/remote.h +++ b/src/pipewire/remote.h @@ -138,6 +138,8 @@ struct pw_remote_events { enum pw_remote_state state, const char *error); /** emited when an error was reported */ void (*error) (void *data, uint32_t id, int res, const char *error); + /** emited when a node was exported */ + void (*exported) (void *data, uint32_t id); }; /** Specify the name of the protocol to use, default is using the native protocol */ diff --git a/src/pipewire/stream.c b/src/pipewire/stream.c index f265c8fd1..74037eca6 100644 --- a/src/pipewire/stream.c +++ b/src/pipewire/stream.c @@ -825,10 +825,17 @@ static void on_remote_state_changed(void *_data, enum pw_remote_state old, break; } } +static void on_remote_exported(void *_data, uint32_t id) +{ + struct pw_stream *stream = _data; + if (stream->proxy->id == id) + stream_set_state(stream, PW_STREAM_STATE_CONFIGURE, NULL); +} static const struct pw_remote_events remote_events = { PW_VERSION_REMOTE_EVENTS, .state_changed = on_remote_state_changed, + .exported = on_remote_exported, }; struct pw_stream * pw_stream_new(struct pw_remote *remote, const char *name,