PipeWire: Node

PipeWire 1.4.7

Loading...
Searching...
No Matches
Node
SPA

A spa_node is a component that can consume and produce buffers. More...

## Files
file | command.h
| spa/node/command.h
file | event.h
| spa/node/event.h
file | io.h
| spa/node/io.h
file | keys.h
| spa/node/keys.h
file | node.h
| spa/node/node.h
file | type-info.h
| spa/node/type-info.h

## Data Structures
struct | spa_io_buffers
| IO area to exchange buffers. More...
struct | spa_io_memory
| IO area to exchange a memory region. More...
struct | spa_io_range
| A range, suitable for input ports that can suggest a range to output ports. More...
struct | spa_io_clock
| Absolute time reporting. More...
struct | spa_io_video_size
struct | spa_io_latency
| Latency reporting. More...
struct | spa_io_sequence
| control stream, io area for SPA_IO_Control and SPA_IO_Notify More...
struct | spa_io_segment_bar
| bar and beat segment More...
struct | spa_io_segment_video
| video frame segment More...
struct | spa_io_segment
| A segment converts a running time to a segment (stream) position. More...
struct | spa_io_position
| The position information adds extra meaning to the raw clock times. More...
struct | spa_io_rate_match
| Rate matching. More...
struct | spa_io_async_buffers
| async buffers More...
struct | spa_node
struct | spa_node_info
| Node information structure. More...
struct | spa_port_info
| Port information structure. More...
struct | spa_result_node_error
| an error result More...
struct | spa_result_node_params
| the result of enum_params or port_enum_params. More...
struct | spa_node_events
| events from the spa_node. More...
struct | spa_node_callbacks
| Node callbacks. More...
struct | spa_node_methods
| Node methods. More...
struct | spa_result_node_params_data

## Enumerations
enum | spa_node_command { SPA_NODE_COMMAND_Suspend , SPA_NODE_COMMAND_Pause , SPA_NODE_COMMAND_Start , SPA_NODE_COMMAND_Enable , SPA_NODE_COMMAND_Disable , SPA_NODE_COMMAND_Flush , SPA_NODE_COMMAND_Drain , SPA_NODE_COMMAND_Marker , SPA_NODE_COMMAND_ParamBegin , SPA_NODE_COMMAND_ParamEnd , SPA_NODE_COMMAND_RequestProcess }
enum | spa_node_event { SPA_NODE_EVENT_Error , SPA_NODE_EVENT_Buffering , SPA_NODE_EVENT_RequestRefresh , SPA_NODE_EVENT_RequestProcess }
enum | spa_event_node { SPA_EVENT_NODE_START }
enum | spa_io_type { SPA_IO_Invalid , SPA_IO_Buffers , SPA_IO_Range , SPA_IO_Clock , SPA_IO_Latency , SPA_IO_Control , SPA_IO_Notify , SPA_IO_Position , SPA_IO_RateMatch , SPA_IO_Memory , SPA_IO_AsyncBuffers }
| IO areas. More...
enum | spa_io_position_state { SPA_IO_POSITION_STATE_STOPPED , SPA_IO_POSITION_STATE_STARTING , SPA_IO_POSITION_STATE_RUNNING }

