PipeWire 0.3.34
io.h
Go to the documentation of this file.
1/* Simple Plugin API
2 *
3 * Copyright © 2018 Wim Taymans
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice (including the next
13 * paragraph) shall be included in all copies or substantial portions of the
14 * Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 */
24
25#ifndef SPA_IO_H
26#define SPA_IO_H
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
37#include <spa/utils/defs.h>
38#include <spa/pod/pod.h>
39
62};
63
94#define SPA_STATUS_OK 0
95#define SPA_STATUS_NEED_DATA (1<<0)
96#define SPA_STATUS_HAVE_DATA (1<<1)
97#define SPA_STATUS_STOPPED (1<<2)
98#define SPA_STATUS_DRAINED (1<<3)
99 int32_t status;
100 uint32_t buffer_id;
101};
102
103#define SPA_IO_BUFFERS_INIT (struct spa_io_buffers) { SPA_STATUS_OK, SPA_ID_INVALID, }
104
109 int32_t status;
110 uint32_t size;
111 void *data;
112};
113#define SPA_IO_MEMORY_INIT (struct spa_io_memory) { SPA_STATUS_OK, 0, NULL, }
114
117 uint64_t offset;
118 uint32_t min_size;
119 uint32_t max_size;
120};
121
133#define SPA_IO_CLOCK_FLAG_FREEWHEEL (1u<<0)
134 uint32_t flags;
135 uint32_t id;
136 char name[64];
139 uint64_t nsec;
141 uint64_t position;
142 uint64_t duration;
143 int64_t delay;
145 double rate_diff;
146 uint64_t next_nsec;
147 uint32_t padding[8];
148};
149
150/* the size of the video in this cycle */
152#define SPA_IO_VIDEO_SIZE_VALID (1<<0)
153 uint32_t flags;
154 uint32_t stride;
159 uint32_t padding[4];
160};
161
165 uint64_t min;
166 uint64_t max;
167};
168
172};
173
176#define SPA_IO_SEGMENT_BAR_FLAG_VALID (1<<0)
177 uint32_t flags;
178 uint32_t offset;
181 double bpm;
182 double beat;
183 uint32_t padding[8];
184};
185
188#define SPA_IO_SEGMENT_VIDEO_FLAG_VALID (1<<0)
189#define SPA_IO_SEGMENT_VIDEO_FLAG_DROP_FRAME (1<<1)
190#define SPA_IO_SEGMENT_VIDEO_FLAG_PULL_DOWN (1<<2)
191#define SPA_IO_SEGMENT_VIDEO_FLAG_INTERLACED (1<<3)
192 uint32_t flags;
193 uint32_t offset;
195 uint32_t hours;
196 uint32_t minutes;
197 uint32_t seconds;
198 uint32_t frames;
199 uint32_t field_count;
200 uint32_t padding[11];
201};
202
224 uint32_t version;
225#define SPA_IO_SEGMENT_FLAG_LOOPING (1<<0)
226#define SPA_IO_SEGMENT_FLAG_NO_POSITION (1<<1)
230 uint32_t flags;
231 uint64_t start;
235 uint64_t duration;
240 double rate;
242 uint64_t position;
248};
249
254};
255
257#define SPA_IO_POSITION_MAX_SEGMENTS 8
258
275 int64_t offset;
280 uint32_t state;
282 uint32_t n_segments;
284};
285
288 uint32_t delay;
289 uint32_t size;
290 double rate;
291#define SPA_IO_RATE_MATCH_FLAG_ACTIVE (1 << 0)
292 uint32_t flags;
293 uint32_t padding[7];
294};
295
300#ifdef __cplusplus
301} /* extern "C" */
302#endif
303
304#endif /* SPA_IO_H */
spa_io_position_state
Definition: io.h:250
spa_io_type
IO areas.
Definition: io.h:51
#define SPA_IO_POSITION_MAX_SEGMENTS
the maximum number of segments visible in the future
Definition: io.h:257
@ SPA_IO_POSITION_STATE_RUNNING
Definition: io.h:253
@ SPA_IO_POSITION_STATE_STOPPED
Definition: io.h:251
@ SPA_IO_POSITION_STATE_STARTING
Definition: io.h:252
@ SPA_IO_Notify
area for notify messages, struct spa_io_sequence
Definition: io.h:58
@ SPA_IO_Memory
memory pointer, struct spa_io_memory
Definition: io.h:61
@ SPA_IO_Clock
area to update clock information, struct spa_io_clock
Definition: io.h:55
@ SPA_IO_Control
area for control messages, struct spa_io_sequence
Definition: io.h:57
@ SPA_IO_Latency
latency reporting, struct spa_io_latency
Definition: io.h:56
@ SPA_IO_Range
expected byte range, struct spa_io_range
Definition: io.h:54
@ SPA_IO_Invalid
Definition: io.h:52
@ SPA_IO_Position
position information in the graph, struct spa_io_position
Definition: io.h:59
@ SPA_IO_Buffers
area to exchange buffers, struct spa_io_buffers
Definition: io.h:53
@ SPA_IO_RateMatch
rate matching between nodes, struct spa_io_rate_match
Definition: io.h:60
Definition: defs.h:104
IO area to exchange buffers.
Definition: io.h:93
int32_t status
the status code
Definition: io.h:99
uint32_t buffer_id
a buffer id
Definition: io.h:100
Absolute time reporting.
Definition: io.h:132
uint64_t next_nsec
estimated next wakeup time in nanoseconds
Definition: io.h:146
uint64_t position
current position
Definition: io.h:141
char name[64]
clock name prefixed with API, set by node.
Definition: io.h:136
uint64_t nsec
time in nanoseconds against monotonic clock
Definition: io.h:139
struct spa_fraction rate
rate for position/duration/delay
Definition: io.h:140
double rate_diff
rate difference between clock and monotonic time
Definition: io.h:145
uint32_t flags
clock flags
Definition: io.h:134
uint32_t id
unique clock id, set by application
Definition: io.h:135
uint64_t duration
duration of current cycle
Definition: io.h:142
uint32_t padding[8]
Definition: io.h:147
int64_t delay
delay between position and hardware, positive for capture, negative for playback
Definition: io.h:143
latency reporting
Definition: io.h:163
uint64_t min
min latency
Definition: io.h:165
uint64_t max
max latency
Definition: io.h:166
struct spa_fraction rate
rate for min/max
Definition: io.h:164
IO area to exchange a memory region.
Definition: io.h:108
int32_t status
the status code
Definition: io.h:109
void * data
a memory pointer
Definition: io.h:111
uint32_t size
the size of data
Definition: io.h:110
The position information adds extra meaning to the raw clock times.
Definition: io.h:271
struct spa_io_clock clock
clock position of driver, always valid and read only
Definition: io.h:272
struct spa_io_video_size video
size of the video in the current cycle
Definition: io.h:274
uint32_t state
one of enum spa_io_position_state
Definition: io.h:280
uint32_t n_segments
number of segments
Definition: io.h:282
struct spa_io_segment segments[SPA_IO_POSITION_MAX_SEGMENTS]
segments
Definition: io.h:283
int64_t offset
an offset to subtract from the clock position to get a running time.
Definition: io.h:275
A range, suitable for input ports that can suggest a range to output ports.
Definition: io.h:116
uint64_t offset
offset in range
Definition: io.h:117
uint32_t max_size
maximum size of data
Definition: io.h:119
uint32_t min_size
minimum size of data
Definition: io.h:118
rate matching
Definition: io.h:287
uint32_t padding[7]
Definition: io.h:293
uint32_t flags
extra flags
Definition: io.h:292
double rate
rate for resampler
Definition: io.h:290
uint32_t delay
extra delay in samples for resampler
Definition: io.h:288
uint32_t size
requested input size for resampler
Definition: io.h:289
bar and beat segment
Definition: io.h:175
double beat
current beat in segment
Definition: io.h:182
uint32_t padding[8]
Definition: io.h:183
double bpm
beats per minute
Definition: io.h:181
float signature_denom
time signature denominator
Definition: io.h:180
uint32_t offset
offset in segment of this beat
Definition: io.h:178
float signature_num
time signature numerator
Definition: io.h:179
uint32_t flags
extra flags
Definition: io.h:177
video frame segment
Definition: io.h:187
uint32_t seconds
Definition: io.h:197
struct spa_fraction framerate
Definition: io.h:194
uint32_t field_count
0 for progressive, 1 and 2 for interlaced
Definition: io.h:199
uint32_t flags
flags
Definition: io.h:192
uint32_t hours
Definition: io.h:195
uint32_t minutes
Definition: io.h:196
uint32_t padding[11]
Definition: io.h:200
uint32_t frames
Definition: io.h:198
uint32_t offset
offset in segment
Definition: io.h:193
A segment converts a running time to a segment (stream) position.
Definition: io.h:223
uint64_t duration
duration when this info becomes invalid expressed in running time.
Definition: io.h:235
uint32_t flags
extra flags
Definition: io.h:230
uint64_t position
The position when the running time == start.
Definition: io.h:242
double rate
overall rate of the segment, can be negative for backwards time reporting.
Definition: io.h:240
struct spa_io_segment_video video
Definition: io.h:247
struct spa_io_segment_bar bar
Definition: io.h:246
uint32_t version
Definition: io.h:224
uint64_t start
value of running time when this info is active.
Definition: io.h:231
control stream, io area for SPA_IO_Control and SPA_IO_Notify
Definition: io.h:170
struct spa_pod_sequence sequence
sequence of timed events
Definition: io.h:171
Definition: io.h:151
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
uint32_t padding[4]
Definition: io.h:159
uint32_t stride
video stride in bytes
Definition: io.h:154
uint32_t flags
optional flags
Definition: io.h:153
struct spa_rectangle size
the video size
Definition: io.h:155
a sequence of timed controls
Definition: pod/pod.h:233
Definition: defs.h:86