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 , SPA_NODE_COMMAND_User }
enum | spa_command_node { SPA_COMMAND_NODE_START , SPA_COMMAND_NODE_START_User = 0x1000 , SPA_COMMAND_NODE_extra , SPA_COMMAND_NODE_START_CUSTOM = 0x1000000 }
enum | spa_node_event { SPA_NODE_EVENT_Error , SPA_NODE_EVENT_Buffering , SPA_NODE_EVENT_RequestRefresh , SPA_NODE_EVENT_RequestProcess , SPA_NODE_EVENT_User }
enum | spa_event_node { SPA_EVENT_NODE_START , SPA_EVENT_NODE_START_User = 0x1000 , SPA_EVENT_NODE_extra , SPA_EVENT_NODE_START_CUSTOM = 0x1000000 }
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)
| A node's process callback did not complete within the last cycle's deadline, resulting in an xrun.
#define | SPA_IO_CLOCK_FLAG_LAZY (1u<<2)
| The driver uses lazy scheduling.
#define | SPA_IO_CLOCK_FLAG_NO_RATE (1u<<3)
| The rate of the clock is only approximately.
#define | SPA_IO_CLOCK_FLAG_DISCONT (1u<<4)
| The clock experienced a discontinuity in its timestamps since the last cycle.
#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_COMMAND_User | User defined command.

## spa_command_node

enum spa_command_node

Enumerator
SPA_COMMAND_NODE_START |
SPA_COMMAND_NODE_START_User |
SPA_COMMAND_NODE_extra |
SPA_COMMAND_NODE_START_CUSTOM | extra info (String)

## 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_NODE_EVENT_User |

## spa_event_node

enum spa_event_node

Enumerator
SPA_EVENT_NODE_START |
SPA_EVENT_NODE_START_User |
SPA_EVENT_NODE_extra |
SPA_EVENT_NODE_START_CUSTOM | extra info (String)

## 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.

It runs at the maximum possible rate, only constrained by the processing power of the machine it runs on. This can be useful for offline processing, where processing in real time is not desired.

## SPA_IO_CLOCK_FLAG_XRUN_RECOVER

#define SPA_IO_CLOCK_FLAG_XRUN_RECOVER (1u<<1)

A node's process callback did not complete within the last cycle's deadline, resulting in an xrun.

This flag is not set for the entire graph. Instead, it is set at the start of the current cycle before a node that experienced an xrun has its process callback invoked. After said callback finished, the flag is cleared again. That way, the node knows that during the last cycle it experienced an xrun. They can use this information for example to resynchronize or clear custom stale states.

## SPA_IO_CLOCK_FLAG_LAZY

#define SPA_IO_CLOCK_FLAG_LAZY (1u<<2)

The driver uses lazy scheduling.

For details, see PW_KEY_NODE_SUPPORTS_LAZY .

## SPA_IO_CLOCK_FLAG_NO_RATE

#define SPA_IO_CLOCK_FLAG_NO_RATE (1u<<3)

The rate of the clock is only approximately.

It is recommended to use the nsec as a clock source. The rate_diff contains the measured inaccuracy.

## SPA_IO_CLOCK_FLAG_DISCONT

#define SPA_IO_CLOCK_FLAG_DISCONT (1u<<4)

The clock experienced a discontinuity in its timestamps since the last cycle.

If this is set, nodes know that timestamps between the last and the current cycle cannot be assumed to be continuous. Nodes that synchronize playback against clock timestamps should resynchronize (for example by flushing buffers to avoid incorrect delays). This differs from an xrun in that it is not necessariy an error and that it is not caused by missed process deadlines. If for example a custom network time based driver starts to follow a different time server, and the offset between that server and its local clock consequently suddenly changes, then that driver should set this flag.

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