## Macros
#define | SPA_NODE_COMMAND_ID(cmd)
#define | SPA_NODE_COMMAND_INIT(id)
#define | SPA_NODE_EVENT_ID(ev)
#define | SPA_NODE_EVENT_INIT(id)
#define | SPA_STATUS_OK 0
#define | SPA_STATUS_NEED_DATA (1<<0)
#define | SPA_STATUS_HAVE_DATA (1<<1)
#define | SPA_STATUS_STOPPED (1<<2)
#define | SPA_STATUS_DRAINED (1<<3)
#define | SPA_IO_BUFFERS_INIT ((struct spa_io_buffers) { SPA_STATUS_OK, SPA_ID_INVALID, })
#define | SPA_IO_MEMORY_INIT ((struct spa_io_memory) { SPA_STATUS_OK, 0, NULL, })
#define | SPA_IO_CLOCK_FLAG_FREEWHEEL (1u<<0) /* graph is freewheeling */
#define | SPA_IO_CLOCK_FLAG_XRUN_RECOVER (1u<<1) /* recovering from xrun */
#define | SPA_IO_CLOCK_FLAG_LAZY (1u<<2) /* lazy scheduling */
#define | SPA_IO_CLOCK_FLAG_NO_RATE
#define | SPA_IO_VIDEO_SIZE_VALID (1<<0)
#define | SPA_IO_SEGMENT_BAR_FLAG_VALID (1<<0)
#define | SPA_IO_SEGMENT_VIDEO_FLAG_VALID (1<<0)
#define | SPA_IO_SEGMENT_VIDEO_FLAG_DROP_FRAME (1<<1)
#define | SPA_IO_SEGMENT_VIDEO_FLAG_PULL_DOWN (1<<2)
#define | SPA_IO_SEGMENT_VIDEO_FLAG_INTERLACED (1<<3)
#define | SPA_IO_SEGMENT_FLAG_LOOPING (1<<0)
| after the duration, the segment repeats
#define | SPA_IO_SEGMENT_FLAG_NO_POSITION (1<<1)
| position is invalid.
#define | SPA_IO_POSITION_MAX_SEGMENTS 8
| the maximum number of segments visible in the future
#define | SPA_IO_RATE_MATCH_FLAG_ACTIVE (1 << 0)
#define | SPA_KEY_NODE_NAME "node.name"
| node keys
#define | SPA_KEY_NODE_DESCRIPTION "node.description"
| localized human readable node one-line description.
#define | SPA_KEY_NODE_LATENCY "node.latency"
| the requested node latency
#define | SPA_KEY_NODE_MAX_LATENCY "node.max-latency"
| maximum supported latency
#define | SPA_KEY_NODE_DRIVER "node.driver"
| the node can be a driver
#define | SPA_KEY_NODE_ALWAYS_PROCESS "node.always-process"
| call the process function even if not linked.
#define | SPA_KEY_NODE_PAUSE_ON_IDLE "node.pause-on-idle"
| if the node should be paused immediately when idle.
#define | SPA_KEY_NODE_MONITOR "node.monitor"
| the node has monitor ports
#define | SPA_KEY_PORT_NAME "port.name"
| port keys
#define | SPA_KEY_PORT_ALIAS "port.alias"
| a port alias
#define | SPA_KEY_PORT_MONITOR "port.monitor"
| this port is a monitor port
#define | SPA_KEY_PORT_IGNORE_LATENCY "port.ignore-latency"
| latency ignored by peers
#define | SPA_KEY_PORT_GROUP "port.group"
| the port group this port belongs to
#define | SPA_API_NODE static inline
#define | SPA_TYPE_INTERFACE_Node SPA_TYPE_INFO_INTERFACE_BASE "Node"
#define | SPA_VERSION_NODE 0
#define | SPA_NODE_CHANGE_MASK_FLAGS (1u<<0)
#define | SPA_NODE_CHANGE_MASK_PROPS (1u<<1)
#define | SPA_NODE_CHANGE_MASK_PARAMS (1u<<2)
#define | SPA_NODE_FLAG_RT (1u<<0)
| node can do real-time processing
#define | SPA_NODE_FLAG_IN_DYNAMIC_PORTS (1u<<1)
| input ports can be added/removed
#define | SPA_NODE_FLAG_OUT_DYNAMIC_PORTS (1u<<2)
| output ports can be added/removed
#define | SPA_NODE_FLAG_IN_PORT_CONFIG (1u<<3)
| input ports can be reconfigured with PortConfig parameter
#define | SPA_NODE_FLAG_OUT_PORT_CONFIG (1u<<4)
| output ports can be reconfigured with PortConfig parameter
#define | SPA_NODE_FLAG_NEED_CONFIGURE (1u<<5)
| node needs configuration before it can be started.
#define | SPA_NODE_FLAG_ASYNC (1u<<6)
| the process function might not immediately produce or consume data but might offload the work to a worker thread.
#define | SPA_NODE_INFO_INIT()
#define | SPA_PORT_CHANGE_MASK_FLAGS (1u<<0)
#define | SPA_PORT_CHANGE_MASK_RATE (1u<<1)
#define | SPA_PORT_CHANGE_MASK_PROPS (1u<<2)
#define | SPA_PORT_CHANGE_MASK_PARAMS (1u<<3)
#define | SPA_PORT_FLAG_REMOVABLE (1u<<0)
| port can be removed
#define | SPA_PORT_FLAG_OPTIONAL (1u<<1)
| processing on port is optional
#define | SPA_PORT_FLAG_CAN_ALLOC_BUFFERS (1u<<2)
| the port can allocate buffer data
#define | SPA_PORT_FLAG_IN_PLACE (1u<<3)
| the port can process data in-place and will need a writable input buffer
#define | SPA_PORT_FLAG_NO_REF (1u<<4)
| the port does not keep a ref on the buffer.
#define | SPA_PORT_FLAG_LIVE (1u<<5)
| output buffers from this port are timestamped against a live clock.
#define | SPA_PORT_FLAG_PHYSICAL (1u<<6)
| connects to some device
#define | SPA_PORT_FLAG_TERMINAL (1u<<7)
| data was not created from this port or will not be made available on another port
#define | SPA_PORT_FLAG_DYNAMIC_DATA (1u<<8)
| data pointer on buffers can be changed.
#define | SPA_PORT_INFO_INIT()
#define | SPA_RESULT_TYPE_NODE_ERROR 1
#define | SPA_RESULT_TYPE_NODE_PARAMS 2
#define | SPA_NODE_EVENT_INFO 0
#define | SPA_NODE_EVENT_PORT_INFO 1
#define | SPA_NODE_EVENT_RESULT 2
#define | SPA_NODE_EVENT_EVENT 3
#define | SPA_NODE_EVENT_NUM 4
#define | SPA_VERSION_NODE_EVENTS 0
#define | SPA_NODE_CALLBACK_READY 0
#define | SPA_NODE_CALLBACK_REUSE_BUFFER 1
#define | SPA_NODE_CALLBACK_XRUN 2
#define | SPA_NODE_CALLBACK_NUM 3
#define | SPA_VERSION_NODE_CALLBACKS 0
#define | SPA_NODE_PARAM_FLAG_TEST_ONLY (1 << 0)
| flags that can be passed to set_param and port_set_param functions
#define | SPA_NODE_PARAM_FLAG_FIXATE (1 << 1)
| Fixate the non-optional unset fields.
#define | SPA_NODE_PARAM_FLAG_NEAREST (1 << 2)
| Allow set fields to be rounded to the nearest allowed field value.
#define | SPA_NODE_BUFFERS_FLAG_ALLOC (1 << 0)
| flags to pass to the use_buffers functions
#define | SPA_NODE_METHOD_ADD_LISTENER 0
#define | SPA_NODE_METHOD_SET_CALLBACKS 1
#define | SPA_NODE_METHOD_SYNC 2
#define | SPA_NODE_METHOD_ENUM_PARAMS 3
#define | SPA_NODE_METHOD_SET_PARAM 4
#define | SPA_NODE_METHOD_SET_IO 5
#define | SPA_NODE_METHOD_SEND_COMMAND 6
#define | SPA_NODE_METHOD_ADD_PORT 7
#define | SPA_NODE_METHOD_REMOVE_PORT 8
#define | SPA_NODE_METHOD_PORT_ENUM_PARAMS 9
#define | SPA_NODE_METHOD_PORT_SET_PARAM 10
#define | SPA_NODE_METHOD_PORT_USE_BUFFERS 11
#define | SPA_NODE_METHOD_PORT_SET_IO 12
#define | SPA_NODE_METHOD_PORT_REUSE_BUFFER 13
#define | SPA_NODE_METHOD_PROCESS 14
#define | SPA_NODE_METHOD_NUM 15
#define | SPA_VERSION_NODE_METHODS 0
#define | SPA_TYPE_INFO_IO SPA_TYPE_INFO_ENUM_BASE "IO"
#define | SPA_TYPE_INFO_IO_BASE SPA_TYPE_INFO_IO ":"
#define | SPA_TYPE_INFO_NodeEvent SPA_TYPE_INFO_EVENT_BASE "Node"
#define | SPA_TYPE_INFO_NODE_EVENT_BASE SPA_TYPE_INFO_NodeEvent ":"
#define | SPA_TYPE_INFO_NodeCommand SPA_TYPE_INFO_COMMAND_BASE "Node"
#define | SPA_TYPE_INFO_NODE_COMMAND_BASE SPA_TYPE_INFO_NodeCommand ":"
#define | SPA_API_NODE_UTILS static inline
#define | spa_node_emit(hooks, method, version, ...)
#define | spa_node_emit_info(hooks, ...)
#define | spa_node_emit_port_info(hooks, ...)
#define | spa_node_emit_result(hooks, ...)
#define | spa_node_emit_event(hooks, ...)
#define | spa_node_call(callbacks, method, version, ...)
#define | spa_node_call_ready(hook, ...)
#define | spa_node_call_reuse_buffer(hook, ...)
#define | spa_node_call_xrun(hook, ...)

