PipeWire
1.2.7
Loading...
Searching...
No Matches
pod.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_POD_H
6
#define SPA_POD_H
7
8
#ifdef __cplusplus
9
extern
"C"
{
10
#endif
11
12
#include <
spa/utils/defs.h
>
13
#include <
spa/utils/type.h
>
14
20
#define SPA_POD_BODY_SIZE(pod) (((struct spa_pod*)(pod))->size)
21
#define SPA_POD_TYPE(pod) (((struct spa_pod*)(pod))->type)
22
#define SPA_POD_SIZE(pod) ((uint64_t)sizeof(struct spa_pod) + SPA_POD_BODY_SIZE(pod))
23
#define SPA_POD_CONTENTS_SIZE(type,pod) (SPA_POD_SIZE(pod)-sizeof(type))
24
25
#define SPA_POD_CONTENTS(type,pod) SPA_PTROFF((pod),sizeof(type),void)
26
#define SPA_POD_CONTENTS_CONST(type,pod) SPA_PTROFF((pod),sizeof(type),const void)
27
#define SPA_POD_BODY(pod) SPA_PTROFF((pod),sizeof(struct spa_pod),void)
28
#define SPA_POD_BODY_CONST(pod) SPA_PTROFF((pod),sizeof(struct spa_pod),const void)
29
30
struct
spa_pod
{
31
uint32_t
size
;
/* size of the body */
32
uint32_t
type
;
/* a basic id of enum spa_type */
33
};
34
35
#define SPA_POD_VALUE(type,pod) (((type*)(pod))->value)
36
37
struct
spa_pod_bool
{
38
struct
spa_pod
pod
;
39
int32_t
value
;
40
int32_t
_padding
;
41
};
42
43
struct
spa_pod_id
{
44
struct
spa_pod
pod
;
45
uint32_t
value
;
46
int32_t
_padding
;
47
};
48
49
struct
spa_pod_int
{
50
struct
spa_pod
pod
;
51
int32_t
value
;
52
int32_t
_padding
;
53
};
54
55
struct
spa_pod_long
{
56
struct
spa_pod
pod
;
57
int64_t
value
;
58
};
59
60
struct
spa_pod_float
{
61
struct
spa_pod
pod
;
62
float
value
;
63
int32_t
_padding
;
64
};
65
66
struct
spa_pod_double
{
67
struct
spa_pod
pod
;
68
double
value
;
69
};
70
71
struct
spa_pod_string
{
72
struct
spa_pod
pod
;
73
/* value here */
74
};
75
76
struct
spa_pod_bytes
{
77
struct
spa_pod
pod
;
78
/* value here */
79
};
80
81
struct
spa_pod_rectangle
{
82
struct
spa_pod
pod
;
83
struct
spa_rectangle
value
;
84
};
85
86
struct
spa_pod_fraction
{
87
struct
spa_pod
pod
;
88
struct
spa_fraction
value
;
89
};
90
91
struct
spa_pod_bitmap
{
92
struct
spa_pod
pod
;
93
/* array of uint8_t follows with the bitmap */
94
};
95
96
#define SPA_POD_ARRAY_CHILD(arr) (&((struct spa_pod_array*)(arr))->body.child)
97
#define SPA_POD_ARRAY_VALUE_TYPE(arr) (SPA_POD_TYPE(SPA_POD_ARRAY_CHILD(arr)))
98
#define SPA_POD_ARRAY_VALUE_SIZE(arr) (SPA_POD_BODY_SIZE(SPA_POD_ARRAY_CHILD(arr)))
99
#define SPA_POD_ARRAY_N_VALUES(arr) (SPA_POD_ARRAY_VALUE_SIZE(arr) ? ((SPA_POD_BODY_SIZE(arr) - sizeof(struct spa_pod_array_body)) / SPA_POD_ARRAY_VALUE_SIZE(arr)) : 0)
100
#define SPA_POD_ARRAY_VALUES(arr) SPA_POD_CONTENTS(struct spa_pod_array, arr)
101
102
struct
spa_pod_array_body
{
103
struct
spa_pod
child
;
104
/* array with elements of child.size follows */
105
};
106
107
struct
spa_pod_array
{
108
struct
spa_pod
pod
;
109
struct
spa_pod_array_body
body
;
110
};
111
112
#define SPA_POD_CHOICE_CHILD(choice) (&((struct spa_pod_choice*)(choice))->body.child)
113
#define SPA_POD_CHOICE_TYPE(choice) (((struct spa_pod_choice*)(choice))->body.type)
114
#define SPA_POD_CHOICE_FLAGS(choice) (((struct spa_pod_choice*)(choice))->body.flags)
115
#define SPA_POD_CHOICE_VALUE_TYPE(choice) (SPA_POD_TYPE(SPA_POD_CHOICE_CHILD(choice)))
116
#define SPA_POD_CHOICE_VALUE_SIZE(choice) (SPA_POD_BODY_SIZE(SPA_POD_CHOICE_CHILD(choice)))
117
#define SPA_POD_CHOICE_N_VALUES(choice) (SPA_POD_CHOICE_VALUE_SIZE(choice) ? ((SPA_POD_BODY_SIZE(choice) - sizeof(struct spa_pod_choice_body)) / SPA_POD_CHOICE_VALUE_SIZE(choice)) : 0)
118
#define SPA_POD_CHOICE_VALUES(choice) (SPA_POD_CONTENTS(struct spa_pod_choice, choice))
119
120
enum
spa_choice_type
{
121
SPA_CHOICE_None
,
122
SPA_CHOICE_Range
,
123
SPA_CHOICE_Step
,
124
SPA_CHOICE_Enum
,
125
SPA_CHOICE_Flags
,
126
};
127
128
struct
spa_pod_choice_body
{
129
uint32_t
type
;
130
uint32_t
flags
;
131
struct
spa_pod
child
;
132
/* array with elements of child.size follows. Note that there might be more
133
* elements than required by \a type, which should be ignored. */
134
};
135
136
struct
spa_pod_choice
{
137
struct
spa_pod
pod
;
138
struct
spa_pod_choice_body
body
;
139
};
140
141
struct
spa_pod_struct
{
142
struct
spa_pod
pod
;
143
/* one or more spa_pod follow */
144
};
145
146
#define SPA_POD_OBJECT_TYPE(obj) (((struct spa_pod_object*)(obj))->body.type)
147
#define SPA_POD_OBJECT_ID(obj) (((struct spa_pod_object*)(obj))->body.id)
148
149
struct
spa_pod_object_body
{
150
uint32_t
type
;
151
uint32_t
id
;
152
/* contents follow, series of spa_pod_prop */
153
};
154
155
struct
spa_pod_object
{
156
struct
spa_pod
pod
;
157
struct
spa_pod_object_body
body
;
158
};
159
160
struct
spa_pod_pointer_body
{
161
uint32_t
type
;
162
uint32_t
_padding
;
163
const
void
*
value
;
164
};
165
166
struct
spa_pod_pointer
{
167
struct
spa_pod
pod
;
168
struct
spa_pod_pointer_body
body
;
169
};
170
171
struct
spa_pod_fd
{
172
struct
spa_pod
pod
;
173
int64_t
value
;
174
};
175
176
#define SPA_POD_PROP_SIZE(prop) (sizeof(struct spa_pod_prop) + (prop)->value.size)
177
178
/* props can be inside an object */
179
struct
spa_pod_prop
{
180
uint32_t
key
;
182
#define SPA_POD_PROP_FLAG_READONLY (1u<<0)
183
#define SPA_POD_PROP_FLAG_HARDWARE (1u<<1)
184
#define SPA_POD_PROP_FLAG_HINT_DICT (1u<<2)
189
#define SPA_POD_PROP_FLAG_MANDATORY (1u<<3)
190
#define SPA_POD_PROP_FLAG_DONT_FIXATE (1u<<4)
191
uint32_t
flags
;
192
struct
spa_pod
value
;
193
/* value follows */
194
};
195
196
#define SPA_POD_CONTROL_SIZE(ev) (sizeof(struct spa_pod_control) + (ev)->value.size)
197
198
/* controls can be inside a sequence and mark timed values */
199
struct
spa_pod_control
{
200
uint32_t
offset
;
201
uint32_t
type
;
202
struct
spa_pod
value
;
203
/* value contents follow */
204
};
205
206
struct
spa_pod_sequence_body
{
207
uint32_t
unit
;
208
uint32_t
pad
;
209
/* series of struct spa_pod_control follows */
210
};
211
213
struct
spa_pod_sequence
{
214
struct
spa_pod
pod
;
215
struct
spa_pod_sequence_body
body
;
216
};
217
222
#ifdef __cplusplus
223
}
/* extern "C" */
224
#endif
225
226
#endif
/* SPA_POD_H */
defs.h
spa/utils/defs.h
spa_choice_type
spa_choice_type
Definition
pod.h:146
SPA_CHOICE_Step
@ SPA_CHOICE_Step
range with step: default, min, max, step
Definition
pod.h:149
SPA_CHOICE_None
@ SPA_CHOICE_None
no choice, first value is current
Definition
pod.h:147
SPA_CHOICE_Flags
@ SPA_CHOICE_Flags
flags: default, possible flags,...
Definition
pod.h:151
SPA_CHOICE_Range
@ SPA_CHOICE_Range
range: default, min, max
Definition
pod.h:148
SPA_CHOICE_Enum
@ SPA_CHOICE_Enum
list: default, alternative,...
Definition
pod.h:150
type.h
spa/utils/type.h
spa_fraction
Definition
defs.h:137
spa_pod_array_body
Definition
pod.h:121
spa_pod_array_body::child
struct spa_pod child
Definition
pod.h:122
spa_pod_array
Definition
pod.h:126
spa_pod_array::pod
struct spa_pod pod
Definition
pod.h:127
spa_pod_array::body
struct spa_pod_array_body body
Definition
pod.h:128
spa_pod_bitmap
Definition
pod.h:105
spa_pod_bitmap::pod
struct spa_pod pod
Definition
pod.h:106
spa_pod_bool
Definition
pod.h:51
spa_pod_bool::_padding
int32_t _padding
Definition
pod.h:54
spa_pod_bool::value
int32_t value
Definition
pod.h:53
spa_pod_bool::pod
struct spa_pod pod
Definition
pod.h:52
spa_pod_bytes
Definition
pod.h:90
spa_pod_bytes::pod
struct spa_pod pod
Definition
pod.h:91
spa_pod_choice_body
Definition
pod.h:154
spa_pod_choice_body::child
struct spa_pod child
Definition
pod.h:157
spa_pod_choice_body::type
uint32_t type
type of choice, one of enum spa_choice_type
Definition
pod.h:155
spa_pod_choice_body::flags
uint32_t flags
extra flags
Definition
pod.h:156
spa_pod_choice
Definition
pod.h:162
spa_pod_choice::body
struct spa_pod_choice_body body
Definition
pod.h:164
spa_pod_choice::pod
struct spa_pod pod
Definition
pod.h:163
spa_pod_control
Definition
pod.h:234
spa_pod_control::value
struct spa_pod value
control value, depends on type
Definition
pod.h:237
spa_pod_control::type
uint32_t type
type of control, enum spa_control_type
Definition
pod.h:236
spa_pod_control::offset
uint32_t offset
media offset
Definition
pod.h:235
spa_pod_double
Definition
pod.h:80
spa_pod_double::value
double value
Definition
pod.h:82
spa_pod_double::pod
struct spa_pod pod
Definition
pod.h:81
spa_pod_fd
Definition
pod.h:199
spa_pod_fd::value
int64_t value
Definition
pod.h:201
spa_pod_fd::pod
struct spa_pod pod
Definition
pod.h:200
spa_pod_float
Definition
pod.h:74
spa_pod_float::_padding
int32_t _padding
Definition
pod.h:77
spa_pod_float::pod
struct spa_pod pod
Definition
pod.h:75
spa_pod_float::value
float value
Definition
pod.h:76
spa_pod_fraction
Definition
pod.h:100
spa_pod_fraction::value
struct spa_fraction value
Definition
pod.h:102
spa_pod_fraction::pod
struct spa_pod pod
Definition
pod.h:101
spa_pod_id
Definition
pod.h:57
spa_pod_id::value
uint32_t value
Definition
pod.h:59
spa_pod_id::_padding
int32_t _padding
Definition
pod.h:60
spa_pod_id::pod
struct spa_pod pod
Definition
pod.h:58
spa_pod_int
Definition
pod.h:63
spa_pod_int::pod
struct spa_pod pod
Definition
pod.h:64
spa_pod_int::_padding
int32_t _padding
Definition
pod.h:66
spa_pod_int::value
int32_t value
Definition
pod.h:65
spa_pod_long
Definition
pod.h:69
spa_pod_long::value
int64_t value
Definition
pod.h:71
spa_pod_long::pod
struct spa_pod pod
Definition
pod.h:70
spa_pod_object_body
Definition
pod.h:177
spa_pod_object_body::type
uint32_t type
one of enum spa_type
Definition
pod.h:178
spa_pod_object_body::id
uint32_t id
id of the object, depends on the object type
Definition
pod.h:179
spa_pod_object
Definition
pod.h:183
spa_pod_object::pod
struct spa_pod pod
Definition
pod.h:184
spa_pod_object::body
struct spa_pod_object_body body
Definition
pod.h:185
spa_pod_pointer_body
Definition
pod.h:188
spa_pod_pointer_body::value
const void * value
Definition
pod.h:191
spa_pod_pointer_body::_padding
uint32_t _padding
Definition
pod.h:190
spa_pod_pointer_body::type
uint32_t type
pointer id, one of enum spa_type
Definition
pod.h:189
spa_pod_pointer
Definition
pod.h:194
spa_pod_pointer::body
struct spa_pod_pointer_body body
Definition
pod.h:196
spa_pod_pointer::pod
struct spa_pod pod
Definition
pod.h:195
spa_pod_prop
Definition
pod.h:208
spa_pod_prop::key
uint32_t key
key of property, list of valid keys depends on the object type
Definition
pod.h:209
spa_pod_prop::flags
uint32_t flags
flags for property
Definition
pod.h:225
spa_pod_prop::value
struct spa_pod value
Definition
pod.h:226
spa_pod_rectangle
Definition
pod.h:95
spa_pod_rectangle::pod
struct spa_pod pod
Definition
pod.h:96
spa_pod_rectangle::value
struct spa_rectangle value
Definition
pod.h:97
spa_pod_sequence_body
Definition
pod.h:241
spa_pod_sequence_body::pad
uint32_t pad
Definition
pod.h:243
spa_pod_sequence_body::unit
uint32_t unit
Definition
pod.h:242
spa_pod_sequence
a sequence of timed controls
Definition
pod.h:248
spa_pod_sequence::pod
struct spa_pod pod
Definition
pod.h:249
spa_pod_sequence::body
struct spa_pod_sequence_body body
Definition
pod.h:250
spa_pod_string
Definition
pod.h:85
spa_pod_string::pod
struct spa_pod pod
Definition
pod.h:86
spa_pod_struct
Definition
pod.h:167
spa_pod_struct::pod
struct spa_pod pod
Definition
pod.h:168
spa_pod
Definition
pod.h:43
spa_pod::type
uint32_t type
Definition
pod.h:45
spa_pod::size
uint32_t size
Definition
pod.h:44
spa_rectangle
Definition
defs.h:116
spa
pod
pod.h
Generated by
1.12.0