PipeWire: meta.h Source File

PipeWire 0.3.66

Loading...
Searching...
No Matches
meta.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_META_H
26#define SPA_META_H
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
32#include <spa/utils/defs.h>
33#include <spa/pod/pod.h>
34
40enum spa_meta_type {
41 SPA_META_Invalid,
42 SPA_META_Header,
43 SPA_META_VideoCrop,
44 SPA_META_VideoDamage,
45 SPA_META_Bitmap,
46 SPA_META_Cursor,
47 SPA_META_Control,
49 SPA_META_Busy,
50 SPA_META_VideoTransform,
52 _SPA_META_LAST,
53};
54
62struct spa_meta {
63 uint32_t type;
64 uint32_t size;
65 void *data;
66};
67
68 static inline void *spa_meta_first(const struct spa_meta *m) {
69 return m->data;
70}
71#define spa_meta_first spa_meta_first
72static inline void *spa_meta_end(const struct spa_meta *m) {
73 return SPA_PTROFF(m->data,m->size,void);
74}
75#define spa_meta_end spa_meta_end
76#define spa_meta_check(p,m) (SPA_PTROFF(p,sizeof(*(p)),void) <= spa_meta_end(m))
77
82struct spa_meta_header {
83#define SPA_META_HEADER_FLAG_DISCONT (1 << 0)
84#define SPA_META_HEADER_FLAG_CORRUPTED (1 << 1)
85#define SPA_META_HEADER_FLAG_MARKER (1 << 2)
86#define SPA_META_HEADER_FLAG_HEADER (1 << 3)
87#define SPA_META_HEADER_FLAG_GAP (1 << 4)
88#define SPA_META_HEADER_FLAG_DELTA_UNIT (1 << 5)
89 uint32_t flags;
90 uint32_t offset;
91 int64_t pts;
92 int64_t dts_offset;
93 uint64_t seq;
95};
96
98struct spa_meta_region {
99 struct spa_region region;
100};
101
102 static inline bool spa_meta_region_is_valid(const struct spa_meta_region *m) {
103 return m->region.size.width != 0 && m->region.size.height != 0;
104}
105#define spa_meta_region_is_valid spa_meta_region_is_valid
106
108#define spa_meta_for_each(pos,meta) \
109 for ((pos) = (__typeof(pos))spa_meta_first(meta); \
110 spa_meta_check(pos, meta); \
111 (pos)++)
112
113#define spa_meta_bitmap_is_valid(m) ((m)->format != 0)
114
122struct spa_meta_bitmap {
123 uint32_t format;
126 struct spa_rectangle size;
127 int32_t stride;
128 uint32_t offset;
132};
133
134#define spa_meta_cursor_is_valid(m) ((m)->id != 0)
135
141struct spa_meta_cursor {
142 uint32_t id;
144 uint32_t flags;
145 struct spa_point position;
146 struct spa_point hotspot;
148 uint32_t bitmap_offset;
152};
153
155 struct spa_meta_control {
156 struct spa_pod_sequence sequence;
157};
158
160struct spa_meta_busy {
161 uint32_t flags;
162 uint32_t count;
163};
164
165enum spa_meta_videotransform_value {
166 SPA_META_TRANSFORMATION_None = 0,
167 SPA_META_TRANSFORMATION_90,
168 SPA_META_TRANSFORMATION_180,
169 SPA_META_TRANSFORMATION_270,
170 SPA_META_TRANSFORMATION_Flipped,
173 SPA_META_TRANSFORMATION_Flipped90,
174 SPA_META_TRANSFORMATION_Flipped180,
175 SPA_META_TRANSFORMATION_Flipped270,
176};
177
179 struct spa_meta_videotransform {
180 uint32_t transform;
182};
183
188#ifdef __cplusplus
189} /* extern "C" */
190#endif
191
192#endif /* SPA_META_H */
defs.h
spa/utils/defs.h
spa_meta_region_is_valid
#define spa_meta_region_is_valid
Definition: meta.h:116
spa_meta_end
#define spa_meta_end
Definition: meta.h:80
spa_meta_first
#define spa_meta_first
Definition: meta.h:76
spa_meta_videotransform_value
spa_meta_videotransform_value
Definition: meta.h:176
spa_meta_type
spa_meta_type
Definition: meta.h:45
SPA_META_TRANSFORMATION_Flipped270
@ SPA_META_TRANSFORMATION_Flipped270
flip then rotate around 270 degree counter-clockwise
Definition: meta.h:186
SPA_META_TRANSFORMATION_Flipped
@ SPA_META_TRANSFORMATION_Flipped
180 degree flipped around the vertical axis.
Definition: meta.h:181
SPA_META_TRANSFORMATION_270
@ SPA_META_TRANSFORMATION_270
270 degree counter-clockwise
Definition: meta.h:180
SPA_META_TRANSFORMATION_Flipped180
@ SPA_META_TRANSFORMATION_Flipped180
flip then rotate around 180 degree counter-clockwise
Definition: meta.h:185
SPA_META_TRANSFORMATION_Flipped90
@ SPA_META_TRANSFORMATION_Flipped90
flip then rotate around 90 degree counter-clockwise
Definition: meta.h:184
SPA_META_TRANSFORMATION_None
@ SPA_META_TRANSFORMATION_None
no transform
Definition: meta.h:177
SPA_META_TRANSFORMATION_90
@ SPA_META_TRANSFORMATION_90
90 degree counter-clockwise
Definition: meta.h:178
SPA_META_TRANSFORMATION_180
@ SPA_META_TRANSFORMATION_180
180 degree counter-clockwise
Definition: meta.h:179
SPA_META_VideoDamage
@ SPA_META_VideoDamage
array of struct spa_meta_region with damage, where an invalid entry or end-of-array marks the end.
Definition: meta.h:49
SPA_META_Bitmap
@ SPA_META_Bitmap
struct spa_meta_bitmap
Definition: meta.h:50
SPA_META_VideoTransform
@ SPA_META_VideoTransform
struct spa_meta_transform
Definition: meta.h:55
SPA_META_Cursor
@ SPA_META_Cursor
struct spa_meta_cursor
Definition: meta.h:51
SPA_META_Busy
@ SPA_META_Busy
don't write to buffer when count > 0
Definition: meta.h:54
SPA_META_VideoCrop
@ SPA_META_VideoCrop
struct spa_meta_region with cropping data
Definition: meta.h:48
SPA_META_Header
@ SPA_META_Header
struct spa_meta_header
Definition: meta.h:47
SPA_META_Control
@ SPA_META_Control
metadata contains a spa_meta_control associated with the data
Definition: meta.h:52
SPA_META_Invalid
@ SPA_META_Invalid
Definition: meta.h:46
_SPA_META_LAST
@ _SPA_META_LAST
not part of ABI/API
Definition: meta.h:57
SPA_PTROFF
#define SPA_PTROFF(ptr_, offset_, type_)
Return the address (buffer + offset) as pointer of type.
Definition: defs.h:210
pod.h
spa/pod/pod.h
spa_meta_bitmap
Bitmap information.
Definition: meta.h:133
spa_meta_bitmap::size
struct spa_rectangle size
width and height of bitmap
Definition: meta.h:137
spa_meta_bitmap::format
uint32_t format
bitmap video format, one of enum spa_video_format.
Definition: meta.h:134
spa_meta_bitmap::offset
uint32_t offset
offset of bitmap data in this structure.
Definition: meta.h:139
spa_meta_bitmap::stride
int32_t stride
stride of bitmap data
Definition: meta.h:138
spa_meta_busy
a busy counter for the buffer
Definition: meta.h:171
spa_meta_busy::count
uint32_t count
number of users busy with the buffer
Definition: meta.h:173
spa_meta_busy::flags
uint32_t flags
Definition: meta.h:172
spa_meta_control
a timed set of events associated with the buffer
Definition: meta.h:166
spa_meta_control::sequence
struct spa_pod_sequence sequence
Definition: meta.h:167
spa_meta_cursor
Cursor information.
Definition: meta.h:152
spa_meta_cursor::flags
uint32_t flags
extra flags
Definition: meta.h:155
spa_meta_cursor::hotspot
struct spa_point hotspot
offsets for hotspot in bitmap, this field has no meaning when there is no valid bitmap (see below)
Definition: meta.h:157
spa_meta_cursor::id
uint32_t id
cursor id.
Definition: meta.h:153
spa_meta_cursor::position
struct spa_point position
position on screen
Definition: meta.h:156
spa_meta_cursor::bitmap_offset
uint32_t bitmap_offset
offset of bitmap meta in this structure.
Definition: meta.h:159
spa_meta_header
Describes essential buffer header metadata such as flags and timestamps.
Definition: meta.h:87
spa_meta_header::offset
uint32_t offset
offset in current cycle
Definition: meta.h:101
spa_meta_header::flags
uint32_t flags
flags
Definition: meta.h:100
spa_meta_header::seq
uint64_t seq
sequence number, increments with a media specific frequency
Definition: meta.h:104
spa_meta_header::pts
int64_t pts
presentation timestamp in nanoseconds
Definition: meta.h:102
spa_meta_header::dts_offset
int64_t dts_offset
decoding timestamp as a difference with pts
Definition: meta.h:103
spa_meta_region
metadata structure for Region or an array of these for RegionArray
Definition: meta.h:109
spa_meta_region::region
struct spa_region region
Definition: meta.h:110
spa_meta_videotransform
a transformation of the buffer
Definition: meta.h:190
spa_meta_videotransform::transform
uint32_t transform
orientation transformation that was applied to the buffer, one of enum spa_meta_videotransform_value
Definition: meta.h:191
spa_meta
A metadata element.
Definition: meta.h:67
spa_meta::size
uint32_t size
size of metadata
Definition: meta.h:69
spa_meta::type
uint32_t type
metadata type, one of enum spa_meta_type
Definition: meta.h:68
spa_meta::data
void * data
pointer to metadata
Definition: meta.h:70
spa_pod_sequence
a sequence of timed controls
Definition: pod/pod.h:268
spa_point
Definition: defs.h:125
spa_rectangle
Definition: defs.h:118
spa_rectangle::width
uint32_t width
Definition: defs.h:119
spa_rectangle::height
uint32_t height
Definition: defs.h:120
spa_region
Definition: defs.h:132
spa_region::size
struct spa_rectangle size
Definition: defs.h:134