## Functions
SPA_API_NODE int | spa_node_add_listener (struct spa_node *object, struct spa_hook *listener, const struct spa_node_events *events, void *data)
SPA_API_NODE int | spa_node_set_callbacks (struct spa_node *object, const struct spa_node_callbacks *callbacks, void *data)
SPA_API_NODE int | spa_node_sync (struct spa_node *object, int seq)
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)
SPA_API_NODE int | spa_node_set_param (struct spa_node *object, uint32_t id, uint32_t flags, const struct spa_pod *param)
SPA_API_NODE int | spa_node_set_io (struct spa_node *object, uint32_t id, void *data, size_t size)
SPA_API_NODE int | spa_node_send_command (struct spa_node *object, const struct spa_command *command)
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)
SPA_API_NODE int | spa_node_remove_port (struct spa_node *object, enum spa_direction direction, uint32_t port_id)
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)
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)
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)
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)
SPA_API_NODE int | spa_node_port_reuse_buffer (struct spa_node *object, uint32_t port_id, uint32_t buffer_id)
SPA_API_NODE int | spa_node_port_reuse_buffer_fast (struct spa_node *object, uint32_t port_id, uint32_t buffer_id)
SPA_API_NODE int | spa_node_process (struct spa_node *object)
SPA_API_NODE int | spa_node_process_fast (struct spa_node *object)
SPA_API_NODE_UTILS void | spa_result_func_node_params (void *data, int seq, int res 1, uint32_t type 1, const void *result)
SPA_API_NODE_UTILS int | spa_node_enum_params_sync (struct spa_node *node, uint32_t id, uint32_t *index, const struct spa_pod *filter, struct spa_pod **param, struct spa_pod_builder *builder)
SPA_API_NODE_UTILS int | spa_node_port_enum_params_sync (struct spa_node *node, enum spa_direction direction, uint32_t port_id, uint32_t id, uint32_t *index, const struct spa_pod *filter, struct spa_pod **param, struct spa_pod_builder *builder)

## Variables
static const struct spa_type_info | spa_type_io []
static const struct spa_type_info | spa_type_node_event_id []
static const struct spa_type_info | spa_type_node_event []
static const struct spa_type_info | spa_type_node_command_id []
static const struct spa_type_info | spa_type_node_command []

## Detailed Description

A spa_node is a component that can consume and produce buffers.

## Enumeration Type Documentation

## ◆ spa_node_command

enum spa_node_command

Enumerator
SPA_NODE_COMMAND_Suspend | suspend a node, this removes all configured formats and closes any devices
SPA_NODE_COMMAND_Pause | pause a node. this makes it stop emitting scheduling events
SPA_NODE_COMMAND_Start | start a node, this makes it start emitting scheduling events
SPA_NODE_COMMAND_Enable |
SPA_NODE_COMMAND_Disable |
SPA_NODE_COMMAND_Flush |
SPA_NODE_COMMAND_Drain |
SPA_NODE_COMMAND_Marker |
SPA_NODE_COMMAND_ParamBegin | begin a set of parameter enumerations or configuration that require the device to remain opened, like query formats and then set a format
SPA_NODE_COMMAND_ParamEnd | end a transaction
SPA_NODE_COMMAND_RequestProcess | Sent to a driver when some other node emitted the RequestProcess event.

## ◆ spa_node_event

enum spa_node_event

Enumerator
SPA_NODE_EVENT_Error |
SPA_NODE_EVENT_Buffering |
SPA_NODE_EVENT_RequestRefresh |
SPA_NODE_EVENT_RequestProcess |

## ◆ spa_event_node

enum spa_event_node

Enumerator
SPA_EVENT_NODE_START |

## ◆ spa_io_type

