PipeWire 1.4.5 |

Loading...
Searching...
No Matches
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
16
21
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;
72 struct spa_param_info *params;
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)
94
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)
103 * or will not be made available on another
104 * port */
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
121 struct spa_result_node_error {
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
145 struct spa_node_events {
146#define SPA_VERSION_NODE_EVENTS 0
147 uint32_t version;
148
150 void (*info) (void *data, const struct spa_node_info *info);
151
153 void (*port_info) (void *data,
154 enum spa_direction direction, uint32_t port,
155 const struct spa_port_info *info);
156
157 /** notify a result.
158 *
159 * Some methods will trigger a result event with an optional
160 * result of the given type. Look at the documentation of the
161 * method to know when to expect a result event.
162 *
163 * The result event can be called synchronously, as an event
164 * called from inside the method itself, in which case the seq
165 * number passed to the method will be passed unchanged.
166 *
167 * The result event will be called asynchronously when the
168 * method returned an async return value. In this case, the seq
169 * number in the result will match the async return value of
170 * the method call. Users should match the seq number from
171 * request to the reply.
172 */
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};
185
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
227
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)
242 * nearest allowed field value. */
243
245#define SPA_NODE_BUFFERS_FLAG_ALLOC (1 << 0)
248
249
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
283
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);
326
337 * number when executed synchronously or the async return value of
338 * this function when executed asynchronously.
339 *
340 * This function must be called from the main thread.
341 *
342 * \param node a \ref spa_node
343 * \param seq a sequence number to pass to the result event when
344 * this method is executed synchronously.
345 * \param id the param id to enumerate
346 * \param start the index of enumeration, pass 0 for the first item
347 * \param max the maximum number of parameters to enumerate
348 * \param filter and optional filter to use
349 *
350 * \return 0 when no more items can be iterated.
351 * -EINVAL when invalid arguments are given
352 * -ENOENT the parameter \a id is unknown
353 * -ENOTSUP when there are no parameters
354 * implemented on \a node
355 * an async return value when the result event will be
356 * emitted later.
357 */
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}
653 SPA_API_NODE int spa_node_set_callbacks(struct spa_node *object,
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}
685 SPA_API_NODE int spa_node_send_command(struct spa_node *object,
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}
712 SPA_API_NODE int spa_node_port_set_param(struct spa_node *object,
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}
721 SPA_API_NODE int spa_node_port_use_buffers(struct spa_node *object,
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}
731 SPA_API_NODE int spa_node_port_set_io(struct spa_node *object,
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}
739
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}
758
759
759/**
760 * \}
761 */
762
763#ifdef __cplusplus
764} /* extern "C" */
765#endif
766
767#endif /* SPA_NODE_H */
buffer.h
spa/buffer/buffer.h
defs.h
spa/utils/defs.h
seq
uint32_t int seq
Definition core.h:432
id
uint32_t id
Definition core.h:432
message
uint32_t int int const char * message
Definition core.h:433
res
uint32_t int int res
Definition core.h:433
spa_api_method_r
#define spa_api_method_r(rtype, def, type, o, method, version,...)
Definition hook.h:291
spa_api_method_fast_r
#define spa_api_method_fast_r(rtype, def, type, o, method, version,...)
Definition hook.h:325
spa_node_set_io
SPA_API_NODE int spa_node_set_io(struct spa_node *object, uint32_t id, void *data, size_t size)
Definition node.h:747
spa_node_port_set_param
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:780
spa_node_enum_params
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:733
SPA_API_NODE
#define SPA_API_NODE
Definition node.h:41
spa_node_sync
SPA_API_NODE int spa_node_sync(struct spa_node *object, int seq)
Definition node.h:728
spa_node_add_listener
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:713
spa_node_port_set_io
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:799
spa_node_set_param
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:740
spa_node_port_reuse_buffer
SPA_API_NODE int spa_node_port_reuse_buffer(struct spa_node *object, uint32_t port_id, uint32_t buffer_id)
Definition node.h:808
spa_node_remove_port
SPA_API_NODE int spa_node_remove_port(struct spa_node *object, enum spa_direction direction, uint32_t port_id)
Definition node.h:766
spa_node_port_use_buffers
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:789
spa_node_add_port
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:759
spa_node_port_enum_params
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:772
spa_node_send_command
SPA_API_NODE int spa_node_send_command(struct spa_node *object, const struct spa_command *command)
Definition node.h:753
spa_node_process
SPA_API_NODE int spa_node_process(struct spa_node *object)
Definition node.h:818
spa_node_set_callbacks
SPA_API_NODE int spa_node_set_callbacks(struct spa_node *object, const struct spa_node_callbacks *callbacks, void *data)
Definition node.h:721
spa_node_process_fast
SPA_API_NODE int spa_node_process_fast(struct spa_node *object)
Definition node.h:822
spa_node_port_reuse_buffer_fast
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:813
spa_direction
spa_direction
Definition defs.h:106
hook.h
spa/utils/hook.h
command.h
spa/node/command.h
event.h
spa/node/event.h
type.h
spa/utils/type.h
spa_buffer
A Buffer.
Definition buffer.h:110
spa_command
Definition command.h:29
spa_dict
Definition dict.h:51
spa_event
Definition event.h:28
spa_fraction
Definition defs.h:137
spa_hook
A hook, contains the structure with functions and the data passed to the functions.
Definition hook.h:427
spa_interface
Definition hook.h:148
spa_node_callbacks
Node callbacks.
Definition node.h:242
spa_node_callbacks::version
uint32_t version
Definition node.h:245
spa_node_callbacks::ready
int(* ready)(void *data, int state)
Definition node.h:254
spa_node_callbacks::reuse_buffer
int(* reuse_buffer)(void *data, uint32_t port_id, uint32_t buffer_id)
Definition node.h:266
spa_node_callbacks::xrun
int(* xrun)(void *data, uint64_t trigger, uint64_t delay, struct spa_pod *info)
Definition node.h:280
spa_node_events
events from the spa_node.
Definition node.h:186
spa_node_events::version
uint32_t version
version of this structure
Definition node.h:189
spa_node_events::event
void(* event)(void *data, const struct spa_event *event)
Definition node.h:225
spa_node_events::result
void(* result)(void *data, int seq, int res, uint32_t type, const void *result)
notify a result.
Definition node.h:215
spa_node_events::port_info
void(* port_info)(void *data, enum spa_direction direction, uint32_t port, const struct spa_port_info *info)
Emitted when port info changes, NULL when port is removed.
Definition node.h:195
spa_node_info
Node information structure.
Definition node.h:58
spa_node_info::params
struct spa_param_info * params
parameter information
Definition node.h:91
spa_node_info::flags
uint64_t flags
Definition node.h:89
spa_node_info::n_params
uint32_t n_params
number of items in params
Definition node.h:92
spa_node_info::max_output_ports
uint32_t max_output_ports
Definition node.h:60
spa_node_info::change_mask
uint64_t change_mask
Definition node.h:67
spa_node_info::max_input_ports
uint32_t max_input_ports
Definition node.h:59
spa_node_methods
Node methods.
Definition node.h:337
spa_node_methods::set_param
int(* set_param)(void *object, uint32_t id, uint32_t flags, const struct spa_pod *param)
Set the configurable parameter in node.
Definition node.h:451
spa_node_methods::port_enum_params
int(* port_enum_params)(void *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)
Enumerate all possible parameters of id on port_id of node that are compatible with filter.
Definition node.h:558
spa_node_methods::port_set_io
int(* port_set_io)(void *object, enum spa_direction direction, uint32_t port_id, uint32_t id, void *data, size_t size)
Configure the given memory area with id on port_id.
Definition node.h:667
spa_node_methods::process
int(* process)(void *object)
Process the node.
Definition node.h:709
spa_node_methods::port_use_buffers
int(* port_use_buffers)(void *object, enum spa_direction direction, uint32_t port_id, uint32_t flags, struct spa_buffer **buffers, uint32_t n_buffers)
Tell the port to use the given buffers.
Definition node.h:635
spa_node_methods::add_listener
int(* add_listener)(void *object, struct spa_hook *listener, const struct spa_node_events *events, void *data)
Adds an event listener on node.
Definition node.h:358
spa_node_methods::sync
int(* sync)(void *object, int seq)
Perform a sync operation.
Definition node.h:393
spa_node_methods::add_port
int(* add_port)(void *object, enum spa_direction direction, uint32_t port_id, const struct spa_dict *props)
Make a new port with port_id.
Definition node.h:508
spa_node_methods::enum_params
int(* enum_params)(void *object, int seq, uint32_t id, uint32_t start, uint32_t max, const struct spa_pod *filter)
Enumerate the parameters of a node.
Definition node.h:426
spa_node_methods::set_callbacks
int(* set_callbacks)(void *object, const struct spa_node_callbacks *callbacks, void *data)
Set callbacks to on node.
Definition node.h:375
spa_node_methods::set_io
int(* set_io)(void *object, uint32_t id, void *data, size_t size)
Configure the given memory area with id on node.
Definition node.h:473
spa_node_methods::port_reuse_buffer
int(* port_reuse_buffer)(void *object, uint32_t port_id, uint32_t buffer_id)
Tell an output port to reuse a buffer.
Definition node.h:684
spa_node_methods::remove_port
int(* remove_port)(void *object, enum spa_direction direction, uint32_t port_id)
Remove a port with port_id.
Definition node.h:522
spa_node_methods::send_command
int(* send_command)(void *object, const struct spa_command *command)
Send a command to a node.
Definition node.h:490
spa_node_methods::port_set_param
int(* port_set_param)(void *object, enum spa_direction direction, uint32_t port_id, uint32_t id, uint32_t flags, const struct spa_pod *param)
Set a parameter on port_id of node.
Definition node.h:588
spa_node
Definition node.h:51
spa_node::iface
struct spa_interface iface
Definition node.h:51
spa_param_info
information about a parameter
Definition param.h:51
spa_pod
Definition pod.h:43
spa_port_info
Port information structure.
Definition node.h:103
spa_port_info::flags
uint64_t flags
port flags
Definition node.h:141
spa_port_info::rate
struct spa_fraction rate
rate of sequence numbers on port
Definition node.h:142
spa_port_info::params
struct spa_param_info * params
parameter information
Definition node.h:144
spa_port_info::change_mask
uint64_t change_mask
Definition node.h:112
spa_port_info::n_params
uint32_t n_params
number of items in params
Definition node.h:145
spa_result_node_error
an error result
Definition node.h:157
spa_result_node_params
the result of enum_params or port_enum_params.
Definition node.h:162
spa_result_node_params::next
uint32_t next
next index of iteration
Definition node.h:165
spa_result_node_params::index
uint32_t index
index of parameter
Definition node.h:164