PipeWire  1.4.2
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 #ifndef PW_API_CLIENT_NODE_IMPL
34 #define PW_API_CLIENT_NODE_IMPL static inline
35 #endif
36 
37 #define PW_EXTENSION_MODULE_CLIENT_NODE PIPEWIRE_MODULE_PREFIX "module-client-node"
38 
40 struct pw_client_node_buffer {
41  uint32_t mem_id;
42  uint32_t offset;
43  uint32_t size;
44  struct spa_buffer *buffer;
45 };
46 
47 #define PW_CLIENT_NODE_EVENT_TRANSPORT 0
48 #define PW_CLIENT_NODE_EVENT_SET_PARAM 1
49 #define PW_CLIENT_NODE_EVENT_SET_IO 2
50 #define PW_CLIENT_NODE_EVENT_EVENT 3
51 #define PW_CLIENT_NODE_EVENT_COMMAND 4
52 #define PW_CLIENT_NODE_EVENT_ADD_PORT 5
53 #define PW_CLIENT_NODE_EVENT_REMOVE_PORT 6
54 #define PW_CLIENT_NODE_EVENT_PORT_SET_PARAM 7
55 #define PW_CLIENT_NODE_EVENT_PORT_USE_BUFFERS 8
56 #define PW_CLIENT_NODE_EVENT_PORT_SET_IO 9
57 #define PW_CLIENT_NODE_EVENT_SET_ACTIVATION 10
58 #define PW_CLIENT_NODE_EVENT_PORT_SET_MIX_INFO 11
59 #define PW_CLIENT_NODE_EVENT_NUM 12
60 
62 struct pw_client_node_events {
63 #define PW_VERSION_CLIENT_NODE_EVENTS 1
64  uint32_t version;
76  int (*transport) (void *data,
77  int readfd,
78  int writefd,
79  uint32_t mem_id,
80  uint32_t offset,
81  uint32_t size);
92  int (*set_param) (void *data,
93  uint32_t id, uint32_t flags,
94  const struct spa_pod *param);
106  int (*set_io) (void *data,
107  uint32_t id,
108  uint32_t mem_id,
109  uint32_t offset,
110  uint32_t size);
114  int (*event) (void *data, const struct spa_event *event);
120  int (*command) (void *data, const struct spa_command *command);
131  int (*add_port) (void *data,
132  enum spa_direction direction,
133  uint32_t port_id,
134  const struct spa_dict *props);
141  int (*remove_port) (void *data,
142  enum spa_direction direction,
143  uint32_t port_id);
153  int (*port_set_param) (void *data,
154  enum spa_direction direction,
155  uint32_t port_id,
156  uint32_t id, uint32_t flags,
157  const struct spa_pod *param);
167  int (*port_use_buffers) (void *data,
168  enum spa_direction direction,
169  uint32_t port_id,
170  uint32_t mix_id,
171  uint32_t flags,
172  uint32_t n_buffers,
173  struct pw_client_node_buffer *buffers);
185  int (*port_set_io) (void *data,
186  enum spa_direction direction,
187  uint32_t port_id,
188  uint32_t mix_id,
189  uint32_t id,
190  uint32_t mem_id,
191  uint32_t offset,
192  uint32_t size);
193 
204  int (*set_activation) (void *data,
205  uint32_t node_id,
206  int signalfd,
207  uint32_t mem_id,
208  uint32_t offset,
209  uint32_t size);
210 
222  int (*port_set_mix_info) (void *data,
223  enum spa_direction direction,
224  uint32_t port_id,
225  uint32_t mix_id,
226  uint32_t peer_id,
227  const struct spa_dict *props);
228 };
229 
230 #define PW_CLIENT_NODE_METHOD_ADD_LISTENER 0
231 #define PW_CLIENT_NODE_METHOD_GET_NODE 1
232 #define PW_CLIENT_NODE_METHOD_UPDATE 2
233 #define PW_CLIENT_NODE_METHOD_PORT_UPDATE 3
234 #define PW_CLIENT_NODE_METHOD_SET_ACTIVE 4
235 #define PW_CLIENT_NODE_METHOD_EVENT 5
236 #define PW_CLIENT_NODE_METHOD_PORT_BUFFERS 6
237 #define PW_CLIENT_NODE_METHOD_NUM 7
238 
240 struct pw_client_node_methods {
241 #define PW_VERSION_CLIENT_NODE_METHODS 0
242  uint32_t version;
243 
244  int (*add_listener) (void *object,
245  struct spa_hook *listener,
246  const struct pw_client_node_events *events,
247  void *data);
250  struct pw_node * (*get_node) (void *object, uint32_t version, size_t user_data_size);
261  int (*update) (void *object,
262 #define PW_CLIENT_NODE_UPDATE_PARAMS (1 << 0)
263 #define PW_CLIENT_NODE_UPDATE_INFO (1 << 1)
264  uint32_t change_mask,
265  uint32_t n_params,
266  const struct spa_pod **params,
267  const struct spa_node_info *info);
268 
280  int (*port_update) (void *object,
281  enum spa_direction direction,
282  uint32_t port_id,
283 #define PW_CLIENT_NODE_PORT_UPDATE_PARAMS (1 << 0)
284 #define PW_CLIENT_NODE_PORT_UPDATE_INFO (1 << 1)
285  uint32_t change_mask,
286  uint32_t n_params,
287  const struct spa_pod **params,
288  const struct spa_port_info *info);
292  int (*set_active) (void *object, bool active);
297  int (*event) (void *object, const struct spa_event *event);
298 
302  int (*port_buffers) (void *object,
303  enum spa_direction direction,
304  uint32_t port_id,
305  uint32_t mix_id,
306  uint32_t n_buffers,
307  struct spa_buffer **buffers);
308 };
309 
311  struct spa_hook *listener,
312  const struct pw_client_node_events *events,
313  void *data)
314 {
315  return spa_api_method_r(int, -ENOTSUP, pw_client_node, (struct spa_interface*)object,
316  add_listener, 0, listener, events, data);
317 }
319 pw_client_node_get_node(struct pw_client_node *p, uint32_t version, size_t user_data_size)
320 {
321  return spa_api_method_r(struct pw_node*, NULL, pw_client_node, (struct spa_interface*)p,
322  get_node, 0, version, user_data_size);
323 }
325  uint32_t change_mask,
326  uint32_t n_params, const struct spa_pod **params,
327  const struct spa_node_info *info)
328 {
329  return spa_api_method_r(int, -ENOTSUP, pw_client_node, (struct spa_interface*)object,
330  update, 0, change_mask, n_params, params, info);
331 }
333  enum spa_direction direction, uint32_t port_id,
334  uint32_t change_mask,
335  uint32_t n_params, const struct spa_pod **params,
336  const struct spa_port_info *info)
337 {
338  return spa_api_method_r(int, -ENOTSUP, pw_client_node, (struct spa_interface*)object,
339  port_update, 0, direction, port_id, change_mask, n_params, params, info);
340 }
342 {
343  return spa_api_method_r(int, -ENOTSUP, pw_client_node, (struct spa_interface*)object,
344  set_active, 0, active);
345 }
347 {
348  return spa_api_method_r(int, -ENOTSUP, pw_client_node, (struct spa_interface*)object,
349  event, 0, event);
350 }
352  enum spa_direction direction, uint32_t port_id,
353  uint32_t mix_id, uint32_t n_buffers, struct spa_buffer **buffers)
354 {
355  return spa_api_method_r(int, -ENOTSUP, pw_client_node, (struct spa_interface*)object,
356  port_buffers, 0, direction, port_id, mix_id, n_buffers, buffers);
357 }
358 
363 #ifdef __cplusplus
364 } /* extern "C" */
365 #endif
366 
367 #endif /* PIPEWIRE_EXT_CLIENT_NODE_H */
spa/utils/defs.h
PW_API_CLIENT_NODE_IMPL 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:355
PW_API_CLIENT_NODE_IMPL int pw_client_node_set_active(struct pw_client_node *object, bool active)
Definition: client-node.h:377
PW_API_CLIENT_NODE_IMPL int pw_client_node_port_update(struct pw_client_node *object, enum spa_direction direction, uint32_t port_id, uint32_t change_mask, uint32_t n_params, const struct spa_pod **params, const struct spa_port_info *info)
Definition: client-node.h:368
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:293
PW_API_CLIENT_NODE_IMPL int pw_client_node_update(struct pw_client_node *object, uint32_t change_mask, uint32_t n_params, const struct spa_pod **params, const struct spa_node_info *info)
Definition: client-node.h:360
PW_API_CLIENT_NODE_IMPL int pw_client_node_add_listener(struct pw_client_node *object, struct spa_hook *listener, const struct pw_client_node_events *events, void *data)
Definition: client-node.h:346
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:314
PW_API_CLIENT_NODE_IMPL int pw_client_node_port_buffers(struct pw_client_node *object, enum spa_direction direction, uint32_t port_id, uint32_t mix_id, uint32_t n_buffers, struct spa_buffer **buffers)
Definition: client-node.h:387
PW_API_CLIENT_NODE_IMPL int pw_client_node_event(struct pw_client_node *object, const struct spa_event *event)
Definition: client-node.h:382
#define PW_API_CLIENT_NODE_IMPL
Definition: client-node.h:42
uint32_t id
Definition: core.h:432
#define spa_api_method_r(rtype, def, type, o, method, version,...)
Definition: hook.h:291
spa_direction
Definition: defs.h:106
spa/param/param.h
information about a buffer
Definition: client-node.h:49
uint32_t size
size in memory
Definition: client-node.h:52
uint32_t mem_id
the memory id for the metadata
Definition: client-node.h:50
uint32_t offset
offset in memory
Definition: client-node.h:51
struct spa_buffer * buffer
buffer describing metadata and buffer memory
Definition: client-node.h:53
Client Node events
Definition: client-node.h:84
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:208
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:190
int(* remove_port)(void *data, enum spa_direction direction, uint32_t port_id)
A port was removed from the node.
Definition: client-node.h:164
uint32_t version
Definition: client-node.h:87
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:176
int(* event)(void *data, const struct spa_event *event)
Receive an event from the client node.
Definition: client-node.h:137
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:227
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:245
int(* command)(void *data, const struct spa_command *command)
Notify of a new node command.
Definition: client-node.h:143
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:129
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:154
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:115
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:99
Client Node methods
Definition: client-node.h:271
int(* event)(void *object, const struct spa_event *event)
Send an event to the node.
Definition: client-node.h:333
int(* add_listener)(void *object, struct spa_hook *listener, const struct pw_client_node_events *events, void *data)
Definition: client-node.h:276
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:338
uint32_t version
Definition: client-node.h:274
int(* set_active)(void *object, bool active)
Activate or deactivate the node.
Definition: client-node.h:328
Definition: impl.h:25
A Buffer.
Definition: buffer.h:110
Definition: command.h:29
Definition: dict.h:51
uint32_t flags
Definition: dict.h:54
Definition: event.h:28
A hook, contains the structure with functions and the data passed to the functions.
Definition: hook.h:427
Definition: hook.h:148
Node information structure.
Definition: node.h:58
uint32_t n_params
number of items in params
Definition: node.h:92
uint64_t change_mask
Definition: node.h:67
Definition: pod.h:43
uint32_t size
Definition: pod.h:44
Port information structure.
Definition: node.h:103