enum spa_io_type

IO areas.

IO information for a port on a node. This is allocated by the host and configured on a node or all ports for which IO is requested.

The plugin will communicate with the host through the IO areas. Different IO area types

Enumerator
SPA_IO_Invalid |
SPA_IO_Buffers | area to exchange buffers, struct spa_io_buffers
SPA_IO_Range | expected byte range, struct spa_io_range (currently not used in PipeWire)
SPA_IO_Clock | area to update clock information, struct spa_io_clock
SPA_IO_Latency | latency reporting, struct spa_io_latency (currently not used in PipeWire). See also spa_param_latency
SPA_IO_Control | area for control messages, struct spa_io_sequence
SPA_IO_Notify | area for notify messages, struct spa_io_sequence
SPA_IO_Position | position information in the graph, struct spa_io_position
SPA_IO_RateMatch | rate matching between nodes, struct spa_io_rate_match
SPA_IO_Memory | memory pointer, struct spa_io_memory (currently not used in PipeWire)
SPA_IO_AsyncBuffers | async area to exchange buffers, struct spa_io_async_buffers

## ◆ spa_io_position_state

enum spa_io_position_state

Enumerator
SPA_IO_POSITION_STATE_STOPPED |
SPA_IO_POSITION_STATE_STARTING |
SPA_IO_POSITION_STATE_RUNNING |

## Macro Definition Documentation

## ◆ SPA_NODE_COMMAND_ID

#define SPA_NODE_COMMAND_ID | ( |  | cmd | ) |

Value:
SPA_COMMAND_ID(cmd, SPA_TYPE_COMMAND_Node)
SPA_COMMAND_ID
#define SPA_COMMAND_ID(cmd, type)
Definition command.h:36
SPA_TYPE_COMMAND_Node
@ SPA_TYPE_COMMAND_Node
Definition type.h:80

Examples
  video-play-pull.c.

## ◆ SPA_NODE_COMMAND_INIT

#define SPA_NODE_COMMAND_INIT | ( |  | id | ) |

Value:
SPA_COMMAND_INIT(SPA_TYPE_COMMAND_Node, id)
SPA_COMMAND_INIT
#define SPA_COMMAND_INIT(type, id)
Definition command.h:43

Examples
  local-v4l2.c, spa/examples/adapter-control.c, spa/examples/example-control.c, spa/examples/local-libcamera.c, spa/examples/local-v4l2.c, and spa/examples/local-videotestsrc.c.

## ◆ SPA_NODE_EVENT_ID

#define SPA_NODE_EVENT_ID | ( |  | ev | ) |

Value:
SPA_EVENT_ID(ev, SPA_TYPE_EVENT_Node)
SPA_EVENT_ID
#define SPA_EVENT_ID(ev, type)
Definition event.h:35
SPA_TYPE_EVENT_Node
@ SPA_TYPE_EVENT_Node
Definition type.h:74

## ◆ SPA_NODE_EVENT_INIT

#define SPA_NODE_EVENT_INIT | ( |  | id | ) |

Value:
SPA_EVENT_INIT(SPA_TYPE_EVENT_Node, id)
SPA_EVENT_INIT
#define SPA_EVENT_INIT(type, id)
Definition event.h:42

## ◆ SPA_STATUS_OK

#define SPA_STATUS_OK 0

Examples
  spa/examples/adapter-control.c.

## ◆ SPA_STATUS_NEED_DATA

#define SPA_STATUS_NEED_DATA (1<<0)

Examples
  export-sink.c, local-v4l2.c, spa/examples/adapter-control.c, spa/examples/local-libcamera.c, spa/examples/local-v4l2.c, and spa/examples/local-videotestsrc.c.

## ◆ SPA_STATUS_HAVE_DATA

#define SPA_STATUS_HAVE_DATA (1<<1)

Examples
  export-sink.c, export-source.c, local-v4l2.c, spa/examples/adapter-control.c, spa/examples/local-libcamera.c, spa/examples/local-v4l2.c, and spa/examples/local-videotestsrc.c.

## ◆ SPA_STATUS_STOPPED

#define SPA_STATUS_STOPPED (1<<2)

Examples
  spa/examples/adapter-control.c.

## ◆ SPA_STATUS_DRAINED

#define SPA_STATUS_DRAINED (1<<3)

## ◆ SPA_IO_BUFFERS_INIT

#define SPA_IO_BUFFERS_INIT ((struct spa_io_buffers) { SPA_STATUS_OK, SPA_ID_INVALID, })

Examples
  local-v4l2.c, spa/examples/adapter-control.c, spa/examples/example-control.c, spa/examples/local-libcamera.c, spa/examples/local-v4l2.c, and spa/examples/local-videotestsrc.c.

## ◆ SPA_IO_MEMORY_INIT

#define SPA_IO_MEMORY_INIT ((struct spa_io_memory) { SPA_STATUS_OK, 0, NULL, })

## ◆ SPA_IO_CLOCK_FLAG_FREEWHEEL

#define SPA_IO_CLOCK_FLAG_FREEWHEEL (1u<<0) /* graph is freewheeling */

## ◆ SPA_IO_CLOCK_FLAG_XRUN_RECOVER

#define SPA_IO_CLOCK_FLAG_XRUN_RECOVER (1u<<1) /* recovering from xrun */

## ◆ SPA_IO_CLOCK_FLAG_LAZY

#define SPA_IO_CLOCK_FLAG_LAZY (1u<<2) /* lazy scheduling */

## ◆ SPA_IO_CLOCK_FLAG_NO_RATE

#define SPA_IO_CLOCK_FLAG_NO_RATE

## ◆ SPA_IO_VIDEO_SIZE_VALID

