1 | /* GStreamer |
2 | * Copyright (C) <2011> Wim Taymans <wim.taymans@gmail.com> |
3 | * |
4 | * This library is free software; you can redistribute it and/or |
5 | * modify it under the terms of the GNU Library General Public |
6 | * License as published by the Free Software Foundation; either |
7 | * version 2 of the License, or (at your option) any later version. |
8 | * |
9 | * This library is distributed in the hope that it will be useful, |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
12 | * Library General Public License for more details. |
13 | * |
14 | * You should have received a copy of the GNU Library General Public |
15 | * License along with this library; if not, write to the |
16 | * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, |
17 | * Boston, MA 02110-1301, USA. |
18 | */ |
19 | |
20 | #ifndef __GST_VIDEO_FORMAT_H__ |
21 | #define __GST_VIDEO_FORMAT_H__ |
22 | |
23 | #include <gst/gst.h> |
24 | |
25 | G_BEGIN_DECLS |
26 | |
27 | #include <gst/video/video-enumtypes.h> |
28 | #include <gst/video/video-tile.h> |
29 | |
30 | /** |
31 | * GstVideoFormat: |
32 | * @GST_VIDEO_FORMAT_UNKNOWN: Unknown or unset video format id |
33 | * @GST_VIDEO_FORMAT_ENCODED: Encoded video format. Only ever use that in caps for |
34 | * special video formats in combination with non-system |
35 | * memory GstCapsFeatures where it does not make sense |
36 | * to specify a real video format. |
37 | * @GST_VIDEO_FORMAT_I420: planar 4:2:0 YUV |
38 | * @GST_VIDEO_FORMAT_YV12: planar 4:2:0 YVU (like I420 but UV planes swapped) |
39 | * @GST_VIDEO_FORMAT_YUY2: packed 4:2:2 YUV (Y0-U0-Y1-V0 Y2-U2-Y3-V2 Y4 ...) |
40 | * @GST_VIDEO_FORMAT_UYVY: packed 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...) |
41 | * @GST_VIDEO_FORMAT_VYUY: packed 4:2:2 YUV (V0-Y0-U0-Y1 V2-Y2-U2-Y3 V4 ...) |
42 | * @GST_VIDEO_FORMAT_AYUV: packed 4:4:4 YUV with alpha channel (A0-Y0-U0-V0 ...) |
43 | * @GST_VIDEO_FORMAT_RGBx: sparse rgb packed into 32 bit, space last |
44 | * @GST_VIDEO_FORMAT_BGRx: sparse reverse rgb packed into 32 bit, space last |
45 | * @GST_VIDEO_FORMAT_xRGB: sparse rgb packed into 32 bit, space first |
46 | * @GST_VIDEO_FORMAT_xBGR: sparse reverse rgb packed into 32 bit, space first |
47 | * @GST_VIDEO_FORMAT_RGBA: rgb with alpha channel last |
48 | * @GST_VIDEO_FORMAT_BGRA: reverse rgb with alpha channel last |
49 | * @GST_VIDEO_FORMAT_ARGB: rgb with alpha channel first |
50 | * @GST_VIDEO_FORMAT_ABGR: reverse rgb with alpha channel first |
51 | * @GST_VIDEO_FORMAT_RGB: RGB packed into 24 bits without padding (`R-G-B-R-G-B`) |
52 | * @GST_VIDEO_FORMAT_BGR: reverse RGB packed into 24 bits without padding (`B-G-R-B-G-R`) |
53 | * @GST_VIDEO_FORMAT_Y41B: planar 4:1:1 YUV |
54 | * @GST_VIDEO_FORMAT_Y42B: planar 4:2:2 YUV |
55 | * @GST_VIDEO_FORMAT_YVYU: packed 4:2:2 YUV (Y0-V0-Y1-U0 Y2-V2-Y3-U2 Y4 ...) |
56 | * @GST_VIDEO_FORMAT_Y444: planar 4:4:4 YUV |
57 | * @GST_VIDEO_FORMAT_v210: packed 4:2:2 10-bit YUV, complex format |
58 | * @GST_VIDEO_FORMAT_v216: packed 4:2:2 16-bit YUV, Y0-U0-Y1-V1 order |
59 | * @GST_VIDEO_FORMAT_NV12: planar 4:2:0 YUV with interleaved UV plane |
60 | * @GST_VIDEO_FORMAT_NV21: planar 4:2:0 YUV with interleaved VU plane |
61 | * @GST_VIDEO_FORMAT_NV12_10LE32: 10-bit variant of @GST_VIDEO_FORMAT_NV12, packed into 32bit words (MSB 2 bits padding) (Since: 1.14) |
62 | * @GST_VIDEO_FORMAT_GRAY8: 8-bit grayscale |
63 | * @GST_VIDEO_FORMAT_GRAY10_LE32: 10-bit grayscale, packed into 32bit words (2 bits padding) (Since: 1.14) |
64 | * @GST_VIDEO_FORMAT_GRAY16_BE: 16-bit grayscale, most significant byte first |
65 | * @GST_VIDEO_FORMAT_GRAY16_LE: 16-bit grayscale, least significant byte first |
66 | * @GST_VIDEO_FORMAT_v308: packed 4:4:4 YUV (Y-U-V ...) |
67 | * @GST_VIDEO_FORMAT_IYU2: packed 4:4:4 YUV (U-Y-V ...) (Since: 1.10) |
68 | * @GST_VIDEO_FORMAT_RGB16: rgb 5-6-5 bits per component |
69 | * @GST_VIDEO_FORMAT_BGR16: reverse rgb 5-6-5 bits per component |
70 | * @GST_VIDEO_FORMAT_RGB15: rgb 5-5-5 bits per component |
71 | * @GST_VIDEO_FORMAT_BGR15: reverse rgb 5-5-5 bits per component |
72 | * @GST_VIDEO_FORMAT_UYVP: packed 10-bit 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...) |
73 | * @GST_VIDEO_FORMAT_A420: planar 4:4:2:0 AYUV |
74 | * @GST_VIDEO_FORMAT_RGB8P: 8-bit paletted RGB |
75 | * @GST_VIDEO_FORMAT_YUV9: planar 4:1:0 YUV |
76 | * @GST_VIDEO_FORMAT_YVU9: planar 4:1:0 YUV (like YUV9 but UV planes swapped) |
77 | * @GST_VIDEO_FORMAT_IYU1: packed 4:1:1 YUV (Cb-Y0-Y1-Cr-Y2-Y3 ...) |
78 | * @GST_VIDEO_FORMAT_ARGB64: rgb with alpha channel first, 16 bits (native endianness) per channel |
79 | * @GST_VIDEO_FORMAT_AYUV64: packed 4:4:4 YUV with alpha channel, 16 bits (native endianness) per channel (A0-Y0-U0-V0 ...) |
80 | * @GST_VIDEO_FORMAT_r210: packed 4:4:4 RGB, 10 bits per channel |
81 | * @GST_VIDEO_FORMAT_I420_10BE: planar 4:2:0 YUV, 10 bits per channel |
82 | * @GST_VIDEO_FORMAT_I420_10LE: planar 4:2:0 YUV, 10 bits per channel |
83 | * @GST_VIDEO_FORMAT_I422_10BE: planar 4:2:2 YUV, 10 bits per channel |
84 | * @GST_VIDEO_FORMAT_I422_10LE: planar 4:2:2 YUV, 10 bits per channel |
85 | * @GST_VIDEO_FORMAT_Y444_10BE: planar 4:4:4 YUV, 10 bits per channel (Since: 1.2) |
86 | * @GST_VIDEO_FORMAT_Y444_10LE: planar 4:4:4 YUV, 10 bits per channel (Since: 1.2) |
87 | * @GST_VIDEO_FORMAT_GBR: planar 4:4:4 RGB, 8 bits per channel (Since: 1.2) |
88 | * @GST_VIDEO_FORMAT_GBR_10BE: planar 4:4:4 RGB, 10 bits per channel (Since: 1.2) |
89 | * @GST_VIDEO_FORMAT_GBR_10LE: planar 4:4:4 RGB, 10 bits per channel (Since: 1.2) |
90 | * @GST_VIDEO_FORMAT_NV16: planar 4:2:2 YUV with interleaved UV plane (Since: 1.2) |
91 | * @GST_VIDEO_FORMAT_NV16_10LE32: 10-bit variant of @GST_VIDEO_FORMAT_NV16, packed into 32bit words (MSB 2 bits padding) (Since: 1.14) |
92 | * @GST_VIDEO_FORMAT_NV24: planar 4:4:4 YUV with interleaved UV plane (Since: 1.2) |
93 | * @GST_VIDEO_FORMAT_NV12_64Z32: NV12 with 64x32 tiling in zigzag pattern (Since: 1.4) |
94 | * @GST_VIDEO_FORMAT_A420_10BE: planar 4:4:2:0 YUV, 10 bits per channel (Since: 1.6) |
95 | * @GST_VIDEO_FORMAT_A420_10LE: planar 4:4:2:0 YUV, 10 bits per channel (Since: 1.6) |
96 | * @GST_VIDEO_FORMAT_A422_10BE: planar 4:4:2:2 YUV, 10 bits per channel (Since: 1.6) |
97 | * @GST_VIDEO_FORMAT_A422_10LE: planar 4:4:2:2 YUV, 10 bits per channel (Since: 1.6) |
98 | * @GST_VIDEO_FORMAT_A444_10BE: planar 4:4:4:4 YUV, 10 bits per channel (Since: 1.6) |
99 | * @GST_VIDEO_FORMAT_A444_10LE: planar 4:4:4:4 YUV, 10 bits per channel (Since: 1.6) |
100 | * @GST_VIDEO_FORMAT_NV61: planar 4:2:2 YUV with interleaved VU plane (Since: 1.6) |
101 | * @GST_VIDEO_FORMAT_P010_10BE: planar 4:2:0 YUV with interleaved UV plane, 10 bits per channel (Since: 1.10) |
102 | * @GST_VIDEO_FORMAT_P010_10LE: planar 4:2:0 YUV with interleaved UV plane, 10 bits per channel (Since: 1.10) |
103 | * @GST_VIDEO_FORMAT_GBRA: planar 4:4:4:4 ARGB, 8 bits per channel (Since: 1.12) |
104 | * @GST_VIDEO_FORMAT_GBRA_10BE: planar 4:4:4:4 ARGB, 10 bits per channel (Since: 1.12) |
105 | * @GST_VIDEO_FORMAT_GBRA_10LE: planar 4:4:4:4 ARGB, 10 bits per channel (Since: 1.12) |
106 | * @GST_VIDEO_FORMAT_GBR_12BE: planar 4:4:4 RGB, 12 bits per channel (Since: 1.12) |
107 | * @GST_VIDEO_FORMAT_GBR_12LE: planar 4:4:4 RGB, 12 bits per channel (Since: 1.12) |
108 | * @GST_VIDEO_FORMAT_GBRA_12BE: planar 4:4:4:4 ARGB, 12 bits per channel (Since: 1.12) |
109 | * @GST_VIDEO_FORMAT_GBRA_12LE: planar 4:4:4:4 ARGB, 12 bits per channel (Since: 1.12) |
110 | * @GST_VIDEO_FORMAT_I420_12BE: planar 4:2:0 YUV, 12 bits per channel (Since: 1.12) |
111 | * @GST_VIDEO_FORMAT_I420_12LE: planar 4:2:0 YUV, 12 bits per channel (Since: 1.12) |
112 | * @GST_VIDEO_FORMAT_I422_12BE: planar 4:2:2 YUV, 12 bits per channel (Since: 1.12) |
113 | * @GST_VIDEO_FORMAT_I422_12LE: planar 4:2:2 YUV, 12 bits per channel (Since: 1.12) |
114 | * @GST_VIDEO_FORMAT_Y444_12BE: planar 4:4:4 YUV, 12 bits per channel (Since: 1.12) |
115 | * @GST_VIDEO_FORMAT_Y444_12LE: planar 4:4:4 YUV, 12 bits per channel (Since: 1.12) |
116 | * @GST_VIDEO_FORMAT_NV12_10LE40: Fully packed variant of NV12_10LE32 (Since: 1.16) |
117 | * @GST_VIDEO_FORMAT_Y210: packed 4:2:2 YUV, 10 bits per channel (Since: 1.16) |
118 | * @GST_VIDEO_FORMAT_Y410: packed 4:4:4 YUV, 10 bits per channel(A-V-Y-U...) (Since: 1.16) |
119 | * @GST_VIDEO_FORMAT_VUYA: packed 4:4:4 YUV with alpha channel (V0-U0-Y0-A0...) (Since: 1.16) |
120 | * @GST_VIDEO_FORMAT_BGR10A2_LE: packed 4:4:4 RGB with alpha channel(B-G-R-A), 10 bits for R/G/B channel and MSB 2 bits for alpha channel (Since: 1.16) |
121 | * @GST_VIDEO_FORMAT_RGB10A2_LE: packed 4:4:4 RGB with alpha channel(R-G-B-A), 10 bits for R/G/B channel and MSB 2 bits for alpha channel (Since: 1.18) |
122 | * @GST_VIDEO_FORMAT_Y444_16BE: planar 4:4:4 YUV, 16 bits per channel (Since: 1.18) |
123 | * @GST_VIDEO_FORMAT_Y444_16LE: planar 4:4:4 YUV, 16 bits per channel (Since: 1.18) |
124 | * @GST_VIDEO_FORMAT_P016_BE: planar 4:2:0 YUV with interleaved UV plane, 16 bits per channel (Since: 1.18) |
125 | * @GST_VIDEO_FORMAT_P016_LE: planar 4:2:0 YUV with interleaved UV plane, 16 bits per channel (Since: 1.18) |
126 | * @GST_VIDEO_FORMAT_P012_BE: planar 4:2:0 YUV with interleaved UV plane, 12 bits per channel (Since: 1.18) |
127 | * @GST_VIDEO_FORMAT_P012_LE: planar 4:2:0 YUV with interleaved UV plane, 12 bits per channel (Since: 1.18) |
128 | * @GST_VIDEO_FORMAT_Y212_BE: packed 4:2:2 YUV, 12 bits per channel (Y-U-Y-V) (Since: 1.18) |
129 | * @GST_VIDEO_FORMAT_Y212_LE: packed 4:2:2 YUV, 12 bits per channel (Y-U-Y-V) (Since: 1.18) |
130 | * @GST_VIDEO_FORMAT_Y412_BE: packed 4:4:4:4 YUV, 12 bits per channel(U-Y-V-A...) (Since: 1.18) |
131 | * @GST_VIDEO_FORMAT_Y412_LE: packed 4:4:4:4 YUV, 12 bits per channel(U-Y-V-A...) (Since: 1.18) |
132 | * @GST_VIDEO_FORMAT_NV12_4L4: NV12 with 4x4 tiles in linear order (Since: 1.18) |
133 | * @GST_VIDEO_FORMAT_NV12_32L32: NV12 with 32x32 tiles in linear order (Since: 1.18) |
134 | * @GST_VIDEO_FORMAT_RGBP: planar 4:4:4 RGB, 8 bits per channel (Since: 1.20) |
135 | * @GST_VIDEO_FORMAT_BGRP: planar 4:4:4 RGB, 8 bits per channel (Since: 1.20) |
136 | * @GST_VIDEO_FORMAT_AV12: Planar 4:2:0 YUV with interleaved UV plane with alpha as 3rd plane (Since: 1.20) |
137 | * @GST_VIDEO_FORMAT_ARGB64_LE: RGB with alpha channel first, 16 bits per channel |
138 | * @GST_VIDEO_FORMAT_ARGB64_BE: RGB with alpha channel first, 16 bits per channel |
139 | * @GST_VIDEO_FORMAT_RGBA64_LE: RGB with alpha channel last, 16 bits per channel |
140 | * @GST_VIDEO_FORMAT_RGBA64_BE: RGB with alpha channel last, 16 bits per channel |
141 | * @GST_VIDEO_FORMAT_BGRA64_LE: reverse RGB with alpha channel last, 16 bits per channel |
142 | * @GST_VIDEO_FORMAT_BGRA64_BE: reverse RGB with alpha channel last, 16 bits per channel |
143 | * @GST_VIDEO_FORMAT_ABGR64_LE: reverse RGB with alpha channel first, 16 bits per channel |
144 | * @GST_VIDEO_FORMAT_ABGR64_BE: reverse RGB with alpha channel first, 16 bits per channel |
145 | * |
146 | * Enum value describing the most common video formats. |
147 | * |
148 | * See the [GStreamer raw video format design document](https://gstreamer.freedesktop.org/documentation/additional/design/mediatype-video-raw.html#formats) |
149 | * for details about the layout and packing of these formats in memory. |
150 | */ |
151 | typedef enum { |
152 | GST_VIDEO_FORMAT_UNKNOWN, |
153 | GST_VIDEO_FORMAT_ENCODED, |
154 | GST_VIDEO_FORMAT_I420, |
155 | GST_VIDEO_FORMAT_YV12, |
156 | GST_VIDEO_FORMAT_YUY2, |
157 | GST_VIDEO_FORMAT_UYVY, |
158 | GST_VIDEO_FORMAT_AYUV, |
159 | GST_VIDEO_FORMAT_RGBx, |
160 | GST_VIDEO_FORMAT_BGRx, |
161 | GST_VIDEO_FORMAT_xRGB, |
162 | GST_VIDEO_FORMAT_xBGR, |
163 | GST_VIDEO_FORMAT_RGBA, |
164 | GST_VIDEO_FORMAT_BGRA, |
165 | GST_VIDEO_FORMAT_ARGB, |
166 | GST_VIDEO_FORMAT_ABGR, |
167 | GST_VIDEO_FORMAT_RGB, |
168 | GST_VIDEO_FORMAT_BGR, |
169 | GST_VIDEO_FORMAT_Y41B, |
170 | GST_VIDEO_FORMAT_Y42B, |
171 | GST_VIDEO_FORMAT_YVYU, |
172 | GST_VIDEO_FORMAT_Y444, |
173 | GST_VIDEO_FORMAT_v210, |
174 | GST_VIDEO_FORMAT_v216, |
175 | GST_VIDEO_FORMAT_NV12, |
176 | GST_VIDEO_FORMAT_NV21, |
177 | GST_VIDEO_FORMAT_GRAY8, |
178 | GST_VIDEO_FORMAT_GRAY16_BE, |
179 | GST_VIDEO_FORMAT_GRAY16_LE, |
180 | GST_VIDEO_FORMAT_v308, |
181 | GST_VIDEO_FORMAT_RGB16, |
182 | GST_VIDEO_FORMAT_BGR16, |
183 | GST_VIDEO_FORMAT_RGB15, |
184 | GST_VIDEO_FORMAT_BGR15, |
185 | GST_VIDEO_FORMAT_UYVP, |
186 | GST_VIDEO_FORMAT_A420, |
187 | GST_VIDEO_FORMAT_RGB8P, |
188 | GST_VIDEO_FORMAT_YUV9, |
189 | GST_VIDEO_FORMAT_YVU9, |
190 | GST_VIDEO_FORMAT_IYU1, |
191 | GST_VIDEO_FORMAT_ARGB64, |
192 | GST_VIDEO_FORMAT_AYUV64, |
193 | GST_VIDEO_FORMAT_r210, |
194 | GST_VIDEO_FORMAT_I420_10BE, |
195 | GST_VIDEO_FORMAT_I420_10LE, |
196 | GST_VIDEO_FORMAT_I422_10BE, |
197 | GST_VIDEO_FORMAT_I422_10LE, |
198 | GST_VIDEO_FORMAT_Y444_10BE, |
199 | GST_VIDEO_FORMAT_Y444_10LE, |
200 | GST_VIDEO_FORMAT_GBR, |
201 | GST_VIDEO_FORMAT_GBR_10BE, |
202 | GST_VIDEO_FORMAT_GBR_10LE, |
203 | GST_VIDEO_FORMAT_NV16, |
204 | GST_VIDEO_FORMAT_NV24, |
205 | GST_VIDEO_FORMAT_NV12_64Z32, |
206 | GST_VIDEO_FORMAT_A420_10BE, |
207 | GST_VIDEO_FORMAT_A420_10LE, |
208 | GST_VIDEO_FORMAT_A422_10BE, |
209 | GST_VIDEO_FORMAT_A422_10LE, |
210 | GST_VIDEO_FORMAT_A444_10BE, |
211 | GST_VIDEO_FORMAT_A444_10LE, |
212 | GST_VIDEO_FORMAT_NV61, |
213 | GST_VIDEO_FORMAT_P010_10BE, |
214 | GST_VIDEO_FORMAT_P010_10LE, |
215 | GST_VIDEO_FORMAT_IYU2, |
216 | GST_VIDEO_FORMAT_VYUY, |
217 | GST_VIDEO_FORMAT_GBRA, |
218 | GST_VIDEO_FORMAT_GBRA_10BE, |
219 | GST_VIDEO_FORMAT_GBRA_10LE, |
220 | GST_VIDEO_FORMAT_GBR_12BE, |
221 | GST_VIDEO_FORMAT_GBR_12LE, |
222 | GST_VIDEO_FORMAT_GBRA_12BE, |
223 | GST_VIDEO_FORMAT_GBRA_12LE, |
224 | GST_VIDEO_FORMAT_I420_12BE, |
225 | GST_VIDEO_FORMAT_I420_12LE, |
226 | GST_VIDEO_FORMAT_I422_12BE, |
227 | GST_VIDEO_FORMAT_I422_12LE, |
228 | GST_VIDEO_FORMAT_Y444_12BE, |
229 | GST_VIDEO_FORMAT_Y444_12LE, |
230 | GST_VIDEO_FORMAT_GRAY10_LE32, |
231 | GST_VIDEO_FORMAT_NV12_10LE32, |
232 | GST_VIDEO_FORMAT_NV16_10LE32, |
233 | GST_VIDEO_FORMAT_NV12_10LE40, |
234 | GST_VIDEO_FORMAT_Y210, |
235 | GST_VIDEO_FORMAT_Y410, |
236 | GST_VIDEO_FORMAT_VUYA, |
237 | GST_VIDEO_FORMAT_BGR10A2_LE, |
238 | GST_VIDEO_FORMAT_RGB10A2_LE, |
239 | GST_VIDEO_FORMAT_Y444_16BE, |
240 | GST_VIDEO_FORMAT_Y444_16LE, |
241 | GST_VIDEO_FORMAT_P016_BE, |
242 | GST_VIDEO_FORMAT_P016_LE, |
243 | GST_VIDEO_FORMAT_P012_BE, |
244 | GST_VIDEO_FORMAT_P012_LE, |
245 | GST_VIDEO_FORMAT_Y212_BE, |
246 | GST_VIDEO_FORMAT_Y212_LE, |
247 | GST_VIDEO_FORMAT_Y412_BE, |
248 | GST_VIDEO_FORMAT_Y412_LE, |
249 | /** |
250 | * GST_VIDEO_FORMAT_NV12_4L4: |
251 | * |
252 | * NV12 with 4x4 tiles in linear order. |
253 | * |
254 | * Since: 1.18 |
255 | */ |
256 | GST_VIDEO_FORMAT_NV12_4L4, |
257 | /** |
258 | * GST_VIDEO_FORMAT_NV12_32L32: |
259 | * |
260 | * NV12 with 32x32 tiles in linear order. |
261 | * |
262 | * Since: 1.18 |
263 | */ |
264 | GST_VIDEO_FORMAT_NV12_32L32, |
265 | |
266 | /** |
267 | * GST_VIDEO_FORMAT_RGBP: |
268 | * |
269 | * Planar 4:4:4 RGB, R-G-B order |
270 | * |
271 | * Since: 1.20 |
272 | */ |
273 | GST_VIDEO_FORMAT_RGBP, |
274 | |
275 | /** |
276 | * GST_VIDEO_FORMAT_BGRP: |
277 | * |
278 | * Planar 4:4:4 RGB, B-G-R order |
279 | * |
280 | * Since: 1.20 |
281 | */ |
282 | GST_VIDEO_FORMAT_BGRP, |
283 | |
284 | /** |
285 | * GST_VIDEO_FORMAT_AV12: |
286 | * |
287 | * Planar 4:2:0 YUV with interleaved UV plane with alpha as |
288 | * 3rd plane. |
289 | * |
290 | * Since: 1.20 |
291 | */ |
292 | GST_VIDEO_FORMAT_AV12, |
293 | |
294 | /** |
295 | * GST_VIDEO_FORMAT_ARGB64_LE: |
296 | * |
297 | * RGB with alpha channel first, 16 bits (little endian) |
298 | * per channel. |
299 | * |
300 | * Since: 1.20 |
301 | */ |
302 | GST_VIDEO_FORMAT_ARGB64_LE, |
303 | |
304 | /** |
305 | * GST_VIDEO_FORMAT_ARGB64_BE: |
306 | * |
307 | * RGB with alpha channel first, 16 bits (big endian) |
308 | * per channel. |
309 | * |
310 | * Since: 1.20 |
311 | */ |
312 | GST_VIDEO_FORMAT_ARGB64_BE, |
313 | |
314 | /** |
315 | * GST_VIDEO_FORMAT_RGBA64_LE: |
316 | * |
317 | * RGB with alpha channel last, 16 bits (little endian) |
318 | * per channel. |
319 | * |
320 | * Since: 1.20 |
321 | */ |
322 | GST_VIDEO_FORMAT_RGBA64_LE, |
323 | |
324 | /** |
325 | * GST_VIDEO_FORMAT_RGBA64_BE: |
326 | * |
327 | * RGB with alpha channel last, 16 bits (big endian) |
328 | * per channel. |
329 | * |
330 | * Since: 1.20 |
331 | */ |
332 | GST_VIDEO_FORMAT_RGBA64_BE, |
333 | |
334 | /** |
335 | * GST_VIDEO_FORMAT_BGRA64_LE: |
336 | * |
337 | * Reverse RGB with alpha channel last, 16 bits (little endian) |
338 | * per channel. |
339 | * |
340 | * Since: 1.20 |
341 | */ |
342 | GST_VIDEO_FORMAT_BGRA64_LE, |
343 | |
344 | /** |
345 | * GST_VIDEO_FORMAT_BGRA64_BE: |
346 | * |
347 | * Reverse RGB with alpha channel last, 16 bits (big endian) |
348 | * per channel. |
349 | * |
350 | * Since: 1.20 |
351 | */ |
352 | GST_VIDEO_FORMAT_BGRA64_BE, |
353 | |
354 | /** |
355 | * GST_VIDEO_FORMAT_ABGR64_LE: |
356 | * |
357 | * Reverse RGB with alpha channel first, 16 bits (little endian) |
358 | * per channel. |
359 | * |
360 | * Since: 1.20 |
361 | */ |
362 | GST_VIDEO_FORMAT_ABGR64_LE, |
363 | |
364 | /** |
365 | * GST_VIDEO_FORMAT_ABGR64_BE: |
366 | * |
367 | * Reverse RGB with alpha channel first, 16 bits (big endian) |
368 | * per channel. |
369 | * |
370 | * Since: 1.20 |
371 | */ |
372 | GST_VIDEO_FORMAT_ABGR64_BE, |
373 | } GstVideoFormat; |
374 | |
375 | #define GST_VIDEO_MAX_PLANES 4 |
376 | #define GST_VIDEO_MAX_COMPONENTS 4 |
377 | |
378 | typedef struct _GstVideoFormatInfo GstVideoFormatInfo; |
379 | |
380 | /** |
381 | * GstVideoFormatFlags: |
382 | * @GST_VIDEO_FORMAT_FLAG_YUV: The video format is YUV, components are numbered |
383 | * 0=Y, 1=U, 2=V. |
384 | * @GST_VIDEO_FORMAT_FLAG_RGB: The video format is RGB, components are numbered |
385 | * 0=R, 1=G, 2=B. |
386 | * @GST_VIDEO_FORMAT_FLAG_GRAY: The video is gray, there is one gray component |
387 | * with index 0. |
388 | * @GST_VIDEO_FORMAT_FLAG_ALPHA: The video format has an alpha components with |
389 | * the number 3. |
390 | * @GST_VIDEO_FORMAT_FLAG_LE: The video format has data stored in little |
391 | * endianness. |
392 | * @GST_VIDEO_FORMAT_FLAG_PALETTE: The video format has a palette. The palette |
393 | * is stored in the second plane and indexes are stored in the first plane. |
394 | * @GST_VIDEO_FORMAT_FLAG_COMPLEX: The video format has a complex layout that |
395 | * can't be described with the usual information in the #GstVideoFormatInfo. |
396 | * @GST_VIDEO_FORMAT_FLAG_UNPACK: This format can be used in a |
397 | * #GstVideoFormatUnpack and #GstVideoFormatPack function. |
398 | * @GST_VIDEO_FORMAT_FLAG_TILED: The format is tiled, there is tiling information |
399 | * in the last plane. |
400 | * |
401 | * The different video flags that a format info can have. |
402 | */ |
403 | typedef enum |
404 | { |
405 | GST_VIDEO_FORMAT_FLAG_YUV = (1 << 0), |
406 | GST_VIDEO_FORMAT_FLAG_RGB = (1 << 1), |
407 | GST_VIDEO_FORMAT_FLAG_GRAY = (1 << 2), |
408 | GST_VIDEO_FORMAT_FLAG_ALPHA = (1 << 3), |
409 | GST_VIDEO_FORMAT_FLAG_LE = (1 << 4), |
410 | GST_VIDEO_FORMAT_FLAG_PALETTE = (1 << 5), |
411 | GST_VIDEO_FORMAT_FLAG_COMPLEX = (1 << 6), |
412 | GST_VIDEO_FORMAT_FLAG_UNPACK = (1 << 7), |
413 | GST_VIDEO_FORMAT_FLAG_TILED = (1 << 8) |
414 | } GstVideoFormatFlags; |
415 | |
416 | /* YUV components */ |
417 | #define GST_VIDEO_COMP_Y 0 |
418 | #define GST_VIDEO_COMP_U 1 |
419 | #define GST_VIDEO_COMP_V 2 |
420 | |
421 | /* RGB components */ |
422 | #define GST_VIDEO_COMP_R 0 |
423 | #define GST_VIDEO_COMP_G 1 |
424 | #define GST_VIDEO_COMP_B 2 |
425 | |
426 | /* alpha component */ |
427 | #define GST_VIDEO_COMP_A 3 |
428 | |
429 | /* palette components */ |
430 | #define GST_VIDEO_COMP_INDEX 0 |
431 | #define GST_VIDEO_COMP_PALETTE 1 |
432 | |
433 | #include <gst/video/video-chroma.h> |
434 | |
435 | /** |
436 | * GstVideoPackFlags: |
437 | * @GST_VIDEO_PACK_FLAG_NONE: No flag |
438 | * @GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE: When the source has a smaller depth |
439 | * than the target format, set the least significant bits of the target |
440 | * to 0. This is likely slightly faster but less accurate. When this flag |
441 | * is not specified, the most significant bits of the source are duplicated |
442 | * in the least significant bits of the destination. |
443 | * @GST_VIDEO_PACK_FLAG_INTERLACED: The source is interlaced. The unpacked |
444 | * format will be interlaced as well with each line containing |
445 | * information from alternating fields. (Since: 1.2) |
446 | * |
447 | * The different flags that can be used when packing and unpacking. |
448 | */ |
449 | typedef enum |
450 | { |
451 | GST_VIDEO_PACK_FLAG_NONE = 0, |
452 | GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE = (1 << 0), |
453 | GST_VIDEO_PACK_FLAG_INTERLACED = (1 << 1) |
454 | } GstVideoPackFlags; |
455 | |
456 | /** |
457 | * GstVideoFormatUnpack: |
458 | * @info: a #GstVideoFormatInfo |
459 | * @flags: flags to control the unpacking |
460 | * @dest: a destination array |
461 | * @data: pointers to the data planes |
462 | * @stride: strides of the planes |
463 | * @x: the x position in the image to start from |
464 | * @y: the y position in the image to start from |
465 | * @width: the amount of pixels to unpack. |
466 | * |
467 | * Unpacks @width pixels from the given planes and strides containing data of |
468 | * format @info. The pixels will be unpacked into @dest with each component |
469 | * interleaved as per @info's unpack_format, which will usually be one of |
470 | * #GST_VIDEO_FORMAT_ARGB, #GST_VIDEO_FORMAT_AYUV, #GST_VIDEO_FORMAT_ARGB64 or |
471 | * #GST_VIDEO_FORMAT_AYUV64 depending on the format to unpack. |
472 | * @dest should at least be big enough to hold @width * bytes_per_pixel bytes |
473 | * where bytes_per_pixel relates to the unpack format and will usually be |
474 | * either 4 or 8 depending on the unpack format. bytes_per_pixel will be |
475 | * the same as the pixel stride for plane 0 for the above formats. |
476 | * |
477 | * For subsampled formats, the components will be duplicated in the destination |
478 | * array. Reconstruction of the missing components can be performed in a |
479 | * separate step after unpacking. |
480 | */ |
481 | typedef void (*GstVideoFormatUnpack) (const GstVideoFormatInfo *info, |
482 | GstVideoPackFlags flags, gpointer dest, |
483 | const gpointer data[GST_VIDEO_MAX_PLANES], |
484 | const gint stride[GST_VIDEO_MAX_PLANES], |
485 | gint x, gint y, gint width); |
486 | /** |
487 | * GstVideoFormatPack: |
488 | * @info: a #GstVideoFormatInfo |
489 | * @flags: flags to control the packing |
490 | * @src: a source array |
491 | * @sstride: the source array stride |
492 | * @data: pointers to the destination data planes |
493 | * @stride: strides of the destination planes |
494 | * @chroma_site: the chroma siting of the target when subsampled (not used) |
495 | * @y: the y position in the image to pack to |
496 | * @width: the amount of pixels to pack. |
497 | * |
498 | * Packs @width pixels from @src to the given planes and strides in the |
499 | * format @info. The pixels from source have each component interleaved |
500 | * and will be packed into the planes in @data. |
501 | * |
502 | * This function operates on pack_lines lines, meaning that @src should |
503 | * contain at least pack_lines lines with a stride of @sstride and @y |
504 | * should be a multiple of pack_lines. |
505 | * |
506 | * Subsampled formats will use the horizontally and vertically cosited |
507 | * component from the source. Subsampling should be performed before |
508 | * packing. |
509 | * |
510 | * Because this function does not have a x coordinate, it is not possible to |
511 | * pack pixels starting from an unaligned position. For tiled images this |
512 | * means that packing should start from a tile coordinate. For subsampled |
513 | * formats this means that a complete pixel needs to be packed. |
514 | */ |
515 | /* FIXME(2.0): remove the chroma_site, it is unused and is not relevant for |
516 | * packing, chroma subsampling based on chroma-site should be done in a separate |
517 | * step before packing*/ |
518 | typedef void (*GstVideoFormatPack) (const GstVideoFormatInfo *info, |
519 | GstVideoPackFlags flags, |
520 | const gpointer src, gint sstride, |
521 | gpointer data[GST_VIDEO_MAX_PLANES], |
522 | const gint stride[GST_VIDEO_MAX_PLANES], |
523 | GstVideoChromaSite chroma_site, |
524 | gint y, gint width); |
525 | |
526 | /** |
527 | * GstVideoFormatInfo: |
528 | * @format: #GstVideoFormat |
529 | * @name: string representation of the format |
530 | * @description: use readable description of the format |
531 | * @flags: #GstVideoFormatFlags |
532 | * @bits: The number of bits used to pack data items. This can be less than 8 |
533 | * when multiple pixels are stored in a byte. for values > 8 multiple bytes |
534 | * should be read according to the endianness flag before applying the shift |
535 | * and mask. |
536 | * @n_components: the number of components in the video format. |
537 | * @shift: the number of bits to shift away to get the component data |
538 | * @depth: the depth in bits for each component |
539 | * @pixel_stride: the pixel stride of each component. This is the amount of |
540 | * bytes to the pixel immediately to the right. When bits < 8, the stride is |
541 | * expressed in bits. For 24-bit RGB, this would be 3 bytes, for example, |
542 | * while it would be 4 bytes for RGBx or ARGB. |
543 | * @n_planes: the number of planes for this format. The number of planes can be |
544 | * less than the amount of components when multiple components are packed into |
545 | * one plane. |
546 | * @plane: the plane number where a component can be found |
547 | * @poffset: the offset in the plane where the first pixel of the components |
548 | * can be found. |
549 | * @w_sub: subsampling factor of the width for the component. Use |
550 | * GST_VIDEO_SUB_SCALE to scale a width. |
551 | * @h_sub: subsampling factor of the height for the component. Use |
552 | * GST_VIDEO_SUB_SCALE to scale a height. |
553 | * @unpack_format: the format of the unpacked pixels. This format must have the |
554 | * #GST_VIDEO_FORMAT_FLAG_UNPACK flag set. |
555 | * @unpack_func: an unpack function for this format |
556 | * @pack_lines: the amount of lines that will be packed |
557 | * @pack_func: an pack function for this format |
558 | * @tile_mode: The tiling mode |
559 | * @tile_ws: The width of a tile, in bytes, represented as a shift |
560 | * @tile_hs: The height of a tile, in bytes, represented as a shift |
561 | * |
562 | * Information for a video format. |
563 | */ |
564 | struct _GstVideoFormatInfo { |
565 | GstVideoFormat format; |
566 | const gchar *name; |
567 | const gchar *description; |
568 | GstVideoFormatFlags flags; |
569 | guint bits; |
570 | guint n_components; |
571 | guint shift[GST_VIDEO_MAX_COMPONENTS]; |
572 | guint depth[GST_VIDEO_MAX_COMPONENTS]; |
573 | gint pixel_stride[GST_VIDEO_MAX_COMPONENTS]; |
574 | guint n_planes; |
575 | guint plane[GST_VIDEO_MAX_COMPONENTS]; |
576 | guint poffset[GST_VIDEO_MAX_COMPONENTS]; |
577 | guint w_sub[GST_VIDEO_MAX_COMPONENTS]; |
578 | guint h_sub[GST_VIDEO_MAX_COMPONENTS]; |
579 | |
580 | GstVideoFormat unpack_format; |
581 | GstVideoFormatUnpack unpack_func; |
582 | gint pack_lines; |
583 | GstVideoFormatPack pack_func; |
584 | |
585 | GstVideoTileMode tile_mode; |
586 | guint tile_ws; |
587 | guint tile_hs; |
588 | |
589 | /*< private >*/ |
590 | gpointer _gst_reserved[GST_PADDING]; |
591 | }; |
592 | |
593 | #define GST_VIDEO_FORMAT_INFO_FORMAT(info) ((info)->format) |
594 | #define GST_VIDEO_FORMAT_INFO_NAME(info) ((info)->name) |
595 | #define GST_VIDEO_FORMAT_INFO_FLAGS(info) ((info)->flags) |
596 | |
597 | #define GST_VIDEO_FORMAT_INFO_IS_YUV(info) (((info)->flags & GST_VIDEO_FORMAT_FLAG_YUV) != 0) |
598 | #define GST_VIDEO_FORMAT_INFO_IS_RGB(info) (((info)->flags & GST_VIDEO_FORMAT_FLAG_RGB) != 0) |
599 | #define GST_VIDEO_FORMAT_INFO_IS_GRAY(info) (((info)->flags & GST_VIDEO_FORMAT_FLAG_GRAY) != 0) |
600 | #define GST_VIDEO_FORMAT_INFO_HAS_ALPHA(info) (((info)->flags & GST_VIDEO_FORMAT_FLAG_ALPHA) != 0) |
601 | #define GST_VIDEO_FORMAT_INFO_IS_LE(info) (((info)->flags & GST_VIDEO_FORMAT_FLAG_LE) != 0) |
602 | #define GST_VIDEO_FORMAT_INFO_HAS_PALETTE(info) (((info)->flags & GST_VIDEO_FORMAT_FLAG_PALETTE) != 0) |
603 | #define GST_VIDEO_FORMAT_INFO_IS_COMPLEX(info) (((info)->flags & GST_VIDEO_FORMAT_FLAG_COMPLEX) != 0) |
604 | #define GST_VIDEO_FORMAT_INFO_IS_TILED(info) (((info)->flags & GST_VIDEO_FORMAT_FLAG_TILED) != 0) |
605 | |
606 | #define GST_VIDEO_FORMAT_INFO_BITS(info) ((info)->bits) |
607 | #define GST_VIDEO_FORMAT_INFO_N_COMPONENTS(info) ((info)->n_components) |
608 | #define GST_VIDEO_FORMAT_INFO_SHIFT(info,c) ((info)->shift[c]) |
609 | #define GST_VIDEO_FORMAT_INFO_DEPTH(info,c) ((info)->depth[c]) |
610 | /** |
611 | * GST_VIDEO_FORMAT_INFO_PSTRIDE: |
612 | * @info: a #GstVideoFormatInfo |
613 | * @c: the component index |
614 | * |
615 | * pixel stride for the given component. This is the amount of bytes to the |
616 | * pixel immediately to the right, so basically bytes from one pixel to the |
617 | * next. When bits < 8, the stride is expressed in bits. |
618 | * |
619 | * Examples: for 24-bit RGB, the pixel stride would be 3 bytes, while it |
620 | * would be 4 bytes for RGBx or ARGB, and 8 bytes for ARGB64 or AYUV64. |
621 | * For planar formats such as I420 the pixel stride is usually 1. For |
622 | * YUY2 it would be 2 bytes. |
623 | */ |
624 | #define GST_VIDEO_FORMAT_INFO_PSTRIDE(info,c) ((info)->pixel_stride[c]) |
625 | /** |
626 | * GST_VIDEO_FORMAT_INFO_N_PLANES: |
627 | * @info: a #GstVideoFormatInfo |
628 | * |
629 | * Number of planes. This is the number of planes the pixel layout is |
630 | * organized in in memory. The number of planes can be less than the |
631 | * number of components (e.g. Y,U,V,A or R, G, B, A) when multiple |
632 | * components are packed into one plane. |
633 | * |
634 | * Examples: RGB/RGBx/RGBA: 1 plane, 3/3/4 components; |
635 | * I420: 3 planes, 3 components; NV21/NV12: 2 planes, 3 components. |
636 | */ |
637 | #define GST_VIDEO_FORMAT_INFO_N_PLANES(info) ((info)->n_planes) |
638 | /** |
639 | * GST_VIDEO_FORMAT_INFO_PLANE: |
640 | * @info: a #GstVideoFormatInfo |
641 | * @c: the component index |
642 | * |
643 | * Plane number where the given component can be found. A plane may |
644 | * contain data for multiple components. |
645 | */ |
646 | #define GST_VIDEO_FORMAT_INFO_PLANE(info,c) ((info)->plane[c]) |
647 | #define GST_VIDEO_FORMAT_INFO_POFFSET(info,c) ((info)->poffset[c]) |
648 | #define GST_VIDEO_FORMAT_INFO_W_SUB(info,c) ((info)->w_sub[c]) |
649 | #define GST_VIDEO_FORMAT_INFO_H_SUB(info,c) ((info)->h_sub[c]) |
650 | |
651 | /* rounds up */ |
652 | #define GST_VIDEO_SUB_SCALE(scale,val) (-((-((gint)(val)))>>(scale))) |
653 | |
654 | #define GST_VIDEO_FORMAT_INFO_SCALE_WIDTH(info,c,w) GST_VIDEO_SUB_SCALE ((info)->w_sub[c],(w)) |
655 | #define GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT(info,c,h) GST_VIDEO_SUB_SCALE ((info)->h_sub[c],(h)) |
656 | |
657 | #define GST_VIDEO_FORMAT_INFO_DATA(info,planes,comp) \ |
658 | (((guint8*)(planes)[(info)->plane[comp]]) + (info)->poffset[comp]) |
659 | /** |
660 | * GST_VIDEO_FORMAT_INFO_STRIDE: |
661 | * @info: a #GstVideoFormatInfo |
662 | * @strides: an array of strides |
663 | * @comp: the component index |
664 | * |
665 | * Row stride in bytes, that is number of bytes from the first pixel component |
666 | * of a row to the first pixel component in the next row. This might include |
667 | * some row padding (memory not actually used for anything, to make sure the |
668 | * beginning of the next row is aligned in a particular way). |
669 | */ |
670 | #define GST_VIDEO_FORMAT_INFO_STRIDE(info,strides,comp) ((strides)[(info)->plane[comp]]) |
671 | #define GST_VIDEO_FORMAT_INFO_OFFSET(info,offsets,comp) \ |
672 | (((offsets)[(info)->plane[comp]]) + (info)->poffset[comp]) |
673 | |
674 | #define GST_VIDEO_FORMAT_INFO_TILE_MODE(info) ((info)->tile_mode) |
675 | #define GST_VIDEO_FORMAT_INFO_TILE_WS(info) ((info)->tile_ws) |
676 | #define GST_VIDEO_FORMAT_INFO_TILE_HS(info) ((info)->tile_hs) |
677 | |
678 | GST_VIDEO_API |
679 | void gst_video_format_info_component (const GstVideoFormatInfo *info, guint plane, gint components[GST_VIDEO_MAX_COMPONENTS]); |
680 | |
681 | /* format properties */ |
682 | |
683 | GST_VIDEO_API |
684 | GstVideoFormat gst_video_format_from_masks (gint depth, gint bpp, gint endianness, |
685 | guint red_mask, guint green_mask, |
686 | guint blue_mask, guint alpha_mask) G_GNUC_CONST; |
687 | |
688 | GST_VIDEO_API |
689 | GstVideoFormat gst_video_format_from_fourcc (guint32 fourcc) G_GNUC_CONST; |
690 | |
691 | GST_VIDEO_API |
692 | GstVideoFormat gst_video_format_from_string (const gchar *format) G_GNUC_CONST; |
693 | |
694 | GST_VIDEO_API |
695 | guint32 gst_video_format_to_fourcc (GstVideoFormat format) G_GNUC_CONST; |
696 | |
697 | GST_VIDEO_API |
698 | const gchar * gst_video_format_to_string (GstVideoFormat format) G_GNUC_CONST; |
699 | |
700 | GST_VIDEO_API |
701 | const GstVideoFormatInfo * |
702 | gst_video_format_get_info (GstVideoFormat format) G_GNUC_CONST; |
703 | |
704 | GST_VIDEO_API |
705 | gconstpointer gst_video_format_get_palette (GstVideoFormat format, gsize *size); |
706 | |
707 | #define GST_VIDEO_SIZE_RANGE "(int) [ 1, max ]" |
708 | #define GST_VIDEO_FPS_RANGE "(fraction) [ 0, max ]" |
709 | |
710 | #if G_BYTE_ORDER == G_LITTLE_ENDIAN |
711 | # define GST_VIDEO_NE(s) G_STRINGIFY(s)"_LE" |
712 | # define GST_VIDEO_OE(s) G_STRINGIFY(s)"_BE" |
713 | #else |
714 | # define GST_VIDEO_NE(s) G_STRINGIFY(s)"_BE" |
715 | # define GST_VIDEO_OE(s) G_STRINGIFY(s)"_LE" |
716 | #endif |
717 | |
718 | /** |
719 | * GST_VIDEO_FORMATS_ALL: |
720 | * |
721 | * List of all video formats, for use in template caps strings. |
722 | * |
723 | * Formats are sorted by decreasing "quality", using these criteria by priority: |
724 | * - number of components |
725 | * - depth |
726 | * - subsampling factor of the width |
727 | * - subsampling factor of the height |
728 | * - number of planes |
729 | * - native endianness preferred |
730 | * - pixel stride |
731 | * - poffset |
732 | * - prefer non-complex formats |
733 | * - prefer YUV formats over RGB ones |
734 | * - prefer I420 over YV12 |
735 | * - format name |
736 | */ |
737 | #if G_BYTE_ORDER == G_BIG_ENDIAN |
738 | #define GST_VIDEO_FORMATS_ALL "{ ABGR64_BE, BGRA64_BE, AYUV64, ARGB64_BE, ARGB64, " \ |
739 | "RGBA64_BE, ABGR64_LE, BGRA64_LE, ARGB64_LE, RGBA64_LE, GBRA_12BE, GBRA_12LE, Y412_BE, " \ |
740 | "Y412_LE, A444_10BE, GBRA_10BE, A444_10LE, GBRA_10LE, A422_10BE, A422_10LE, " \ |
741 | "A420_10BE, A420_10LE, Y410, RGB10A2_LE, BGR10A2_LE, GBRA, ABGR, VUYA, BGRA, " \ |
742 | "AYUV, ARGB, RGBA, A420, AV12, Y444_16BE, Y444_16LE, v216, P016_BE, P016_LE, Y444_12BE, " \ |
743 | "GBR_12BE, Y444_12LE, GBR_12LE, I422_12BE, I422_12LE, Y212_BE, Y212_LE, I420_12BE, " \ |
744 | "I420_12LE, P012_BE, P012_LE, Y444_10BE, GBR_10BE, Y444_10LE, GBR_10LE, r210, " \ |
745 | "I422_10BE, I422_10LE, NV16_10LE32, Y210, v210, UYVP, I420_10BE, I420_10LE, " \ |
746 | "P010_10BE, P010_10LE, NV12_10LE32, NV12_10LE40, Y444, RGBP, GBR, BGRP, NV24, xBGR, BGRx, " \ |
747 | "xRGB, RGBx, BGR, IYU2, v308, RGB, Y42B, NV61, NV16, VYUY, UYVY, YVYU, YUY2, I420, " \ |
748 | "YV12, NV21, NV12, NV12_64Z32, NV12_4L4, NV12_32L32, Y41B, IYU1, YVU9, YUV9, RGB16, " \ |
749 | "BGR16, RGB15, BGR15, RGB8P, GRAY16_BE, GRAY16_LE, GRAY10_LE32, GRAY8 }" |
750 | #elif G_BYTE_ORDER == G_LITTLE_ENDIAN |
751 | #define GST_VIDEO_FORMATS_ALL "{ ABGR64_LE, BGRA64_LE, AYUV64, ARGB64_LE, ARGB64, " \ |
752 | "RGBA64_LE, ABGR64_BE, BGRA64_BE, ARGB64_BE, RGBA64_BE, GBRA_12LE, GBRA_12BE, Y412_LE, " \ |
753 | "Y412_BE, A444_10LE, GBRA_10LE, A444_10BE, GBRA_10BE, A422_10LE, A422_10BE, " \ |
754 | "A420_10LE, A420_10BE, RGB10A2_LE, BGR10A2_LE, Y410, GBRA, ABGR, VUYA, BGRA, " \ |
755 | "AYUV, ARGB, RGBA, A420, AV12, Y444_16LE, Y444_16BE, v216, P016_LE, P016_BE, Y444_12LE, " \ |
756 | "GBR_12LE, Y444_12BE, GBR_12BE, I422_12LE, I422_12BE, Y212_LE, Y212_BE, I420_12LE, " \ |
757 | "I420_12BE, P012_LE, P012_BE, Y444_10LE, GBR_10LE, Y444_10BE, GBR_10BE, r210, " \ |
758 | "I422_10LE, I422_10BE, NV16_10LE32, Y210, v210, UYVP, I420_10LE, I420_10BE, " \ |
759 | "P010_10LE, NV12_10LE32, NV12_10LE40, P010_10BE, Y444, RGBP, GBR, BGRP, NV24, xBGR, BGRx, " \ |
760 | "xRGB, RGBx, BGR, IYU2, v308, RGB, Y42B, NV61, NV16, VYUY, UYVY, YVYU, YUY2, I420, " \ |
761 | "YV12, NV21, NV12, NV12_64Z32, NV12_4L4, NV12_32L32, Y41B, IYU1, YVU9, YUV9, RGB16, " \ |
762 | "BGR16, RGB15, BGR15, RGB8P, GRAY16_LE, GRAY16_BE, GRAY10_LE32, GRAY8 }" |
763 | #endif |
764 | |
765 | GST_VIDEO_API |
766 | const GstVideoFormat * gst_video_formats_raw (guint * len); |
767 | |
768 | /** |
769 | * GST_VIDEO_CAPS_MAKE: |
770 | * @format: string format that describes the pixel layout, as string |
771 | * (e.g. "I420", "RGB", "YV12", "YUY2", "AYUV", etc.) |
772 | * |
773 | * Generic caps string for video, for use in pad templates. |
774 | */ |
775 | #define GST_VIDEO_CAPS_MAKE(format) \ |
776 | "video/x-raw, " \ |
777 | "format = (string) " format ", " \ |
778 | "width = " GST_VIDEO_SIZE_RANGE ", " \ |
779 | "height = " GST_VIDEO_SIZE_RANGE ", " \ |
780 | "framerate = " GST_VIDEO_FPS_RANGE |
781 | |
782 | /** |
783 | * GST_VIDEO_CAPS_MAKE_WITH_FEATURES: |
784 | * @format: string format that describes the pixel layout, as string |
785 | * (e.g. "I420", "RGB", "YV12", "YUY2", "AYUV", etc.) |
786 | * @features: Requires caps features as a string, e.g. |
787 | * "memory:SystemMemory". |
788 | * |
789 | * Generic caps string for video, for use in pad templates. |
790 | * |
791 | * Since: 1.2 |
792 | */ |
793 | #define GST_VIDEO_CAPS_MAKE_WITH_FEATURES(features,format) \ |
794 | "video/x-raw(" features "), " \ |
795 | "format = (string) " format ", " \ |
796 | "width = " GST_VIDEO_SIZE_RANGE ", " \ |
797 | "height = " GST_VIDEO_SIZE_RANGE ", " \ |
798 | "framerate = " GST_VIDEO_FPS_RANGE |
799 | |
800 | GST_VIDEO_API |
801 | GstCaps * gst_video_make_raw_caps (const GstVideoFormat formats[], guint len); |
802 | |
803 | GST_VIDEO_API |
804 | GstCaps * gst_video_make_raw_caps_with_features (const GstVideoFormat formats[], guint len, |
805 | GstCapsFeatures * features); |
806 | |
807 | G_END_DECLS |
808 | |
809 | #endif /* __GST_VIDEO_FORMAT_H__ */ |
810 | |