ffmpeg_next/util/format/
pixel.rs

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