#define SPA_IO_VIDEO_SIZE_VALID (1<<0)

## ◆ SPA_IO_SEGMENT_BAR_FLAG_VALID

#define SPA_IO_SEGMENT_BAR_FLAG_VALID (1<<0)

## ◆ SPA_IO_SEGMENT_VIDEO_FLAG_VALID

#define SPA_IO_SEGMENT_VIDEO_FLAG_VALID (1<<0)

## ◆ SPA_IO_SEGMENT_VIDEO_FLAG_DROP_FRAME

#define SPA_IO_SEGMENT_VIDEO_FLAG_DROP_FRAME (1<<1)

## ◆ SPA_IO_SEGMENT_VIDEO_FLAG_PULL_DOWN

#define SPA_IO_SEGMENT_VIDEO_FLAG_PULL_DOWN (1<<2)

## ◆ SPA_IO_SEGMENT_VIDEO_FLAG_INTERLACED

#define SPA_IO_SEGMENT_VIDEO_FLAG_INTERLACED (1<<3)

## ◆ SPA_IO_SEGMENT_FLAG_LOOPING

#define SPA_IO_SEGMENT_FLAG_LOOPING (1<<0)

after the duration, the segment repeats

## ◆ SPA_IO_SEGMENT_FLAG_NO_POSITION

#define SPA_IO_SEGMENT_FLAG_NO_POSITION (1<<1)

position is invalid.

The position can be invalid after a seek, for example, when the exact mapping of the extra segment info (bar, video, ...) to position has not been determined yet

## ◆ SPA_IO_POSITION_MAX_SEGMENTS

#define SPA_IO_POSITION_MAX_SEGMENTS 8

the maximum number of segments visible in the future

## ◆ SPA_IO_RATE_MATCH_FLAG_ACTIVE

#define SPA_IO_RATE_MATCH_FLAG_ACTIVE (1 << 0)

## ◆ SPA_KEY_NODE_NAME

#define SPA_KEY_NODE_NAME "node.name"

node keys

a node name

## ◆ SPA_KEY_NODE_DESCRIPTION

#define SPA_KEY_NODE_DESCRIPTION "node.description"

localized human readable node one-line description.

Ex. "Foobar USB Headset"

## ◆ SPA_KEY_NODE_LATENCY

#define SPA_KEY_NODE_LATENCY "node.latency"

the requested node latency

## ◆ SPA_KEY_NODE_MAX_LATENCY

#define SPA_KEY_NODE_MAX_LATENCY "node.max-latency"

maximum supported latency

## ◆ SPA_KEY_NODE_DRIVER

#define SPA_KEY_NODE_DRIVER "node.driver"

the node can be a driver

## ◆ SPA_KEY_NODE_ALWAYS_PROCESS

#define SPA_KEY_NODE_ALWAYS_PROCESS "node.always-process"

call the process function even if not linked.

## ◆ SPA_KEY_NODE_PAUSE_ON_IDLE

#define SPA_KEY_NODE_PAUSE_ON_IDLE "node.pause-on-idle"

if the node should be paused immediately when idle.

## ◆ SPA_KEY_NODE_MONITOR

#define SPA_KEY_NODE_MONITOR "node.monitor"

the node has monitor ports

## ◆ SPA_KEY_PORT_NAME

#define SPA_KEY_PORT_NAME "port.name"

port keys

a port name

## ◆ SPA_KEY_PORT_ALIAS

#define SPA_KEY_PORT_ALIAS "port.alias"

a port alias

## ◆ SPA_KEY_PORT_MONITOR

#define SPA_KEY_PORT_MONITOR "port.monitor"

this port is a monitor port

## ◆ SPA_KEY_PORT_IGNORE_LATENCY

#define SPA_KEY_PORT_IGNORE_LATENCY "port.ignore-latency"

latency ignored by peers

## ◆ SPA_KEY_PORT_GROUP

#define SPA_KEY_PORT_GROUP "port.group"

the port group this port belongs to

## ◆ SPA_API_NODE

#define SPA_API_NODE static inline

## ◆ SPA_TYPE_INTERFACE_Node

#define SPA_TYPE_INTERFACE_Node SPA_TYPE_INFO_INTERFACE_BASE "Node"

Examples
  bluez-session.c, export-sink.c, export-source.c, export-spa.c, local-v4l2.c, spa/examples/adapter-control.c, spa/examples/example-control.c, spa/examples/local-libcamera.c, spa/examples/local-v4l2.c, and spa/examples/local-videotestsrc.c.

## ◆ SPA_VERSION_NODE

#define SPA_VERSION_NODE 0

Examples
  export-sink.c, and export-source.c.

## ◆ SPA_NODE_CHANGE_MASK_FLAGS

#define SPA_NODE_CHANGE_MASK_FLAGS (1u<<0)

## ◆ SPA_NODE_CHANGE_MASK_PROPS

#define SPA_NODE_CHANGE_MASK_PROPS (1u<<1)

## ◆ SPA_NODE_CHANGE_MASK_PARAMS

#define SPA_NODE_CHANGE_MASK_PARAMS (1u<<2)

## ◆ SPA_NODE_FLAG_RT

#define SPA_NODE_FLAG_RT (1u<<0)

node can do real-time processing

## ◆ SPA_NODE_FLAG_IN_DYNAMIC_PORTS

#define SPA_NODE_FLAG_IN_DYNAMIC_PORTS (1u<<1)

input ports can be added/removed

## ◆ SPA_NODE_FLAG_OUT_DYNAMIC_PORTS

#define SPA_NODE_FLAG_OUT_DYNAMIC_PORTS (1u<<2)

output ports can be added/removed

