PipeWire 1.0.5

Loading...
Searching...
No Matches
io.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_IO_H
6#define SPA_IO_H
7
8#ifdef __cplusplus
9 extern "C" {
10#endif
11
17#include <spa/utils/defs.h>
18#include <spa/pod/pod.h>
19
31 enum spa_io_type {
32 SPA_IO_Invalid,
33 SPA_IO_Buffers,
34 SPA_IO_Range,
35 SPA_IO_Clock,
36 SPA_IO_Latency,
37 SPA_IO_Control,
38 SPA_IO_Notify,
39 SPA_IO_Position,
40 SPA_IO_RateMatch,
41 SPA_IO_Memory,
42};
43
73 struct spa_io_buffers {
74#define SPA_STATUS_OK 0
75#define SPA_STATUS_NEED_DATA (1<<0)
76#define SPA_STATUS_HAVE_DATA (1<<1)
77#define SPA_STATUS_STOPPED (1<<2)
78#define SPA_STATUS_DRAINED (1<<3)
79 int32_t status;
80 uint32_t buffer_id;
81};
82
83#define SPA_IO_BUFFERS_INIT ((struct spa_io_buffers) { SPA_STATUS_OK, SPA_ID_INVALID, })
84
88 struct spa_io_memory {
89 int32_t status;
90 uint32_t size;
91 void *data;
92};
93#define SPA_IO_MEMORY_INIT ((struct spa_io_memory) { SPA_STATUS_OK, 0, NULL, })
94
96 struct spa_io_range {
97 uint64_t offset;
98 uint32_t min_size;
99 uint32_t max_size;
100};
101
112 struct spa_io_clock {
113#define SPA_IO_CLOCK_FLAG_FREEWHEEL (1u<<0)
114 uint32_t flags;
115 uint32_t id;
116 char name[64];
119 uint64_t nsec;
120 struct spa_fraction rate;
121 uint64_t position;
122 uint64_t duration;
123 int64_t delay;
125 double rate_diff;
126 uint64_t next_nsec;
128 struct spa_fraction target_rate;
129 uint64_t target_duration;
130 uint32_t target_seq;
132 uint32_t padding;
133 uint64_t xrun;
134};
135
136/* the size of the video in this cycle */
137 struct spa_io_video_size {
138#define SPA_IO_VIDEO_SIZE_VALID (1<<0)
139 uint32_t flags;
140 uint32_t stride;
141 struct spa_rectangle size;
142 struct spa_fraction framerate;
145 uint32_t padding[4];
146};
147
149 struct spa_io_latency {
150 struct spa_fraction rate;
151 uint64_t min;
152 uint64_t max;
153};
154
156 struct spa_io_sequence {
157 struct spa_pod_sequence sequence;
158};
159
161 struct spa_io_segment_bar {
162#define SPA_IO_SEGMENT_BAR_FLAG_VALID (1<<0)
163 uint32_t flags;
164 uint32_t offset;
165 float signature_num;
166 float signature_denom;
167 double bpm;
168 double beat;
169 uint32_t padding[8];
170};
171
173 struct spa_io_segment_video {
174#define SPA_IO_SEGMENT_VIDEO_FLAG_VALID (1<<0)
175#define SPA_IO_SEGMENT_VIDEO_FLAG_DROP_FRAME (1<<1)
176#define SPA_IO_SEGMENT_VIDEO_FLAG_PULL_DOWN (1<<2)
177#define SPA_IO_SEGMENT_VIDEO_FLAG_INTERLACED (1<<3)
178 uint32_t flags;
179 uint32_t offset;
180 struct spa_fraction framerate;
181 uint32_t hours;
182 uint32_t minutes;
183 uint32_t seconds;
184 uint32_t frames;
185 uint32_t field_count;
186 uint32_t padding[11];
187};
188
209 struct spa_io_segment {
210 uint32_t version;
211#define SPA_IO_SEGMENT_FLAG_LOOPING (1<<0)
212#define SPA_IO_SEGMENT_FLAG_NO_POSITION (1<<1)
216 uint32_t flags;
217 uint64_t start;
221 uint64_t duration;
226 double rate;
228 uint64_t position;
232 struct spa_io_segment_bar bar;
233 struct spa_io_segment_video video;
234};
235
236 enum spa_io_position_state {
237 SPA_IO_POSITION_STATE_STOPPED,
238 SPA_IO_POSITION_STATE_STARTING,
239 SPA_IO_POSITION_STATE_RUNNING,
240};
241
243#define SPA_IO_POSITION_MAX_SEGMENTS 8
244
257 struct spa_io_position {
258 struct spa_io_clock clock;
260 struct spa_io_video_size video;
261 int64_t offset;
266 uint32_t state;
268 uint32_t n_segments;
269 struct spa_io_segment segments[SPA_IO_POSITION_MAX_SEGMENTS];
270};
271
273 struct spa_io_rate_match {
274 uint32_t delay;
275 uint32_t size;
276 double rate;
277#define SPA_IO_RATE_MATCH_FLAG_ACTIVE (1 << 0)
278 uint32_t flags;
279 uint32_t padding[7];
280};
281
286#ifdef __cplusplus
287} /* extern "C" */
288#endif
289
290#endif /* SPA_IO_H */
defs.h
spa/utils/defs.h
spa_io_position_state
spa_io_position_state
Definition io.h:257
spa_io_type
spa_io_type
IO areas.
Definition io.h:36
SPA_IO_POSITION_MAX_SEGMENTS
#define SPA_IO_POSITION_MAX_SEGMENTS
the maximum number of segments visible in the future
Definition io.h:265
SPA_IO_POSITION_STATE_RUNNING
@ SPA_IO_POSITION_STATE_RUNNING
Definition io.h:260
SPA_IO_POSITION_STATE_STOPPED
@ SPA_IO_POSITION_STATE_STOPPED
Definition io.h:258
SPA_IO_POSITION_STATE_STARTING
@ SPA_IO_POSITION_STATE_STARTING
Definition io.h:259
SPA_IO_Notify
@ SPA_IO_Notify
area for notify messages, struct spa_io_sequence
Definition io.h:43
SPA_IO_Memory
@ SPA_IO_Memory
memory pointer, struct spa_io_memory
Definition io.h:46
SPA_IO_Clock
@ SPA_IO_Clock
area to update clock information, struct spa_io_clock
Definition io.h:40
SPA_IO_Control
@ SPA_IO_Control
area for control messages, struct spa_io_sequence
Definition io.h:42
SPA_IO_Latency
@ SPA_IO_Latency
latency reporting, struct spa_io_latency
Definition io.h:41
SPA_IO_Range
@ SPA_IO_Range
expected byte range, struct spa_io_range
Definition io.h:39
SPA_IO_Invalid
@ SPA_IO_Invalid
Definition io.h:37
SPA_IO_Position
@ SPA_IO_Position
position information in the graph, struct spa_io_position
Definition io.h:44
SPA_IO_Buffers
@ SPA_IO_Buffers
area to exchange buffers, struct spa_io_buffers
Definition io.h:38
SPA_IO_RateMatch
@ SPA_IO_RateMatch
rate matching between nodes, struct spa_io_rate_match
Definition io.h:45
pod.h
spa/pod/pod.h
spa_fraction
Definition defs.h:123
spa_io_buffers
IO area to exchange buffers.
Definition io.h:78
spa_io_buffers::status
int32_t status
the status code
Definition io.h:89
spa_io_buffers::buffer_id
uint32_t buffer_id
a buffer id
Definition io.h:90
spa_io_clock
Absolute time reporting.
Definition io.h:124
spa_io_clock::target_rate
struct spa_fraction target_rate
target rate of next cycle
Definition io.h:141
spa_io_clock::next_nsec
uint64_t next_nsec
estimated next wakeup time in nanoseconds
Definition io.h:139
spa_io_clock::xrun
uint64_t xrun
estimated accumulated xrun duration
Definition io.h:146
spa_io_clock::position
uint64_t position
current position
Definition io.h:134
spa_io_clock::nsec
uint64_t nsec
time in nanoseconds against monotonic clock
Definition io.h:132
spa_io_clock::rate
struct spa_fraction rate
rate for position/duration/delay/xrun
Definition io.h:133
spa_io_clock::rate_diff
double rate_diff
rate difference between clock and monotonic time
Definition io.h:138
spa_io_clock::flags
uint32_t flags
clock flags
Definition io.h:127
spa_io_clock::id
uint32_t id
unique clock id, set by application
Definition io.h:128
spa_io_clock::target_duration
uint64_t target_duration
target duration of next cycle
Definition io.h:142
spa_io_clock::padding
uint32_t padding
Definition io.h:145
spa_io_clock::duration
uint64_t duration
duration of current cycle
Definition io.h:135
spa_io_clock::delay
int64_t delay
delay between position and hardware, positive for capture, negative for playback
Definition io.h:136
spa_io_clock::target_seq
uint32_t target_seq
seq counter.
Definition io.h:143
spa_io_latency
latency reporting
Definition io.h:163
spa_io_latency::min
uint64_t min
min latency
Definition io.h:165
spa_io_latency::max
uint64_t max
max latency
Definition io.h:166
spa_io_latency::rate
struct spa_fraction rate
rate for min/max
Definition io.h:164
spa_io_memory
IO area to exchange a memory region.
Definition io.h:99
spa_io_memory::data
void * data
a memory pointer
Definition io.h:102
spa_io_memory::size
uint32_t size
the size of data
Definition io.h:101
spa_io_position
The position information adds extra meaning to the raw clock times.
Definition io.h:279
spa_io_position::clock
struct spa_io_clock clock
clock position of driver, always valid and read only
Definition io.h:280
spa_io_position::video
struct spa_io_video_size video
size of the video in the current cycle
Definition io.h:282
spa_io_position::state
uint32_t state
one of enum spa_io_position_state
Definition io.h:288
spa_io_position::n_segments
uint32_t n_segments
number of segments
Definition io.h:290
spa_io_position::segments
struct spa_io_segment segments[SPA_IO_POSITION_MAX_SEGMENTS]
segments
Definition io.h:291
spa_io_position::offset
int64_t offset
an offset to subtract from the clock position to get a running time.
Definition io.h:283
spa_io_range
A range, suitable for input ports that can suggest a range to output ports.
Definition io.h:108
spa_io_range::offset
uint64_t offset
offset in range
Definition io.h:109
spa_io_range::max_size
uint32_t max_size
maximum size of data
Definition io.h:111
spa_io_range::min_size
uint32_t min_size
minimum size of data
Definition io.h:110
spa_io_rate_match
rate matching
Definition io.h:295
spa_io_rate_match::padding
uint32_t padding[7]
Definition io.h:302
spa_io_rate_match::flags
uint32_t flags
extra flags
Definition io.h:301
spa_io_rate_match::rate
double rate
rate for resampler
Definition io.h:298
spa_io_rate_match::delay
uint32_t delay
extra delay in samples for resampler
Definition io.h:296
spa_io_rate_match::size
uint32_t size
requested input size for resampler
Definition io.h:297
spa_io_segment_bar
bar and beat segment
Definition io.h:175
spa_io_segment_bar::beat
double beat
current beat in segment
Definition io.h:183
spa_io_segment_bar::padding
uint32_t padding[8]
Definition io.h:184
spa_io_segment_bar::bpm
double bpm
beats per minute
Definition io.h:182
spa_io_segment_bar::signature_denom
float signature_denom
time signature denominator
Definition io.h:181
spa_io_segment_bar::offset
uint32_t offset
offset in segment of this beat
Definition io.h:179
spa_io_segment_bar::signature_num
float signature_num
time signature numerator
Definition io.h:180
spa_io_segment_bar::flags
uint32_t flags
extra flags
Definition io.h:178
spa_io_segment_video
video frame segment
Definition io.h:188
spa_io_segment_video::seconds
uint32_t seconds
Definition io.h:202
spa_io_segment_video::framerate
struct spa_fraction framerate
Definition io.h:199
spa_io_segment_video::field_count
uint32_t field_count
0 for progressive, 1 and 2 for interlaced
Definition io.h:204
spa_io_segment_video::hours
uint32_t hours
Definition io.h:200
spa_io_segment_video::minutes
uint32_t minutes
Definition io.h:201
spa_io_segment_video::padding
uint32_t padding[11]
Definition io.h:205
spa_io_segment_video::frames
uint32_t frames
Definition io.h:203
spa_io_segment
A segment converts a running time to a segment (stream) position.
Definition io.h:228
spa_io_segment::duration
uint64_t duration
duration when this info becomes invalid expressed in running time.
Definition io.h:242
spa_io_segment::flags
uint32_t flags
extra flags
Definition io.h:237
spa_io_segment::position
uint64_t position
The position when the running time == start.
Definition io.h:249
spa_io_segment::rate
double rate
overall rate of the segment, can be negative for backwards time reporting.
Definition io.h:247
spa_io_segment::video
struct spa_io_segment_video video
Definition io.h:254
spa_io_segment::bar
struct spa_io_segment_bar bar
Definition io.h:253
spa_io_segment::version
uint32_t version
Definition io.h:229
spa_io_sequence
control stream, io area for SPA_IO_Control and SPA_IO_Notify
Definition io.h:170
spa_io_sequence::sequence
struct spa_pod_sequence sequence
sequence of timed events
Definition io.h:171
spa_io_video_size
Definition io.h:150
spa_io_video_size::framerate
struct spa_fraction framerate
the minimum framerate, the cycle duration is always smaller to ensure there is only one video frame p...
Definition io.h:156
spa_io_video_size::padding
uint32_t padding[4]
Definition io.h:159
spa_io_video_size::stride
uint32_t stride
video stride in bytes
Definition io.h:154
spa_io_video_size::flags
uint32_t flags
optional flags
Definition io.h:153
spa_io_video_size::size
struct spa_rectangle size
the video size
Definition io.h:155
spa_pod_sequence
a sequence of timed controls
Definition pod.h:248
spa_rectangle
Definition defs.h:102