PipeWire 1.1.0
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
9extern "C" {
10#endif
11
17#include <spa/utils/defs.h>
18#include <spa/pod/pod.h>
19
31enum spa_io_type {
43};
74struct spa_io_buffers {
75#define SPA_STATUS_OK 0
76#define SPA_STATUS_NEED_DATA (1<<0)
77#define SPA_STATUS_HAVE_DATA (1<<1)
78#define SPA_STATUS_STOPPED (1<<2)
79#define SPA_STATUS_DRAINED (1<<3)
80 int32_t status;
81 uint32_t buffer_id;
82};
84#define SPA_IO_BUFFERS_INIT ((struct spa_io_buffers) { SPA_STATUS_OK, SPA_ID_INVALID, })
90 int32_t status;
91 uint32_t size;
92 void *data;
93};
94#define SPA_IO_MEMORY_INIT ((struct spa_io_memory) { SPA_STATUS_OK, 0, NULL, })
97struct spa_io_range {
98 uint64_t offset;
99 uint32_t min_size;
100 uint32_t max_size;
126struct spa_io_clock {
127#define SPA_IO_CLOCK_FLAG_FREEWHEEL (1u<<0)
128 uint32_t flags;
129 uint32_t id;
130 char name[64];
133 uint64_t nsec;
136 struct spa_fraction rate;
137 uint64_t position;
138 uint64_t duration;
139 int64_t delay;
140 double rate_diff;
142 uint64_t next_nsec;
148 uint64_t target_duration;
149 uint32_t target_seq;
151 uint32_t padding;
152 uint64_t xrun;
154
155/* the size of the video in this cycle */
156struct spa_io_video_size {
157#define SPA_IO_VIDEO_SIZE_VALID (1<<0)
158 uint32_t flags;
159 uint32_t stride;
164 uint32_t padding[4];
166
174 uint64_t min;
175 uint64_t max;
176};
177
179struct spa_io_sequence {
181};
182
184struct spa_io_segment_bar {
185#define SPA_IO_SEGMENT_BAR_FLAG_VALID (1<<0)
186 uint32_t flags;
187 uint32_t offset;
190 double bpm;
191 double beat;
192 uint32_t padding[8];
197#define SPA_IO_SEGMENT_VIDEO_FLAG_VALID (1<<0)
198#define SPA_IO_SEGMENT_VIDEO_FLAG_DROP_FRAME (1<<1)
199#define SPA_IO_SEGMENT_VIDEO_FLAG_PULL_DOWN (1<<2)
200#define SPA_IO_SEGMENT_VIDEO_FLAG_INTERLACED (1<<3)
201 uint32_t flags;
202 uint32_t offset;
204 uint32_t hours;
205 uint32_t minutes;
206 uint32_t seconds;
207 uint32_t frames;
208 uint32_t field_count;
209 uint32_t padding[11];
210};
232struct spa_io_segment {
233 uint32_t version;
234#define SPA_IO_SEGMENT_FLAG_LOOPING (1<<0)
235#define SPA_IO_SEGMENT_FLAG_NO_POSITION (1<<1)
239 uint32_t flags;
240 uint64_t start;
244 uint64_t duration;
249 double rate;
251 uint64_t position;
255 struct spa_io_segment_bar bar;
257};
258
263};
264
266#define SPA_IO_POSITION_MAX_SEGMENTS 8
267
285struct spa_io_position {
286 struct spa_io_clock clock;
289 int64_t offset;
294 uint32_t state;
296 uint32_t n_segments;
298};
299
301struct spa_io_rate_match {
302 uint32_t delay;
303 uint32_t size;
304 double rate;
305#define SPA_IO_RATE_MATCH_FLAG_ACTIVE (1 << 0)
306 uint32_t flags;
307 uint32_t padding[7];
309
314#ifdef __cplusplus
315} /* extern "C" */
316#endif
317
318#endif /* SPA_IO_H */
spa/utils/defs.h
spa_io_position_state
Definition io.h:280
spa_io_type
IO areas.
Definition io.h:36
#define SPA_IO_POSITION_MAX_SEGMENTS
the maximum number of segments visible in the future
Definition io.h:288
@ SPA_IO_POSITION_STATE_RUNNING
Definition io.h:283
@ SPA_IO_POSITION_STATE_STOPPED
Definition io.h:281
@ SPA_IO_POSITION_STATE_STARTING
Definition io.h:282
@ SPA_IO_Notify
area for notify messages, struct spa_io_sequence
Definition io.h:44
@ SPA_IO_Memory
memory pointer, struct spa_io_memory (currently not used in PipeWire)
Definition io.h:47
@ SPA_IO_Clock
area to update clock information, struct spa_io_clock
Definition io.h:40
@ SPA_IO_Control
area for control messages, struct spa_io_sequence
Definition io.h:43
@ SPA_IO_Latency
latency reporting, struct spa_io_latency (currently not used in PipeWire).
Definition io.h:41
@ SPA_IO_Range
expected byte range, struct spa_io_range (currently not used in PipeWire)
Definition io.h:39
@ SPA_IO_Invalid
Definition io.h:37
@ SPA_IO_Position
position information in the graph, struct spa_io_position
Definition io.h:45
@ SPA_IO_Buffers
area to exchange buffers, struct spa_io_buffers
Definition io.h:38
@ SPA_IO_RateMatch
rate matching between nodes, struct spa_io_rate_match
Definition io.h:46
spa/pod/pod.h
Definition defs.h:137
IO area to exchange buffers.
Definition io.h:79
int32_t status
the status code
Definition io.h:90
uint32_t buffer_id
a buffer id
Definition io.h:91
Absolute time reporting.
Definition io.h:138
struct spa_fraction target_rate
Target rate of next cycle.
Definition io.h:160
uint64_t next_nsec
Estimated next wakeup time in nanoseconds.
Definition io.h:155
uint64_t xrun
Estimated accumulated xrun duration.
Definition io.h:165
uint64_t position
Current position, in samples @ rate.
Definition io.h:150
uint64_t nsec
Time in nanoseconds against monotonic clock (CLOCK_MONOTONIC).
Definition io.h:146
struct spa_fraction rate
Rate for position/duration/delay/xrun.
Definition io.h:149
double rate_diff
Rate difference between clock and monotonic time, as a ratio of clock speeds.
Definition io.h:153
uint32_t flags
Clock flags.
Definition io.h:141
uint32_t id
Unique clock id, set by host application.
Definition io.h:142
uint64_t target_duration
Target duration of next cycle.
Definition io.h:161
uint32_t padding
Definition io.h:164
uint64_t duration
Duration of current cycle, in samples @ rate.
Definition io.h:151
int64_t delay
Delay between position and hardware, in samples @ rate.
Definition io.h:152
uint32_t target_seq
Seq counter.
Definition io.h:162
Latency reporting.
Definition io.h:186
uint64_t min
min latency
Definition io.h:188
uint64_t max
max latency
Definition io.h:189
struct spa_fraction rate
rate for min/max
Definition io.h:187
IO area to exchange a memory region.
Definition io.h:100
void * data
a memory pointer
Definition io.h:103
uint32_t size
the size of data
Definition io.h:102
The position information adds extra meaning to the raw clock times.
Definition io.h:307
struct spa_io_clock clock
clock position of driver, always valid and read only
Definition io.h:308
struct spa_io_video_size video
size of the video in the current cycle
Definition io.h:310
uint32_t state
one of enum spa_io_position_state
Definition io.h:316
uint32_t n_segments
number of segments
Definition io.h:318
struct spa_io_segment segments[SPA_IO_POSITION_MAX_SEGMENTS]
segments
Definition io.h:319
int64_t offset
an offset to subtract from the clock position to get a running time.
Definition io.h:311
A range, suitable for input ports that can suggest a range to output ports.
Definition io.h:109
uint64_t offset
offset in range
Definition io.h:110
uint32_t max_size
maximum size of data
Definition io.h:112
uint32_t min_size
minimum size of data
Definition io.h:111
rate matching
Definition io.h:323
uint32_t padding[7]
Definition io.h:330
uint32_t flags
extra flags
Definition io.h:329
double rate
rate for resampler
Definition io.h:326
uint32_t delay
extra delay in samples for resampler
Definition io.h:324
uint32_t size
requested input size for resampler
Definition io.h:325
bar and beat segment
Definition io.h:198
double beat
current beat in segment
Definition io.h:206
uint32_t padding[8]
Definition io.h:207
double bpm
beats per minute
Definition io.h:205
float signature_denom
time signature denominator
Definition io.h:204
uint32_t offset
offset in segment of this beat
Definition io.h:202
float signature_num
time signature numerator
Definition io.h:203
uint32_t flags
extra flags
Definition io.h:201
video frame segment
Definition io.h:211
uint32_t seconds
Definition io.h:225
struct spa_fraction framerate
Definition io.h:222
uint32_t field_count
0 for progressive, 1 and 2 for interlaced
Definition io.h:227
uint32_t hours
Definition io.h:223
uint32_t minutes
Definition io.h:224
uint32_t padding[11]
Definition io.h:228
uint32_t frames
Definition io.h:226
A segment converts a running time to a segment (stream) position.
Definition io.h:251
uint64_t duration
duration when this info becomes invalid expressed in running time.
Definition io.h:265
uint32_t flags
extra flags
Definition io.h:260
uint64_t position
The position when the running time == start.
Definition io.h:272
double rate
overall rate of the segment, can be negative for backwards time reporting.
Definition io.h:270
struct spa_io_segment_video video
Definition io.h:277
struct spa_io_segment_bar bar
Definition io.h:276
uint32_t version
Definition io.h:252
control stream, io area for SPA_IO_Control and SPA_IO_Notify
Definition io.h:193
struct spa_pod_sequence sequence
sequence of timed events
Definition io.h:194
Definition io.h:169
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:175
uint32_t padding[4]
Definition io.h:178
uint32_t stride
video stride in bytes
Definition io.h:173
uint32_t flags
optional flags
Definition io.h:172
struct spa_rectangle size
the video size
Definition io.h:174
a sequence of timed controls
Definition pod.h:248
Definition defs.h:116