## ◆ SPA_NODE_FLAG_IN_PORT_CONFIG

#define SPA_NODE_FLAG_IN_PORT_CONFIG (1u<<3)

input ports can be reconfigured with PortConfig parameter

## ◆ SPA_NODE_FLAG_OUT_PORT_CONFIG

#define SPA_NODE_FLAG_OUT_PORT_CONFIG (1u<<4)

output ports can be reconfigured with PortConfig parameter

## ◆ SPA_NODE_FLAG_NEED_CONFIGURE

#define SPA_NODE_FLAG_NEED_CONFIGURE (1u<<5)

node needs configuration before it can be started.

## ◆ SPA_NODE_FLAG_ASYNC

#define SPA_NODE_FLAG_ASYNC (1u<<6)

the process function might not immediately produce or consume data but might offload the work to a worker thread.

## ◆ SPA_NODE_INFO_INIT

#define SPA_NODE_INFO_INIT | ( |  | ) |

Value:
((struct spa_node_info) { 0, })
spa_node_info
Node information structure.
Definition node.h:58

## ◆ SPA_PORT_CHANGE_MASK_FLAGS

#define SPA_PORT_CHANGE_MASK_FLAGS (1u<<0)

Examples
  export-sink.c, and export-source.c.

## ◆ SPA_PORT_CHANGE_MASK_RATE

#define SPA_PORT_CHANGE_MASK_RATE (1u<<1)

## ◆ SPA_PORT_CHANGE_MASK_PROPS

#define SPA_PORT_CHANGE_MASK_PROPS (1u<<2)

Examples
  export-source.c.

## ◆ SPA_PORT_CHANGE_MASK_PARAMS

#define SPA_PORT_CHANGE_MASK_PARAMS (1u<<3)

Examples
  export-sink.c, and export-source.c.

## ◆ SPA_PORT_FLAG_REMOVABLE

#define SPA_PORT_FLAG_REMOVABLE (1u<<0)

port can be removed

## ◆ SPA_PORT_FLAG_OPTIONAL

#define SPA_PORT_FLAG_OPTIONAL (1u<<1)

processing on port is optional

## ◆ SPA_PORT_FLAG_CAN_ALLOC_BUFFERS

#define SPA_PORT_FLAG_CAN_ALLOC_BUFFERS (1u<<2)

the port can allocate buffer data

## ◆ SPA_PORT_FLAG_IN_PLACE

#define SPA_PORT_FLAG_IN_PLACE (1u<<3)

the port can process data in-place and will need a writable input buffer

## ◆ SPA_PORT_FLAG_NO_REF

#define SPA_PORT_FLAG_NO_REF (1u<<4)

the port does not keep a ref on the buffer.

This means the node will always completely consume the input buffer and it will be recycled after process.

## ◆ SPA_PORT_FLAG_LIVE

#define SPA_PORT_FLAG_LIVE (1u<<5)

output buffers from this port are timestamped against a live clock.

## ◆ SPA_PORT_FLAG_PHYSICAL

#define SPA_PORT_FLAG_PHYSICAL (1u<<6)

connects to some device

## ◆ SPA_PORT_FLAG_TERMINAL

#define SPA_PORT_FLAG_TERMINAL (1u<<7)

data was not created from this port or will not be made available on another port

## ◆ SPA_PORT_FLAG_DYNAMIC_DATA

#define SPA_PORT_FLAG_DYNAMIC_DATA (1u<<8)

data pointer on buffers can be changed.

Only the buffer data marked as DYNAMIC can be changed.

## ◆ SPA_PORT_INFO_INIT

#define SPA_PORT_INFO_INIT | ( |  | ) |

Value:
((struct spa_port_info) { 0, })
spa_port_info
Port information structure.
Definition node.h:103

Examples
  export-sink.c, and export-source.c.

## ◆ SPA_RESULT_TYPE_NODE_ERROR

#define SPA_RESULT_TYPE_NODE_ERROR 1

## ◆ SPA_RESULT_TYPE_NODE_PARAMS

#define SPA_RESULT_TYPE_NODE_PARAMS 2

Examples
  export-sink.c, and export-source.c.

## ◆ SPA_NODE_EVENT_INFO

#define SPA_NODE_EVENT_INFO 0

## ◆ SPA_NODE_EVENT_PORT_INFO

#define SPA_NODE_EVENT_PORT_INFO 1

## ◆ SPA_NODE_EVENT_RESULT

#define SPA_NODE_EVENT_RESULT 2

## ◆ SPA_NODE_EVENT_EVENT

#define SPA_NODE_EVENT_EVENT 3

## ◆ SPA_NODE_EVENT_NUM

#define SPA_NODE_EVENT_NUM 4

## ◆ SPA_VERSION_NODE_EVENTS

#define SPA_VERSION_NODE_EVENTS 0

## ◆ SPA_NODE_CALLBACK_READY

#define SPA_NODE_CALLBACK_READY 0

## ◆ SPA_NODE_CALLBACK_REUSE_BUFFER

#define SPA_NODE_CALLBACK_REUSE_BUFFER 1

## ◆ SPA_NODE_CALLBACK_XRUN

#define SPA_NODE_CALLBACK_XRUN 2

## ◆ SPA_NODE_CALLBACK_NUM

#define SPA_NODE_CALLBACK_NUM 3

## ◆ SPA_VERSION_NODE_CALLBACKS

#define SPA_VERSION_NODE_CALLBACKS 0

Examples
  local-v4l2.c, spa/examples/adapter-control.c, spa/examples/example-control.c, spa/examples/local-libcamera.c, spa/examples/local-v4l2.c, and spa/examples/local-videotestsrc.c.

## ◆ SPA_NODE_PARAM_FLAG_TEST_ONLY

