1#[cfg(feature = "ffmpeg_8_1")]
2mod alpha_mode;
3#[cfg(feature = "ffmpeg_8_1")]
4pub use self::alpha_mode::AlphaMode;
5
6use std::error;
7use std::ffi::{CString, NulError};
8use std::fmt;
9use std::str::FromStr;
10
11use crate::ffi::*;
12use crate::utils;
13#[cfg(feature = "serialize")]
14use serde::{Deserialize, Serialize};
15
16#[derive(Eq, PartialEq, Copy, Clone, Debug)]
17#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
18pub enum Pixel {
19 None,
20
21 YUV420P,
22 YUYV422,
23 RGB24,
24 BGR24,
25 YUV422P,
26 YUV444P,
27 YUV410P,
28 YUV411P,
29 GRAY8,
30 MonoWhite,
31 MonoBlack,
32 PAL8,
33 YUVJ420P,
34 YUVJ422P,
35 YUVJ444P,
36 UYVY422,
37 UYYVYY411,
38 BGR8,
39 BGR4,
40 BGR4_BYTE,
41 RGB8,
42 RGB4,
43 RGB4_BYTE,
44 NV12,
45 NV21,
46
47 ARGB,
48 RGBA,
49 ABGR,
50 BGRA,
51
52 GRAY16BE,
53 GRAY16LE,
54 YUV440P,
55 YUVJ440P,
56 YUVA420P,
57 RGB48BE,
58 RGB48LE,
59
60 RGB565BE,
61 RGB565LE,
62 RGB555BE,
63 RGB555LE,
64
65 BGR565BE,
66 BGR565LE,
67 BGR555BE,
68 BGR555LE,
69
70 VAAPI,
71
72 YUV420P16LE,
73 YUV420P16BE,
74 YUV422P16LE,
75 YUV422P16BE,
76 YUV444P16LE,
77 YUV444P16BE,
78 DXVA2_VLD,
79
80 RGB444LE,
81 RGB444BE,
82 BGR444LE,
83 BGR444BE,
84 YA8,
85
86 BGR48BE,
87 BGR48LE,
88
89 YUV420P9BE,
90 YUV420P9LE,
91 YUV420P10BE,
92 YUV420P10LE,
93 YUV422P10BE,
94 YUV422P10LE,
95 YUV444P9BE,
96 YUV444P9LE,
97 YUV444P10BE,
98 YUV444P10LE,
99 YUV422P9BE,
100 YUV422P9LE,
101
102 GBRP,
103 GBRP9BE,
104 GBRP9LE,
105 GBRP10BE,
106 GBRP10LE,
107 GBRP16BE,
108 GBRP16LE,
109
110 YUVA420P9BE,
111 YUVA420P9LE,
112 YUVA422P9BE,
113 YUVA422P9LE,
114 YUVA444P9BE,
115 YUVA444P9LE,
116 YUVA420P10BE,
117 YUVA420P10LE,
118 YUVA422P10BE,
119 YUVA422P10LE,
120 YUVA444P10BE,
121 YUVA444P10LE,
122 YUVA420P16BE,
123 YUVA420P16LE,
124 YUVA422P16BE,
125 YUVA422P16LE,
126 YUVA444P16BE,
127 YUVA444P16LE,
128
129 VDPAU,
130
131 XYZ12LE,
132 XYZ12BE,
133 NV16,
134 NV20LE,
135 NV20BE,
136
137 RGBA64BE,
138 RGBA64LE,
139 BGRA64BE,
140 BGRA64LE,
141
142 YVYU422,
143
144 YA16BE,
145 YA16LE,
146
147 QSV,
148 MMAL,
149
150 D3D11VA_VLD,
151
152 CUDA,
153
154 ZRGB,
155 RGBZ,
156 ZBGR,
157 BGRZ,
158 YUVA444P,
159 YUVA422P,
160
161 YUV420P12BE,
162 YUV420P12LE,
163 YUV420P14BE,
164 YUV420P14LE,
165 YUV422P12BE,
166 YUV422P12LE,
167 YUV422P14BE,
168 YUV422P14LE,
169 YUV444P12BE,
170 YUV444P12LE,
171 YUV444P14BE,
172 YUV444P14LE,
173 GBRP12BE,
174 GBRP12LE,
175 GBRP14BE,
176 GBRP14LE,
177 GBRAP,
178 GBRAP16BE,
179 GBRAP16LE,
180 YUVJ411P,
181
182 BAYER_BGGR8,
183 BAYER_RGGB8,
184 BAYER_GBRG8,
185 BAYER_GRBG8,
186 BAYER_BGGR16LE,
187 BAYER_BGGR16BE,
188 BAYER_RGGB16LE,
189 BAYER_RGGB16BE,
190 BAYER_GBRG16LE,
191 BAYER_GBRG16BE,
192 BAYER_GRBG16LE,
193 BAYER_GRBG16BE,
194
195 YUV440P10LE,
196 YUV440P10BE,
197 YUV440P12LE,
198 YUV440P12BE,
199 AYUV64LE,
200 AYUV64BE,
201
202 VIDEOTOOLBOX,
203
204 #[cfg(not(feature = "ffmpeg_7_0"))]
206 XVMC,
207
208 RGB32,
209 RGB32_1,
210 BGR32,
211 BGR32_1,
212 ZRGB32,
213 ZBGR32,
214
215 GRAY16,
216 YA16,
217 RGB48,
218 RGB565,
219 RGB555,
220 RGB444,
221 BGR48,
222 BGR565,
223 BGR555,
224 BGR444,
225
226 YUV420P9,
227 YUV422P9,
228 YUV444P9,
229 YUV420P10,
230 YUV422P10,
231 YUV440P10,
232 YUV444P10,
233 YUV420P12,
234 YUV422P12,
235 YUV440P12,
236 YUV444P12,
237 YUV420P14,
238 YUV422P14,
239 YUV444P14,
240 YUV420P16,
241 YUV422P16,
242 YUV444P16,
243
244 GBRP9,
245 GBRP10,
246 GBRP12,
247 GBRP14,
248 GBRP16,
249 GBRAP16,
250
251 BAYER_BGGR16,
252 BAYER_RGGB16,
253 BAYER_GBRG16,
254 BAYER_GRBG16,
255
256 YUVA420P9,
257 YUVA422P9,
258 YUVA444P9,
259 YUVA420P10,
260 YUVA422P10,
261 YUVA444P10,
262 YUVA420P16,
263 YUVA422P16,
264 YUVA444P16,
265
266 XYZ12,
267 NV20,
268 AYUV64,
269
270 P010LE,
271 P010BE,
272 GBRAP12BE,
273 GBRAP12LE,
274 GBRAP10LE,
275 GBRAP10BE,
276 MEDIACODEC,
277 GRAY12BE,
278 GRAY12LE,
279 GRAY10BE,
280 GRAY10LE,
281 P016LE,
282 P016BE,
283
284 D3D11,
285 GRAY9BE,
286 GRAY9LE,
287 GBRPF32BE,
288 GBRPF32LE,
289 GBRAPF32BE,
290 GBRAPF32LE,
291 DRM_PRIME,
292
293 OPENCL,
294
295 GRAY14BE,
296 GRAY14LE,
297 GRAYF32BE,
298 GRAYF32LE,
299
300 YUVA422P12BE,
301 YUVA422P12LE,
302 YUVA444P12BE,
303 YUVA444P12LE,
304 NV24,
305 NV42,
306
307 VULKAN,
308 Y210BE,
309 Y210LE,
310
311 X2RGB10LE,
312 X2RGB10BE,
313
314 X2BGR10LE,
315 X2BGR10BE,
316 P210BE,
317 P210LE,
318 P410BE,
319 P410LE,
320 P216BE,
321 P216LE,
322 P416BE,
323 P416LE,
324
325 #[cfg(feature = "ffmpeg_6_0")]
326 VUYA,
327 #[cfg(feature = "ffmpeg_6_0")]
328 RGBAF16BE,
329 #[cfg(feature = "ffmpeg_6_0")]
330 RGBAF16LE,
331 #[cfg(feature = "ffmpeg_6_0")]
332 VUYX,
333 #[cfg(feature = "ffmpeg_6_0")]
334 P012LE,
335 #[cfg(feature = "ffmpeg_6_0")]
336 P012BE,
337 #[cfg(feature = "ffmpeg_6_0")]
338 Y212BE,
339 #[cfg(feature = "ffmpeg_6_0")]
340 Y212LE,
341 #[cfg(feature = "ffmpeg_6_0")]
342 XV30BE,
343 #[cfg(feature = "ffmpeg_6_0")]
344 XV30LE,
345 #[cfg(feature = "ffmpeg_6_0")]
346 XV36BE,
347 #[cfg(feature = "ffmpeg_6_0")]
348 XV36LE,
349 #[cfg(feature = "ffmpeg_6_0")]
350 RGBF32BE,
351 #[cfg(feature = "ffmpeg_6_0")]
352 RGBF32LE,
353 #[cfg(feature = "ffmpeg_6_0")]
354 RGBAF32BE,
355 #[cfg(feature = "ffmpeg_6_0")]
356 RGBAF32LE,
357
358 #[cfg(feature = "ffmpeg_6_1")]
359 P212BE,
360 #[cfg(feature = "ffmpeg_6_1")]
361 P212LE,
362 #[cfg(feature = "ffmpeg_6_1")]
363 P412BE,
364 #[cfg(feature = "ffmpeg_6_1")]
365 P412LE,
366 #[cfg(feature = "ffmpeg_6_1")]
367 GBRAP14BE,
368 #[cfg(feature = "ffmpeg_6_1")]
369 GBRAP14LE,
370
371 #[cfg(feature = "ffmpeg_7_0")]
372 D3D12,
373
374 #[cfg(feature = "ffmpeg_8_0")]
375 AYUV,
376
377 #[cfg(feature = "ffmpeg_8_0")]
378 UYVA,
379
380 #[cfg(feature = "ffmpeg_8_0")]
381 VYU444,
382
383 #[cfg(feature = "ffmpeg_8_0")]
384 V30XBE,
385 #[cfg(feature = "ffmpeg_8_0")]
386 V30XLE,
387
388 #[cfg(feature = "ffmpeg_8_0")]
389 RGBF16BE,
390 #[cfg(feature = "ffmpeg_8_0")]
391 RGBF16LE,
392
393 #[cfg(feature = "ffmpeg_8_0")]
394 RGBA128BE,
395 #[cfg(feature = "ffmpeg_8_0")]
396 RGBA128LE,
397
398 #[cfg(feature = "ffmpeg_8_0")]
399 RGB96BE,
400 #[cfg(feature = "ffmpeg_8_0")]
401 RGB96LE,
402
403 #[cfg(feature = "ffmpeg_8_0")]
404 Y216BE,
405 #[cfg(feature = "ffmpeg_8_0")]
406 Y216LE,
407
408 #[cfg(feature = "ffmpeg_8_0")]
409 XV48BE,
410 #[cfg(feature = "ffmpeg_8_0")]
411 XV48LE,
412
413 #[cfg(feature = "ffmpeg_8_0")]
414 GBRPF16BE,
415 #[cfg(feature = "ffmpeg_8_0")]
416 GBRPF16LE,
417 #[cfg(feature = "ffmpeg_8_0")]
418 GBRAPF16BE,
419 #[cfg(feature = "ffmpeg_8_0")]
420 GBRAPF16LE,
421
422 #[cfg(feature = "ffmpeg_8_0")]
423 GRAYF16BE,
424 #[cfg(feature = "ffmpeg_8_0")]
425 GRAYF16LE,
426
427 #[cfg(feature = "ffmpeg_8_0")]
428 AMF_SURFACE,
429
430 #[cfg(feature = "ffmpeg_8_0")]
431 GRAY32BE,
432 #[cfg(feature = "ffmpeg_8_0")]
433 GRAY32LE,
434
435 #[cfg(feature = "ffmpeg_8_0")]
436 YAF32BE,
437 #[cfg(feature = "ffmpeg_8_0")]
438 YAF32LE,
439
440 #[cfg(feature = "ffmpeg_8_0")]
441 YAF16BE,
442 #[cfg(feature = "ffmpeg_8_0")]
443 YAF16LE,
444
445 #[cfg(feature = "ffmpeg_8_0")]
446 GBRAP32BE,
447 #[cfg(feature = "ffmpeg_8_0")]
448 GBRAP32LE,
449
450 #[cfg(feature = "ffmpeg_8_0")]
451 YUV444P10MSBBE,
452 #[cfg(feature = "ffmpeg_8_0")]
453 YUV444P10MSBLE,
454 #[cfg(feature = "ffmpeg_8_0")]
455 YUV444P12MSBBE,
456 #[cfg(feature = "ffmpeg_8_0")]
457 YUV444P12MSBLE,
458 #[cfg(feature = "ffmpeg_8_0")]
459 GBRP10MSBBE,
460 #[cfg(feature = "ffmpeg_8_0")]
461 GBRP10MSBLE,
462 #[cfg(feature = "ffmpeg_8_0")]
463 GBRP12MSBBE,
464 #[cfg(feature = "ffmpeg_8_0")]
465 GBRP12MSBLE,
466
467 #[cfg(feature = "ffmpeg_8_0")]
468 OHCODEC,
469
470 #[cfg(feature = "rpi")]
471 RPI,
472 #[cfg(feature = "rpi")]
473 SAND128,
474 #[cfg(feature = "rpi")]
475 SAND64_10,
476 #[cfg(feature = "rpi")]
477 SAND64_16,
478 #[cfg(feature = "rpi")]
479 RPI4_8,
480 #[cfg(feature = "rpi")]
481 RPI4_10,
482}
483
484#[derive(Clone, Copy, PartialEq, Eq)]
485pub struct Descriptor {
486 ptr: *const AVPixFmtDescriptor,
487}
488
489unsafe impl Send for Descriptor {}
490unsafe impl Sync for Descriptor {}
491
492impl Pixel {
493 pub const Y400A: Pixel = Pixel::YA8;
494 pub const GRAY8A: Pixel = Pixel::YA8;
495 pub const GBR24P: Pixel = Pixel::GBRP;
496
497 pub fn descriptor(self) -> Option<Descriptor> {
498 unsafe {
499 let ptr = av_pix_fmt_desc_get(self.into());
500 ptr.as_ref().map(|ptr| Descriptor { ptr })
501 }
502 }
503}
504
505impl Descriptor {
506 pub fn as_ptr(self) -> *const AVPixFmtDescriptor {
507 self.ptr
508 }
509
510 pub fn name(self) -> &'static str {
511 unsafe { utils::str_from_c_ptr((*self.as_ptr()).name) }
512 }
513
514 pub fn nb_components(self) -> u8 {
515 unsafe { (*self.as_ptr()).nb_components }
516 }
517
518 pub fn log2_chroma_w(self) -> u8 {
519 unsafe { (*self.as_ptr()).log2_chroma_w }
520 }
521
522 pub fn log2_chroma_h(self) -> u8 {
523 unsafe { (*self.as_ptr()).log2_chroma_h }
524 }
525}
526
527impl From<AVPixelFormat> for Pixel {
528 #[inline]
529 fn from(value: AVPixelFormat) -> Self {
530 use AVPixelFormat as AV;
531
532 match value {
533 AV::NONE => Pixel::None,
534
535 AV::YUV420P => Pixel::YUV420P,
536 AV::YUYV422 => Pixel::YUYV422,
537 AV::RGB24 => Pixel::RGB24,
538 AV::BGR24 => Pixel::BGR24,
539 AV::YUV422P => Pixel::YUV422P,
540 AV::YUV444P => Pixel::YUV444P,
541 AV::YUV410P => Pixel::YUV410P,
542 AV::YUV411P => Pixel::YUV411P,
543 AV::GRAY8 => Pixel::GRAY8,
544 AV::MONOWHITE => Pixel::MonoWhite,
545 AV::MONOBLACK => Pixel::MonoBlack,
546 AV::PAL8 => Pixel::PAL8,
547 AV::YUVJ420P => Pixel::YUVJ420P,
548 AV::YUVJ422P => Pixel::YUVJ422P,
549 AV::YUVJ444P => Pixel::YUVJ444P,
550 #[cfg(not(feature = "ffmpeg_7_0"))]
551 AV::XVMC => Pixel::XVMC,
552 AV::UYVY422 => Pixel::UYVY422,
553 AV::UYYVYY411 => Pixel::UYYVYY411,
554 AV::BGR8 => Pixel::BGR8,
555 AV::BGR4 => Pixel::BGR4,
556 AV::BGR4_BYTE => Pixel::BGR4_BYTE,
557 AV::RGB8 => Pixel::RGB8,
558 AV::RGB4 => Pixel::RGB4,
559 AV::RGB4_BYTE => Pixel::RGB4_BYTE,
560 AV::NV12 => Pixel::NV12,
561 AV::NV21 => Pixel::NV21,
562
563 AV::ARGB => Pixel::ARGB,
564 AV::RGBA => Pixel::RGBA,
565 AV::ABGR => Pixel::ABGR,
566 AV::BGRA => Pixel::BGRA,
567
568 AV::GRAY16BE => Pixel::GRAY16BE,
569 AV::GRAY16LE => Pixel::GRAY16LE,
570 AV::YUV440P => Pixel::YUV440P,
571 AV::YUVJ440P => Pixel::YUVJ440P,
572 AV::YUVA420P => Pixel::YUVA420P,
573 AV::RGB48BE => Pixel::RGB48BE,
574 AV::RGB48LE => Pixel::RGB48LE,
575
576 AV::RGB565BE => Pixel::RGB565BE,
577 AV::RGB565LE => Pixel::RGB565LE,
578 AV::RGB555BE => Pixel::RGB555BE,
579 AV::RGB555LE => Pixel::RGB555LE,
580
581 AV::BGR565BE => Pixel::BGR565BE,
582 AV::BGR565LE => Pixel::BGR565LE,
583 AV::BGR555BE => Pixel::BGR555BE,
584 AV::BGR555LE => Pixel::BGR555LE,
585
586 AV::VAAPI => Pixel::VAAPI,
587
588 AV::YUV420P16LE => Pixel::YUV420P16LE,
589 AV::YUV420P16BE => Pixel::YUV420P16BE,
590 AV::YUV422P16LE => Pixel::YUV422P16LE,
591 AV::YUV422P16BE => Pixel::YUV422P16BE,
592 AV::YUV444P16LE => Pixel::YUV444P16LE,
593 AV::YUV444P16BE => Pixel::YUV444P16BE,
594 AV::DXVA2_VLD => Pixel::DXVA2_VLD,
595
596 AV::RGB444LE => Pixel::RGB444LE,
597 AV::RGB444BE => Pixel::RGB444BE,
598 AV::BGR444LE => Pixel::BGR444LE,
599 AV::BGR444BE => Pixel::BGR444BE,
600 AV::YA8 => Pixel::YA8,
601
602 AV::BGR48BE => Pixel::BGR48BE,
603 AV::BGR48LE => Pixel::BGR48LE,
604
605 AV::YUV420P9BE => Pixel::YUV420P9BE,
606 AV::YUV420P9LE => Pixel::YUV420P9LE,
607 AV::YUV420P10BE => Pixel::YUV420P10BE,
608 AV::YUV420P10LE => Pixel::YUV420P10LE,
609 AV::YUV422P10BE => Pixel::YUV422P10BE,
610 AV::YUV422P10LE => Pixel::YUV422P10LE,
611 AV::YUV444P9BE => Pixel::YUV444P9BE,
612 AV::YUV444P9LE => Pixel::YUV444P9LE,
613 AV::YUV444P10BE => Pixel::YUV444P10BE,
614 AV::YUV444P10LE => Pixel::YUV444P10LE,
615 AV::YUV422P9BE => Pixel::YUV422P9BE,
616 AV::YUV422P9LE => Pixel::YUV422P9LE,
617
618 AV::GBRP => Pixel::GBRP,
619 AV::GBRP9BE => Pixel::GBRP9BE,
620 AV::GBRP9LE => Pixel::GBRP9LE,
621 AV::GBRP10BE => Pixel::GBRP10BE,
622 AV::GBRP10LE => Pixel::GBRP10LE,
623 AV::GBRP16BE => Pixel::GBRP16BE,
624 AV::GBRP16LE => Pixel::GBRP16LE,
625
626 AV::YUVA420P9BE => Pixel::YUVA420P9BE,
627 AV::YUVA420P9LE => Pixel::YUVA420P9LE,
628 AV::YUVA422P9BE => Pixel::YUVA422P9BE,
629 AV::YUVA422P9LE => Pixel::YUVA422P9LE,
630 AV::YUVA444P9BE => Pixel::YUVA444P9BE,
631 AV::YUVA444P9LE => Pixel::YUVA444P9LE,
632 AV::YUVA420P10BE => Pixel::YUVA420P10BE,
633 AV::YUVA420P10LE => Pixel::YUVA420P10LE,
634 AV::YUVA422P10BE => Pixel::YUVA422P10BE,
635 AV::YUVA422P10LE => Pixel::YUVA422P10LE,
636 AV::YUVA444P10BE => Pixel::YUVA444P10BE,
637 AV::YUVA444P10LE => Pixel::YUVA444P10LE,
638 AV::YUVA420P16BE => Pixel::YUVA420P16BE,
639 AV::YUVA420P16LE => Pixel::YUVA420P16LE,
640 AV::YUVA422P16BE => Pixel::YUVA422P16BE,
641 AV::YUVA422P16LE => Pixel::YUVA422P16LE,
642 AV::YUVA444P16BE => Pixel::YUVA444P16BE,
643 AV::YUVA444P16LE => Pixel::YUVA444P16LE,
644
645 AV::VDPAU => Pixel::VDPAU,
646
647 AV::XYZ12LE => Pixel::XYZ12LE,
648 AV::XYZ12BE => Pixel::XYZ12BE,
649 AV::NV16 => Pixel::NV16,
650 AV::NV20LE => Pixel::NV20LE,
651 AV::NV20BE => Pixel::NV20BE,
652
653 AV::RGBA64BE => Pixel::RGBA64BE,
654 AV::RGBA64LE => Pixel::RGBA64LE,
655 AV::BGRA64BE => Pixel::BGRA64BE,
656 AV::BGRA64LE => Pixel::BGRA64LE,
657
658 AV::YVYU422 => Pixel::YVYU422,
659
660 AV::YA16BE => Pixel::YA16BE,
661 AV::YA16LE => Pixel::YA16LE,
662
663 AV::QSV => Pixel::QSV,
664 AV::MMAL => Pixel::MMAL,
665
666 AV::D3D11VA_VLD => Pixel::D3D11VA_VLD,
667
668 AV::CUDA => Pixel::CUDA,
669
670 AV::_0RGB => Pixel::ZRGB,
671 AV::RGB0 => Pixel::RGBZ,
672 AV::_0BGR => Pixel::ZBGR,
673 AV::BGR0 => Pixel::BGRZ,
674 AV::YUVA444P => Pixel::YUVA444P,
675 AV::YUVA422P => Pixel::YUVA422P,
676
677 AV::YUV420P12BE => Pixel::YUV420P12BE,
678 AV::YUV420P12LE => Pixel::YUV420P12LE,
679 AV::YUV420P14BE => Pixel::YUV420P14BE,
680 AV::YUV420P14LE => Pixel::YUV420P14LE,
681 AV::YUV422P12BE => Pixel::YUV422P12BE,
682 AV::YUV422P12LE => Pixel::YUV422P12LE,
683 AV::YUV422P14BE => Pixel::YUV422P14BE,
684 AV::YUV422P14LE => Pixel::YUV422P14LE,
685 AV::YUV444P12BE => Pixel::YUV444P12BE,
686 AV::YUV444P12LE => Pixel::YUV444P12LE,
687 AV::YUV444P14BE => Pixel::YUV444P14BE,
688 AV::YUV444P14LE => Pixel::YUV444P14LE,
689 AV::GBRP12BE => Pixel::GBRP12BE,
690 AV::GBRP12LE => Pixel::GBRP12LE,
691 AV::GBRP14BE => Pixel::GBRP14BE,
692 AV::GBRP14LE => Pixel::GBRP14LE,
693 AV::GBRAP => Pixel::GBRAP,
694 AV::GBRAP16BE => Pixel::GBRAP16BE,
695 AV::GBRAP16LE => Pixel::GBRAP16LE,
696 AV::YUVJ411P => Pixel::YUVJ411P,
697
698 AV::BAYER_BGGR8 => Pixel::BAYER_BGGR8,
699 AV::BAYER_RGGB8 => Pixel::BAYER_RGGB8,
700 AV::BAYER_GBRG8 => Pixel::BAYER_GBRG8,
701 AV::BAYER_GRBG8 => Pixel::BAYER_GRBG8,
702 AV::BAYER_BGGR16LE => Pixel::BAYER_BGGR16LE,
703 AV::BAYER_BGGR16BE => Pixel::BAYER_BGGR16BE,
704 AV::BAYER_RGGB16LE => Pixel::BAYER_RGGB16LE,
705 AV::BAYER_RGGB16BE => Pixel::BAYER_RGGB16BE,
706 AV::BAYER_GBRG16LE => Pixel::BAYER_GBRG16LE,
707 AV::BAYER_GBRG16BE => Pixel::BAYER_GBRG16BE,
708 AV::BAYER_GRBG16LE => Pixel::BAYER_GRBG16LE,
709 AV::BAYER_GRBG16BE => Pixel::BAYER_GRBG16BE,
710
711 AV::YUV440P10LE => Pixel::YUV440P10LE,
712 AV::YUV440P10BE => Pixel::YUV440P10BE,
713 AV::YUV440P12LE => Pixel::YUV440P12LE,
714 AV::YUV440P12BE => Pixel::YUV440P12BE,
715 AV::AYUV64LE => Pixel::AYUV64LE,
716 AV::AYUV64BE => Pixel::AYUV64BE,
717
718 AV::VIDEOTOOLBOX => Pixel::VIDEOTOOLBOX,
719
720 AV::P010LE => Pixel::P010LE,
721 AV::P010BE => Pixel::P010BE,
722 AV::GBRAP12BE => Pixel::GBRAP12BE,
723 AV::GBRAP12LE => Pixel::GBRAP12LE,
724 AV::GBRAP10LE => Pixel::GBRAP10LE,
725 AV::GBRAP10BE => Pixel::GBRAP10BE,
726 AV::MEDIACODEC => Pixel::MEDIACODEC,
727 AV::GRAY12BE => Pixel::GRAY12BE,
728 AV::GRAY12LE => Pixel::GRAY12LE,
729 AV::GRAY10BE => Pixel::GRAY10BE,
730 AV::GRAY10LE => Pixel::GRAY10LE,
731 AV::P016LE => Pixel::P016LE,
732 AV::P016BE => Pixel::P016BE,
733
734 AV::NB => Pixel::None,
735
736 AV::D3D11 => Pixel::D3D11,
737 AV::GRAY9BE => Pixel::GRAY9BE,
738 AV::GRAY9LE => Pixel::GRAY9LE,
739 AV::GBRPF32BE => Pixel::GBRPF32BE,
740 AV::GBRPF32LE => Pixel::GBRPF32LE,
741 AV::GBRAPF32BE => Pixel::GBRAPF32BE,
742 AV::GBRAPF32LE => Pixel::GBRAPF32LE,
743 AV::DRM_PRIME => Pixel::DRM_PRIME,
744
745 AV::OPENCL => Pixel::OPENCL,
746
747 AV::GRAY14BE => Pixel::GRAY14BE,
748 AV::GRAY14LE => Pixel::GRAY14LE,
749 AV::GRAYF32BE => Pixel::GRAYF32BE,
750 AV::GRAYF32LE => Pixel::GRAYF32LE,
751
752 AV::YUVA422P12BE => Pixel::YUVA422P12BE,
753 AV::YUVA422P12LE => Pixel::YUVA422P12LE,
754 AV::YUVA444P12BE => Pixel::YUVA444P12BE,
755 AV::YUVA444P12LE => Pixel::YUVA444P12LE,
756 AV::NV24 => Pixel::NV24,
757 AV::NV42 => Pixel::NV42,
758
759 AV::VULKAN => Pixel::VULKAN,
760 AV::Y210BE => Pixel::Y210BE,
761 AV::Y210LE => Pixel::Y210LE,
762
763 AV::X2RGB10LE => Pixel::X2RGB10LE,
764 AV::X2RGB10BE => Pixel::X2RGB10BE,
765
766 AV::X2BGR10LE => Pixel::X2BGR10LE,
767 AV::X2BGR10BE => Pixel::X2BGR10BE,
768 AV::P210BE => Pixel::P210BE,
769 AV::P210LE => Pixel::P210LE,
770 AV::P410BE => Pixel::P410BE,
771 AV::P410LE => Pixel::P410LE,
772 AV::P216BE => Pixel::P216BE,
773 AV::P216LE => Pixel::P216LE,
774 AV::P416BE => Pixel::P416BE,
775 AV::P416LE => Pixel::P416LE,
776
777 #[cfg(feature = "ffmpeg_6_0")]
778 AV::VUYA => Pixel::VUYA,
779 #[cfg(feature = "ffmpeg_6_0")]
780 AV::RGBAF16BE => Pixel::RGBAF16BE,
781 #[cfg(feature = "ffmpeg_6_0")]
782 AV::RGBAF16LE => Pixel::RGBAF16LE,
783 #[cfg(feature = "ffmpeg_6_0")]
784 AV::VUYX => Pixel::VUYX,
785 #[cfg(feature = "ffmpeg_6_0")]
786 AV::P012LE => Pixel::P012LE,
787 #[cfg(feature = "ffmpeg_6_0")]
788 AV::P012BE => Pixel::P012BE,
789 #[cfg(feature = "ffmpeg_6_0")]
790 AV::Y212BE => Pixel::Y212BE,
791 #[cfg(feature = "ffmpeg_6_0")]
792 AV::Y212LE => Pixel::Y212LE,
793 #[cfg(feature = "ffmpeg_6_0")]
794 AV::XV30BE => Pixel::XV30BE,
795 #[cfg(feature = "ffmpeg_6_0")]
796 AV::XV30LE => Pixel::XV30LE,
797 #[cfg(feature = "ffmpeg_6_0")]
798 AV::XV36BE => Pixel::XV36BE,
799 #[cfg(feature = "ffmpeg_6_0")]
800 AV::XV36LE => Pixel::XV36LE,
801 #[cfg(feature = "ffmpeg_6_0")]
802 AV::RGBF32BE => Pixel::RGBF32BE,
803 #[cfg(feature = "ffmpeg_6_0")]
804 AV::RGBF32LE => Pixel::RGBF32LE,
805 #[cfg(feature = "ffmpeg_6_0")]
806 AV::RGBAF32BE => Pixel::RGBAF32BE,
807 #[cfg(feature = "ffmpeg_6_0")]
808 AV::RGBAF32LE => Pixel::RGBAF32LE,
809
810 #[cfg(feature = "ffmpeg_6_1")]
811 AV::P212BE => Pixel::P212BE,
812 #[cfg(feature = "ffmpeg_6_1")]
813 AV::P212LE => Pixel::P212LE,
814 #[cfg(feature = "ffmpeg_6_1")]
815 AV::P412BE => Pixel::P412BE,
816 #[cfg(feature = "ffmpeg_6_1")]
817 AV::P412LE => Pixel::P412LE,
818 #[cfg(feature = "ffmpeg_6_1")]
819 AV::GBRAP14BE => Pixel::GBRAP14BE,
820 #[cfg(feature = "ffmpeg_6_1")]
821 AV::GBRAP14LE => Pixel::GBRAP14LE,
822
823 #[cfg(feature = "ffmpeg_7_0")]
824 AV::D3D12 => Pixel::D3D12,
825
826 #[cfg(feature = "ffmpeg_8_0")]
827 AV::AYUV => Pixel::AYUV,
828
829 #[cfg(feature = "ffmpeg_8_0")]
830 AV::UYVA => Pixel::UYVA,
831
832 #[cfg(feature = "ffmpeg_8_0")]
833 AV::VYU444 => Pixel::VYU444,
834
835 #[cfg(feature = "ffmpeg_8_0")]
836 AV::V30XBE => Pixel::V30XBE,
837 #[cfg(feature = "ffmpeg_8_0")]
838 AV::V30XLE => Pixel::V30XLE,
839
840 #[cfg(feature = "ffmpeg_8_0")]
841 AV::RGBF16BE => Pixel::RGBF16BE,
842 #[cfg(feature = "ffmpeg_8_0")]
843 AV::RGBF16LE => Pixel::RGBF16LE,
844
845 #[cfg(feature = "ffmpeg_8_0")]
846 AV::RGBA128BE => Pixel::RGBA128BE,
847 #[cfg(feature = "ffmpeg_8_0")]
848 AV::RGBA128LE => Pixel::RGBA128LE,
849
850 #[cfg(feature = "ffmpeg_8_0")]
851 AV::RGB96BE => Pixel::RGB96BE,
852 #[cfg(feature = "ffmpeg_8_0")]
853 AV::RGB96LE => Pixel::RGB96LE,
854
855 #[cfg(feature = "ffmpeg_8_0")]
856 AV::Y216BE => Pixel::Y216BE,
857 #[cfg(feature = "ffmpeg_8_0")]
858 AV::Y216LE => Pixel::Y216LE,
859
860 #[cfg(feature = "ffmpeg_8_0")]
861 AV::XV48BE => Pixel::XV48BE,
862 #[cfg(feature = "ffmpeg_8_0")]
863 AV::XV48LE => Pixel::XV48LE,
864
865 #[cfg(feature = "ffmpeg_8_0")]
866 AV::GBRPF16BE => Pixel::GBRPF16BE,
867 #[cfg(feature = "ffmpeg_8_0")]
868 AV::GBRPF16LE => Pixel::GBRPF16LE,
869 #[cfg(feature = "ffmpeg_8_0")]
870 AV::GBRAPF16BE => Pixel::GBRAPF16BE,
871 #[cfg(feature = "ffmpeg_8_0")]
872 AV::GBRAPF16LE => Pixel::GBRAPF16LE,
873
874 #[cfg(feature = "ffmpeg_8_0")]
875 AV::GRAYF16BE => Pixel::GRAYF16BE,
876 #[cfg(feature = "ffmpeg_8_0")]
877 AV::GRAYF16LE => Pixel::GRAYF16LE,
878
879 #[cfg(feature = "ffmpeg_8_0")]
880 AV::AMF_SURFACE => Pixel::AMF_SURFACE,
881
882 #[cfg(feature = "ffmpeg_8_0")]
883 AV::GRAY32BE => Pixel::GRAY32BE,
884 #[cfg(feature = "ffmpeg_8_0")]
885 AV::GRAY32LE => Pixel::GRAY32LE,
886
887 #[cfg(feature = "ffmpeg_8_0")]
888 AV::YAF32BE => Pixel::YAF32BE,
889 #[cfg(feature = "ffmpeg_8_0")]
890 AV::YAF32LE => Pixel::YAF32LE,
891
892 #[cfg(feature = "ffmpeg_8_0")]
893 AV::YAF16BE => Pixel::YAF16BE,
894 #[cfg(feature = "ffmpeg_8_0")]
895 AV::YAF16LE => Pixel::YAF16LE,
896
897 #[cfg(feature = "ffmpeg_8_0")]
898 AV::GBRAP32BE => Pixel::GBRAP32BE,
899 #[cfg(feature = "ffmpeg_8_0")]
900 AV::GBRAP32LE => Pixel::GBRAP32LE,
901
902 #[cfg(feature = "ffmpeg_8_0")]
903 AV::YUV444P10MSBBE => Pixel::YUV444P10MSBBE,
904 #[cfg(feature = "ffmpeg_8_0")]
905 AV::YUV444P10MSBLE => Pixel::YUV444P10MSBLE,
906 #[cfg(feature = "ffmpeg_8_0")]
907 AV::YUV444P12MSBBE => Pixel::YUV444P12MSBBE,
908 #[cfg(feature = "ffmpeg_8_0")]
909 AV::YUV444P12MSBLE => Pixel::YUV444P12MSBLE,
910 #[cfg(feature = "ffmpeg_8_0")]
911 AV::GBRP10MSBBE => Pixel::GBRP10MSBBE,
912 #[cfg(feature = "ffmpeg_8_0")]
913 AV::GBRP10MSBLE => Pixel::GBRP10MSBLE,
914 #[cfg(feature = "ffmpeg_8_0")]
915 AV::GBRP12MSBBE => Pixel::GBRP12MSBBE,
916 #[cfg(feature = "ffmpeg_8_0")]
917 AV::GBRP12MSBLE => Pixel::GBRP12MSBLE,
918
919 #[cfg(feature = "ffmpeg_8_0")]
920 AV::OHCODEC => Pixel::OHCODEC,
921
922 #[cfg(feature = "rpi")]
923 AV::RPI => Pixel::RPI,
924 #[cfg(feature = "rpi")]
925 AV::SAND128 => Pixel::SAND128,
926 #[cfg(feature = "rpi")]
927 AV::SAND64_10 => Pixel::SAND64_10,
928 #[cfg(feature = "rpi")]
929 AV::SAND64_16 => Pixel::SAND64_16,
930 #[cfg(feature = "rpi")]
931 AV::RPI4_8 => Pixel::RPI4_8,
932 #[cfg(feature = "rpi")]
933 AV::RPI4_10 => Pixel::RPI4_10,
934
935 _ => unimplemented!(),
936 }
937 }
938}
939
940impl From<Pixel> for AVPixelFormat {
941 #[inline]
942 fn from(value: Pixel) -> AVPixelFormat {
943 use AVPixelFormat as AV;
944
945 match value {
946 Pixel::None => AV::NONE,
947
948 Pixel::YUV420P => AV::YUV420P,
949 Pixel::YUYV422 => AV::YUYV422,
950 Pixel::RGB24 => AV::RGB24,
951 Pixel::BGR24 => AV::BGR24,
952 Pixel::YUV422P => AV::YUV422P,
953 Pixel::YUV444P => AV::YUV444P,
954 Pixel::YUV410P => AV::YUV410P,
955 Pixel::YUV411P => AV::YUV411P,
956 Pixel::GRAY8 => AV::GRAY8,
957 Pixel::MonoWhite => AV::MONOWHITE,
958 Pixel::MonoBlack => AV::MONOBLACK,
959 Pixel::PAL8 => AV::PAL8,
960 Pixel::YUVJ420P => AV::YUVJ420P,
961 Pixel::YUVJ422P => AV::YUVJ422P,
962 Pixel::YUVJ444P => AV::YUVJ444P,
963 Pixel::UYVY422 => AV::UYVY422,
964 Pixel::UYYVYY411 => AV::UYYVYY411,
965 Pixel::BGR8 => AV::BGR8,
966 Pixel::BGR4 => AV::BGR4,
967 Pixel::BGR4_BYTE => AV::BGR4_BYTE,
968 Pixel::RGB8 => AV::RGB8,
969 Pixel::RGB4 => AV::RGB4,
970 Pixel::RGB4_BYTE => AV::RGB4_BYTE,
971 Pixel::NV12 => AV::NV12,
972 Pixel::NV21 => AV::NV21,
973
974 Pixel::ARGB => AV::ARGB,
975 Pixel::RGBA => AV::RGBA,
976 Pixel::ABGR => AV::ABGR,
977 Pixel::BGRA => AV::BGRA,
978
979 Pixel::GRAY16BE => AV::GRAY16BE,
980 Pixel::GRAY16LE => AV::GRAY16LE,
981 Pixel::YUV440P => AV::YUV440P,
982 Pixel::YUVJ440P => AV::YUVJ440P,
983 Pixel::YUVA420P => AV::YUVA420P,
984 Pixel::RGB48BE => AV::RGB48BE,
985 Pixel::RGB48LE => AV::RGB48LE,
986
987 Pixel::RGB565BE => AV::RGB565BE,
988 Pixel::RGB565LE => AV::RGB565LE,
989 Pixel::RGB555BE => AV::RGB555BE,
990 Pixel::RGB555LE => AV::RGB555LE,
991
992 Pixel::BGR565BE => AV::BGR565BE,
993 Pixel::BGR565LE => AV::BGR565LE,
994 Pixel::BGR555BE => AV::BGR555BE,
995 Pixel::BGR555LE => AV::BGR555LE,
996
997 Pixel::VAAPI => AV::VAAPI,
998
999 Pixel::YUV420P16LE => AV::YUV420P16LE,
1000 Pixel::YUV420P16BE => AV::YUV420P16BE,
1001 Pixel::YUV422P16LE => AV::YUV422P16LE,
1002 Pixel::YUV422P16BE => AV::YUV422P16BE,
1003 Pixel::YUV444P16LE => AV::YUV444P16LE,
1004 Pixel::YUV444P16BE => AV::YUV444P16BE,
1005 Pixel::DXVA2_VLD => AV::DXVA2_VLD,
1006
1007 Pixel::RGB444LE => AV::RGB444LE,
1008 Pixel::RGB444BE => AV::RGB444BE,
1009 Pixel::BGR444LE => AV::BGR444LE,
1010 Pixel::BGR444BE => AV::BGR444BE,
1011 Pixel::YA8 => AV::YA8,
1012
1013 Pixel::BGR48BE => AV::BGR48BE,
1014 Pixel::BGR48LE => AV::BGR48LE,
1015
1016 Pixel::YUV420P9BE => AV::YUV420P9BE,
1017 Pixel::YUV420P9LE => AV::YUV420P9LE,
1018 Pixel::YUV420P10BE => AV::YUV420P10BE,
1019 Pixel::YUV420P10LE => AV::YUV420P10LE,
1020 Pixel::YUV422P10BE => AV::YUV422P10BE,
1021 Pixel::YUV422P10LE => AV::YUV422P10LE,
1022 Pixel::YUV444P9BE => AV::YUV444P9BE,
1023 Pixel::YUV444P9LE => AV::YUV444P9LE,
1024 Pixel::YUV444P10BE => AV::YUV444P10BE,
1025 Pixel::YUV444P10LE => AV::YUV444P10LE,
1026 Pixel::YUV422P9BE => AV::YUV422P9BE,
1027 Pixel::YUV422P9LE => AV::YUV422P9LE,
1028
1029 Pixel::GBRP => AV::GBRP,
1030 Pixel::GBRP9BE => AV::GBRP9BE,
1031 Pixel::GBRP9LE => AV::GBRP9LE,
1032 Pixel::GBRP10BE => AV::GBRP10BE,
1033 Pixel::GBRP10LE => AV::GBRP10LE,
1034 Pixel::GBRP16BE => AV::GBRP16BE,
1035 Pixel::GBRP16LE => AV::GBRP16LE,
1036
1037 Pixel::YUVA420P9BE => AV::YUVA420P9BE,
1038 Pixel::YUVA420P9LE => AV::YUVA420P9LE,
1039 Pixel::YUVA422P9BE => AV::YUVA422P9BE,
1040 Pixel::YUVA422P9LE => AV::YUVA422P9LE,
1041 Pixel::YUVA444P9BE => AV::YUVA444P9BE,
1042 Pixel::YUVA444P9LE => AV::YUVA444P9LE,
1043 Pixel::YUVA420P10BE => AV::YUVA420P10BE,
1044 Pixel::YUVA420P10LE => AV::YUVA420P10LE,
1045 Pixel::YUVA422P10BE => AV::YUVA422P10BE,
1046 Pixel::YUVA422P10LE => AV::YUVA422P10LE,
1047 Pixel::YUVA444P10BE => AV::YUVA444P10BE,
1048 Pixel::YUVA444P10LE => AV::YUVA444P10LE,
1049 Pixel::YUVA420P16BE => AV::YUVA420P16BE,
1050 Pixel::YUVA420P16LE => AV::YUVA420P16LE,
1051 Pixel::YUVA422P16BE => AV::YUVA422P16BE,
1052 Pixel::YUVA422P16LE => AV::YUVA422P16LE,
1053 Pixel::YUVA444P16BE => AV::YUVA444P16BE,
1054 Pixel::YUVA444P16LE => AV::YUVA444P16LE,
1055
1056 Pixel::VDPAU => AV::VDPAU,
1057
1058 Pixel::XYZ12LE => AV::XYZ12LE,
1059 Pixel::XYZ12BE => AV::XYZ12BE,
1060 Pixel::NV16 => AV::NV16,
1061 Pixel::NV20LE => AV::NV20LE,
1062 Pixel::NV20BE => AV::NV20BE,
1063
1064 Pixel::RGBA64BE => AV::RGBA64BE,
1065 Pixel::RGBA64LE => AV::RGBA64LE,
1066 Pixel::BGRA64BE => AV::BGRA64BE,
1067 Pixel::BGRA64LE => AV::BGRA64LE,
1068
1069 Pixel::YVYU422 => AV::YVYU422,
1070
1071 Pixel::YA16BE => AV::YA16BE,
1072 Pixel::YA16LE => AV::YA16LE,
1073
1074 Pixel::QSV => AV::QSV,
1075 Pixel::MMAL => AV::MMAL,
1076
1077 Pixel::D3D11VA_VLD => AV::D3D11VA_VLD,
1078
1079 Pixel::CUDA => AV::CUDA,
1080
1081 Pixel::ZRGB => AV::_0RGB,
1082 Pixel::RGBZ => AV::RGB0,
1083 Pixel::ZBGR => AV::_0BGR,
1084 Pixel::BGRZ => AV::BGR0,
1085 Pixel::YUVA444P => AV::YUVA444P,
1086 Pixel::YUVA422P => AV::YUVA422P,
1087
1088 Pixel::YUV420P12BE => AV::YUV420P12BE,
1089 Pixel::YUV420P12LE => AV::YUV420P12LE,
1090 Pixel::YUV420P14BE => AV::YUV420P14BE,
1091 Pixel::YUV420P14LE => AV::YUV420P14LE,
1092 Pixel::YUV422P12BE => AV::YUV422P12BE,
1093 Pixel::YUV422P12LE => AV::YUV422P12LE,
1094 Pixel::YUV422P14BE => AV::YUV422P14BE,
1095 Pixel::YUV422P14LE => AV::YUV422P14LE,
1096 Pixel::YUV444P12BE => AV::YUV444P12BE,
1097 Pixel::YUV444P12LE => AV::YUV444P12LE,
1098 Pixel::YUV444P14BE => AV::YUV444P14BE,
1099 Pixel::YUV444P14LE => AV::YUV444P14LE,
1100 Pixel::GBRP12BE => AV::GBRP12BE,
1101 Pixel::GBRP12LE => AV::GBRP12LE,
1102 Pixel::GBRP14BE => AV::GBRP14BE,
1103 Pixel::GBRP14LE => AV::GBRP14LE,
1104 Pixel::GBRAP => AV::GBRAP,
1105 Pixel::GBRAP16BE => AV::GBRAP16BE,
1106 Pixel::GBRAP16LE => AV::GBRAP16LE,
1107 Pixel::YUVJ411P => AV::YUVJ411P,
1108
1109 Pixel::BAYER_BGGR8 => AV::BAYER_BGGR8,
1110 Pixel::BAYER_RGGB8 => AV::BAYER_RGGB8,
1111 Pixel::BAYER_GBRG8 => AV::BAYER_GBRG8,
1112 Pixel::BAYER_GRBG8 => AV::BAYER_GRBG8,
1113 Pixel::BAYER_BGGR16LE => AV::BAYER_BGGR16LE,
1114 Pixel::BAYER_BGGR16BE => AV::BAYER_BGGR16BE,
1115 Pixel::BAYER_RGGB16LE => AV::BAYER_RGGB16LE,
1116 Pixel::BAYER_RGGB16BE => AV::BAYER_RGGB16BE,
1117 Pixel::BAYER_GBRG16LE => AV::BAYER_GBRG16LE,
1118 Pixel::BAYER_GBRG16BE => AV::BAYER_GBRG16BE,
1119 Pixel::BAYER_GRBG16LE => AV::BAYER_GRBG16LE,
1120 Pixel::BAYER_GRBG16BE => AV::BAYER_GRBG16BE,
1121
1122 Pixel::YUV440P10LE => AV::YUV440P10LE,
1123 Pixel::YUV440P10BE => AV::YUV440P10BE,
1124 Pixel::YUV440P12LE => AV::YUV440P12LE,
1125 Pixel::YUV440P12BE => AV::YUV440P12BE,
1126 Pixel::AYUV64LE => AV::AYUV64LE,
1127 Pixel::AYUV64BE => AV::AYUV64BE,
1128
1129 Pixel::VIDEOTOOLBOX => AV::VIDEOTOOLBOX,
1130
1131 #[cfg(not(feature = "ffmpeg_7_0"))]
1133 Pixel::XVMC => AV::XVMC,
1134
1135 Pixel::RGB32 => AV::RGB32,
1136 Pixel::RGB32_1 => AV::RGB32_1,
1137 Pixel::BGR32 => AV::BGR32,
1138 Pixel::BGR32_1 => AV::BGR32_1,
1139 Pixel::ZRGB32 => AV::_0RGB32,
1140 Pixel::ZBGR32 => AV::_0BGR32,
1141
1142 Pixel::GRAY16 => AV::GRAY16,
1143 Pixel::YA16 => AV::YA16,
1144 Pixel::RGB48 => AV::RGB48,
1145 Pixel::RGB565 => AV::RGB565,
1146 Pixel::RGB555 => AV::RGB555,
1147 Pixel::RGB444 => AV::RGB444,
1148 Pixel::BGR48 => AV::BGR48,
1149 Pixel::BGR565 => AV::BGR565,
1150 Pixel::BGR555 => AV::BGR555,
1151 Pixel::BGR444 => AV::BGR444,
1152
1153 Pixel::YUV420P9 => AV::YUV420P9,
1154 Pixel::YUV422P9 => AV::YUV422P9,
1155 Pixel::YUV444P9 => AV::YUV444P9,
1156 Pixel::YUV420P10 => AV::YUV420P10,
1157 Pixel::YUV422P10 => AV::YUV422P10,
1158 Pixel::YUV440P10 => AV::YUV440P10,
1159 Pixel::YUV444P10 => AV::YUV444P10,
1160 Pixel::YUV420P12 => AV::YUV420P12,
1161 Pixel::YUV422P12 => AV::YUV422P12,
1162 Pixel::YUV440P12 => AV::YUV440P12,
1163 Pixel::YUV444P12 => AV::YUV444P12,
1164 Pixel::YUV420P14 => AV::YUV420P14,
1165 Pixel::YUV422P14 => AV::YUV422P14,
1166 Pixel::YUV444P14 => AV::YUV444P14,
1167 Pixel::YUV420P16 => AV::YUV420P16,
1168 Pixel::YUV422P16 => AV::YUV422P16,
1169 Pixel::YUV444P16 => AV::YUV444P16,
1170
1171 Pixel::GBRP9 => AV::GBRP9,
1172 Pixel::GBRP10 => AV::GBRP10,
1173 Pixel::GBRP12 => AV::GBRP12,
1174 Pixel::GBRP14 => AV::GBRP14,
1175 Pixel::GBRP16 => AV::GBRP16,
1176 Pixel::GBRAP16 => AV::GBRAP16,
1177
1178 Pixel::BAYER_BGGR16 => AV::BAYER_BGGR16,
1179 Pixel::BAYER_RGGB16 => AV::BAYER_RGGB16,
1180 Pixel::BAYER_GBRG16 => AV::BAYER_GBRG16,
1181 Pixel::BAYER_GRBG16 => AV::BAYER_GRBG16,
1182
1183 Pixel::YUVA420P9 => AV::YUVA420P9,
1184 Pixel::YUVA422P9 => AV::YUVA422P9,
1185 Pixel::YUVA444P9 => AV::YUVA444P9,
1186 Pixel::YUVA420P10 => AV::YUVA420P10,
1187 Pixel::YUVA422P10 => AV::YUVA422P10,
1188 Pixel::YUVA444P10 => AV::YUVA444P10,
1189 Pixel::YUVA420P16 => AV::YUVA420P16,
1190 Pixel::YUVA422P16 => AV::YUVA422P16,
1191 Pixel::YUVA444P16 => AV::YUVA444P16,
1192
1193 Pixel::XYZ12 => AV::XYZ12,
1194 Pixel::NV20 => AV::NV20,
1195 Pixel::AYUV64 => AV::AYUV64,
1196
1197 Pixel::P010LE => AV::P010LE,
1198 Pixel::P010BE => AV::P010BE,
1199 Pixel::GBRAP12BE => AV::GBRAP12BE,
1200 Pixel::GBRAP12LE => AV::GBRAP12LE,
1201 Pixel::GBRAP10LE => AV::GBRAP10LE,
1202 Pixel::GBRAP10BE => AV::GBRAP10BE,
1203 Pixel::MEDIACODEC => AV::MEDIACODEC,
1204 Pixel::GRAY12BE => AV::GRAY12BE,
1205 Pixel::GRAY12LE => AV::GRAY12LE,
1206 Pixel::GRAY10BE => AV::GRAY10BE,
1207 Pixel::GRAY10LE => AV::GRAY10LE,
1208 Pixel::P016LE => AV::P016LE,
1209 Pixel::P016BE => AV::P016BE,
1210
1211 Pixel::D3D11 => AV::D3D11,
1212 Pixel::GRAY9BE => AV::GRAY9BE,
1213 Pixel::GRAY9LE => AV::GRAY9LE,
1214 Pixel::GBRPF32BE => AV::GBRPF32BE,
1215 Pixel::GBRPF32LE => AV::GBRPF32LE,
1216 Pixel::GBRAPF32BE => AV::GBRAPF32BE,
1217 Pixel::GBRAPF32LE => AV::GBRAPF32LE,
1218 Pixel::DRM_PRIME => AV::DRM_PRIME,
1219
1220 Pixel::OPENCL => AV::OPENCL,
1221
1222 Pixel::GRAY14BE => AV::GRAY14BE,
1223 Pixel::GRAY14LE => AV::GRAY14LE,
1224 Pixel::GRAYF32BE => AV::GRAYF32BE,
1225 Pixel::GRAYF32LE => AV::GRAYF32LE,
1226
1227 Pixel::YUVA422P12BE => AV::YUVA422P12BE,
1228 Pixel::YUVA422P12LE => AV::YUVA422P12LE,
1229 Pixel::YUVA444P12BE => AV::YUVA444P12BE,
1230 Pixel::YUVA444P12LE => AV::YUVA444P12LE,
1231 Pixel::NV24 => AV::NV24,
1232 Pixel::NV42 => AV::NV42,
1233
1234 Pixel::VULKAN => AV::VULKAN,
1235 Pixel::Y210BE => AV::Y210BE,
1236 Pixel::Y210LE => AV::Y210LE,
1237
1238 Pixel::X2RGB10LE => AV::X2RGB10LE,
1239 Pixel::X2RGB10BE => AV::X2RGB10BE,
1240
1241 Pixel::X2BGR10LE => AV::X2BGR10LE,
1242 Pixel::X2BGR10BE => AV::X2BGR10BE,
1243 Pixel::P210BE => AV::P210BE,
1244 Pixel::P210LE => AV::P210LE,
1245 Pixel::P410BE => AV::P410BE,
1246 Pixel::P410LE => AV::P410LE,
1247 Pixel::P216BE => AV::P216BE,
1248 Pixel::P216LE => AV::P216LE,
1249 Pixel::P416BE => AV::P416BE,
1250 Pixel::P416LE => AV::P416LE,
1251
1252 #[cfg(feature = "ffmpeg_6_0")]
1253 Pixel::VUYA => AV::VUYA,
1254 #[cfg(feature = "ffmpeg_6_0")]
1255 Pixel::RGBAF16BE => AV::RGBAF16BE,
1256 #[cfg(feature = "ffmpeg_6_0")]
1257 Pixel::RGBAF16LE => AV::RGBAF16LE,
1258 #[cfg(feature = "ffmpeg_6_0")]
1259 Pixel::VUYX => AV::VUYX,
1260 #[cfg(feature = "ffmpeg_6_0")]
1261 Pixel::P012LE => AV::P012LE,
1262 #[cfg(feature = "ffmpeg_6_0")]
1263 Pixel::P012BE => AV::P012BE,
1264 #[cfg(feature = "ffmpeg_6_0")]
1265 Pixel::Y212BE => AV::Y212BE,
1266 #[cfg(feature = "ffmpeg_6_0")]
1267 Pixel::Y212LE => AV::Y212LE,
1268 #[cfg(feature = "ffmpeg_6_0")]
1269 Pixel::XV30BE => AV::XV30BE,
1270 #[cfg(feature = "ffmpeg_6_0")]
1271 Pixel::XV30LE => AV::XV30LE,
1272 #[cfg(feature = "ffmpeg_6_0")]
1273 Pixel::XV36BE => AV::XV36BE,
1274 #[cfg(feature = "ffmpeg_6_0")]
1275 Pixel::XV36LE => AV::XV36LE,
1276 #[cfg(feature = "ffmpeg_6_0")]
1277 Pixel::RGBF32BE => AV::RGBF32BE,
1278 #[cfg(feature = "ffmpeg_6_0")]
1279 Pixel::RGBF32LE => AV::RGBF32LE,
1280 #[cfg(feature = "ffmpeg_6_0")]
1281 Pixel::RGBAF32BE => AV::RGBAF32BE,
1282 #[cfg(feature = "ffmpeg_6_0")]
1283 Pixel::RGBAF32LE => AV::RGBAF32LE,
1284
1285 #[cfg(feature = "ffmpeg_6_1")]
1286 Pixel::P212BE => AV::P212BE,
1287 #[cfg(feature = "ffmpeg_6_1")]
1288 Pixel::P212LE => AV::P212LE,
1289 #[cfg(feature = "ffmpeg_6_1")]
1290 Pixel::P412BE => AV::P412BE,
1291 #[cfg(feature = "ffmpeg_6_1")]
1292 Pixel::P412LE => AV::P412LE,
1293 #[cfg(feature = "ffmpeg_6_1")]
1294 Pixel::GBRAP14BE => AV::GBRAP14BE,
1295 #[cfg(feature = "ffmpeg_6_1")]
1296 Pixel::GBRAP14LE => AV::GBRAP14LE,
1297
1298 #[cfg(feature = "ffmpeg_7_0")]
1299 Pixel::D3D12 => AV::D3D12,
1300
1301 #[cfg(feature = "ffmpeg_8_0")]
1302 Pixel::AYUV => AV::AYUV,
1303
1304 #[cfg(feature = "ffmpeg_8_0")]
1305 Pixel::UYVA => AV::UYVA,
1306
1307 #[cfg(feature = "ffmpeg_8_0")]
1308 Pixel::VYU444 => AV::VYU444,
1309
1310 #[cfg(feature = "ffmpeg_8_0")]
1311 Pixel::V30XBE => AV::V30XBE,
1312 #[cfg(feature = "ffmpeg_8_0")]
1313 Pixel::V30XLE => AV::V30XLE,
1314
1315 #[cfg(feature = "ffmpeg_8_0")]
1316 Pixel::RGBF16BE => AV::RGBF16BE,
1317 #[cfg(feature = "ffmpeg_8_0")]
1318 Pixel::RGBF16LE => AV::RGBF16LE,
1319
1320 #[cfg(feature = "ffmpeg_8_0")]
1321 Pixel::RGBA128BE => AV::RGBA128BE,
1322 #[cfg(feature = "ffmpeg_8_0")]
1323 Pixel::RGBA128LE => AV::RGBA128LE,
1324
1325 #[cfg(feature = "ffmpeg_8_0")]
1326 Pixel::RGB96BE => AV::RGB96BE,
1327 #[cfg(feature = "ffmpeg_8_0")]
1328 Pixel::RGB96LE => AV::RGB96LE,
1329
1330 #[cfg(feature = "ffmpeg_8_0")]
1331 Pixel::Y216BE => AV::Y216BE,
1332 #[cfg(feature = "ffmpeg_8_0")]
1333 Pixel::Y216LE => AV::Y216LE,
1334
1335 #[cfg(feature = "ffmpeg_8_0")]
1336 Pixel::XV48BE => AV::XV48BE,
1337 #[cfg(feature = "ffmpeg_8_0")]
1338 Pixel::XV48LE => AV::XV48LE,
1339
1340 #[cfg(feature = "ffmpeg_8_0")]
1341 Pixel::GBRPF16BE => AV::GBRPF16BE,
1342 #[cfg(feature = "ffmpeg_8_0")]
1343 Pixel::GBRPF16LE => AV::GBRPF16LE,
1344 #[cfg(feature = "ffmpeg_8_0")]
1345 Pixel::GBRAPF16BE => AV::GBRAPF16BE,
1346 #[cfg(feature = "ffmpeg_8_0")]
1347 Pixel::GBRAPF16LE => AV::GBRAPF16LE,
1348
1349 #[cfg(feature = "ffmpeg_8_0")]
1350 Pixel::GRAYF16BE => AV::GRAYF16BE,
1351 #[cfg(feature = "ffmpeg_8_0")]
1352 Pixel::GRAYF16LE => AV::GRAYF16LE,
1353
1354 #[cfg(feature = "ffmpeg_8_0")]
1355 Pixel::AMF_SURFACE => AV::AMF_SURFACE,
1356
1357 #[cfg(feature = "ffmpeg_8_0")]
1358 Pixel::GRAY32BE => AV::GRAY32BE,
1359 #[cfg(feature = "ffmpeg_8_0")]
1360 Pixel::GRAY32LE => AV::GRAY32LE,
1361
1362 #[cfg(feature = "ffmpeg_8_0")]
1363 Pixel::YAF32BE => AV::YAF32BE,
1364 #[cfg(feature = "ffmpeg_8_0")]
1365 Pixel::YAF32LE => AV::YAF32LE,
1366
1367 #[cfg(feature = "ffmpeg_8_0")]
1368 Pixel::YAF16BE => AV::YAF16BE,
1369 #[cfg(feature = "ffmpeg_8_0")]
1370 Pixel::YAF16LE => AV::YAF16LE,
1371
1372 #[cfg(feature = "ffmpeg_8_0")]
1373 Pixel::GBRAP32BE => AV::GBRAP32BE,
1374 #[cfg(feature = "ffmpeg_8_0")]
1375 Pixel::GBRAP32LE => AV::GBRAP32LE,
1376
1377 #[cfg(feature = "ffmpeg_8_0")]
1378 Pixel::YUV444P10MSBBE => AV::YUV444P10MSBBE,
1379 #[cfg(feature = "ffmpeg_8_0")]
1380 Pixel::YUV444P10MSBLE => AV::YUV444P10MSBLE,
1381 #[cfg(feature = "ffmpeg_8_0")]
1382 Pixel::YUV444P12MSBBE => AV::YUV444P12MSBBE,
1383 #[cfg(feature = "ffmpeg_8_0")]
1384 Pixel::YUV444P12MSBLE => AV::YUV444P12MSBLE,
1385 #[cfg(feature = "ffmpeg_8_0")]
1386 Pixel::GBRP10MSBBE => AV::GBRP10MSBBE,
1387 #[cfg(feature = "ffmpeg_8_0")]
1388 Pixel::GBRP10MSBLE => AV::GBRP10MSBLE,
1389 #[cfg(feature = "ffmpeg_8_0")]
1390 Pixel::GBRP12MSBBE => AV::GBRP12MSBBE,
1391 #[cfg(feature = "ffmpeg_8_0")]
1392 Pixel::GBRP12MSBLE => AV::GBRP12MSBLE,
1393
1394 #[cfg(feature = "ffmpeg_8_0")]
1395 Pixel::OHCODEC => AV::OHCODEC,
1396
1397 #[cfg(feature = "rpi")]
1398 Pixel::RPI => AV::RPI,
1399 #[cfg(feature = "rpi")]
1400 Pixel::SAND128 => AV::SAND128,
1401 #[cfg(feature = "rpi")]
1402 Pixel::SAND64_10 => AV::SAND64_10,
1403 #[cfg(feature = "rpi")]
1404 Pixel::SAND64_16 => AV::SAND64_16,
1405 #[cfg(feature = "rpi")]
1406 Pixel::RPI4_8 => AV::RPI4_8,
1407 #[cfg(feature = "rpi")]
1408 Pixel::RPI4_10 => AV::RPI4_10,
1409 }
1410 }
1411}
1412
1413#[derive(Debug)]
1414pub enum ParsePixelError {
1415 NulError(NulError),
1416 UnknownFormat,
1417}
1418
1419impl fmt::Display for ParsePixelError {
1420 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
1421 match *self {
1422 ParsePixelError::NulError(ref e) => e.fmt(f),
1423 ParsePixelError::UnknownFormat => write!(f, "unknown pixel format"),
1424 }
1425 }
1426}
1427
1428impl error::Error for ParsePixelError {
1429 fn cause(&self) -> Option<&dyn error::Error> {
1430 match *self {
1431 ParsePixelError::NulError(ref e) => Some(e),
1432 ParsePixelError::UnknownFormat => None,
1433 }
1434 }
1435}
1436
1437impl From<NulError> for ParsePixelError {
1438 fn from(x: NulError) -> ParsePixelError {
1439 ParsePixelError::NulError(x)
1440 }
1441}
1442
1443impl FromStr for Pixel {
1444 type Err = ParsePixelError;
1445
1446 #[inline(always)]
1447 fn from_str(s: &str) -> Result<Pixel, ParsePixelError> {
1448 let cstring = CString::new(s)?;
1449 let format = unsafe { av_get_pix_fmt(cstring.as_ptr()) }.into();
1450
1451 if format == Pixel::None {
1452 Err(ParsePixelError::UnknownFormat)
1453 } else {
1454 Ok(format)
1455 }
1456 }
1457}