PipeWire  1.4.11
node.h
Go to the documentation of this file.
1 /* Simple Plugin API */
2 /* SPDX-FileCopyrightText: Copyright © 2018 Wim Taymans */
3 /* SPDX-License-Identifier: MIT */
4 
5 #ifndef SPA_NODE_H
6 #define SPA_NODE_H
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
22 #include <errno.h>
23 #include <spa/utils/defs.h>
24 #include <spa/utils/type.h>
25 #include <spa/utils/hook.h>
26 #include <spa/buffer/buffer.h>
27 #include <spa/node/event.h>
28 #include <spa/node/command.h>
29 
30 #ifndef SPA_API_NODE
31  #ifdef SPA_API_IMPL
32  #define SPA_API_NODE SPA_API_IMPL
33  #else
34  #define SPA_API_NODE static inline
35  #endif
36 #endif
37 
38 
39 #define SPA_TYPE_INTERFACE_Node SPA_TYPE_INFO_INTERFACE_BASE "Node"
40 
41 #define SPA_VERSION_NODE 0
42 struct spa_node { struct spa_interface iface; };
43 
49 struct spa_node_info {
50  uint32_t max_input_ports;
51  uint32_t max_output_ports;
52 #define SPA_NODE_CHANGE_MASK_FLAGS (1u<<0)
53 #define SPA_NODE_CHANGE_MASK_PROPS (1u<<1)
54 #define SPA_NODE_CHANGE_MASK_PARAMS (1u<<2)
55  uint64_t change_mask;
56 
57 #define SPA_NODE_FLAG_RT (1u<<0)
58 #define SPA_NODE_FLAG_IN_DYNAMIC_PORTS (1u<<1)
59 #define SPA_NODE_FLAG_OUT_DYNAMIC_PORTS (1u<<2)
60 #define SPA_NODE_FLAG_IN_PORT_CONFIG (1u<<3)
62 #define SPA_NODE_FLAG_OUT_PORT_CONFIG (1u<<4)
64 #define SPA_NODE_FLAG_NEED_CONFIGURE (1u<<5)
66 #define SPA_NODE_FLAG_ASYNC (1u<<6)
70  uint64_t flags;
71  struct spa_dict *props;
73  uint32_t n_params;
74 };
75 
76 #define SPA_NODE_INFO_INIT() ((struct spa_node_info) { 0, })
77 
83 struct spa_port_info {
84 #define SPA_PORT_CHANGE_MASK_FLAGS (1u<<0)
85 #define SPA_PORT_CHANGE_MASK_RATE (1u<<1)
86 #define SPA_PORT_CHANGE_MASK_PROPS (1u<<2)
87 #define SPA_PORT_CHANGE_MASK_PARAMS (1u<<3)
88  uint64_t change_mask;
89 
90 #define SPA_PORT_FLAG_REMOVABLE (1u<<0)
91 #define SPA_PORT_FLAG_OPTIONAL (1u<<1)
92 #define SPA_PORT_FLAG_CAN_ALLOC_BUFFERS (1u<<2)
93 #define SPA_PORT_FLAG_IN_PLACE (1u<<3)
95 #define SPA_PORT_FLAG_NO_REF (1u<<4)
99 #define SPA_PORT_FLAG_LIVE (1u<<5)
101 #define SPA_PORT_FLAG_PHYSICAL (1u<<6)
102 #define SPA_PORT_FLAG_TERMINAL (1u<<7)
105 #define SPA_PORT_FLAG_DYNAMIC_DATA (1u<<8)
108  uint64_t flags;
109  struct spa_fraction rate;
110  const struct spa_dict *props;
111  struct spa_param_info *params;
112  uint32_t n_params;
113 };
114 
115 #define SPA_PORT_INFO_INIT() ((struct spa_port_info) { 0, })
116 
117 #define SPA_RESULT_TYPE_NODE_ERROR 1
118 #define SPA_RESULT_TYPE_NODE_PARAMS 2
119 
122  const char *message;
123 };
124 
126 struct spa_result_node_params {
127  uint32_t id;
128  uint32_t index;
129  uint32_t next;
130  struct spa_pod *param;
131 };
132 
133 #define SPA_NODE_EVENT_INFO 0
134 #define SPA_NODE_EVENT_PORT_INFO 1
135 #define SPA_NODE_EVENT_RESULT 2
136 #define SPA_NODE_EVENT_EVENT 3
137 #define SPA_NODE_EVENT_NUM 4
138 
146 #define SPA_VERSION_NODE_EVENTS 0
147  uint32_t version;
150  void (*info) (void *data, const struct spa_node_info *info);
153  void (*port_info) (void *data,
154  enum spa_direction direction, uint32_t port,
155  const struct spa_port_info *info);
173  void (*result) (void *data, int seq, int res,
174  uint32_t type, const void *result);
175 
183  void (*event) (void *data, const struct spa_event *event);
184 };
186 #define SPA_NODE_CALLBACK_READY 0
187 #define SPA_NODE_CALLBACK_REUSE_BUFFER 1
188 #define SPA_NODE_CALLBACK_XRUN 2
189 #define SPA_NODE_CALLBACK_NUM 3
190 
196 struct spa_node_callbacks {
197 #define SPA_VERSION_NODE_CALLBACKS 0
198  uint32_t version;
207  int (*ready) (void *data, int state);
208 
219  int (*reuse_buffer) (void *data,
220  uint32_t port_id,
221  uint32_t buffer_id);
222 
233  int (*xrun) (void *data, uint64_t trigger, uint64_t delay,
234  struct spa_pod *info);
235 };
236 
237 
239 #define SPA_NODE_PARAM_FLAG_TEST_ONLY (1 << 0)
240 #define SPA_NODE_PARAM_FLAG_FIXATE (1 << 1)
241 #define SPA_NODE_PARAM_FLAG_NEAREST (1 << 2)
245 #define SPA_NODE_BUFFERS_FLAG_ALLOC (1 << 0)
250 #define SPA_NODE_METHOD_ADD_LISTENER 0
251 #define SPA_NODE_METHOD_SET_CALLBACKS 1
252 #define SPA_NODE_METHOD_SYNC 2
253 #define SPA_NODE_METHOD_ENUM_PARAMS 3
254 #define SPA_NODE_METHOD_SET_PARAM 4
255 #define SPA_NODE_METHOD_SET_IO 5
256 #define SPA_NODE_METHOD_SEND_COMMAND 6
257 #define SPA_NODE_METHOD_ADD_PORT 7
258 #define SPA_NODE_METHOD_REMOVE_PORT 8
259 #define SPA_NODE_METHOD_PORT_ENUM_PARAMS 9
260 #define SPA_NODE_METHOD_PORT_SET_PARAM 10
261 #define SPA_NODE_METHOD_PORT_USE_BUFFERS 11
262 #define SPA_NODE_METHOD_PORT_SET_IO 12
263 #define SPA_NODE_METHOD_PORT_REUSE_BUFFER 13
264 #define SPA_NODE_METHOD_PROCESS 14
265 #define SPA_NODE_METHOD_NUM 15
266 
270 struct spa_node_methods {
271  /* the version of the node methods. This can be used to expand this
272  * structure in the future */
273 #define SPA_VERSION_NODE_METHODS 0
274  uint32_t version;
275 
290  int (*add_listener) (void *object,
291  struct spa_hook *listener,
292  const struct spa_node_events *events,
293  void *data);
307  int (*set_callbacks) (void *object,
308  const struct spa_node_callbacks *callbacks,
309  void *data);
325  int (*sync) (void *object, int seq);
358  int (*enum_params) (void *object, int seq,
359  uint32_t id, uint32_t start, uint32_t max,
360  const struct spa_pod *filter);
361 
383  int (*set_param) (void *object,
384  uint32_t id, uint32_t flags,
385  const struct spa_pod *param);
386 
405  int (*set_io) (void *object,
406  uint32_t id, void *data, size_t size);
407 
422  int (*send_command) (void *object, const struct spa_command *command);
423 
440  int (*add_port) (void *object,
441  enum spa_direction direction, uint32_t port_id,
442  const struct spa_dict *props);
443 
454  int (*remove_port) (void *object,
455  enum spa_direction direction, uint32_t port_id);
456 
490  int (*port_enum_params) (void *object, int seq,
491  enum spa_direction direction, uint32_t port_id,
492  uint32_t id, uint32_t start, uint32_t max,
493  const struct spa_pod *filter);
520  int (*port_set_param) (void *object,
521  enum spa_direction direction,
522  uint32_t port_id,
523  uint32_t id, uint32_t flags,
524  const struct spa_pod *param);
525 
567  int (*port_use_buffers) (void *object,
568  enum spa_direction direction,
569  uint32_t port_id,
570  uint32_t flags,
571  struct spa_buffer **buffers,
572  uint32_t n_buffers);
573 
599  int (*port_set_io) (void *object,
600  enum spa_direction direction,
601  uint32_t port_id,
602  uint32_t id,
603  void *data, size_t size);
604 
616  int (*port_reuse_buffer) (void *object, uint32_t port_id, uint32_t buffer_id);
617 
641  int (*process) (void *object);
642 };
643 
644 
645 SPA_API_NODE int spa_node_add_listener(struct spa_node *object,
646  struct spa_hook *listener,
647  const struct spa_node_events *events,
648  void *data)
649 {
650  return spa_api_method_r(int, -ENOTSUP, spa_node, &object->iface, add_listener, 0,
651  listener, events, data);
652 }
654  const struct spa_node_callbacks *callbacks,
655  void *data)
656 {
657  return spa_api_method_r(int, -ENOTSUP, spa_node, &object->iface, set_callbacks, 0,
658  callbacks, data);
659 }
660 SPA_API_NODE int spa_node_sync(struct spa_node *object, int seq)
661 {
662  return spa_api_method_r(int, -ENOTSUP, spa_node, &object->iface, sync, 0,
663  seq);
664 }
665 SPA_API_NODE int spa_node_enum_params(struct spa_node *object, int seq,
666  uint32_t id, uint32_t start, uint32_t max,
667  const struct spa_pod *filter)
668 {
669  return spa_api_method_r(int, -ENOTSUP, spa_node, &object->iface, enum_params, 0,
670  seq, id, start, max, filter);
671 }
672 SPA_API_NODE int spa_node_set_param(struct spa_node *object,
673  uint32_t id, uint32_t flags,
674  const struct spa_pod *param)
675 {
676  return spa_api_method_r(int, -ENOTSUP, spa_node, &object->iface, set_param, 0,
677  id, flags, param);
678 }
679 SPA_API_NODE int spa_node_set_io(struct spa_node *object,
680  uint32_t id, void *data, size_t size)
681 {
682  return spa_api_method_r(int, -ENOTSUP, spa_node, &object->iface, set_io, 0,
683  id, data, size);
684 }
686  const struct spa_command *command)
687 {
688  return spa_api_method_r(int, -ENOTSUP, spa_node, &object->iface, send_command, 0,
689  command);
690 }
691 SPA_API_NODE int spa_node_add_port(struct spa_node *object,
692  enum spa_direction direction, uint32_t port_id,
693  const struct spa_dict *props)
694 {
695  return spa_api_method_r(int, -ENOTSUP, spa_node, &object->iface, add_port, 0,
696  direction, port_id, props);
697 }
698 SPA_API_NODE int spa_node_remove_port(struct spa_node *object,
699  enum spa_direction direction, uint32_t port_id)
700 {
701  return spa_api_method_r(int, -ENOTSUP, spa_node, &object->iface, remove_port, 0,
702  direction, port_id);
703 }
704 SPA_API_NODE int spa_node_port_enum_params(struct spa_node *object, int seq,
705  enum spa_direction direction, uint32_t port_id,
706  uint32_t id, uint32_t start, uint32_t max,
707  const struct spa_pod *filter)
708 {
709  return spa_api_method_r(int, -ENOTSUP, spa_node, &object->iface, port_enum_params, 0,
710  seq, direction, port_id, id, start, max, filter);
711 }
713  enum spa_direction direction,
714  uint32_t port_id,
715  uint32_t id, uint32_t flags,
716  const struct spa_pod *param)
717 {
718  return spa_api_method_r(int, -ENOTSUP, spa_node, &object->iface, port_set_param, 0,
719  direction, port_id, id, flags, param);
720 }
722  enum spa_direction direction,
723  uint32_t port_id,
724  uint32_t flags,
725  struct spa_buffer **buffers,
726  uint32_t n_buffers)
727 {
728  return spa_api_method_r(int, -ENOTSUP, spa_node, &object->iface, port_use_buffers, 0,
729  direction, port_id, flags, buffers, n_buffers);
730 }
732  enum spa_direction direction,
733  uint32_t port_id,
734  uint32_t id, void *data, size_t size)
735 {
736  return spa_api_method_r(int, -ENOTSUP, spa_node, &object->iface, port_set_io, 0,
737  direction, port_id, id, data, size);
738 }
740 SPA_API_NODE int spa_node_port_reuse_buffer(struct spa_node *object, uint32_t port_id, uint32_t buffer_id)
741 {
742  return spa_api_method_r(int, -ENOTSUP, spa_node, &object->iface, port_reuse_buffer, 0,
743  port_id, buffer_id);
744 }
745 SPA_API_NODE int spa_node_port_reuse_buffer_fast(struct spa_node *object, uint32_t port_id, uint32_t buffer_id)
746 {
747  return spa_api_method_fast_r(int, -ENOTSUP, spa_node, &object->iface, port_reuse_buffer, 0,
748  port_id, buffer_id);
749 }
750 SPA_API_NODE int spa_node_process(struct spa_node *object)
751 {
752  return spa_api_method_r(int, -ENOTSUP, spa_node, &object->iface, process, 0);
753 }
754 SPA_API_NODE int spa_node_process_fast(struct spa_node *object)
755 {
756  return spa_api_method_fast_r(int, -ENOTSUP, spa_node, &object->iface, process, 0);
757 }
763 #ifdef __cplusplus
764 } /* extern "C" */
765 #endif
766 
767 #endif /* SPA_NODE_H */
SPA_API_NODE int spa_node_remove_port(struct spa_node *object, enum spa_direction direction, uint32_t port_id)
Definition: node.h:784
SPA_API_NODE int spa_node_port_set_io(struct spa_node *object, enum spa_direction direction, uint32_t port_id, uint32_t id, void *data, size_t size)
Definition: node.h:817
uint32_t int int const char * message
Definition: core.h:432
Definition: node.h:51
SPA_API_NODE int spa_node_set_callbacks(struct spa_node *object, const struct spa_node_callbacks *callbacks, void *data)
Definition: node.h:739
uint64_t change_mask
Definition: node.h:118
Node information structure.
Definition: node.h:58
SPA_API_NODE int spa_node_process(struct spa_node *object)
Definition: node.h:836
the result of enum_params or port_enum_params.
Definition: node.h:177
SPA_API_NODE int spa_node_sync(struct spa_node *object, int seq)
Definition: node.h:746
uint32_t n_params
number of items in params
Definition: node.h:98
A hook, contains the structure with functions and the data passed to the functions.
Definition: hook.h:427
struct spa_param_info * params
parameter information
Definition: node.h:97
SPA_API_NODE int spa_node_port_reuse_buffer_fast(struct spa_node *object, uint32_t port_id, uint32_t buffer_id)
Definition: node.h:831
spa/node/event.h
SPA_API_NODE int spa_node_add_port(struct spa_node *object, enum spa_direction direction, uint32_t port_id, const struct spa_dict *props)
Definition: node.h:777
#define spa_api_method_fast_r(rtype, def, type, o, method, version,...)
Definition: hook.h:325
SPA_API_NODE int spa_node_set_io(struct spa_node *object, uint32_t id, void *data, size_t size)
Definition: node.h:765
an error result
Definition: node.h:172
spa/utils/defs.h
spa/utils/type.h
#define SPA_API_NODE
Definition: node.h:41
Definition: dict.h:51
spa/utils/hook.h
SPA_API_NODE int spa_node_port_use_buffers(struct spa_node *object, enum spa_direction direction, uint32_t port_id, uint32_t flags, struct spa_buffer **buffers, uint32_t n_buffers)
Definition: node.h:807
Port information structure.
Definition: node.h:109
events from the spa_node.
Definition: node.h:201
SPA_API_NODE int spa_node_port_reuse_buffer(struct spa_node *object, uint32_t port_id, uint32_t buffer_id)
Definition: node.h:826
struct spa_interface iface
Definition: node.h:51
SPA_API_NODE int spa_node_process_fast(struct spa_node *object)
Definition: node.h:840
information about a parameter
Definition: param.h:51
A Buffer.
Definition: buffer.h:114
uint64_t change_mask
Definition: node.h:67
Definition: pod.h:43
spa/node/command.h
#define spa_api_method_r(rtype, def, type, o, method, version,...)
Definition: hook.h:291
spa/buffer/buffer.h
uint32_t int seq
Definition: core.h:432
SPA_API_NODE int spa_node_add_listener(struct spa_node *object, struct spa_hook *listener, const struct spa_node_events *events, void *data)
Definition: node.h:731
Node methods.
Definition: node.h:355
uint32_t max_output_ports
Definition: node.h:60
uint64_t flags
port flags
Definition: node.h:156
SPA_API_NODE int spa_node_port_enum_params(struct spa_node *object, int seq, enum spa_direction direction, uint32_t port_id, uint32_t id, uint32_t start, uint32_t max, const struct spa_pod *filter)
Definition: node.h:790
uint32_t size
Definition: pod.h:44
Node callbacks.
Definition: node.h:257
spa_direction
Definition: defs.h:106
Definition: event.h:28
Definition: hook.h:148
SPA_API_NODE int spa_node_port_set_param(struct spa_node *object, enum spa_direction direction, uint32_t port_id, uint32_t id, uint32_t flags, const struct spa_pod *param)
Definition: node.h:798
uint32_t int int res
Definition: core.h:432
SPA_API_NODE int spa_node_set_param(struct spa_node *object, uint32_t id, uint32_t flags, const struct spa_pod *param)
Definition: node.h:758
Definition: command.h:29
SPA_API_NODE int spa_node_send_command(struct spa_node *object, const struct spa_command *command)
Definition: node.h:771
uint32_t id
Definition: core.h:432
SPA_API_NODE int spa_node_enum_params(struct spa_node *object, int seq, uint32_t id, uint32_t start, uint32_t max, const struct spa_pod *filter)
Definition: node.h:751
uint32_t max_input_ports
Definition: node.h:59