#define SPA_NODE_PARAM_FLAG_TEST_ONLY (1 << 0)

flags that can be passed to set_param and port_set_param functions

Just check if the param is accepted

## ◆ SPA_NODE_PARAM_FLAG_FIXATE

#define SPA_NODE_PARAM_FLAG_FIXATE (1 << 1)

Fixate the non-optional unset fields.

## ◆ SPA_NODE_PARAM_FLAG_NEAREST

#define SPA_NODE_PARAM_FLAG_NEAREST (1 << 2)

Allow set fields to be rounded to the nearest allowed field value.

## ◆ SPA_NODE_BUFFERS_FLAG_ALLOC

#define SPA_NODE_BUFFERS_FLAG_ALLOC (1 << 0)

flags to pass to the use_buffers functions

Allocate memory for the buffers. This flag is ignored when the port does not have the SPA_PORT_FLAG_CAN_ALLOC_BUFFERS set.

Examples
  local-v4l2.c, spa/examples/local-libcamera.c, spa/examples/local-v4l2.c, and spa/examples/local-videotestsrc.c.

## ◆ SPA_NODE_METHOD_ADD_LISTENER

#define SPA_NODE_METHOD_ADD_LISTENER 0

## ◆ SPA_NODE_METHOD_SET_CALLBACKS

#define SPA_NODE_METHOD_SET_CALLBACKS 1

## ◆ SPA_NODE_METHOD_SYNC

#define SPA_NODE_METHOD_SYNC 2

## ◆ SPA_NODE_METHOD_ENUM_PARAMS

#define SPA_NODE_METHOD_ENUM_PARAMS 3

## ◆ SPA_NODE_METHOD_SET_PARAM

#define SPA_NODE_METHOD_SET_PARAM 4

## ◆ SPA_NODE_METHOD_SET_IO

#define SPA_NODE_METHOD_SET_IO 5

## ◆ SPA_NODE_METHOD_SEND_COMMAND

#define SPA_NODE_METHOD_SEND_COMMAND 6

## ◆ SPA_NODE_METHOD_ADD_PORT

#define SPA_NODE_METHOD_ADD_PORT 7

## ◆ SPA_NODE_METHOD_REMOVE_PORT

#define SPA_NODE_METHOD_REMOVE_PORT 8

## ◆ SPA_NODE_METHOD_PORT_ENUM_PARAMS

#define SPA_NODE_METHOD_PORT_ENUM_PARAMS 9

## ◆ SPA_NODE_METHOD_PORT_SET_PARAM

#define SPA_NODE_METHOD_PORT_SET_PARAM 10

## ◆ SPA_NODE_METHOD_PORT_USE_BUFFERS

#define SPA_NODE_METHOD_PORT_USE_BUFFERS 11

## ◆ SPA_NODE_METHOD_PORT_SET_IO

#define SPA_NODE_METHOD_PORT_SET_IO 12

## ◆ SPA_NODE_METHOD_PORT_REUSE_BUFFER

#define SPA_NODE_METHOD_PORT_REUSE_BUFFER 13

## ◆ SPA_NODE_METHOD_PROCESS

#define SPA_NODE_METHOD_PROCESS 14

## ◆ SPA_NODE_METHOD_NUM

#define SPA_NODE_METHOD_NUM 15

## ◆ SPA_VERSION_NODE_METHODS

#define SPA_VERSION_NODE_METHODS 0

Examples
  export-sink.c, and export-source.c.

## ◆ SPA_TYPE_INFO_IO

#define SPA_TYPE_INFO_IO SPA_TYPE_INFO_ENUM_BASE "IO"

## ◆ SPA_TYPE_INFO_IO_BASE

#define SPA_TYPE_INFO_IO_BASE SPA_TYPE_INFO_IO ":"

## ◆ SPA_TYPE_INFO_NodeEvent

#define SPA_TYPE_INFO_NodeEvent SPA_TYPE_INFO_EVENT_BASE "Node"

## ◆ SPA_TYPE_INFO_NODE_EVENT_BASE

#define SPA_TYPE_INFO_NODE_EVENT_BASE SPA_TYPE_INFO_NodeEvent ":"

## ◆ SPA_TYPE_INFO_NodeCommand

#define SPA_TYPE_INFO_NodeCommand SPA_TYPE_INFO_COMMAND_BASE "Node"

## ◆ SPA_TYPE_INFO_NODE_COMMAND_BASE

#define SPA_TYPE_INFO_NODE_COMMAND_BASE SPA_TYPE_INFO_NodeCommand ":"

## ◆ SPA_API_NODE_UTILS

#define SPA_API_NODE_UTILS static inline

## ◆ spa_node_emit

#define spa_node_emit | ( |  | hooks,
|  |  | method,
|  |  | version,
|  |  | ... )

## ◆ spa_node_emit_info

#define spa_node_emit_info | ( |  | hooks,
|  |  | ... )

Value:
spa_node_emit(hooks,info, 0, __VA_ARGS__)
spa_node_emit
#define spa_node_emit(hooks, method, version,...)
Definition utils.h:123

## ◆ spa_node_emit_port_info

#define spa_node_emit_port_info | ( |  | hooks,
|  |  | ... )

Value:
spa_node_emit(hooks,port_info, 0, __VA_ARGS__)

Examples
  export-sink.c, and export-source.c.

## ◆ spa_node_emit_result

#define spa_node_emit_result | ( |  | hooks,
|  |  | ... )

Value:
spa_node_emit(hooks,result, 0, __VA_ARGS__)

Examples
  export-sink.c, and export-source.c.

## ◆ spa_node_emit_event

