mirror of
https://gitlab.freedesktop.org/pipewire/wireplumber.git
synced 2026-05-05 12:28:02 +02:00
Merge branch 'proxy-global-id' into 'master'
Proxy global id See merge request gkiagia/wireplumber!11
This commit is contained in:
commit
643d3d61bc
9 changed files with 50 additions and 30 deletions
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
struct impl
|
||||
{
|
||||
WpCore *core;
|
||||
WpModule *module;
|
||||
|
||||
/* Remote */
|
||||
struct spa_hook remote_listener;
|
||||
|
|
@ -85,6 +85,7 @@ proxy_node_created(GObject *initable, GAsyncResult *res, gpointer data)
|
|||
{
|
||||
struct proxy_info *pi = data;
|
||||
const struct impl *impl = pi->impl;
|
||||
g_autoptr (WpCore) core = wp_module_get_core (impl->module);
|
||||
g_autoptr(WpProxyNode) proxy_node = NULL;
|
||||
struct endpoint_info *ei = NULL;
|
||||
GVariantBuilder b;
|
||||
|
|
@ -115,7 +116,7 @@ proxy_node_created(GObject *initable, GAsyncResult *res, gpointer data)
|
|||
endpoint_props = g_variant_builder_end (&b);
|
||||
|
||||
/* Create and register the endpoint */
|
||||
endpoint = wp_factory_make (impl->core, "pw-audio-softdsp-endpoint",
|
||||
endpoint = wp_factory_make (core, "pw-audio-softdsp-endpoint",
|
||||
WP_TYPE_ENDPOINT, endpoint_props);
|
||||
|
||||
/* Register the endpoint */
|
||||
|
|
@ -152,7 +153,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 +216,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
|
||||
|
|
@ -272,7 +273,7 @@ module_destroy (gpointer data)
|
|||
}
|
||||
|
||||
struct impl *
|
||||
module_create (WpCore * core)
|
||||
module_create (WpModule * module, WpCore * core)
|
||||
{
|
||||
struct impl *impl;
|
||||
WpRemote *remote;
|
||||
|
|
@ -281,7 +282,7 @@ module_create (WpCore * core)
|
|||
impl = g_new0(struct impl, 1);
|
||||
|
||||
/* Set core */
|
||||
impl->core = core;
|
||||
impl->module = module;
|
||||
|
||||
/* Set remote */
|
||||
remote = wp_core_get_global(core, WP_GLOBAL_REMOTE_PIPEWIRE);
|
||||
|
|
@ -300,7 +301,7 @@ void
|
|||
wireplumber__module_init (WpModule * module, WpCore * core, GVariant * args)
|
||||
{
|
||||
/* Create the impl */
|
||||
struct impl *impl = module_create (core);
|
||||
struct impl *impl = module_create (module, core);
|
||||
|
||||
/* Set destroy callback for impl */
|
||||
wp_module_set_destroy_callback (module, module_destroy, impl);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue