From fc7ebc2c310264712e788a27d4f80d3d30cc59d4 Mon Sep 17 00:00:00 2001 From: Julian Bouzas <julian.bouzas@collabora.com> Date: Wed, 19 Jun 2019 08:11:00 -0400 Subject: [PATCH] proxy: add global_id property --- lib/wp/proxy-node.c | 5 +++-- lib/wp/proxy-node.h | 4 ++-- lib/wp/proxy-port.c | 5 +++-- lib/wp/proxy-port.h | 4 ++-- lib/wp/proxy.c | 25 +++++++++++++++++++++++ lib/wp/proxy.h | 1 + modules/module-pipewire.c | 4 ++-- modules/module-pipewire/simple-endpoint.c | 17 ++++----------- modules/module-pw-alsa-udev.c | 4 ++-- 9 files changed, 44 insertions(+), 25 deletions(-) diff --git a/lib/wp/proxy-node.c b/lib/wp/proxy-node.c index 5ca2ce21..9b518365 100644 --- a/lib/wp/proxy-node.c +++ b/lib/wp/proxy-node.c @@ -104,11 +104,12 @@ wp_proxy_node_class_init (WpProxyNodeClass * klass) } void -wp_proxy_node_new (gpointer proxy, GAsyncReadyCallback callback, - gpointer user_data) +wp_proxy_node_new (guint global_id, gpointer proxy, + GAsyncReadyCallback callback, gpointer user_data) { g_async_initable_new_async ( WP_TYPE_PROXY_NODE, G_PRIORITY_DEFAULT, NULL, callback, user_data, + "global-id", global_id, "pw-proxy", proxy, NULL); } diff --git a/lib/wp/proxy-node.h b/lib/wp/proxy-node.h index 67db9d57..12feba0b 100644 --- a/lib/wp/proxy-node.h +++ b/lib/wp/proxy-node.h @@ -17,8 +17,8 @@ G_BEGIN_DECLS #define WP_TYPE_PROXY_NODE (wp_proxy_node_get_type ()) G_DECLARE_FINAL_TYPE (WpProxyNode, wp_proxy_node, WP, PROXY_NODE, WpProxy) -void wp_proxy_node_new (gpointer proxy, GAsyncReadyCallback callback, - gpointer user_data); +void wp_proxy_node_new (guint global_id, gpointer proxy, + GAsyncReadyCallback callback, gpointer user_data); WpProxyNode *wp_proxy_node_new_finish(GObject *initable, GAsyncResult *res, GError **error); diff --git a/lib/wp/proxy-port.c b/lib/wp/proxy-port.c index 2c344beb..07ab144c 100644 --- a/lib/wp/proxy-port.c +++ b/lib/wp/proxy-port.c @@ -138,11 +138,12 @@ wp_proxy_port_class_init (WpProxyPortClass * klass) } void -wp_proxy_port_new (gpointer proxy, GAsyncReadyCallback callback, - gpointer user_data) +wp_proxy_port_new (guint global_id, gpointer proxy, + GAsyncReadyCallback callback, gpointer user_data) { g_async_initable_new_async ( WP_TYPE_PROXY_PORT, G_PRIORITY_DEFAULT, NULL, callback, user_data, + "global-id", global_id, "pw-proxy", proxy, NULL); } diff --git a/lib/wp/proxy-port.h b/lib/wp/proxy-port.h index c8b9e173..718c8da6 100644 --- a/lib/wp/proxy-port.h +++ b/lib/wp/proxy-port.h @@ -17,8 +17,8 @@ G_BEGIN_DECLS #define WP_TYPE_PROXY_PORT (wp_proxy_port_get_type ()) G_DECLARE_FINAL_TYPE (WpProxyPort, wp_proxy_port, WP, PROXY_PORT, WpProxy) -void wp_proxy_port_new (gpointer proxy, GAsyncReadyCallback callback, - gpointer user_data); +void wp_proxy_port_new (guint global_id, gpointer proxy, + GAsyncReadyCallback callback, gpointer user_data); WpProxyPort *wp_proxy_port_new_finish(GObject *initable, GAsyncResult *res, GError **error); diff --git a/lib/wp/proxy.c b/lib/wp/proxy.c index 042d5284..025507ba 100644 --- a/lib/wp/proxy.c +++ b/lib/wp/proxy.c @@ -13,6 +13,9 @@ typedef struct _WpProxyPrivate WpProxyPrivate; struct _WpProxyPrivate { + /* The global id */ + guint global_id; + /* The proxy */ struct pw_proxy *proxy; @@ -25,6 +28,7 @@ struct _WpProxyPrivate enum { PROP_0, + PROP_GLOBAL_ID, PROP_PROXY, }; @@ -104,6 +108,9 @@ wp_proxy_set_property (GObject * object, guint property_id, WpProxyPrivate *self = wp_proxy_get_instance_private (WP_PROXY(object)); switch (property_id) { + case PROP_GLOBAL_ID: + self->global_id = g_value_get_uint (value); + break; case PROP_PROXY: self->proxy = g_value_get_pointer (value); break; @@ -120,6 +127,9 @@ wp_proxy_get_property (GObject * object, guint property_id, GValue * value, WpProxyPrivate *self = wp_proxy_get_instance_private (WP_PROXY(object)); switch (property_id) { + case PROP_GLOBAL_ID: + g_value_set_uint (value, self->global_id); + break; case PROP_PROXY: g_value_set_pointer (value, self->proxy); break; @@ -178,6 +188,10 @@ wp_proxy_class_init (WpProxyClass * klass) object_class->set_property = wp_proxy_set_property; /* Install the properties */ + g_object_class_install_property (object_class, PROP_GLOBAL_ID, + g_param_spec_uint ("global-id", "global-id", "The pipewire global id", + 0, G_MAXUINT, 0, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (object_class, PROP_PROXY, g_param_spec_pointer ("pw-proxy", "pw-proxy", "The pipewire proxy", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); @@ -189,6 +203,17 @@ wp_proxy_class_init (WpProxyClass * klass) g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } +guint +wp_proxy_get_global_id (WpProxy * self) +{ + WpProxyPrivate *priv; + + g_return_val_if_fail (WP_IS_PROXY (self), 0); + + priv = wp_proxy_get_instance_private (self); + return priv->global_id; +} + gpointer wp_proxy_get_pw_proxy (WpProxy * self) { diff --git a/lib/wp/proxy.h b/lib/wp/proxy.h index f3f89483..456b29b4 100644 --- a/lib/wp/proxy.h +++ b/lib/wp/proxy.h @@ -27,6 +27,7 @@ struct _WpProxyClass void (*destroyed)(WpProxy *wp_proxy); }; +guint wp_proxy_get_global_id (WpProxy * self); gpointer wp_proxy_get_pw_proxy (WpProxy * self); G_END_DECLS diff --git a/modules/module-pipewire.c b/modules/module-pipewire.c index 52cee54f..69fdf346 100644 --- a/modules/module-pipewire.c +++ b/modules/module-pipewire.c @@ -161,7 +161,7 @@ proxy_port_created(GObject *initable, GAsyncResult *res, gpointer d) return; /* Create the proxy node asynchronically */ - wp_proxy_node_new(proxy, proxy_node_created, pi); + wp_proxy_node_new(pi->node_id, proxy, proxy_node_created, pi); } static void @@ -254,7 +254,7 @@ handle_port(struct module_data *data, uint32_t id, uint32_t parent_id, pi->proxy_port = NULL; /* Create the proxy port asynchronically */ - wp_proxy_port_new(proxy, proxy_port_created, pi); + wp_proxy_port_new(id, proxy, proxy_port_created, pi); } static void diff --git a/modules/module-pipewire/simple-endpoint.c b/modules/module-pipewire/simple-endpoint.c index 6446e681..6f9aa693 100644 --- a/modules/module-pipewire/simple-endpoint.c +++ b/modules/module-pipewire/simple-endpoint.c @@ -206,25 +206,16 @@ simple_endpoint_prepare_link (WpEndpoint * ep, guint32 stream_id, WpEndpointLink * link, GVariant ** properties, GError ** error) { WpPipewireSimpleEndpoint *self = WP_PIPEWIRE_SIMPLE_ENDPOINT (ep); - const struct pw_node_info *node_info = NULL; + uint32_t node_id = wp_proxy_get_global_id(WP_PROXY(self->proxy_node)); + uint32_t port_id = wp_proxy_get_global_id(WP_PROXY(self->proxy_port)); GVariantBuilder b; - /* TODO: Since the linking with a 1 port client works when passing -1 as - * a port parameter, there is no need to find the port and set it in the - * properties. However, we need to add logic here and select the correct - * port in case the client has more than 1 port */ - - /* Get the node info */ - node_info = wp_proxy_node_get_info(self->proxy_node); - if (!node_info) - return FALSE; - /* Set the properties */ g_variant_builder_init (&b, G_VARIANT_TYPE_VARDICT); g_variant_builder_add (&b, "{sv}", "node-id", - g_variant_new_uint32 (node_info->id)); + g_variant_new_uint32 (node_id)); g_variant_builder_add (&b, "{sv}", "node-port-id", - g_variant_new_uint32 (-1)); + g_variant_new_uint32 (port_id)); *properties = g_variant_builder_end (&b); return TRUE; diff --git a/modules/module-pw-alsa-udev.c b/modules/module-pw-alsa-udev.c index 53ccf243..a5fa8ddc 100644 --- a/modules/module-pw-alsa-udev.c +++ b/modules/module-pw-alsa-udev.c @@ -152,7 +152,7 @@ proxy_port_created(GObject *initable, GAsyncResult *res, gpointer data) return; /* Create the proxy node asynchronically */ - wp_proxy_node_new(proxy, proxy_node_created, pi); + wp_proxy_node_new(pi->node_id, proxy, proxy_node_created, pi); } static void @@ -215,7 +215,7 @@ handle_port(struct impl *impl, uint32_t id, uint32_t parent_id, pi->proxy_port = NULL; /* Create the proxy port asynchronically */ - wp_proxy_port_new(proxy, proxy_port_created, pi); + wp_proxy_port_new(id, proxy, proxy_port_created, pi); } static void -- GitLab