From 7ffe64f7af86996e7da43b840bf6e935cb288dda Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 22 May 2023 11:03:20 +0200 Subject: [PATCH] client-node: make old driver nodes work Bump the client-node version because we use the writefd differently now. Support driver nodes using the old version somewhat. The stats will be wrong but then again, we don't have any flatpak driver nodes that could use an older version. --- src/modules/module-client-node/client-node.c | 9 ++++++++- src/pipewire/extensions/client-node.h | 2 +- src/pipewire/impl-node.c | 3 --- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/modules/module-client-node/client-node.c b/src/modules/module-client-node/client-node.c index 9117f0613..20509f599 100644 --- a/src/modules/module-client-node/client-node.c +++ b/src/modules/module-client-node/client-node.c @@ -1089,7 +1089,14 @@ static void node_on_data_fd_events(struct spa_source *source) node->name, node->info.id, cmd - 1); spa_log_trace_fp(impl->log, "%p: got complete %d", impl, status); - pw_context_driver_emit_complete(node->context, node); + + if (impl->resource && impl->resource->version < 5) { + struct pw_node_activation *a = node->rt.activation; + int status = a->state[0].status; + spa_node_call_ready(&impl->callbacks, status); + } else { + pw_context_driver_emit_complete(node->context, node); + } } } diff --git a/src/pipewire/extensions/client-node.h b/src/pipewire/extensions/client-node.h index 7536c58dd..abcd6b699 100644 --- a/src/pipewire/extensions/client-node.h +++ b/src/pipewire/extensions/client-node.h @@ -22,7 +22,7 @@ extern "C" { */ #define PW_TYPE_INTERFACE_ClientNode PW_TYPE_INFO_INTERFACE_BASE "ClientNode" -#define PW_VERSION_CLIENT_NODE 4 +#define PW_VERSION_CLIENT_NODE 5 struct pw_client_node; #define PW_EXTENSION_MODULE_CLIENT_NODE PIPEWIRE_MODULE_PREFIX "module-client-node" diff --git a/src/pipewire/impl-node.c b/src/pipewire/impl-node.c index d0c5fcf24..b6514d483 100644 --- a/src/pipewire/impl-node.c +++ b/src/pipewire/impl-node.c @@ -41,8 +41,6 @@ struct impl { unsigned int cache_params:1; unsigned int pending_play:1; - - uint64_t prev_signal_time; }; #define pw_node_resource(r,m,v,...) pw_resource_call(r,struct pw_node_events,m,v,__VA_ARGS__) @@ -1828,7 +1826,6 @@ again: * eventfd */ if (!node->remote) a->signal_time = nsec; - impl->prev_signal_time = a->prev_signal_time; a->prev_signal_time = a->signal_time; a->sync_timeout = SPA_MIN(min_timeout, DEFAULT_SYNC_TIMEOUT);