playa_ffmpeg/util/format/
pixel.rs

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