PipeWire  1.2.6
client-node.h
Go to the documentation of this file.
1 /* PipeWire */
2 /* SPDX-FileCopyrightText: Copyright © 2018 Wim Taymans */
3 /* SPDX-License-Identifier: MIT */
4 
5 #ifndef PIPEWIRE_EXT_CLIENT_NODE_H
6 #define PIPEWIRE_EXT_CLIENT_NODE_H
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 #include <spa/utils/defs.h>
13 #include <spa/param/param.h>
14 
23 #define PW_TYPE_INTERFACE_ClientNode PW_TYPE_INFO_INTERFACE_BASE "ClientNode"
24 
25 /*
26  * version 4: new port_set_mix_info event added
27  * version 5: driver nodes are scheduled on the client
28  * version 6: client needs to set activation INACTIVE -> FINISHED
29  */
30 #define PW_VERSION_CLIENT_NODE 6
31 struct pw_client_node;
32 
33 #define PW_EXTENSION_MODULE_CLIENT_NODE PIPEWIRE_MODULE_PREFIX "module-client-node"
34 
37  uint32_t mem_id;
38  uint32_t offset;
39  uint32_t size;
40  struct spa_buffer *buffer;
41 };
42 
43 #define PW_CLIENT_NODE_EVENT_TRANSPORT 0
44 #define PW_CLIENT_NODE_EVENT_SET_PARAM 1
45 #define PW_CLIENT_NODE_EVENT_SET_IO 2
46 #define PW_CLIENT_NODE_EVENT_EVENT 3
47 #define PW_CLIENT_NODE_EVENT_COMMAND 4
48 #define PW_CLIENT_NODE_EVENT_ADD_PORT 5
49 #define PW_CLIENT_NODE_EVENT_REMOVE_PORT 6
50 #define PW_CLIENT_NODE_EVENT_PORT_SET_PARAM 7
51 #define PW_CLIENT_NODE_EVENT_PORT_USE_BUFFERS 8
52 #define PW_CLIENT_NODE_EVENT_PORT_SET_IO 9
53 #define PW_CLIENT_NODE_EVENT_SET_ACTIVATION 10
54 #define PW_CLIENT_NODE_EVENT_PORT_SET_MIX_INFO 11
55 #define PW_CLIENT_NODE_EVENT_NUM 12
56 
59 #define PW_VERSION_CLIENT_NODE_EVENTS 1
60  uint32_t version;
72  int (*transport) (void *data,
73  int readfd,
74  int writefd,
75  uint32_t mem_id,
76  uint32_t offset,
77  uint32_t size);
88  int (*set_param) (void *data,
89  uint32_t id, uint32_t flags,
90  const struct spa_pod *param);
102  int (*set_io) (void *data,
103  uint32_t id,
104  uint32_t mem_id,
105  uint32_t offset,
106  uint32_t size);
110  int (*event) (void *data, const struct spa_event *event);
116  int (*command) (void *data, const struct spa_command *command);
127  int (*add_port) (void *data,
128  enum spa_direction direction,
129  uint32_t port_id,
130  const struct spa_dict *props);
137  int (*remove_port) (void *data,
138  enum spa_direction direction,
139  uint32_t port_id);
149  int (*port_set_param) (void *data,
150  enum spa_direction direction,
151  uint32_t port_id,
152  uint32_t id, uint32_t flags,
153  const struct spa_pod *param);
163  int (*port_use_buffers) (void *data,
164  enum spa_direction direction,
165  uint32_t port_id,
166  uint32_t mix_id,
167  uint32_t flags,
168  uint32_t n_buffers,
169  struct pw_client_node_buffer *buffers);
181  int (*port_set_io) (void *data,
182  enum spa_direction direction,
183  uint32_t port_id,
184  uint32_t mix_id,
185  uint32_t id,
186  uint32_t mem_id,
187  uint32_t offset,
188  uint32_t size);
189 
200  int (*set_activation) (void *data,
201  uint32_t node_id,
202  int signalfd,
203  uint32_t mem_id,
204  uint32_t offset,
205  uint32_t size);
206 
218  int (*port_set_mix_info) (void *data,
219  enum spa_direction direction,
220  uint32_t port_id,
221  uint32_t mix_id,
222  uint32_t peer_id,
223  const struct spa_dict *props);
224 };
225 
226 #define PW_CLIENT_NODE_METHOD_ADD_LISTENER 0
227 #define PW_CLIENT_NODE_METHOD_GET_NODE 1
228 #define PW_CLIENT_NODE_METHOD_UPDATE 2
229 #define PW_CLIENT_NODE_METHOD_PORT_UPDATE 3
230 #define PW_CLIENT_NODE_METHOD_SET_ACTIVE 4
231 #define PW_CLIENT_NODE_METHOD_EVENT 5
232 #define PW_CLIENT_NODE_METHOD_PORT_BUFFERS 6
233 #define PW_CLIENT_NODE_METHOD_NUM 7
234 
236 struct pw_client_node_methods {
237 #define PW_VERSION_CLIENT_NODE_METHODS 0
238  uint32_t version;
239 
240  int (*add_listener) (void *object,
241  struct spa_hook *listener,
242  const struct pw_client_node_events *events,
243  void *data);
246  struct pw_node * (*get_node) (void *object, uint32_t version, size_t user_data_size);
257  int (*update) (void *object,
258 #define PW_CLIENT_NODE_UPDATE_PARAMS (1 << 0)
259 #define PW_CLIENT_NODE_UPDATE_INFO (1 << 1)
260  uint32_t change_mask,
261  uint32_t n_params,
262  const struct spa_pod **params,
263  const struct spa_node_info *info);
264 
276  int (*port_update) (void *object,
277  enum spa_direction direction,
278  uint32_t port_id,
279 #define PW_CLIENT_NODE_PORT_UPDATE_PARAMS (1 << 0)
280 #define PW_CLIENT_NODE_PORT_UPDATE_INFO (1 << 1)
281  uint32_t change_mask,
282  uint32_t n_params,
283  const struct spa_pod **params,
284  const struct spa_port_info *info);
288  int (*set_active) (void *object, bool active);
293  int (*event) (void *object, const struct spa_event *event);
294 
298  int (*port_buffers) (void *object,
299  enum spa_direction direction,
300  uint32_t port_id,
301  uint32_t mix_id,
302  uint32_t n_buffers,
303  struct spa_buffer **buffers);
304 };
305 
306 
307 #define pw_client_node_method(o,method,version,...) \
308 ({ \
309  int _res = -ENOTSUP; \
310  spa_interface_call_res((struct spa_interface*)o, \
311  struct pw_client_node_methods, _res, \
312  method, version, ##__VA_ARGS__); \
313  _res; \
314 })
315 
316 #define pw_client_node_add_listener(c,...) pw_client_node_method(c,add_listener,0,__VA_ARGS__)
317 
318 static inline struct pw_node *
319 pw_client_node_get_node(struct pw_client_node *p, uint32_t version, size_t user_data_size)
320 {
321  struct pw_node *res = NULL;
324  get_node, 0, version, user_data_size);
325  return res;
326 }
327 
328 #define pw_client_node_update(c,...) pw_client_node_method(c,update,0,__VA_ARGS__)
329 #define pw_client_node_port_update(c,...) pw_client_node_method(c,port_update,0,__VA_ARGS__)
330 #define pw_client_node_set_active(c,...) pw_client_node_method(c,set_active,0,__VA_ARGS__)
331 #define pw_client_node_event(c,...) pw_client_node_method(c,event,0,__VA_ARGS__)
332 #define pw_client_node_port_buffers(c,...) pw_client_node_method(c,port_buffers,0,__VA_ARGS__)
333 
338 #ifdef __cplusplus
339 } /* extern "C" */
340 #endif
341 
342 #endif /* PIPEWIRE_EXT_CLIENT_NODE_H */
spa/utils/defs.h
static struct pw_node * pw_client_node_get_node(struct pw_client_node *p, uint32_t version, size_t user_data_size)
Definition: client-node.h:356
int(* update)(void *object, #define PW_CLIENT_NODE_UPDATE_PARAMS #define PW_CLIENT_NODE_UPDATE_INFO uint32_t change_mask, uint32_t n_params, const struct spa_pod **params, const struct spa_node_info *info)
Update the node ports and properties.
Definition: client-node.h:288
int(* port_update)(void *object, enum spa_direction direction, uint32_t port_id, #define PW_CLIENT_NODE_PORT_UPDATE_PARAMS #define PW_CLIENT_NODE_PORT_UPDATE_INFO uint32_t change_mask, uint32_t n_params, const struct spa_pod **params, const struct spa_port_info *info)
Update a node port.
Definition: client-node.h:309
#define spa_interface_call_res(iface, method_type, res, method, vers,...)
Invoke method named method in the callbacks on the given interface object.
Definition: hook.h:251
spa_direction
Definition: defs.h:106
spa/param/param.h
information about a buffer
Definition: client-node.h:44
uint32_t size
size in memory
Definition: client-node.h:47
uint32_t mem_id
the memory id for the metadata
Definition: client-node.h:45
uint32_t offset
offset in memory
Definition: client-node.h:46
struct spa_buffer * buffer
buffer describing metadata and buffer memory
Definition: client-node.h:48
Client Node events
Definition: client-node.h:79
int(* port_set_io)(void *data, enum spa_direction direction, uint32_t port_id, uint32_t mix_id, uint32_t id, uint32_t mem_id, uint32_t offset, uint32_t size)
Configure the io area with id of port_id.
Definition: client-node.h:203
int(* port_use_buffers)(void *data, enum spa_direction direction, uint32_t port_id, uint32_t mix_id, uint32_t flags, uint32_t n_buffers, struct pw_client_node_buffer *buffers)
Notify the port of buffers.
Definition: client-node.h:185
int(* remove_port)(void *data, enum spa_direction direction, uint32_t port_id)
A port was removed from the node.
Definition: client-node.h:159
uint32_t version
Definition: client-node.h:82
int(* port_set_param)(void *data, enum spa_direction direction, uint32_t port_id, uint32_t id, uint32_t flags, const struct spa_pod *param)
A parameter was configured on the port.
Definition: client-node.h:171
int(* event)(void *data, const struct spa_event *event)
Receive an event from the client node.
Definition: client-node.h:132
int(* set_activation)(void *data, uint32_t node_id, int signalfd, uint32_t mem_id, uint32_t offset, uint32_t size)
Notify the activation record of the next node to trigger.
Definition: client-node.h:222
int(* port_set_mix_info)(void *data, enum spa_direction direction, uint32_t port_id, uint32_t mix_id, uint32_t peer_id, const struct spa_dict *props)
Notify about the peer of mix_id.
Definition: client-node.h:240
int(* command)(void *data, const struct spa_command *command)
Notify of a new node command.
Definition: client-node.h:138
int(* set_io)(void *data, uint32_t id, uint32_t mem_id, uint32_t offset, uint32_t size)
Configure an IO area for the client.
Definition: client-node.h:124
int(* add_port)(void *data, enum spa_direction direction, uint32_t port_id, const struct spa_dict *props)
A new port was added to the node.
Definition: client-node.h:149
int(* set_param)(void *data, uint32_t id, uint32_t flags, const struct spa_pod *param)
Notify of a property change.
Definition: client-node.h:110
int(* transport)(void *data, int readfd, int writefd, uint32_t mem_id, uint32_t offset, uint32_t size)
Notify of a new transport area.
Definition: client-node.h:94
Client Node methods
Definition: client-node.h:266
int(* event)(void *object, const struct spa_event *event)
Send an event to the node.
Definition: client-node.h:328
int(* add_listener)(void *object, struct spa_hook *listener, const struct pw_client_node_events *events, void *data)
Definition: client-node.h:271
int(* port_buffers)(void *object, enum spa_direction direction, uint32_t port_id, uint32_t mix_id, uint32_t n_buffers, struct spa_buffer **buffers)
Send allocated buffers.
Definition: client-node.h:333
uint32_t version
Definition: client-node.h:269
int(* set_active)(void *object, bool active)
Activate or deactivate the node.
Definition: client-node.h:323
Definition: impl.h:25
A Buffer.
Definition: buffer.h:100
Definition: command.h:29
Definition: dict.h:39
uint32_t flags
Definition: dict.h:42
Definition: event.h:28
A hook, contains the structure with functions and the data passed to the functions.
Definition: hook.h:350
Definition: hook.h:138
Node information structure.
Definition: node.h:48
uint32_t n_params
number of items in params
Definition: node.h:82
uint64_t change_mask
Definition: node.h:57
Definition: pod.h:43
uint32_t size
Definition: pod.h:44
Port information structure.
Definition: node.h:93