#define spa_node_emit_event | ( |  | hooks,
|  |  | ... )

Value:
spa_node_emit(hooks,event, 0, __VA_ARGS__)

## ◆ spa_node_call

#define spa_node_call | ( |  | callbacks,
|  |  | method,
|  |  | version,
|  |  | ... )

## ◆ spa_node_call_ready

#define spa_node_call_ready | ( |  | hook,
|  |  | ... )

Value:
spa_node_call(hook, ready, 0, __VA_ARGS__)
spa_node_call
#define spa_node_call(callbacks, method, version,...)
Definition utils.h:133

## ◆ spa_node_call_reuse_buffer

#define spa_node_call_reuse_buffer | ( |  | hook,
|  |  | ... )

Value:
spa_node_call(hook, reuse_buffer, 0, __VA_ARGS__)

## ◆ spa_node_call_xrun

#define spa_node_call_xrun | ( |  | hook,
|  |  | ... )

Value:
spa_node_call(hook, xrun, 0, __VA_ARGS__)

## Function Documentation

## ◆ 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 )

## ◆ spa_node_set_callbacks()

SPA_API_NODE int spa_node_set_callbacks | ( | struct spa_node * | object,
|  | const struct spa_node_callbacks * | callbacks,
|  | void * | data )

Examples
  local-v4l2.c, spa/examples/adapter-control.c, spa/examples/example-control.c, spa/examples/local-libcamera.c, spa/examples/local-v4l2.c, and spa/examples/local-videotestsrc.c.

## ◆ spa_node_sync()

SPA_API_NODE int spa_node_sync | ( | struct spa_node * | object,
|  | int | seq )

## ◆ 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 )

## ◆ 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 )

Examples
  local-v4l2.c, spa/examples/adapter-control.c, spa/examples/example-control.c, spa/examples/local-libcamera.c, spa/examples/local-v4l2.c, and spa/examples/local-videotestsrc.c.

## ◆ spa_node_set_io()

SPA_API_NODE int spa_node_set_io | ( | struct spa_node * | object,
|  | uint32_t | id,
|  | void * | data,
|  | size_t | size )

Examples
  spa/examples/adapter-control.c.

## ◆ spa_node_send_command()

SPA_API_NODE int spa_node_send_command | ( | struct spa_node * | object,
|  | const struct spa_command * | command )

Examples
  local-v4l2.c, spa/examples/adapter-control.c, spa/examples/example-control.c, spa/examples/local-libcamera.c, spa/examples/local-v4l2.c, and spa/examples/local-videotestsrc.c.

## ◆ 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 )

## ◆ spa_node_remove_port()

SPA_API_NODE int spa_node_remove_port | ( | struct spa_node * | object,
|  | enum spa_direction | direction,
|  | uint32_t | port_id )

## ◆ 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 )

## ◆ 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 )

Examples
  local-v4l2.c, spa/examples/adapter-control.c, spa/examples/example-control.c, spa/examples/local-libcamera.c, spa/examples/local-v4l2.c, and spa/examples/local-videotestsrc.c.

## ◆ 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 )

Examples
  local-v4l2.c, spa/examples/adapter-control.c, spa/examples/example-control.c, spa/examples/local-libcamera.c, spa/examples/local-v4l2.c, and spa/examples/local-videotestsrc.c.

## ◆ 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 )

Examples
  local-v4l2.c, spa/examples/adapter-control.c, spa/examples/example-control.c, spa/examples/local-libcamera.c, spa/examples/local-v4l2.c, and spa/examples/local-videotestsrc.c.

## ◆ 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 )

## ◆ 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 )

## ◆ spa_node_process()

SPA_API_NODE int spa_node_process | ( | struct spa_node * | object | ) |

Examples
  local-v4l2.c, spa/examples/local-libcamera.c, spa/examples/local-v4l2.c, and spa/examples/local-videotestsrc.c.

## ◆ spa_node_process_fast()

SPA_API_NODE int spa_node_process_fast | ( | struct spa_node * | object | ) |

## ◆ spa_result_func_node_params()

SPA_API_NODE_UTILS void spa_result_func_node_params | ( | void * | data,
|  | int | seq,
|  | int res | 1,
|  | uint32_t type | 1,
|  | const void * | result )

## ◆ spa_node_enum_params_sync()

SPA_API_NODE_UTILS int spa_node_enum_params_sync | ( | struct spa_node * | node,
|  | uint32_t | id,
|  | uint32_t * | index,
|  | const struct spa_pod * | filter,
|  | struct spa_pod ** | param,
|  | struct spa_pod_builder * | builder )

Examples
  local-v4l2.c, spa/examples/local-libcamera.c, spa/examples/local-v4l2.c, and spa/examples/local-videotestsrc.c.

## ◆ spa_node_port_enum_params_sync()

SPA_API_NODE_UTILS int spa_node_port_enum_params_sync | ( | struct spa_node * | node,
|  | enum spa_direction | direction,
|  | uint32_t | port_id,
|  | uint32_t | id,
|  | uint32_t * | index,
|  | const struct spa_pod * | filter,
|  | struct spa_pod ** | param,
|  | struct spa_pod_builder * | builder )

Examples
  spa/examples/adapter-control.c.

## Variable Documentation

## ◆ spa_type_io

const struct spa_type_info spa_type_io[]
| static

## ◆ spa_type_node_event_id

const struct spa_type_info spa_type_node_event_id[]
| static

## ◆ spa_type_node_event

const struct spa_type_info spa_type_node_event[]
| static

## ◆ spa_type_node_command_id

const struct spa_type_info spa_type_node_command_id[]
| static

## ◆ spa_type_node_command

const struct spa_type_info spa_type_node_command[]
| static