1use std::error;
2use std::ffi::{CStr, CString, NulError};
3use std::fmt;
4use std::str::{from_utf8_unchecked, FromStr};
5
6use ffi::AVPixelFormat::*;
7use ffi::*;
8
9#[derive(Eq, PartialEq, Copy, Clone, Debug)]
10pub enum Pixel {
11 None,
12
13 YUV420P,
14 YUYV422,
15 RGB24,
16 BGR24,
17 YUV422P,
18 YUV444P,
19 YUV410P,
20 YUV411P,
21 GRAY8,
22 MonoWhite,
23 MonoBlack,
24 PAL8,
25 YUVJ420P,
26 YUVJ422P,
27 YUVJ444P,
28 #[cfg(all(feature = "ff_api_xvmc", not(feature = "ffmpeg_5_0")))]
29 XVMC_MPEG2_MC,
30 #[cfg(all(feature = "ff_api_xvmc", not(feature = "ffmpeg_5_0")))]
31 XVMC_MPEG2_IDCT,
32 UYVY422,
33 UYYVYY411,
34 BGR8,
35 BGR4,
36 BGR4_BYTE,
37 RGB8,
38 RGB4,
39 RGB4_BYTE,
40 NV12,
41 NV21,
42
43 ARGB,
44 RGBA,
45 ABGR,
46 BGRA,
47
48 GRAY16BE,
49 GRAY16LE,
50 YUV440P,
51 YUVJ440P,
52 YUVA420P,
53 #[cfg(feature = "ff_api_vdpau")]
54 VDPAU_H264,
55 #[cfg(feature = "ff_api_vdpau")]
56 VDPAU_MPEG1,
57 #[cfg(feature = "ff_api_vdpau")]
58 VDPAU_MPEG2,
59 #[cfg(feature = "ff_api_vdpau")]
60 VDPAU_WMV3,
61 #[cfg(feature = "ff_api_vdpau")]
62 VDPAU_VC1,
63 RGB48BE,
64 RGB48LE,
65
66 RGB565BE,
67 RGB565LE,
68 RGB555BE,
69 RGB555LE,
70
71 BGR565BE,
72 BGR565LE,
73 BGR555BE,
74 BGR555LE,
75
76 #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
77 VAAPI_MOCO,
78 #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
79 VAAPI_IDCT,
80 #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
81 VAAPI_VLD,
82 #[cfg(any(not(feature = "ff_api_vaapi"), feature = "ffmpeg_5_0"))]
83 VAAPI,
84
85 YUV420P16LE,
86 YUV420P16BE,
87 YUV422P16LE,
88 YUV422P16BE,
89 YUV444P16LE,
90 YUV444P16BE,
91 #[cfg(feature = "ff_api_vdpau")]
92 VDPAU_MPEG4,
93 DXVA2_VLD,
94
95 RGB444LE,
96 RGB444BE,
97 BGR444LE,
98 BGR444BE,
99 YA8,
100
101 BGR48BE,
102 BGR48LE,
103
104 YUV420P9BE,
105 YUV420P9LE,
106 YUV420P10BE,
107 YUV420P10LE,
108 YUV422P10BE,
109 YUV422P10LE,
110 YUV444P9BE,
111 YUV444P9LE,
112 YUV444P10BE,
113 YUV444P10LE,
114 YUV422P9BE,
115 YUV422P9LE,
116 #[cfg(not(feature = "ffmpeg_4_0"))]
117 VDA_VLD,
118
119 GBRP,
120 GBRP9BE,
121 GBRP9LE,
122 GBRP10BE,
123 GBRP10LE,
124 GBRP16BE,
125 GBRP16LE,
126
127 YUVA420P9BE,
128 YUVA420P9LE,
129 YUVA422P9BE,
130 YUVA422P9LE,
131 YUVA444P9BE,
132 YUVA444P9LE,
133 YUVA420P10BE,
134 YUVA420P10LE,
135 YUVA422P10BE,
136 YUVA422P10LE,
137 YUVA444P10BE,
138 YUVA444P10LE,
139 YUVA420P16BE,
140 YUVA420P16LE,
141 YUVA422P16BE,
142 YUVA422P16LE,
143 YUVA444P16BE,
144 YUVA444P16LE,
145
146 VDPAU,
147
148 XYZ12LE,
149 XYZ12BE,
150 NV16,
151 NV20LE,
152 NV20BE,
153
154 RGBA64BE,
155 RGBA64LE,
156 BGRA64BE,
157 BGRA64LE,
158
159 YVYU422,
160
161 #[cfg(not(feature = "ffmpeg_4_0"))]
162 VDA,
163
164 YA16BE,
165 YA16LE,
166
167 QSV,
168 MMAL,
169
170 D3D11VA_VLD,
171
172 CUDA,
173
174 ZRGB,
175 RGBZ,
176 ZBGR,
177 BGRZ,
178 YUVA444P,
179 YUVA422P,
180
181 YUV420P12BE,
182 YUV420P12LE,
183 YUV420P14BE,
184 YUV420P14LE,
185 YUV422P12BE,
186 YUV422P12LE,
187 YUV422P14BE,
188 YUV422P14LE,
189 YUV444P12BE,
190 YUV444P12LE,
191 YUV444P14BE,
192 YUV444P14LE,
193 GBRP12BE,
194 GBRP12LE,
195 GBRP14BE,
196 GBRP14LE,
197 GBRAP,
198 GBRAP16BE,
199 GBRAP16LE,
200 YUVJ411P,
201
202 BAYER_BGGR8,
203 BAYER_RGGB8,
204 BAYER_GBRG8,
205 BAYER_GRBG8,
206 BAYER_BGGR16LE,
207 BAYER_BGGR16BE,
208 BAYER_RGGB16LE,
209 BAYER_RGGB16BE,
210 BAYER_GBRG16LE,
211 BAYER_GBRG16BE,
212 BAYER_GRBG16LE,
213 BAYER_GRBG16BE,
214
215 YUV440P10LE,
216 YUV440P10BE,
217 YUV440P12LE,
218 YUV440P12BE,
219 AYUV64LE,
220 AYUV64BE,
221
222 VIDEOTOOLBOX,
223
224 // --- defaults
225 #[cfg(all(feature = "ffmpeg_4_0", not(feature = "ffmpeg_7_0")))]
226 XVMC,
227
228 RGB32,
229 RGB32_1,
230 BGR32,
231 BGR32_1,
232 ZRGB32,
233 ZBGR32,
234
235 GRAY16,
236 YA16,
237 RGB48,
238 RGB565,
239 RGB555,
240 RGB444,
241 BGR48,
242 BGR565,
243 BGR555,
244 BGR444,
245
246 YUV420P9,
247 YUV422P9,
248 YUV444P9,
249 YUV420P10,
250 YUV422P10,
251 YUV440P10,
252 YUV444P10,
253 YUV420P12,
254 YUV422P12,
255 YUV440P12,
256 YUV444P12,
257 YUV420P14,
258 YUV422P14,
259 YUV444P14,
260 YUV420P16,
261 YUV422P16,
262 YUV444P16,
263
264 GBRP9,
265 GBRP10,
266 GBRP12,
267 GBRP14,
268 GBRP16,
269 GBRAP16,
270
271 BAYER_BGGR16,
272 BAYER_RGGB16,
273 BAYER_GBRG16,
274 BAYER_GRBG16,
275
276 YUVA420P9,
277 YUVA422P9,
278 YUVA444P9,
279 YUVA420P10,
280 YUVA422P10,
281 YUVA444P10,
282 YUVA420P16,
283 YUVA422P16,
284 YUVA444P16,
285
286 XYZ12,
287 NV20,
288 AYUV64,
289
290 P010LE,
291 P010BE,
292 GBRAP12BE,
293 GBRAP12LE,
294 GBRAP10LE,
295 GBRAP10BE,
296 MEDIACODEC,
297 GRAY12BE,
298 GRAY12LE,
299 GRAY10BE,
300 GRAY10LE,
301 P016LE,
302 P016BE,
303
304 D3D11,
305 GRAY9BE,
306 GRAY9LE,
307 GBRPF32BE,
308 GBRPF32LE,
309 GBRAPF32BE,
310 GBRAPF32LE,
311 DRM_PRIME,
312
313 #[cfg(feature = "ffmpeg_4_0")]
314 OPENCL,
315
316 #[cfg(feature = "ffmpeg_4_1")]
317 GRAY14BE,
318 #[cfg(feature = "ffmpeg_4_1")]
319 GRAY14LE,
320 #[cfg(feature = "ffmpeg_4_1")]
321 GRAYF32BE,
322 #[cfg(feature = "ffmpeg_4_1")]
323 GRAYF32LE,
324
325 #[cfg(feature = "ffmpeg_4_2")]
326 YUVA422P12BE,
327 #[cfg(feature = "ffmpeg_4_2")]
328 YUVA422P12LE,
329 #[cfg(feature = "ffmpeg_4_2")]
330 YUVA444P12BE,
331 #[cfg(feature = "ffmpeg_4_2")]
332 YUVA444P12LE,
333 #[cfg(feature = "ffmpeg_4_2")]
334 NV24,
335 #[cfg(feature = "ffmpeg_4_2")]
336 NV42,
337
338 #[cfg(feature = "ffmpeg_4_3")]
339 VULKAN,
340 #[cfg(feature = "ffmpeg_4_3")]
341 Y210BE,
342 #[cfg(feature = "ffmpeg_4_3")]
343 Y210LE,
344
345 #[cfg(feature = "ffmpeg_4_4")]
346 X2RGB10LE,
347 #[cfg(feature = "ffmpeg_4_4")]
348 X2RGB10BE,
349
350 #[cfg(feature = "ffmpeg_5_0")]
351 X2BGR10LE,
352 #[cfg(feature = "ffmpeg_5_0")]
353 X2BGR10BE,
354 #[cfg(feature = "ffmpeg_5_0")]
355 P210BE,
356 #[cfg(feature = "ffmpeg_5_0")]
357 P210LE,
358 #[cfg(feature = "ffmpeg_5_0")]
359 P410BE,
360 #[cfg(feature = "ffmpeg_5_0")]
361 P410LE,
362 #[cfg(feature = "ffmpeg_5_0")]
363 P216BE,
364 #[cfg(feature = "ffmpeg_5_0")]
365 P216LE,
366 #[cfg(feature = "ffmpeg_5_0")]
367 P416BE,
368 #[cfg(feature = "ffmpeg_5_0")]
369 P416LE,
370
371 #[cfg(feature = "ffmpeg_6_0")]
372 VUYA,
373 #[cfg(feature = "ffmpeg_6_0")]
374 RGBAF16BE,
375 #[cfg(feature = "ffmpeg_6_0")]
376 RGBAF16LE,
377 #[cfg(feature = "ffmpeg_6_0")]
378 VUYX,
379 #[cfg(feature = "ffmpeg_6_0")]
380 P012LE,
381 #[cfg(feature = "ffmpeg_6_0")]
382 P012BE,
383 #[cfg(feature = "ffmpeg_6_0")]
384 Y212BE,
385 #[cfg(feature = "ffmpeg_6_0")]
386 Y212LE,
387 #[cfg(feature = "ffmpeg_6_0")]
388 XV30BE,
389 #[cfg(feature = "ffmpeg_6_0")]
390 XV30LE,
391 #[cfg(feature = "ffmpeg_6_0")]
392 XV36BE,
393 #[cfg(feature = "ffmpeg_6_0")]
394 XV36LE,
395 #[cfg(feature = "ffmpeg_6_0")]
396 RGBF32BE,
397 #[cfg(feature = "ffmpeg_6_0")]
398 RGBF32LE,
399 #[cfg(feature = "ffmpeg_6_0")]
400 RGBAF32BE,
401 #[cfg(feature = "ffmpeg_6_0")]
402 RGBAF32LE,
403
404 #[cfg(feature = "ffmpeg_6_1")]
405 P212BE,
406 #[cfg(feature = "ffmpeg_6_1")]
407 P212LE,
408 #[cfg(feature = "ffmpeg_6_1")]
409 P412BE,
410 #[cfg(feature = "ffmpeg_6_1")]
411 P412LE,
412 #[cfg(feature = "ffmpeg_6_1")]
413 GBRAP14BE,
414 #[cfg(feature = "ffmpeg_6_1")]
415 GBRAP14LE,
416
417 #[cfg(feature = "ffmpeg_7_0")]
418 D3D12,
419
420 #[cfg(feature = "rpi")]
421 SAND128,
422 #[cfg(feature = "rpi")]
423 SAND64_10,
424 #[cfg(feature = "rpi")]
425 SAND64_16,
426 #[cfg(feature = "rpi")]
427 RPI4_8,
428 #[cfg(feature = "rpi")]
429 RPI4_10,
430}
431
432#[derive(Clone, Copy, PartialEq, Eq)]
433pub struct Descriptor {
434 ptr: *const AVPixFmtDescriptor,
435}
436
437unsafe impl Send for Descriptor {}
438unsafe impl Sync for Descriptor {}
439
440impl Pixel {
441 pub const Y400A: Pixel = Pixel::YA8;
442 pub const GRAY8A: Pixel = Pixel::YA8;
443 pub const GBR24P: Pixel = Pixel::GBRP;
444 #[cfg(all(feature = "ff_api_xvmc", not(feature = "ffmpeg_5_0")))]
445 pub const XVMC: Pixel = Pixel::XVMC_MPEG2_IDCT;
446
447 pub fn descriptor(self) -> Option<Descriptor> {
448 unsafe {
449 let ptr = av_pix_fmt_desc_get(self.into());
450
451 ptr.as_ref().map(|ptr: *const {unknown}| Descriptor { ptr })
452 }
453 }
454}
455
456impl Descriptor {
457 pub fn as_ptr(self) -> *const AVPixFmtDescriptor {
458 self.ptr
459 }
460
461 pub fn name(self) -> &'static str {
462 unsafe { from_utf8_unchecked(CStr::from_ptr((*self.as_ptr()).name).to_bytes()) }
463 }
464
465 pub fn nb_components(self) -> u8 {
466 unsafe { (*self.as_ptr()).nb_components }
467 }
468
469 pub fn log2_chroma_w(self) -> u8 {
470 unsafe { (*self.as_ptr()).log2_chroma_w }
471 }
472
473 pub fn log2_chroma_h(self) -> u8 {
474 unsafe { (*self.as_ptr()).log2_chroma_h }
475 }
476}
477
478impl From<AVPixelFormat> for Pixel {
479 #[inline]
480 fn from(value: AVPixelFormat) -> Self {
481 match value {
482 AV_PIX_FMT_NONE => Pixel::None,
483
484 AV_PIX_FMT_YUV420P => Pixel::YUV420P,
485 AV_PIX_FMT_YUYV422 => Pixel::YUYV422,
486 AV_PIX_FMT_RGB24 => Pixel::RGB24,
487 AV_PIX_FMT_BGR24 => Pixel::BGR24,
488 AV_PIX_FMT_YUV422P => Pixel::YUV422P,
489 AV_PIX_FMT_YUV444P => Pixel::YUV444P,
490 AV_PIX_FMT_YUV410P => Pixel::YUV410P,
491 AV_PIX_FMT_YUV411P => Pixel::YUV411P,
492 AV_PIX_FMT_GRAY8 => Pixel::GRAY8,
493 AV_PIX_FMT_MONOWHITE => Pixel::MonoWhite,
494 AV_PIX_FMT_MONOBLACK => Pixel::MonoBlack,
495 AV_PIX_FMT_PAL8 => Pixel::PAL8,
496 AV_PIX_FMT_YUVJ420P => Pixel::YUVJ420P,
497 AV_PIX_FMT_YUVJ422P => Pixel::YUVJ422P,
498 AV_PIX_FMT_YUVJ444P => Pixel::YUVJ444P,
499 #[cfg(all(feature = "ffmpeg_4_0", not(feature = "ffmpeg_7_0")))]
500 AV_PIX_FMT_XVMC => Pixel::XVMC,
501 #[cfg(all(feature = "ff_api_xvmc", not(feature = "ffmpeg_5_0")))]
502 AV_PIX_FMT_XVMC_MPEG2_MC => Pixel::XVMC_MPEG2_MC,
503 #[cfg(all(feature = "ff_api_xvmc", not(feature = "ffmpeg_5_0")))]
504 AV_PIX_FMT_XVMC_MPEG2_IDCT => Pixel::XVMC_MPEG2_IDCT,
505 AV_PIX_FMT_UYVY422 => Pixel::UYVY422,
506 AV_PIX_FMT_UYYVYY411 => Pixel::UYYVYY411,
507 AV_PIX_FMT_BGR8 => Pixel::BGR8,
508 AV_PIX_FMT_BGR4 => Pixel::BGR4,
509 AV_PIX_FMT_BGR4_BYTE => Pixel::BGR4_BYTE,
510 AV_PIX_FMT_RGB8 => Pixel::RGB8,
511 AV_PIX_FMT_RGB4 => Pixel::RGB4,
512 AV_PIX_FMT_RGB4_BYTE => Pixel::RGB4_BYTE,
513 AV_PIX_FMT_NV12 => Pixel::NV12,
514 AV_PIX_FMT_NV21 => Pixel::NV21,
515
516 AV_PIX_FMT_ARGB => Pixel::ARGB,
517 AV_PIX_FMT_RGBA => Pixel::RGBA,
518 AV_PIX_FMT_ABGR => Pixel::ABGR,
519 AV_PIX_FMT_BGRA => Pixel::BGRA,
520
521 AV_PIX_FMT_GRAY16BE => Pixel::GRAY16BE,
522 AV_PIX_FMT_GRAY16LE => Pixel::GRAY16LE,
523 AV_PIX_FMT_YUV440P => Pixel::YUV440P,
524 AV_PIX_FMT_YUVJ440P => Pixel::YUVJ440P,
525 AV_PIX_FMT_YUVA420P => Pixel::YUVA420P,
526 #[cfg(feature = "ff_api_vdpau")]
527 AV_PIX_FMT_VDPAU_H264 => Pixel::VDPAU_H264,
528 #[cfg(feature = "ff_api_vdpau")]
529 AV_PIX_FMT_VDPAU_MPEG1 => Pixel::VDPAU_MPEG1,
530 #[cfg(feature = "ff_api_vdpau")]
531 AV_PIX_FMT_VDPAU_MPEG2 => Pixel::VDPAU_MPEG2,
532 #[cfg(feature = "ff_api_vdpau")]
533 AV_PIX_FMT_VDPAU_WMV3 => Pixel::VDPAU_WMV3,
534 #[cfg(feature = "ff_api_vdpau")]
535 AV_PIX_FMT_VDPAU_VC1 => Pixel::VDPAU_VC1,
536 AV_PIX_FMT_RGB48BE => Pixel::RGB48BE,
537 AV_PIX_FMT_RGB48LE => Pixel::RGB48LE,
538
539 AV_PIX_FMT_RGB565BE => Pixel::RGB565BE,
540 AV_PIX_FMT_RGB565LE => Pixel::RGB565LE,
541 AV_PIX_FMT_RGB555BE => Pixel::RGB555BE,
542 AV_PIX_FMT_RGB555LE => Pixel::RGB555LE,
543
544 AV_PIX_FMT_BGR565BE => Pixel::BGR565BE,
545 AV_PIX_FMT_BGR565LE => Pixel::BGR565LE,
546 AV_PIX_FMT_BGR555BE => Pixel::BGR555BE,
547 AV_PIX_FMT_BGR555LE => Pixel::BGR555LE,
548
549 #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
550 AV_PIX_FMT_VAAPI_MOCO => Pixel::VAAPI_MOCO,
551 #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
552 AV_PIX_FMT_VAAPI_IDCT => Pixel::VAAPI_IDCT,
553 #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
554 AV_PIX_FMT_VAAPI_VLD => Pixel::VAAPI_VLD,
555 #[cfg(any(not(feature = "ff_api_vaapi"), feature = "ffmpeg_5_0"))]
556 AV_PIX_FMT_VAAPI => Pixel::VAAPI,
557
558 AV_PIX_FMT_YUV420P16LE => Pixel::YUV420P16LE,
559 AV_PIX_FMT_YUV420P16BE => Pixel::YUV420P16BE,
560 AV_PIX_FMT_YUV422P16LE => Pixel::YUV422P16LE,
561 AV_PIX_FMT_YUV422P16BE => Pixel::YUV422P16BE,
562 AV_PIX_FMT_YUV444P16LE => Pixel::YUV444P16LE,
563 AV_PIX_FMT_YUV444P16BE => Pixel::YUV444P16BE,
564 #[cfg(feature = "ff_api_vdpau")]
565 AV_PIX_FMT_VDPAU_MPEG4 => Pixel::VDPAU_MPEG4,
566 AV_PIX_FMT_DXVA2_VLD => Pixel::DXVA2_VLD,
567
568 AV_PIX_FMT_RGB444LE => Pixel::RGB444LE,
569 AV_PIX_FMT_RGB444BE => Pixel::RGB444BE,
570 AV_PIX_FMT_BGR444LE => Pixel::BGR444LE,
571 AV_PIX_FMT_BGR444BE => Pixel::BGR444BE,
572 AV_PIX_FMT_YA8 => Pixel::YA8,
573
574 AV_PIX_FMT_BGR48BE => Pixel::BGR48BE,
575 AV_PIX_FMT_BGR48LE => Pixel::BGR48LE,
576
577 AV_PIX_FMT_YUV420P9BE => Pixel::YUV420P9BE,
578 AV_PIX_FMT_YUV420P9LE => Pixel::YUV420P9LE,
579 AV_PIX_FMT_YUV420P10BE => Pixel::YUV420P10BE,
580 AV_PIX_FMT_YUV420P10LE => Pixel::YUV420P10LE,
581 AV_PIX_FMT_YUV422P10BE => Pixel::YUV422P10BE,
582 AV_PIX_FMT_YUV422P10LE => Pixel::YUV422P10LE,
583 AV_PIX_FMT_YUV444P9BE => Pixel::YUV444P9BE,
584 AV_PIX_FMT_YUV444P9LE => Pixel::YUV444P9LE,
585 AV_PIX_FMT_YUV444P10BE => Pixel::YUV444P10BE,
586 AV_PIX_FMT_YUV444P10LE => Pixel::YUV444P10LE,
587 AV_PIX_FMT_YUV422P9BE => Pixel::YUV422P9BE,
588 AV_PIX_FMT_YUV422P9LE => Pixel::YUV422P9LE,
589 #[cfg(not(feature = "ffmpeg_4_0"))]
590 AV_PIX_FMT_VDA_VLD => Pixel::VDA_VLD,
591
592 AV_PIX_FMT_GBRP => Pixel::GBRP,
593 AV_PIX_FMT_GBRP9BE => Pixel::GBRP9BE,
594 AV_PIX_FMT_GBRP9LE => Pixel::GBRP9LE,
595 AV_PIX_FMT_GBRP10BE => Pixel::GBRP10BE,
596 AV_PIX_FMT_GBRP10LE => Pixel::GBRP10LE,
597 AV_PIX_FMT_GBRP16BE => Pixel::GBRP16BE,
598 AV_PIX_FMT_GBRP16LE => Pixel::GBRP16LE,
599
600 AV_PIX_FMT_YUVA420P9BE => Pixel::YUVA420P9BE,
601 AV_PIX_FMT_YUVA420P9LE => Pixel::YUVA420P9LE,
602 AV_PIX_FMT_YUVA422P9BE => Pixel::YUVA422P9BE,
603 AV_PIX_FMT_YUVA422P9LE => Pixel::YUVA422P9LE,
604 AV_PIX_FMT_YUVA444P9BE => Pixel::YUVA444P9BE,
605 AV_PIX_FMT_YUVA444P9LE => Pixel::YUVA444P9LE,
606 AV_PIX_FMT_YUVA420P10BE => Pixel::YUVA420P10BE,
607 AV_PIX_FMT_YUVA420P10LE => Pixel::YUVA420P10LE,
608 AV_PIX_FMT_YUVA422P10BE => Pixel::YUVA422P10BE,
609 AV_PIX_FMT_YUVA422P10LE => Pixel::YUVA422P10LE,
610 AV_PIX_FMT_YUVA444P10BE => Pixel::YUVA444P10BE,
611 AV_PIX_FMT_YUVA444P10LE => Pixel::YUVA444P10LE,
612 AV_PIX_FMT_YUVA420P16BE => Pixel::YUVA420P16BE,
613 AV_PIX_FMT_YUVA420P16LE => Pixel::YUVA420P16LE,
614 AV_PIX_FMT_YUVA422P16BE => Pixel::YUVA422P16BE,
615 AV_PIX_FMT_YUVA422P16LE => Pixel::YUVA422P16LE,
616 AV_PIX_FMT_YUVA444P16BE => Pixel::YUVA444P16BE,
617 AV_PIX_FMT_YUVA444P16LE => Pixel::YUVA444P16LE,
618
619 AV_PIX_FMT_VDPAU => Pixel::VDPAU,
620
621 AV_PIX_FMT_XYZ12LE => Pixel::XYZ12LE,
622 AV_PIX_FMT_XYZ12BE => Pixel::XYZ12BE,
623 AV_PIX_FMT_NV16 => Pixel::NV16,
624 AV_PIX_FMT_NV20LE => Pixel::NV20LE,
625 AV_PIX_FMT_NV20BE => Pixel::NV20BE,
626
627 AV_PIX_FMT_RGBA64BE => Pixel::RGBA64BE,
628 AV_PIX_FMT_RGBA64LE => Pixel::RGBA64LE,
629 AV_PIX_FMT_BGRA64BE => Pixel::BGRA64BE,
630 AV_PIX_FMT_BGRA64LE => Pixel::BGRA64LE,
631
632 AV_PIX_FMT_YVYU422 => Pixel::YVYU422,
633
634 #[cfg(not(feature = "ffmpeg_4_0"))]
635 AV_PIX_FMT_VDA => Pixel::VDA,
636
637 AV_PIX_FMT_YA16BE => Pixel::YA16BE,
638 AV_PIX_FMT_YA16LE => Pixel::YA16LE,
639
640 AV_PIX_FMT_QSV => Pixel::QSV,
641 AV_PIX_FMT_MMAL => Pixel::MMAL,
642
643 AV_PIX_FMT_D3D11VA_VLD => Pixel::D3D11VA_VLD,
644
645 AV_PIX_FMT_CUDA => Pixel::CUDA,
646
647 AV_PIX_FMT_0RGB => Pixel::ZRGB,
648 AV_PIX_FMT_RGB0 => Pixel::RGBZ,
649 AV_PIX_FMT_0BGR => Pixel::ZBGR,
650 AV_PIX_FMT_BGR0 => Pixel::BGRZ,
651 AV_PIX_FMT_YUVA444P => Pixel::YUVA444P,
652 AV_PIX_FMT_YUVA422P => Pixel::YUVA422P,
653
654 AV_PIX_FMT_YUV420P12BE => Pixel::YUV420P12BE,
655 AV_PIX_FMT_YUV420P12LE => Pixel::YUV420P12LE,
656 AV_PIX_FMT_YUV420P14BE => Pixel::YUV420P14BE,
657 AV_PIX_FMT_YUV420P14LE => Pixel::YUV420P14LE,
658 AV_PIX_FMT_YUV422P12BE => Pixel::YUV422P12BE,
659 AV_PIX_FMT_YUV422P12LE => Pixel::YUV422P12LE,
660 AV_PIX_FMT_YUV422P14BE => Pixel::YUV422P14BE,
661 AV_PIX_FMT_YUV422P14LE => Pixel::YUV422P14LE,
662 AV_PIX_FMT_YUV444P12BE => Pixel::YUV444P12BE,
663 AV_PIX_FMT_YUV444P12LE => Pixel::YUV444P12LE,
664 AV_PIX_FMT_YUV444P14BE => Pixel::YUV444P14BE,
665 AV_PIX_FMT_YUV444P14LE => Pixel::YUV444P14LE,
666 AV_PIX_FMT_GBRP12BE => Pixel::GBRP12BE,
667 AV_PIX_FMT_GBRP12LE => Pixel::GBRP12LE,
668 AV_PIX_FMT_GBRP14BE => Pixel::GBRP14BE,
669 AV_PIX_FMT_GBRP14LE => Pixel::GBRP14LE,
670 AV_PIX_FMT_GBRAP => Pixel::GBRAP,
671 AV_PIX_FMT_GBRAP16BE => Pixel::GBRAP16BE,
672 AV_PIX_FMT_GBRAP16LE => Pixel::GBRAP16LE,
673 AV_PIX_FMT_YUVJ411P => Pixel::YUVJ411P,
674
675 AV_PIX_FMT_BAYER_BGGR8 => Pixel::BAYER_BGGR8,
676 AV_PIX_FMT_BAYER_RGGB8 => Pixel::BAYER_RGGB8,
677 AV_PIX_FMT_BAYER_GBRG8 => Pixel::BAYER_GBRG8,
678 AV_PIX_FMT_BAYER_GRBG8 => Pixel::BAYER_GRBG8,
679 AV_PIX_FMT_BAYER_BGGR16LE => Pixel::BAYER_BGGR16LE,
680 AV_PIX_FMT_BAYER_BGGR16BE => Pixel::BAYER_BGGR16BE,
681 AV_PIX_FMT_BAYER_RGGB16LE => Pixel::BAYER_RGGB16LE,
682 AV_PIX_FMT_BAYER_RGGB16BE => Pixel::BAYER_RGGB16BE,
683 AV_PIX_FMT_BAYER_GBRG16LE => Pixel::BAYER_GBRG16LE,
684 AV_PIX_FMT_BAYER_GBRG16BE => Pixel::BAYER_GBRG16BE,
685 AV_PIX_FMT_BAYER_GRBG16LE => Pixel::BAYER_GRBG16LE,
686 AV_PIX_FMT_BAYER_GRBG16BE => Pixel::BAYER_GRBG16BE,
687
688 AV_PIX_FMT_YUV440P10LE => Pixel::YUV440P10LE,
689 AV_PIX_FMT_YUV440P10BE => Pixel::YUV440P10BE,
690 AV_PIX_FMT_YUV440P12LE => Pixel::YUV440P12LE,
691 AV_PIX_FMT_YUV440P12BE => Pixel::YUV440P12BE,
692 AV_PIX_FMT_AYUV64LE => Pixel::AYUV64LE,
693 AV_PIX_FMT_AYUV64BE => Pixel::AYUV64BE,
694
695 AV_PIX_FMT_VIDEOTOOLBOX => Pixel::VIDEOTOOLBOX,
696
697 AV_PIX_FMT_P010LE => Pixel::P010LE,
698 AV_PIX_FMT_P010BE => Pixel::P010BE,
699 AV_PIX_FMT_GBRAP12BE => Pixel::GBRAP12BE,
700 AV_PIX_FMT_GBRAP12LE => Pixel::GBRAP12LE,
701 AV_PIX_FMT_GBRAP10LE => Pixel::GBRAP10LE,
702 AV_PIX_FMT_GBRAP10BE => Pixel::GBRAP10BE,
703 AV_PIX_FMT_MEDIACODEC => Pixel::MEDIACODEC,
704 AV_PIX_FMT_GRAY12BE => Pixel::GRAY12BE,
705 AV_PIX_FMT_GRAY12LE => Pixel::GRAY12LE,
706 AV_PIX_FMT_GRAY10BE => Pixel::GRAY10BE,
707 AV_PIX_FMT_GRAY10LE => Pixel::GRAY10LE,
708 AV_PIX_FMT_P016LE => Pixel::P016LE,
709 AV_PIX_FMT_P016BE => Pixel::P016BE,
710
711 AV_PIX_FMT_NB => Pixel::None,
712
713 AV_PIX_FMT_D3D11 => Pixel::D3D11,
714 AV_PIX_FMT_GRAY9BE => Pixel::GRAY9BE,
715 AV_PIX_FMT_GRAY9LE => Pixel::GRAY9LE,
716 AV_PIX_FMT_GBRPF32BE => Pixel::GBRPF32BE,
717 AV_PIX_FMT_GBRPF32LE => Pixel::GBRPF32LE,
718 AV_PIX_FMT_GBRAPF32BE => Pixel::GBRAPF32BE,
719 AV_PIX_FMT_GBRAPF32LE => Pixel::GBRAPF32LE,
720 AV_PIX_FMT_DRM_PRIME => Pixel::DRM_PRIME,
721
722 #[cfg(feature = "ffmpeg_4_0")]
723 AV_PIX_FMT_OPENCL => Pixel::OPENCL,
724
725 #[cfg(feature = "ffmpeg_4_1")]
726 AV_PIX_FMT_GRAY14BE => Pixel::GRAY14BE,
727 #[cfg(feature = "ffmpeg_4_1")]
728 AV_PIX_FMT_GRAY14LE => Pixel::GRAY14LE,
729 #[cfg(feature = "ffmpeg_4_1")]
730 AV_PIX_FMT_GRAYF32BE => Pixel::GRAYF32BE,
731 #[cfg(feature = "ffmpeg_4_1")]
732 AV_PIX_FMT_GRAYF32LE => Pixel::GRAYF32LE,
733
734 #[cfg(feature = "ffmpeg_4_2")]
735 AV_PIX_FMT_YUVA422P12BE => Pixel::YUVA422P12BE,
736 #[cfg(feature = "ffmpeg_4_2")]
737 AV_PIX_FMT_YUVA422P12LE => Pixel::YUVA422P12LE,
738 #[cfg(feature = "ffmpeg_4_2")]
739 AV_PIX_FMT_YUVA444P12BE => Pixel::YUVA444P12BE,
740 #[cfg(feature = "ffmpeg_4_2")]
741 AV_PIX_FMT_YUVA444P12LE => Pixel::YUVA444P12LE,
742 #[cfg(feature = "ffmpeg_4_2")]
743 AV_PIX_FMT_NV24 => Pixel::NV24,
744 #[cfg(feature = "ffmpeg_4_2")]
745 AV_PIX_FMT_NV42 => Pixel::NV42,
746
747 #[cfg(feature = "ffmpeg_4_3")]
748 AV_PIX_FMT_VULKAN => Pixel::VULKAN,
749 #[cfg(feature = "ffmpeg_4_3")]
750 AV_PIX_FMT_Y210BE => Pixel::Y210BE,
751 #[cfg(feature = "ffmpeg_4_3")]
752 AV_PIX_FMT_Y210LE => Pixel::Y210LE,
753
754 #[cfg(feature = "ffmpeg_4_4")]
755 AV_PIX_FMT_X2RGB10LE => Pixel::X2RGB10LE,
756 #[cfg(feature = "ffmpeg_4_4")]
757 AV_PIX_FMT_X2RGB10BE => Pixel::X2RGB10BE,
758
759 #[cfg(feature = "ffmpeg_5_0")]
760 AV_PIX_FMT_X2BGR10LE => Pixel::X2BGR10LE,
761 #[cfg(feature = "ffmpeg_5_0")]
762 AV_PIX_FMT_X2BGR10BE => Pixel::X2BGR10BE,
763 #[cfg(feature = "ffmpeg_5_0")]
764 AV_PIX_FMT_P210BE => Pixel::P210BE,
765 #[cfg(feature = "ffmpeg_5_0")]
766 AV_PIX_FMT_P210LE => Pixel::P210LE,
767 #[cfg(feature = "ffmpeg_5_0")]
768 AV_PIX_FMT_P410BE => Pixel::P410BE,
769 #[cfg(feature = "ffmpeg_5_0")]
770 AV_PIX_FMT_P410LE => Pixel::P410LE,
771 #[cfg(feature = "ffmpeg_5_0")]
772 AV_PIX_FMT_P216BE => Pixel::P216BE,
773 #[cfg(feature = "ffmpeg_5_0")]
774 AV_PIX_FMT_P216LE => Pixel::P216LE,
775 #[cfg(feature = "ffmpeg_5_0")]
776 AV_PIX_FMT_P416BE => Pixel::P416BE,
777 #[cfg(feature = "ffmpeg_5_0")]
778 AV_PIX_FMT_P416LE => Pixel::P416LE,
779
780 #[cfg(feature = "ffmpeg_6_0")]
781 AV_PIX_FMT_VUYA => Pixel::VUYA,
782 #[cfg(feature = "ffmpeg_6_0")]
783 AV_PIX_FMT_RGBAF16BE => Pixel::RGBAF16BE,
784 #[cfg(feature = "ffmpeg_6_0")]
785 AV_PIX_FMT_RGBAF16LE => Pixel::RGBAF16LE,
786 #[cfg(feature = "ffmpeg_6_0")]
787 AV_PIX_FMT_VUYX => Pixel::VUYX,
788 #[cfg(feature = "ffmpeg_6_0")]
789 AV_PIX_FMT_P012LE => Pixel::P012LE,
790 #[cfg(feature = "ffmpeg_6_0")]
791 AV_PIX_FMT_P012BE => Pixel::P012BE,
792 #[cfg(feature = "ffmpeg_6_0")]
793 AV_PIX_FMT_Y212BE => Pixel::Y212BE,
794 #[cfg(feature = "ffmpeg_6_0")]
795 AV_PIX_FMT_Y212LE => Pixel::Y212LE,
796 #[cfg(feature = "ffmpeg_6_0")]
797 AV_PIX_FMT_XV30BE => Pixel::XV30BE,
798 #[cfg(feature = "ffmpeg_6_0")]
799 AV_PIX_FMT_XV30LE => Pixel::XV30LE,
800 #[cfg(feature = "ffmpeg_6_0")]
801 AV_PIX_FMT_XV36BE => Pixel::XV36BE,
802 #[cfg(feature = "ffmpeg_6_0")]
803 AV_PIX_FMT_XV36LE => Pixel::XV36LE,
804 #[cfg(feature = "ffmpeg_6_0")]
805 AV_PIX_FMT_RGBF32BE => Pixel::RGBF32BE,
806 #[cfg(feature = "ffmpeg_6_0")]
807 AV_PIX_FMT_RGBF32LE => Pixel::RGBF32LE,
808 #[cfg(feature = "ffmpeg_6_0")]
809 AV_PIX_FMT_RGBAF32BE => Pixel::RGBAF32BE,
810 #[cfg(feature = "ffmpeg_6_0")]
811 AV_PIX_FMT_RGBAF32LE => Pixel::RGBAF32LE,
812
813 #[cfg(feature = "ffmpeg_6_1")]
814 AV_PIX_FMT_P212BE => Pixel::P212BE,
815 #[cfg(feature = "ffmpeg_6_1")]
816 AV_PIX_FMT_P212LE => Pixel::P212LE,
817 #[cfg(feature = "ffmpeg_6_1")]
818 AV_PIX_FMT_P412BE => Pixel::P412BE,
819 #[cfg(feature = "ffmpeg_6_1")]
820 AV_PIX_FMT_P412LE => Pixel::P412LE,
821 #[cfg(feature = "ffmpeg_6_1")]
822 AV_PIX_FMT_GBRAP14BE => Pixel::GBRAP14BE,
823 #[cfg(feature = "ffmpeg_6_1")]
824 AV_PIX_FMT_GBRAP14LE => Pixel::GBRAP14LE,
825
826 #[cfg(feature = "ffmpeg_7_0")]
827 AV_PIX_FMT_D3D12 => Pixel::D3D12,
828
829 #[cfg(feature = "rpi")]
830 AV_PIX_FMT_SAND128 => Pixel::SAND128,
831 #[cfg(feature = "rpi")]
832 AV_PIX_FMT_SAND64_10 => Pixel::SAND64_10,
833 #[cfg(feature = "rpi")]
834 AV_PIX_FMT_SAND64_16 => Pixel::SAND64_16,
835 #[cfg(feature = "rpi")]
836 AV_PIX_FMT_RPI4_8 => Pixel::RPI4_8,
837 #[cfg(feature = "rpi")]
838 AV_PIX_FMT_RPI4_10 => Pixel::RPI4_10,
839 }
840 }
841}
842
843impl From<Pixel> for AVPixelFormat {
844 #[inline]
845 fn from(value: Pixel) -> AVPixelFormat {
846 match value {
847 Pixel::None => AV_PIX_FMT_NONE,
848
849 Pixel::YUV420P => AV_PIX_FMT_YUV420P,
850 Pixel::YUYV422 => AV_PIX_FMT_YUYV422,
851 Pixel::RGB24 => AV_PIX_FMT_RGB24,
852 Pixel::BGR24 => AV_PIX_FMT_BGR24,
853 Pixel::YUV422P => AV_PIX_FMT_YUV422P,
854 Pixel::YUV444P => AV_PIX_FMT_YUV444P,
855 Pixel::YUV410P => AV_PIX_FMT_YUV410P,
856 Pixel::YUV411P => AV_PIX_FMT_YUV411P,
857 Pixel::GRAY8 => AV_PIX_FMT_GRAY8,
858 Pixel::MonoWhite => AV_PIX_FMT_MONOWHITE,
859 Pixel::MonoBlack => AV_PIX_FMT_MONOBLACK,
860 Pixel::PAL8 => AV_PIX_FMT_PAL8,
861 Pixel::YUVJ420P => AV_PIX_FMT_YUVJ420P,
862 Pixel::YUVJ422P => AV_PIX_FMT_YUVJ422P,
863 Pixel::YUVJ444P => AV_PIX_FMT_YUVJ444P,
864 #[cfg(all(feature = "ff_api_xvmc", not(feature = "ffmpeg_5_0")))]
865 Pixel::XVMC_MPEG2_MC => AV_PIX_FMT_XVMC_MPEG2_MC,
866 #[cfg(all(feature = "ff_api_xvmc", not(feature = "ffmpeg_5_0")))]
867 Pixel::XVMC_MPEG2_IDCT => AV_PIX_FMT_XVMC_MPEG2_IDCT,
868 Pixel::UYVY422 => AV_PIX_FMT_UYVY422,
869 Pixel::UYYVYY411 => AV_PIX_FMT_UYYVYY411,
870 Pixel::BGR8 => AV_PIX_FMT_BGR8,
871 Pixel::BGR4 => AV_PIX_FMT_BGR4,
872 Pixel::BGR4_BYTE => AV_PIX_FMT_BGR4_BYTE,
873 Pixel::RGB8 => AV_PIX_FMT_RGB8,
874 Pixel::RGB4 => AV_PIX_FMT_RGB4,
875 Pixel::RGB4_BYTE => AV_PIX_FMT_RGB4_BYTE,
876 Pixel::NV12 => AV_PIX_FMT_NV12,
877 Pixel::NV21 => AV_PIX_FMT_NV21,
878
879 Pixel::ARGB => AV_PIX_FMT_ARGB,
880 Pixel::RGBA => AV_PIX_FMT_RGBA,
881 Pixel::ABGR => AV_PIX_FMT_ABGR,
882 Pixel::BGRA => AV_PIX_FMT_BGRA,
883
884 Pixel::GRAY16BE => AV_PIX_FMT_GRAY16BE,
885 Pixel::GRAY16LE => AV_PIX_FMT_GRAY16LE,
886 Pixel::YUV440P => AV_PIX_FMT_YUV440P,
887 Pixel::YUVJ440P => AV_PIX_FMT_YUVJ440P,
888 Pixel::YUVA420P => AV_PIX_FMT_YUVA420P,
889 #[cfg(feature = "ff_api_vdpau")]
890 Pixel::VDPAU_H264 => AV_PIX_FMT_VDPAU_H264,
891 #[cfg(feature = "ff_api_vdpau")]
892 Pixel::VDPAU_MPEG1 => AV_PIX_FMT_VDPAU_MPEG1,
893 #[cfg(feature = "ff_api_vdpau")]
894 Pixel::VDPAU_MPEG2 => AV_PIX_FMT_VDPAU_MPEG2,
895 #[cfg(feature = "ff_api_vdpau")]
896 Pixel::VDPAU_WMV3 => AV_PIX_FMT_VDPAU_WMV3,
897 #[cfg(feature = "ff_api_vdpau")]
898 Pixel::VDPAU_VC1 => AV_PIX_FMT_VDPAU_VC1,
899 Pixel::RGB48BE => AV_PIX_FMT_RGB48BE,
900 Pixel::RGB48LE => AV_PIX_FMT_RGB48LE,
901
902 Pixel::RGB565BE => AV_PIX_FMT_RGB565BE,
903 Pixel::RGB565LE => AV_PIX_FMT_RGB565LE,
904 Pixel::RGB555BE => AV_PIX_FMT_RGB555BE,
905 Pixel::RGB555LE => AV_PIX_FMT_RGB555LE,
906
907 Pixel::BGR565BE => AV_PIX_FMT_BGR565BE,
908 Pixel::BGR565LE => AV_PIX_FMT_BGR565LE,
909 Pixel::BGR555BE => AV_PIX_FMT_BGR555BE,
910 Pixel::BGR555LE => AV_PIX_FMT_BGR555LE,
911
912 #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
913 Pixel::VAAPI_MOCO => AV_PIX_FMT_VAAPI_MOCO,
914 #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
915 Pixel::VAAPI_IDCT => AV_PIX_FMT_VAAPI_IDCT,
916 #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
917 Pixel::VAAPI_VLD => AV_PIX_FMT_VAAPI_VLD,
918 #[cfg(not(feature = "ff_api_vaapi"))]
919 Pixel::VAAPI => AV_PIX_FMT_VAAPI,
920
921 Pixel::YUV420P16LE => AV_PIX_FMT_YUV420P16LE,
922 Pixel::YUV420P16BE => AV_PIX_FMT_YUV420P16BE,
923 Pixel::YUV422P16LE => AV_PIX_FMT_YUV422P16LE,
924 Pixel::YUV422P16BE => AV_PIX_FMT_YUV422P16BE,
925 Pixel::YUV444P16LE => AV_PIX_FMT_YUV444P16LE,
926 Pixel::YUV444P16BE => AV_PIX_FMT_YUV444P16BE,
927 #[cfg(feature = "ff_api_vdpau")]
928 Pixel::VDPAU_MPEG4 => AV_PIX_FMT_VDPAU_MPEG4,
929 Pixel::DXVA2_VLD => AV_PIX_FMT_DXVA2_VLD,
930
931 Pixel::RGB444LE => AV_PIX_FMT_RGB444LE,
932 Pixel::RGB444BE => AV_PIX_FMT_RGB444BE,
933 Pixel::BGR444LE => AV_PIX_FMT_BGR444LE,
934 Pixel::BGR444BE => AV_PIX_FMT_BGR444BE,
935 Pixel::YA8 => AV_PIX_FMT_YA8,
936
937 Pixel::BGR48BE => AV_PIX_FMT_BGR48BE,
938 Pixel::BGR48LE => AV_PIX_FMT_BGR48LE,
939
940 Pixel::YUV420P9BE => AV_PIX_FMT_YUV420P9BE,
941 Pixel::YUV420P9LE => AV_PIX_FMT_YUV420P9LE,
942 Pixel::YUV420P10BE => AV_PIX_FMT_YUV420P10BE,
943 Pixel::YUV420P10LE => AV_PIX_FMT_YUV420P10LE,
944 Pixel::YUV422P10BE => AV_PIX_FMT_YUV422P10BE,
945 Pixel::YUV422P10LE => AV_PIX_FMT_YUV422P10LE,
946 Pixel::YUV444P9BE => AV_PIX_FMT_YUV444P9BE,
947 Pixel::YUV444P9LE => AV_PIX_FMT_YUV444P9LE,
948 Pixel::YUV444P10BE => AV_PIX_FMT_YUV444P10BE,
949 Pixel::YUV444P10LE => AV_PIX_FMT_YUV444P10LE,
950 Pixel::YUV422P9BE => AV_PIX_FMT_YUV422P9BE,
951 Pixel::YUV422P9LE => AV_PIX_FMT_YUV422P9LE,
952 #[cfg(not(feature = "ffmpeg_4_0"))]
953 Pixel::VDA_VLD => AV_PIX_FMT_VDA_VLD,
954
955 Pixel::GBRP => AV_PIX_FMT_GBRP,
956 Pixel::GBRP9BE => AV_PIX_FMT_GBRP9BE,
957 Pixel::GBRP9LE => AV_PIX_FMT_GBRP9LE,
958 Pixel::GBRP10BE => AV_PIX_FMT_GBRP10BE,
959 Pixel::GBRP10LE => AV_PIX_FMT_GBRP10LE,
960 Pixel::GBRP16BE => AV_PIX_FMT_GBRP16BE,
961 Pixel::GBRP16LE => AV_PIX_FMT_GBRP16LE,
962
963 Pixel::YUVA420P9BE => AV_PIX_FMT_YUVA420P9BE,
964 Pixel::YUVA420P9LE => AV_PIX_FMT_YUVA420P9LE,
965 Pixel::YUVA422P9BE => AV_PIX_FMT_YUVA422P9BE,
966 Pixel::YUVA422P9LE => AV_PIX_FMT_YUVA422P9LE,
967 Pixel::YUVA444P9BE => AV_PIX_FMT_YUVA444P9BE,
968 Pixel::YUVA444P9LE => AV_PIX_FMT_YUVA444P9LE,
969 Pixel::YUVA420P10BE => AV_PIX_FMT_YUVA420P10BE,
970 Pixel::YUVA420P10LE => AV_PIX_FMT_YUVA420P10LE,
971 Pixel::YUVA422P10BE => AV_PIX_FMT_YUVA422P10BE,
972 Pixel::YUVA422P10LE => AV_PIX_FMT_YUVA422P10LE,
973 Pixel::YUVA444P10BE => AV_PIX_FMT_YUVA444P10BE,
974 Pixel::YUVA444P10LE => AV_PIX_FMT_YUVA444P10LE,
975 Pixel::YUVA420P16BE => AV_PIX_FMT_YUVA420P16BE,
976 Pixel::YUVA420P16LE => AV_PIX_FMT_YUVA420P16LE,
977 Pixel::YUVA422P16BE => AV_PIX_FMT_YUVA422P16BE,
978 Pixel::YUVA422P16LE => AV_PIX_FMT_YUVA422P16LE,
979 Pixel::YUVA444P16BE => AV_PIX_FMT_YUVA444P16BE,
980 Pixel::YUVA444P16LE => AV_PIX_FMT_YUVA444P16LE,
981
982 Pixel::VDPAU => AV_PIX_FMT_VDPAU,
983
984 Pixel::XYZ12LE => AV_PIX_FMT_XYZ12LE,
985 Pixel::XYZ12BE => AV_PIX_FMT_XYZ12BE,
986 Pixel::NV16 => AV_PIX_FMT_NV16,
987 Pixel::NV20LE => AV_PIX_FMT_NV20LE,
988 Pixel::NV20BE => AV_PIX_FMT_NV20BE,
989
990 Pixel::RGBA64BE => AV_PIX_FMT_RGBA64BE,
991 Pixel::RGBA64LE => AV_PIX_FMT_RGBA64LE,
992 Pixel::BGRA64BE => AV_PIX_FMT_BGRA64BE,
993 Pixel::BGRA64LE => AV_PIX_FMT_BGRA64LE,
994
995 Pixel::YVYU422 => AV_PIX_FMT_YVYU422,
996
997 #[cfg(not(feature = "ffmpeg_4_0"))]
998 Pixel::VDA => AV_PIX_FMT_VDA,
999
1000 Pixel::YA16BE => AV_PIX_FMT_YA16BE,
1001 Pixel::YA16LE => AV_PIX_FMT_YA16LE,
1002
1003 Pixel::QSV => AV_PIX_FMT_QSV,
1004 Pixel::MMAL => AV_PIX_FMT_MMAL,
1005
1006 Pixel::D3D11VA_VLD => AV_PIX_FMT_D3D11VA_VLD,
1007
1008 Pixel::CUDA => AV_PIX_FMT_CUDA,
1009
1010 Pixel::ZRGB => AV_PIX_FMT_0RGB,
1011 Pixel::RGBZ => AV_PIX_FMT_RGB0,
1012 Pixel::ZBGR => AV_PIX_FMT_0BGR,
1013 Pixel::BGRZ => AV_PIX_FMT_BGR0,
1014 Pixel::YUVA444P => AV_PIX_FMT_YUVA444P,
1015 Pixel::YUVA422P => AV_PIX_FMT_YUVA422P,
1016
1017 Pixel::YUV420P12BE => AV_PIX_FMT_YUV420P12BE,
1018 Pixel::YUV420P12LE => AV_PIX_FMT_YUV420P12LE,
1019 Pixel::YUV420P14BE => AV_PIX_FMT_YUV420P14BE,
1020 Pixel::YUV420P14LE => AV_PIX_FMT_YUV420P14LE,
1021 Pixel::YUV422P12BE => AV_PIX_FMT_YUV422P12BE,
1022 Pixel::YUV422P12LE => AV_PIX_FMT_YUV422P12LE,
1023 Pixel::YUV422P14BE => AV_PIX_FMT_YUV422P14BE,
1024 Pixel::YUV422P14LE => AV_PIX_FMT_YUV422P14LE,
1025 Pixel::YUV444P12BE => AV_PIX_FMT_YUV444P12BE,
1026 Pixel::YUV444P12LE => AV_PIX_FMT_YUV444P12LE,
1027 Pixel::YUV444P14BE => AV_PIX_FMT_YUV444P14BE,
1028 Pixel::YUV444P14LE => AV_PIX_FMT_YUV444P14LE,
1029 Pixel::GBRP12BE => AV_PIX_FMT_GBRP12BE,
1030 Pixel::GBRP12LE => AV_PIX_FMT_GBRP12LE,
1031 Pixel::GBRP14BE => AV_PIX_FMT_GBRP14BE,
1032 Pixel::GBRP14LE => AV_PIX_FMT_GBRP14LE,
1033 Pixel::GBRAP => AV_PIX_FMT_GBRAP,
1034 Pixel::GBRAP16BE => AV_PIX_FMT_GBRAP16BE,
1035 Pixel::GBRAP16LE => AV_PIX_FMT_GBRAP16LE,
1036 Pixel::YUVJ411P => AV_PIX_FMT_YUVJ411P,
1037
1038 Pixel::BAYER_BGGR8 => AV_PIX_FMT_BAYER_BGGR8,
1039 Pixel::BAYER_RGGB8 => AV_PIX_FMT_BAYER_RGGB8,
1040 Pixel::BAYER_GBRG8 => AV_PIX_FMT_BAYER_GBRG8,
1041 Pixel::BAYER_GRBG8 => AV_PIX_FMT_BAYER_GRBG8,
1042 Pixel::BAYER_BGGR16LE => AV_PIX_FMT_BAYER_BGGR16LE,
1043 Pixel::BAYER_BGGR16BE => AV_PIX_FMT_BAYER_BGGR16BE,
1044 Pixel::BAYER_RGGB16LE => AV_PIX_FMT_BAYER_RGGB16LE,
1045 Pixel::BAYER_RGGB16BE => AV_PIX_FMT_BAYER_RGGB16BE,
1046 Pixel::BAYER_GBRG16LE => AV_PIX_FMT_BAYER_GBRG16LE,
1047 Pixel::BAYER_GBRG16BE => AV_PIX_FMT_BAYER_GBRG16BE,
1048 Pixel::BAYER_GRBG16LE => AV_PIX_FMT_BAYER_GRBG16LE,
1049 Pixel::BAYER_GRBG16BE => AV_PIX_FMT_BAYER_GRBG16BE,
1050
1051 Pixel::YUV440P10LE => AV_PIX_FMT_YUV440P10LE,
1052 Pixel::YUV440P10BE => AV_PIX_FMT_YUV440P10BE,
1053 Pixel::YUV440P12LE => AV_PIX_FMT_YUV440P12LE,
1054 Pixel::YUV440P12BE => AV_PIX_FMT_YUV440P12BE,
1055 Pixel::AYUV64LE => AV_PIX_FMT_AYUV64LE,
1056 Pixel::AYUV64BE => AV_PIX_FMT_AYUV64BE,
1057
1058 Pixel::VIDEOTOOLBOX => AV_PIX_FMT_VIDEOTOOLBOX,
1059
1060 // --- defaults
1061 #[cfg(all(feature = "ffmpeg_4_0", not(feature = "ffmpeg_7_0")))]
1062 Pixel::XVMC => AV_PIX_FMT_XVMC,
1063
1064 Pixel::RGB32 => AV_PIX_FMT_RGB32,
1065 Pixel::RGB32_1 => AV_PIX_FMT_RGB32_1,
1066 Pixel::BGR32 => AV_PIX_FMT_BGR32,
1067 Pixel::BGR32_1 => AV_PIX_FMT_BGR32_1,
1068 Pixel::ZRGB32 => AV_PIX_FMT_0RGB32,
1069 Pixel::ZBGR32 => AV_PIX_FMT_0BGR32,
1070
1071 Pixel::GRAY16 => AV_PIX_FMT_GRAY16,
1072 Pixel::YA16 => AV_PIX_FMT_YA16,
1073 Pixel::RGB48 => AV_PIX_FMT_RGB48,
1074 Pixel::RGB565 => AV_PIX_FMT_RGB565,
1075 Pixel::RGB555 => AV_PIX_FMT_RGB555,
1076 Pixel::RGB444 => AV_PIX_FMT_RGB444,
1077 Pixel::BGR48 => AV_PIX_FMT_BGR48,
1078 Pixel::BGR565 => AV_PIX_FMT_BGR565,
1079 Pixel::BGR555 => AV_PIX_FMT_BGR555,
1080 Pixel::BGR444 => AV_PIX_FMT_BGR444,
1081
1082 Pixel::YUV420P9 => AV_PIX_FMT_YUV420P9,
1083 Pixel::YUV422P9 => AV_PIX_FMT_YUV422P9,
1084 Pixel::YUV444P9 => AV_PIX_FMT_YUV444P9,
1085 Pixel::YUV420P10 => AV_PIX_FMT_YUV420P10,
1086 Pixel::YUV422P10 => AV_PIX_FMT_YUV422P10,
1087 Pixel::YUV440P10 => AV_PIX_FMT_YUV440P10,
1088 Pixel::YUV444P10 => AV_PIX_FMT_YUV444P10,
1089 Pixel::YUV420P12 => AV_PIX_FMT_YUV420P12,
1090 Pixel::YUV422P12 => AV_PIX_FMT_YUV422P12,
1091 Pixel::YUV440P12 => AV_PIX_FMT_YUV440P12,
1092 Pixel::YUV444P12 => AV_PIX_FMT_YUV444P12,
1093 Pixel::YUV420P14 => AV_PIX_FMT_YUV420P14,
1094 Pixel::YUV422P14 => AV_PIX_FMT_YUV422P14,
1095 Pixel::YUV444P14 => AV_PIX_FMT_YUV444P14,
1096 Pixel::YUV420P16 => AV_PIX_FMT_YUV420P16,
1097 Pixel::YUV422P16 => AV_PIX_FMT_YUV422P16,
1098 Pixel::YUV444P16 => AV_PIX_FMT_YUV444P16,
1099
1100 Pixel::GBRP9 => AV_PIX_FMT_GBRP9,
1101 Pixel::GBRP10 => AV_PIX_FMT_GBRP10,
1102 Pixel::GBRP12 => AV_PIX_FMT_GBRP12,
1103 Pixel::GBRP14 => AV_PIX_FMT_GBRP14,
1104 Pixel::GBRP16 => AV_PIX_FMT_GBRP16,
1105 Pixel::GBRAP16 => AV_PIX_FMT_GBRAP16,
1106
1107 Pixel::BAYER_BGGR16 => AV_PIX_FMT_BAYER_BGGR16,
1108 Pixel::BAYER_RGGB16 => AV_PIX_FMT_BAYER_RGGB16,
1109 Pixel::BAYER_GBRG16 => AV_PIX_FMT_BAYER_GBRG16,
1110 Pixel::BAYER_GRBG16 => AV_PIX_FMT_BAYER_GRBG16,
1111
1112 Pixel::YUVA420P9 => AV_PIX_FMT_YUVA420P9,
1113 Pixel::YUVA422P9 => AV_PIX_FMT_YUVA422P9,
1114 Pixel::YUVA444P9 => AV_PIX_FMT_YUVA444P9,
1115 Pixel::YUVA420P10 => AV_PIX_FMT_YUVA420P10,
1116 Pixel::YUVA422P10 => AV_PIX_FMT_YUVA422P10,
1117 Pixel::YUVA444P10 => AV_PIX_FMT_YUVA444P10,
1118 Pixel::YUVA420P16 => AV_PIX_FMT_YUVA420P16,
1119 Pixel::YUVA422P16 => AV_PIX_FMT_YUVA422P16,
1120 Pixel::YUVA444P16 => AV_PIX_FMT_YUVA444P16,
1121
1122 Pixel::XYZ12 => AV_PIX_FMT_XYZ12,
1123 Pixel::NV20 => AV_PIX_FMT_NV20,
1124 Pixel::AYUV64 => AV_PIX_FMT_AYUV64,
1125
1126 Pixel::P010LE => AV_PIX_FMT_P010LE,
1127 Pixel::P010BE => AV_PIX_FMT_P010BE,
1128 Pixel::GBRAP12BE => AV_PIX_FMT_GBRAP12BE,
1129 Pixel::GBRAP12LE => AV_PIX_FMT_GBRAP12LE,
1130 Pixel::GBRAP10LE => AV_PIX_FMT_GBRAP10LE,
1131 Pixel::GBRAP10BE => AV_PIX_FMT_GBRAP10BE,
1132 Pixel::MEDIACODEC => AV_PIX_FMT_MEDIACODEC,
1133 Pixel::GRAY12BE => AV_PIX_FMT_GRAY12BE,
1134 Pixel::GRAY12LE => AV_PIX_FMT_GRAY12LE,
1135 Pixel::GRAY10BE => AV_PIX_FMT_GRAY10BE,
1136 Pixel::GRAY10LE => AV_PIX_FMT_GRAY10LE,
1137 Pixel::P016LE => AV_PIX_FMT_P016LE,
1138 Pixel::P016BE => AV_PIX_FMT_P016BE,
1139
1140 Pixel::D3D11 => AV_PIX_FMT_D3D11,
1141 Pixel::GRAY9BE => AV_PIX_FMT_GRAY9BE,
1142 Pixel::GRAY9LE => AV_PIX_FMT_GRAY9LE,
1143 Pixel::GBRPF32BE => AV_PIX_FMT_GBRPF32BE,
1144 Pixel::GBRPF32LE => AV_PIX_FMT_GBRPF32LE,
1145 Pixel::GBRAPF32BE => AV_PIX_FMT_GBRAPF32BE,
1146 Pixel::GBRAPF32LE => AV_PIX_FMT_GBRAPF32LE,
1147 Pixel::DRM_PRIME => AV_PIX_FMT_DRM_PRIME,
1148
1149 #[cfg(feature = "ffmpeg_4_0")]
1150 Pixel::OPENCL => AV_PIX_FMT_OPENCL,
1151
1152 #[cfg(feature = "ffmpeg_4_1")]
1153 Pixel::GRAY14BE => AV_PIX_FMT_GRAY14BE,
1154 #[cfg(feature = "ffmpeg_4_1")]
1155 Pixel::GRAY14LE => AV_PIX_FMT_GRAY14LE,
1156 #[cfg(feature = "ffmpeg_4_1")]
1157 Pixel::GRAYF32BE => AV_PIX_FMT_GRAYF32BE,
1158 #[cfg(feature = "ffmpeg_4_1")]
1159 Pixel::GRAYF32LE => AV_PIX_FMT_GRAYF32LE,
1160
1161 #[cfg(feature = "ffmpeg_4_2")]
1162 Pixel::YUVA422P12BE => AV_PIX_FMT_YUVA422P12BE,
1163 #[cfg(feature = "ffmpeg_4_2")]
1164 Pixel::YUVA422P12LE => AV_PIX_FMT_YUVA422P12LE,
1165 #[cfg(feature = "ffmpeg_4_2")]
1166 Pixel::YUVA444P12BE => AV_PIX_FMT_YUVA444P12BE,
1167 #[cfg(feature = "ffmpeg_4_2")]
1168 Pixel::YUVA444P12LE => AV_PIX_FMT_YUVA444P12LE,
1169 #[cfg(feature = "ffmpeg_4_2")]
1170 Pixel::NV24 => AV_PIX_FMT_NV24,
1171 #[cfg(feature = "ffmpeg_4_2")]
1172 Pixel::NV42 => AV_PIX_FMT_NV42,
1173
1174 #[cfg(feature = "ffmpeg_4_3")]
1175 Pixel::VULKAN => AV_PIX_FMT_VULKAN,
1176 #[cfg(feature = "ffmpeg_4_3")]
1177 Pixel::Y210BE => AV_PIX_FMT_Y210BE,
1178 #[cfg(feature = "ffmpeg_4_3")]
1179 Pixel::Y210LE => AV_PIX_FMT_Y210LE,
1180
1181 #[cfg(feature = "ffmpeg_4_4")]
1182 Pixel::X2RGB10LE => AV_PIX_FMT_X2RGB10LE,
1183 #[cfg(feature = "ffmpeg_4_4")]
1184 Pixel::X2RGB10BE => AV_PIX_FMT_X2RGB10BE,
1185
1186 #[cfg(feature = "ffmpeg_5_0")]
1187 Pixel::X2BGR10LE => AV_PIX_FMT_X2BGR10LE,
1188 #[cfg(feature = "ffmpeg_5_0")]
1189 Pixel::X2BGR10BE => AV_PIX_FMT_X2BGR10BE,
1190 #[cfg(feature = "ffmpeg_5_0")]
1191 Pixel::P210BE => AV_PIX_FMT_P210BE,
1192 #[cfg(feature = "ffmpeg_5_0")]
1193 Pixel::P210LE => AV_PIX_FMT_P210LE,
1194 #[cfg(feature = "ffmpeg_5_0")]
1195 Pixel::P410BE => AV_PIX_FMT_P410BE,
1196 #[cfg(feature = "ffmpeg_5_0")]
1197 Pixel::P410LE => AV_PIX_FMT_P410LE,
1198 #[cfg(feature = "ffmpeg_5_0")]
1199 Pixel::P216BE => AV_PIX_FMT_P216BE,
1200 #[cfg(feature = "ffmpeg_5_0")]
1201 Pixel::P216LE => AV_PIX_FMT_P216LE,
1202 #[cfg(feature = "ffmpeg_5_0")]
1203 Pixel::P416BE => AV_PIX_FMT_P416BE,
1204 #[cfg(feature = "ffmpeg_5_0")]
1205 Pixel::P416LE => AV_PIX_FMT_P416LE,
1206
1207 #[cfg(feature = "ffmpeg_6_0")]
1208 Pixel::VUYA => AV_PIX_FMT_VUYA,
1209 #[cfg(feature = "ffmpeg_6_0")]
1210 Pixel::RGBAF16BE => AV_PIX_FMT_RGBAF16BE,
1211 #[cfg(feature = "ffmpeg_6_0")]
1212 Pixel::RGBAF16LE => AV_PIX_FMT_RGBAF16LE,
1213 #[cfg(feature = "ffmpeg_6_0")]
1214 Pixel::VUYX => AV_PIX_FMT_VUYX,
1215 #[cfg(feature = "ffmpeg_6_0")]
1216 Pixel::P012LE => AV_PIX_FMT_P012LE,
1217 #[cfg(feature = "ffmpeg_6_0")]
1218 Pixel::P012BE => AV_PIX_FMT_P012BE,
1219 #[cfg(feature = "ffmpeg_6_0")]
1220 Pixel::Y212BE => AV_PIX_FMT_Y212BE,
1221 #[cfg(feature = "ffmpeg_6_0")]
1222 Pixel::Y212LE => AV_PIX_FMT_Y212LE,
1223 #[cfg(feature = "ffmpeg_6_0")]
1224 Pixel::XV30BE => AV_PIX_FMT_XV30BE,
1225 #[cfg(feature = "ffmpeg_6_0")]
1226 Pixel::XV30LE => AV_PIX_FMT_XV30LE,
1227 #[cfg(feature = "ffmpeg_6_0")]
1228 Pixel::XV36BE => AV_PIX_FMT_XV36BE,
1229 #[cfg(feature = "ffmpeg_6_0")]
1230 Pixel::XV36LE => AV_PIX_FMT_XV36LE,
1231 #[cfg(feature = "ffmpeg_6_0")]
1232 Pixel::RGBF32BE => AV_PIX_FMT_RGBF32BE,
1233 #[cfg(feature = "ffmpeg_6_0")]
1234 Pixel::RGBF32LE => AV_PIX_FMT_RGBF32LE,
1235 #[cfg(feature = "ffmpeg_6_0")]
1236 Pixel::RGBAF32BE => AV_PIX_FMT_RGBAF32BE,
1237 #[cfg(feature = "ffmpeg_6_0")]
1238 Pixel::RGBAF32LE => AV_PIX_FMT_RGBAF32LE,
1239
1240 #[cfg(feature = "ffmpeg_6_1")]
1241 Pixel::P212BE => AV_PIX_FMT_P212BE,
1242 #[cfg(feature = "ffmpeg_6_1")]
1243 Pixel::P212LE => AV_PIX_FMT_P212LE,
1244 #[cfg(feature = "ffmpeg_6_1")]
1245 Pixel::P412BE => AV_PIX_FMT_P412BE,
1246 #[cfg(feature = "ffmpeg_6_1")]
1247 Pixel::P412LE => AV_PIX_FMT_P412LE,
1248 #[cfg(feature = "ffmpeg_6_1")]
1249 Pixel::GBRAP14BE => AV_PIX_FMT_GBRAP14BE,
1250 #[cfg(feature = "ffmpeg_6_1")]
1251 Pixel::GBRAP14LE => AV_PIX_FMT_GBRAP14LE,
1252
1253 #[cfg(feature = "ffmpeg_7_0")]
1254 Pixel::D3D12 => AV_PIX_FMT_D3D12,
1255
1256 #[cfg(feature = "rpi")]
1257 Pixel::SAND128 => AV_PIX_FMT_SAND128,
1258 #[cfg(feature = "rpi")]
1259 Pixel::SAND64_10 => AV_PIX_FMT_SAND64_10,
1260 #[cfg(feature = "rpi")]
1261 Pixel::SAND64_16 => AV_PIX_FMT_SAND64_16,
1262 #[cfg(feature = "rpi")]
1263 Pixel::RPI4_8 => AV_PIX_FMT_RPI4_8,
1264 #[cfg(feature = "rpi")]
1265 Pixel::RPI4_10 => AV_PIX_FMT_RPI4_10,
1266 }
1267 }
1268}
1269
1270#[derive(Debug)]
1271pub enum ParsePixelError {
1272 NulError(NulError),
1273 UnknownFormat,
1274}
1275
1276impl fmt::Display for ParsePixelError {
1277 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
1278 match *self {
1279 ParsePixelError::NulError(ref e: &NulError) => e.fmt(f),
1280 ParsePixelError::UnknownFormat => write!(f, "unknown pixel format"),
1281 }
1282 }
1283}
1284
1285impl error::Error for ParsePixelError {
1286 fn cause(&self) -> Option<&dyn error::Error> {
1287 match *self {
1288 ParsePixelError::NulError(ref e: &NulError) => Some(e),
1289 ParsePixelError::UnknownFormat => None,
1290 }
1291 }
1292}
1293
1294impl From<NulError> for ParsePixelError {
1295 fn from(x: NulError) -> ParsePixelError {
1296 ParsePixelError::NulError(x)
1297 }
1298}
1299
1300impl FromStr for Pixel {
1301 type Err = ParsePixelError;
1302
1303 #[inline(always)]
1304 fn from_str(s: &str) -> Result<Pixel, ParsePixelError> {
1305 let cstring: CString = CString::new(s)?;
1306 let format: Pixel = unsafe { av_get_pix_fmt(cstring.as_ptr()) }.into();
1307
1308 if format == Pixel::None {
1309 Err(ParsePixelError::UnknownFormat)
1310 } else {
1311 Ok(format)
1312 }
1313 }
1314}
1315