Skip to main content

ffmpeg_next/util/format/
pixel.rs

1use std::error;
2use std::ffi::{CStr, CString, NulError};
3use std::fmt;
4use std::str::{FromStr, from_utf8_unchecked};
5
6use crate::ffi::AVPixelFormat::*;
7use crate::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    pub fn bits_per_pixel(&self) -> i32 {
577        unsafe { av_get_bits_per_pixel(self.as_ptr()) }
578    }
579}
580
581impl From<AVPixelFormat> for Pixel {
582    #[inline]
583    fn from(value: AVPixelFormat) -> Self {
584        match value {
585            AV_PIX_FMT_NONE => Pixel::None,
586
587            AV_PIX_FMT_YUV420P => Pixel::YUV420P,
588            AV_PIX_FMT_YUYV422 => Pixel::YUYV422,
589            AV_PIX_FMT_RGB24 => Pixel::RGB24,
590            AV_PIX_FMT_BGR24 => Pixel::BGR24,
591            AV_PIX_FMT_YUV422P => Pixel::YUV422P,
592            AV_PIX_FMT_YUV444P => Pixel::YUV444P,
593            AV_PIX_FMT_YUV410P => Pixel::YUV410P,
594            AV_PIX_FMT_YUV411P => Pixel::YUV411P,
595            AV_PIX_FMT_GRAY8 => Pixel::GRAY8,
596            AV_PIX_FMT_MONOWHITE => Pixel::MonoWhite,
597            AV_PIX_FMT_MONOBLACK => Pixel::MonoBlack,
598            AV_PIX_FMT_PAL8 => Pixel::PAL8,
599            AV_PIX_FMT_YUVJ420P => Pixel::YUVJ420P,
600            AV_PIX_FMT_YUVJ422P => Pixel::YUVJ422P,
601            AV_PIX_FMT_YUVJ444P => Pixel::YUVJ444P,
602            #[cfg(all(feature = "ffmpeg_4_0", not(feature = "ffmpeg_7_0")))]
603            AV_PIX_FMT_XVMC => Pixel::XVMC,
604            #[cfg(all(feature = "ff_api_xvmc", not(feature = "ffmpeg_5_0")))]
605            AV_PIX_FMT_XVMC_MPEG2_MC => Pixel::XVMC_MPEG2_MC,
606            #[cfg(all(feature = "ff_api_xvmc", not(feature = "ffmpeg_5_0")))]
607            AV_PIX_FMT_XVMC_MPEG2_IDCT => Pixel::XVMC_MPEG2_IDCT,
608            AV_PIX_FMT_UYVY422 => Pixel::UYVY422,
609            AV_PIX_FMT_UYYVYY411 => Pixel::UYYVYY411,
610            AV_PIX_FMT_BGR8 => Pixel::BGR8,
611            AV_PIX_FMT_BGR4 => Pixel::BGR4,
612            AV_PIX_FMT_BGR4_BYTE => Pixel::BGR4_BYTE,
613            AV_PIX_FMT_RGB8 => Pixel::RGB8,
614            AV_PIX_FMT_RGB4 => Pixel::RGB4,
615            AV_PIX_FMT_RGB4_BYTE => Pixel::RGB4_BYTE,
616            AV_PIX_FMT_NV12 => Pixel::NV12,
617            AV_PIX_FMT_NV21 => Pixel::NV21,
618
619            AV_PIX_FMT_ARGB => Pixel::ARGB,
620            AV_PIX_FMT_RGBA => Pixel::RGBA,
621            AV_PIX_FMT_ABGR => Pixel::ABGR,
622            AV_PIX_FMT_BGRA => Pixel::BGRA,
623
624            AV_PIX_FMT_GRAY16BE => Pixel::GRAY16BE,
625            AV_PIX_FMT_GRAY16LE => Pixel::GRAY16LE,
626            AV_PIX_FMT_YUV440P => Pixel::YUV440P,
627            AV_PIX_FMT_YUVJ440P => Pixel::YUVJ440P,
628            AV_PIX_FMT_YUVA420P => Pixel::YUVA420P,
629            #[cfg(feature = "ff_api_vdpau")]
630            AV_PIX_FMT_VDPAU_H264 => Pixel::VDPAU_H264,
631            #[cfg(feature = "ff_api_vdpau")]
632            AV_PIX_FMT_VDPAU_MPEG1 => Pixel::VDPAU_MPEG1,
633            #[cfg(feature = "ff_api_vdpau")]
634            AV_PIX_FMT_VDPAU_MPEG2 => Pixel::VDPAU_MPEG2,
635            #[cfg(feature = "ff_api_vdpau")]
636            AV_PIX_FMT_VDPAU_WMV3 => Pixel::VDPAU_WMV3,
637            #[cfg(feature = "ff_api_vdpau")]
638            AV_PIX_FMT_VDPAU_VC1 => Pixel::VDPAU_VC1,
639            AV_PIX_FMT_RGB48BE => Pixel::RGB48BE,
640            AV_PIX_FMT_RGB48LE => Pixel::RGB48LE,
641
642            AV_PIX_FMT_RGB565BE => Pixel::RGB565BE,
643            AV_PIX_FMT_RGB565LE => Pixel::RGB565LE,
644            AV_PIX_FMT_RGB555BE => Pixel::RGB555BE,
645            AV_PIX_FMT_RGB555LE => Pixel::RGB555LE,
646
647            AV_PIX_FMT_BGR565BE => Pixel::BGR565BE,
648            AV_PIX_FMT_BGR565LE => Pixel::BGR565LE,
649            AV_PIX_FMT_BGR555BE => Pixel::BGR555BE,
650            AV_PIX_FMT_BGR555LE => Pixel::BGR555LE,
651
652            #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
653            AV_PIX_FMT_VAAPI_MOCO => Pixel::VAAPI_MOCO,
654            #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
655            AV_PIX_FMT_VAAPI_IDCT => Pixel::VAAPI_IDCT,
656            #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
657            AV_PIX_FMT_VAAPI_VLD => Pixel::VAAPI_VLD,
658            #[cfg(any(not(feature = "ff_api_vaapi"), feature = "ffmpeg_5_0"))]
659            AV_PIX_FMT_VAAPI => Pixel::VAAPI,
660
661            AV_PIX_FMT_YUV420P16LE => Pixel::YUV420P16LE,
662            AV_PIX_FMT_YUV420P16BE => Pixel::YUV420P16BE,
663            AV_PIX_FMT_YUV422P16LE => Pixel::YUV422P16LE,
664            AV_PIX_FMT_YUV422P16BE => Pixel::YUV422P16BE,
665            AV_PIX_FMT_YUV444P16LE => Pixel::YUV444P16LE,
666            AV_PIX_FMT_YUV444P16BE => Pixel::YUV444P16BE,
667            #[cfg(feature = "ff_api_vdpau")]
668            AV_PIX_FMT_VDPAU_MPEG4 => Pixel::VDPAU_MPEG4,
669            AV_PIX_FMT_DXVA2_VLD => Pixel::DXVA2_VLD,
670
671            AV_PIX_FMT_RGB444LE => Pixel::RGB444LE,
672            AV_PIX_FMT_RGB444BE => Pixel::RGB444BE,
673            AV_PIX_FMT_BGR444LE => Pixel::BGR444LE,
674            AV_PIX_FMT_BGR444BE => Pixel::BGR444BE,
675            AV_PIX_FMT_YA8 => Pixel::YA8,
676
677            AV_PIX_FMT_BGR48BE => Pixel::BGR48BE,
678            AV_PIX_FMT_BGR48LE => Pixel::BGR48LE,
679
680            AV_PIX_FMT_YUV420P9BE => Pixel::YUV420P9BE,
681            AV_PIX_FMT_YUV420P9LE => Pixel::YUV420P9LE,
682            AV_PIX_FMT_YUV420P10BE => Pixel::YUV420P10BE,
683            AV_PIX_FMT_YUV420P10LE => Pixel::YUV420P10LE,
684            AV_PIX_FMT_YUV422P10BE => Pixel::YUV422P10BE,
685            AV_PIX_FMT_YUV422P10LE => Pixel::YUV422P10LE,
686            AV_PIX_FMT_YUV444P9BE => Pixel::YUV444P9BE,
687            AV_PIX_FMT_YUV444P9LE => Pixel::YUV444P9LE,
688            AV_PIX_FMT_YUV444P10BE => Pixel::YUV444P10BE,
689            AV_PIX_FMT_YUV444P10LE => Pixel::YUV444P10LE,
690            AV_PIX_FMT_YUV422P9BE => Pixel::YUV422P9BE,
691            AV_PIX_FMT_YUV422P9LE => Pixel::YUV422P9LE,
692            #[cfg(not(feature = "ffmpeg_4_0"))]
693            AV_PIX_FMT_VDA_VLD => Pixel::VDA_VLD,
694
695            AV_PIX_FMT_GBRP => Pixel::GBRP,
696            AV_PIX_FMT_GBRP9BE => Pixel::GBRP9BE,
697            AV_PIX_FMT_GBRP9LE => Pixel::GBRP9LE,
698            AV_PIX_FMT_GBRP10BE => Pixel::GBRP10BE,
699            AV_PIX_FMT_GBRP10LE => Pixel::GBRP10LE,
700            AV_PIX_FMT_GBRP16BE => Pixel::GBRP16BE,
701            AV_PIX_FMT_GBRP16LE => Pixel::GBRP16LE,
702
703            AV_PIX_FMT_YUVA420P9BE => Pixel::YUVA420P9BE,
704            AV_PIX_FMT_YUVA420P9LE => Pixel::YUVA420P9LE,
705            AV_PIX_FMT_YUVA422P9BE => Pixel::YUVA422P9BE,
706            AV_PIX_FMT_YUVA422P9LE => Pixel::YUVA422P9LE,
707            AV_PIX_FMT_YUVA444P9BE => Pixel::YUVA444P9BE,
708            AV_PIX_FMT_YUVA444P9LE => Pixel::YUVA444P9LE,
709            AV_PIX_FMT_YUVA420P10BE => Pixel::YUVA420P10BE,
710            AV_PIX_FMT_YUVA420P10LE => Pixel::YUVA420P10LE,
711            AV_PIX_FMT_YUVA422P10BE => Pixel::YUVA422P10BE,
712            AV_PIX_FMT_YUVA422P10LE => Pixel::YUVA422P10LE,
713            AV_PIX_FMT_YUVA444P10BE => Pixel::YUVA444P10BE,
714            AV_PIX_FMT_YUVA444P10LE => Pixel::YUVA444P10LE,
715            AV_PIX_FMT_YUVA420P16BE => Pixel::YUVA420P16BE,
716            AV_PIX_FMT_YUVA420P16LE => Pixel::YUVA420P16LE,
717            AV_PIX_FMT_YUVA422P16BE => Pixel::YUVA422P16BE,
718            AV_PIX_FMT_YUVA422P16LE => Pixel::YUVA422P16LE,
719            AV_PIX_FMT_YUVA444P16BE => Pixel::YUVA444P16BE,
720            AV_PIX_FMT_YUVA444P16LE => Pixel::YUVA444P16LE,
721
722            AV_PIX_FMT_VDPAU => Pixel::VDPAU,
723
724            AV_PIX_FMT_XYZ12LE => Pixel::XYZ12LE,
725            AV_PIX_FMT_XYZ12BE => Pixel::XYZ12BE,
726            AV_PIX_FMT_NV16 => Pixel::NV16,
727            AV_PIX_FMT_NV20LE => Pixel::NV20LE,
728            AV_PIX_FMT_NV20BE => Pixel::NV20BE,
729
730            AV_PIX_FMT_RGBA64BE => Pixel::RGBA64BE,
731            AV_PIX_FMT_RGBA64LE => Pixel::RGBA64LE,
732            AV_PIX_FMT_BGRA64BE => Pixel::BGRA64BE,
733            AV_PIX_FMT_BGRA64LE => Pixel::BGRA64LE,
734
735            AV_PIX_FMT_YVYU422 => Pixel::YVYU422,
736
737            #[cfg(not(feature = "ffmpeg_4_0"))]
738            AV_PIX_FMT_VDA => Pixel::VDA,
739
740            AV_PIX_FMT_YA16BE => Pixel::YA16BE,
741            AV_PIX_FMT_YA16LE => Pixel::YA16LE,
742
743            AV_PIX_FMT_QSV => Pixel::QSV,
744            AV_PIX_FMT_MMAL => Pixel::MMAL,
745
746            AV_PIX_FMT_D3D11VA_VLD => Pixel::D3D11VA_VLD,
747
748            AV_PIX_FMT_CUDA => Pixel::CUDA,
749
750            AV_PIX_FMT_0RGB => Pixel::ZRGB,
751            AV_PIX_FMT_RGB0 => Pixel::RGBZ,
752            AV_PIX_FMT_0BGR => Pixel::ZBGR,
753            AV_PIX_FMT_BGR0 => Pixel::BGRZ,
754            AV_PIX_FMT_YUVA444P => Pixel::YUVA444P,
755            AV_PIX_FMT_YUVA422P => Pixel::YUVA422P,
756
757            AV_PIX_FMT_YUV420P12BE => Pixel::YUV420P12BE,
758            AV_PIX_FMT_YUV420P12LE => Pixel::YUV420P12LE,
759            AV_PIX_FMT_YUV420P14BE => Pixel::YUV420P14BE,
760            AV_PIX_FMT_YUV420P14LE => Pixel::YUV420P14LE,
761            AV_PIX_FMT_YUV422P12BE => Pixel::YUV422P12BE,
762            AV_PIX_FMT_YUV422P12LE => Pixel::YUV422P12LE,
763            AV_PIX_FMT_YUV422P14BE => Pixel::YUV422P14BE,
764            AV_PIX_FMT_YUV422P14LE => Pixel::YUV422P14LE,
765            AV_PIX_FMT_YUV444P12BE => Pixel::YUV444P12BE,
766            AV_PIX_FMT_YUV444P12LE => Pixel::YUV444P12LE,
767            AV_PIX_FMT_YUV444P14BE => Pixel::YUV444P14BE,
768            AV_PIX_FMT_YUV444P14LE => Pixel::YUV444P14LE,
769            AV_PIX_FMT_GBRP12BE => Pixel::GBRP12BE,
770            AV_PIX_FMT_GBRP12LE => Pixel::GBRP12LE,
771            AV_PIX_FMT_GBRP14BE => Pixel::GBRP14BE,
772            AV_PIX_FMT_GBRP14LE => Pixel::GBRP14LE,
773            AV_PIX_FMT_GBRAP => Pixel::GBRAP,
774            AV_PIX_FMT_GBRAP16BE => Pixel::GBRAP16BE,
775            AV_PIX_FMT_GBRAP16LE => Pixel::GBRAP16LE,
776            AV_PIX_FMT_YUVJ411P => Pixel::YUVJ411P,
777
778            AV_PIX_FMT_BAYER_BGGR8 => Pixel::BAYER_BGGR8,
779            AV_PIX_FMT_BAYER_RGGB8 => Pixel::BAYER_RGGB8,
780            AV_PIX_FMT_BAYER_GBRG8 => Pixel::BAYER_GBRG8,
781            AV_PIX_FMT_BAYER_GRBG8 => Pixel::BAYER_GRBG8,
782            AV_PIX_FMT_BAYER_BGGR16LE => Pixel::BAYER_BGGR16LE,
783            AV_PIX_FMT_BAYER_BGGR16BE => Pixel::BAYER_BGGR16BE,
784            AV_PIX_FMT_BAYER_RGGB16LE => Pixel::BAYER_RGGB16LE,
785            AV_PIX_FMT_BAYER_RGGB16BE => Pixel::BAYER_RGGB16BE,
786            AV_PIX_FMT_BAYER_GBRG16LE => Pixel::BAYER_GBRG16LE,
787            AV_PIX_FMT_BAYER_GBRG16BE => Pixel::BAYER_GBRG16BE,
788            AV_PIX_FMT_BAYER_GRBG16LE => Pixel::BAYER_GRBG16LE,
789            AV_PIX_FMT_BAYER_GRBG16BE => Pixel::BAYER_GRBG16BE,
790
791            AV_PIX_FMT_YUV440P10LE => Pixel::YUV440P10LE,
792            AV_PIX_FMT_YUV440P10BE => Pixel::YUV440P10BE,
793            AV_PIX_FMT_YUV440P12LE => Pixel::YUV440P12LE,
794            AV_PIX_FMT_YUV440P12BE => Pixel::YUV440P12BE,
795            AV_PIX_FMT_AYUV64LE => Pixel::AYUV64LE,
796            AV_PIX_FMT_AYUV64BE => Pixel::AYUV64BE,
797
798            AV_PIX_FMT_VIDEOTOOLBOX => Pixel::VIDEOTOOLBOX,
799
800            AV_PIX_FMT_P010LE => Pixel::P010LE,
801            AV_PIX_FMT_P010BE => Pixel::P010BE,
802            AV_PIX_FMT_GBRAP12BE => Pixel::GBRAP12BE,
803            AV_PIX_FMT_GBRAP12LE => Pixel::GBRAP12LE,
804            AV_PIX_FMT_GBRAP10LE => Pixel::GBRAP10LE,
805            AV_PIX_FMT_GBRAP10BE => Pixel::GBRAP10BE,
806            AV_PIX_FMT_MEDIACODEC => Pixel::MEDIACODEC,
807            AV_PIX_FMT_GRAY12BE => Pixel::GRAY12BE,
808            AV_PIX_FMT_GRAY12LE => Pixel::GRAY12LE,
809            AV_PIX_FMT_GRAY10BE => Pixel::GRAY10BE,
810            AV_PIX_FMT_GRAY10LE => Pixel::GRAY10LE,
811            AV_PIX_FMT_P016LE => Pixel::P016LE,
812            AV_PIX_FMT_P016BE => Pixel::P016BE,
813
814            AV_PIX_FMT_NB => Pixel::None,
815
816            AV_PIX_FMT_D3D11 => Pixel::D3D11,
817            AV_PIX_FMT_GRAY9BE => Pixel::GRAY9BE,
818            AV_PIX_FMT_GRAY9LE => Pixel::GRAY9LE,
819            AV_PIX_FMT_GBRPF32BE => Pixel::GBRPF32BE,
820            AV_PIX_FMT_GBRPF32LE => Pixel::GBRPF32LE,
821            AV_PIX_FMT_GBRAPF32BE => Pixel::GBRAPF32BE,
822            AV_PIX_FMT_GBRAPF32LE => Pixel::GBRAPF32LE,
823            AV_PIX_FMT_DRM_PRIME => Pixel::DRM_PRIME,
824
825            #[cfg(feature = "ffmpeg_4_0")]
826            AV_PIX_FMT_OPENCL => Pixel::OPENCL,
827
828            #[cfg(feature = "ffmpeg_4_1")]
829            AV_PIX_FMT_GRAY14BE => Pixel::GRAY14BE,
830            #[cfg(feature = "ffmpeg_4_1")]
831            AV_PIX_FMT_GRAY14LE => Pixel::GRAY14LE,
832            #[cfg(feature = "ffmpeg_4_1")]
833            AV_PIX_FMT_GRAYF32BE => Pixel::GRAYF32BE,
834            #[cfg(feature = "ffmpeg_4_1")]
835            AV_PIX_FMT_GRAYF32LE => Pixel::GRAYF32LE,
836
837            #[cfg(feature = "ffmpeg_4_2")]
838            AV_PIX_FMT_YUVA422P12BE => Pixel::YUVA422P12BE,
839            #[cfg(feature = "ffmpeg_4_2")]
840            AV_PIX_FMT_YUVA422P12LE => Pixel::YUVA422P12LE,
841            #[cfg(feature = "ffmpeg_4_2")]
842            AV_PIX_FMT_YUVA444P12BE => Pixel::YUVA444P12BE,
843            #[cfg(feature = "ffmpeg_4_2")]
844            AV_PIX_FMT_YUVA444P12LE => Pixel::YUVA444P12LE,
845            #[cfg(feature = "ffmpeg_4_2")]
846            AV_PIX_FMT_NV24 => Pixel::NV24,
847            #[cfg(feature = "ffmpeg_4_2")]
848            AV_PIX_FMT_NV42 => Pixel::NV42,
849
850            #[cfg(feature = "ffmpeg_4_3")]
851            AV_PIX_FMT_VULKAN => Pixel::VULKAN,
852            #[cfg(feature = "ffmpeg_4_3")]
853            AV_PIX_FMT_Y210BE => Pixel::Y210BE,
854            #[cfg(feature = "ffmpeg_4_3")]
855            AV_PIX_FMT_Y210LE => Pixel::Y210LE,
856
857            #[cfg(feature = "ffmpeg_4_4")]
858            AV_PIX_FMT_X2RGB10LE => Pixel::X2RGB10LE,
859            #[cfg(feature = "ffmpeg_4_4")]
860            AV_PIX_FMT_X2RGB10BE => Pixel::X2RGB10BE,
861
862            #[cfg(feature = "ffmpeg_5_0")]
863            AV_PIX_FMT_X2BGR10LE => Pixel::X2BGR10LE,
864            #[cfg(feature = "ffmpeg_5_0")]
865            AV_PIX_FMT_X2BGR10BE => Pixel::X2BGR10BE,
866            #[cfg(feature = "ffmpeg_5_0")]
867            AV_PIX_FMT_P210BE => Pixel::P210BE,
868            #[cfg(feature = "ffmpeg_5_0")]
869            AV_PIX_FMT_P210LE => Pixel::P210LE,
870            #[cfg(feature = "ffmpeg_5_0")]
871            AV_PIX_FMT_P410BE => Pixel::P410BE,
872            #[cfg(feature = "ffmpeg_5_0")]
873            AV_PIX_FMT_P410LE => Pixel::P410LE,
874            #[cfg(feature = "ffmpeg_5_0")]
875            AV_PIX_FMT_P216BE => Pixel::P216BE,
876            #[cfg(feature = "ffmpeg_5_0")]
877            AV_PIX_FMT_P216LE => Pixel::P216LE,
878            #[cfg(feature = "ffmpeg_5_0")]
879            AV_PIX_FMT_P416BE => Pixel::P416BE,
880            #[cfg(feature = "ffmpeg_5_0")]
881            AV_PIX_FMT_P416LE => Pixel::P416LE,
882
883            #[cfg(feature = "ffmpeg_6_0")]
884            AV_PIX_FMT_VUYA => Pixel::VUYA,
885            #[cfg(feature = "ffmpeg_6_0")]
886            AV_PIX_FMT_RGBAF16BE => Pixel::RGBAF16BE,
887            #[cfg(feature = "ffmpeg_6_0")]
888            AV_PIX_FMT_RGBAF16LE => Pixel::RGBAF16LE,
889            #[cfg(feature = "ffmpeg_6_0")]
890            AV_PIX_FMT_VUYX => Pixel::VUYX,
891            #[cfg(feature = "ffmpeg_6_0")]
892            AV_PIX_FMT_P012LE => Pixel::P012LE,
893            #[cfg(feature = "ffmpeg_6_0")]
894            AV_PIX_FMT_P012BE => Pixel::P012BE,
895            #[cfg(feature = "ffmpeg_6_0")]
896            AV_PIX_FMT_Y212BE => Pixel::Y212BE,
897            #[cfg(feature = "ffmpeg_6_0")]
898            AV_PIX_FMT_Y212LE => Pixel::Y212LE,
899            #[cfg(feature = "ffmpeg_6_0")]
900            AV_PIX_FMT_XV30BE => Pixel::XV30BE,
901            #[cfg(feature = "ffmpeg_6_0")]
902            AV_PIX_FMT_XV30LE => Pixel::XV30LE,
903            #[cfg(feature = "ffmpeg_6_0")]
904            AV_PIX_FMT_XV36BE => Pixel::XV36BE,
905            #[cfg(feature = "ffmpeg_6_0")]
906            AV_PIX_FMT_XV36LE => Pixel::XV36LE,
907            #[cfg(feature = "ffmpeg_6_0")]
908            AV_PIX_FMT_RGBF32BE => Pixel::RGBF32BE,
909            #[cfg(feature = "ffmpeg_6_0")]
910            AV_PIX_FMT_RGBF32LE => Pixel::RGBF32LE,
911            #[cfg(feature = "ffmpeg_6_0")]
912            AV_PIX_FMT_RGBAF32BE => Pixel::RGBAF32BE,
913            #[cfg(feature = "ffmpeg_6_0")]
914            AV_PIX_FMT_RGBAF32LE => Pixel::RGBAF32LE,
915
916            #[cfg(feature = "ffmpeg_6_1")]
917            AV_PIX_FMT_P212BE => Pixel::P212BE,
918            #[cfg(feature = "ffmpeg_6_1")]
919            AV_PIX_FMT_P212LE => Pixel::P212LE,
920            #[cfg(feature = "ffmpeg_6_1")]
921            AV_PIX_FMT_P412BE => Pixel::P412BE,
922            #[cfg(feature = "ffmpeg_6_1")]
923            AV_PIX_FMT_P412LE => Pixel::P412LE,
924            #[cfg(feature = "ffmpeg_6_1")]
925            AV_PIX_FMT_GBRAP14BE => Pixel::GBRAP14BE,
926            #[cfg(feature = "ffmpeg_6_1")]
927            AV_PIX_FMT_GBRAP14LE => Pixel::GBRAP14LE,
928
929            #[cfg(feature = "ffmpeg_7_0")]
930            AV_PIX_FMT_D3D12 => Pixel::D3D12,
931
932            #[cfg(feature = "ffmpeg_8_0")]
933            AV_PIX_FMT_AYUV => Pixel::AYUV,
934            #[cfg(feature = "ffmpeg_8_0")]
935            AV_PIX_FMT_UYVA => Pixel::UYVA,
936            #[cfg(feature = "ffmpeg_8_0")]
937            AV_PIX_FMT_VYU444 => Pixel::VYU444,
938            #[cfg(feature = "ffmpeg_8_0")]
939            AV_PIX_FMT_V30XLE => Pixel::V30XLE,
940            #[cfg(feature = "ffmpeg_8_0")]
941            AV_PIX_FMT_V30XBE => Pixel::V30XBE,
942            #[cfg(feature = "ffmpeg_8_0")]
943            AV_PIX_FMT_RGBF16LE => Pixel::RGBF16LE,
944            #[cfg(feature = "ffmpeg_8_0")]
945            AV_PIX_FMT_RGBF16BE => Pixel::RGBF16BE,
946            #[cfg(feature = "ffmpeg_8_0")]
947            AV_PIX_FMT_RGB96LE => Pixel::RGB96LE,
948            #[cfg(feature = "ffmpeg_8_0")]
949            AV_PIX_FMT_RGB96BE => Pixel::RGB96BE,
950            #[cfg(feature = "ffmpeg_8_0")]
951            AV_PIX_FMT_RGBA128LE => Pixel::RGBA128LE,
952            #[cfg(feature = "ffmpeg_8_0")]
953            AV_PIX_FMT_RGBA128BE => Pixel::RGBA128BE,
954            #[cfg(feature = "ffmpeg_8_0")]
955            AV_PIX_FMT_Y216LE => Pixel::Y216LE,
956            #[cfg(feature = "ffmpeg_8_0")]
957            AV_PIX_FMT_Y216BE => Pixel::Y216BE,
958            #[cfg(feature = "ffmpeg_8_0")]
959            AV_PIX_FMT_XV48LE => Pixel::XV48LE,
960            #[cfg(feature = "ffmpeg_8_0")]
961            AV_PIX_FMT_XV48BE => Pixel::XV48BE,
962            #[cfg(feature = "ffmpeg_8_0")]
963            AV_PIX_FMT_GBRPF16BE => Pixel::GBRPF16BE,
964            #[cfg(feature = "ffmpeg_8_0")]
965            AV_PIX_FMT_GBRPF16LE => Pixel::GBRPF16LE,
966            #[cfg(feature = "ffmpeg_8_0")]
967            AV_PIX_FMT_GBRAPF16BE => Pixel::GBRAPF16BE,
968            #[cfg(feature = "ffmpeg_8_0")]
969            AV_PIX_FMT_GBRAPF16LE => Pixel::GBRAPF16LE,
970            #[cfg(feature = "ffmpeg_8_0")]
971            AV_PIX_FMT_GRAYF16BE => Pixel::GRAYF16BE,
972            #[cfg(feature = "ffmpeg_8_0")]
973            AV_PIX_FMT_GRAYF16LE => Pixel::GRAYF16LE,
974            #[cfg(feature = "ffmpeg_8_0")]
975            AV_PIX_FMT_AMF_SURFACE => Pixel::AMF_SURFACE,
976            #[cfg(feature = "ffmpeg_8_0")]
977            AV_PIX_FMT_GRAY32BE => Pixel::GRAY32BE,
978            #[cfg(feature = "ffmpeg_8_0")]
979            AV_PIX_FMT_GRAY32LE => Pixel::GRAY32LE,
980            #[cfg(feature = "ffmpeg_8_0")]
981            AV_PIX_FMT_YAF16BE => Pixel::YAF16BE,
982            #[cfg(feature = "ffmpeg_8_0")]
983            AV_PIX_FMT_YAF16LE => Pixel::YAF16LE,
984            #[cfg(feature = "ffmpeg_8_0")]
985            AV_PIX_FMT_YAF32BE => Pixel::YAF32BE,
986            #[cfg(feature = "ffmpeg_8_0")]
987            AV_PIX_FMT_YAF32LE => Pixel::YAF32LE,
988            #[cfg(feature = "ffmpeg_8_0")]
989            AV_PIX_FMT_GBRAP32BE => Pixel::GBRAP32BE,
990            #[cfg(feature = "ffmpeg_8_0")]
991            AV_PIX_FMT_GBRAP32LE => Pixel::GBRAP32LE,
992            #[cfg(feature = "ffmpeg_8_0")]
993            AV_PIX_FMT_OHCODEC => Pixel::OHCODEC,
994            #[cfg(feature = "ffmpeg_8_0")]
995            AV_PIX_FMT_YUV444P10MSBBE => Pixel::YUV444P10MSBBE,
996            #[cfg(feature = "ffmpeg_8_0")]
997            AV_PIX_FMT_YUV444P10MSBLE => Pixel::YUV444P10MSBLE,
998            #[cfg(feature = "ffmpeg_8_0")]
999            AV_PIX_FMT_YUV444P12MSBBE => Pixel::YUV444P12MSBBE,
1000            #[cfg(feature = "ffmpeg_8_0")]
1001            AV_PIX_FMT_YUV444P12MSBLE => Pixel::YUV444P12MSBLE,
1002            #[cfg(feature = "ffmpeg_8_0")]
1003            AV_PIX_FMT_GBRP10MSBBE => Pixel::GBRP10MSBBE,
1004            #[cfg(feature = "ffmpeg_8_0")]
1005            AV_PIX_FMT_GBRP10MSBLE => Pixel::GBRP10MSBLE,
1006            #[cfg(feature = "ffmpeg_8_0")]
1007            AV_PIX_FMT_GBRP12MSBBE => Pixel::GBRP12MSBBE,
1008            #[cfg(feature = "ffmpeg_8_0")]
1009            AV_PIX_FMT_GBRP12MSBLE => Pixel::GBRP12MSBLE,
1010
1011            #[cfg(feature = "rpi")]
1012            AV_PIX_FMT_SAND128 => Pixel::SAND128,
1013            #[cfg(feature = "rpi")]
1014            AV_PIX_FMT_SAND64_10 => Pixel::SAND64_10,
1015            #[cfg(feature = "rpi")]
1016            AV_PIX_FMT_SAND64_16 => Pixel::SAND64_16,
1017            #[cfg(feature = "rpi")]
1018            AV_PIX_FMT_RPI4_8 => Pixel::RPI4_8,
1019            #[cfg(feature = "rpi")]
1020            AV_PIX_FMT_RPI4_10 => Pixel::RPI4_10,
1021
1022            #[cfg(feature = "non-exhaustive-enums")]
1023            _ => unimplemented!(),
1024        }
1025    }
1026}
1027
1028impl From<Pixel> for AVPixelFormat {
1029    #[inline]
1030    fn from(value: Pixel) -> AVPixelFormat {
1031        match value {
1032            Pixel::None => AV_PIX_FMT_NONE,
1033
1034            Pixel::YUV420P => AV_PIX_FMT_YUV420P,
1035            Pixel::YUYV422 => AV_PIX_FMT_YUYV422,
1036            Pixel::RGB24 => AV_PIX_FMT_RGB24,
1037            Pixel::BGR24 => AV_PIX_FMT_BGR24,
1038            Pixel::YUV422P => AV_PIX_FMT_YUV422P,
1039            Pixel::YUV444P => AV_PIX_FMT_YUV444P,
1040            Pixel::YUV410P => AV_PIX_FMT_YUV410P,
1041            Pixel::YUV411P => AV_PIX_FMT_YUV411P,
1042            Pixel::GRAY8 => AV_PIX_FMT_GRAY8,
1043            Pixel::MonoWhite => AV_PIX_FMT_MONOWHITE,
1044            Pixel::MonoBlack => AV_PIX_FMT_MONOBLACK,
1045            Pixel::PAL8 => AV_PIX_FMT_PAL8,
1046            Pixel::YUVJ420P => AV_PIX_FMT_YUVJ420P,
1047            Pixel::YUVJ422P => AV_PIX_FMT_YUVJ422P,
1048            Pixel::YUVJ444P => AV_PIX_FMT_YUVJ444P,
1049            #[cfg(all(feature = "ff_api_xvmc", not(feature = "ffmpeg_5_0")))]
1050            Pixel::XVMC_MPEG2_MC => AV_PIX_FMT_XVMC_MPEG2_MC,
1051            #[cfg(all(feature = "ff_api_xvmc", not(feature = "ffmpeg_5_0")))]
1052            Pixel::XVMC_MPEG2_IDCT => AV_PIX_FMT_XVMC_MPEG2_IDCT,
1053            Pixel::UYVY422 => AV_PIX_FMT_UYVY422,
1054            Pixel::UYYVYY411 => AV_PIX_FMT_UYYVYY411,
1055            Pixel::BGR8 => AV_PIX_FMT_BGR8,
1056            Pixel::BGR4 => AV_PIX_FMT_BGR4,
1057            Pixel::BGR4_BYTE => AV_PIX_FMT_BGR4_BYTE,
1058            Pixel::RGB8 => AV_PIX_FMT_RGB8,
1059            Pixel::RGB4 => AV_PIX_FMT_RGB4,
1060            Pixel::RGB4_BYTE => AV_PIX_FMT_RGB4_BYTE,
1061            Pixel::NV12 => AV_PIX_FMT_NV12,
1062            Pixel::NV21 => AV_PIX_FMT_NV21,
1063
1064            Pixel::ARGB => AV_PIX_FMT_ARGB,
1065            Pixel::RGBA => AV_PIX_FMT_RGBA,
1066            Pixel::ABGR => AV_PIX_FMT_ABGR,
1067            Pixel::BGRA => AV_PIX_FMT_BGRA,
1068
1069            Pixel::GRAY16BE => AV_PIX_FMT_GRAY16BE,
1070            Pixel::GRAY16LE => AV_PIX_FMT_GRAY16LE,
1071            Pixel::YUV440P => AV_PIX_FMT_YUV440P,
1072            Pixel::YUVJ440P => AV_PIX_FMT_YUVJ440P,
1073            Pixel::YUVA420P => AV_PIX_FMT_YUVA420P,
1074            #[cfg(feature = "ff_api_vdpau")]
1075            Pixel::VDPAU_H264 => AV_PIX_FMT_VDPAU_H264,
1076            #[cfg(feature = "ff_api_vdpau")]
1077            Pixel::VDPAU_MPEG1 => AV_PIX_FMT_VDPAU_MPEG1,
1078            #[cfg(feature = "ff_api_vdpau")]
1079            Pixel::VDPAU_MPEG2 => AV_PIX_FMT_VDPAU_MPEG2,
1080            #[cfg(feature = "ff_api_vdpau")]
1081            Pixel::VDPAU_WMV3 => AV_PIX_FMT_VDPAU_WMV3,
1082            #[cfg(feature = "ff_api_vdpau")]
1083            Pixel::VDPAU_VC1 => AV_PIX_FMT_VDPAU_VC1,
1084            Pixel::RGB48BE => AV_PIX_FMT_RGB48BE,
1085            Pixel::RGB48LE => AV_PIX_FMT_RGB48LE,
1086
1087            Pixel::RGB565BE => AV_PIX_FMT_RGB565BE,
1088            Pixel::RGB565LE => AV_PIX_FMT_RGB565LE,
1089            Pixel::RGB555BE => AV_PIX_FMT_RGB555BE,
1090            Pixel::RGB555LE => AV_PIX_FMT_RGB555LE,
1091
1092            Pixel::BGR565BE => AV_PIX_FMT_BGR565BE,
1093            Pixel::BGR565LE => AV_PIX_FMT_BGR565LE,
1094            Pixel::BGR555BE => AV_PIX_FMT_BGR555BE,
1095            Pixel::BGR555LE => AV_PIX_FMT_BGR555LE,
1096
1097            #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
1098            Pixel::VAAPI_MOCO => AV_PIX_FMT_VAAPI_MOCO,
1099            #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
1100            Pixel::VAAPI_IDCT => AV_PIX_FMT_VAAPI_IDCT,
1101            #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
1102            Pixel::VAAPI_VLD => AV_PIX_FMT_VAAPI_VLD,
1103            #[cfg(not(feature = "ff_api_vaapi"))]
1104            Pixel::VAAPI => AV_PIX_FMT_VAAPI,
1105
1106            Pixel::YUV420P16LE => AV_PIX_FMT_YUV420P16LE,
1107            Pixel::YUV420P16BE => AV_PIX_FMT_YUV420P16BE,
1108            Pixel::YUV422P16LE => AV_PIX_FMT_YUV422P16LE,
1109            Pixel::YUV422P16BE => AV_PIX_FMT_YUV422P16BE,
1110            Pixel::YUV444P16LE => AV_PIX_FMT_YUV444P16LE,
1111            Pixel::YUV444P16BE => AV_PIX_FMT_YUV444P16BE,
1112            #[cfg(feature = "ff_api_vdpau")]
1113            Pixel::VDPAU_MPEG4 => AV_PIX_FMT_VDPAU_MPEG4,
1114            Pixel::DXVA2_VLD => AV_PIX_FMT_DXVA2_VLD,
1115
1116            Pixel::RGB444LE => AV_PIX_FMT_RGB444LE,
1117            Pixel::RGB444BE => AV_PIX_FMT_RGB444BE,
1118            Pixel::BGR444LE => AV_PIX_FMT_BGR444LE,
1119            Pixel::BGR444BE => AV_PIX_FMT_BGR444BE,
1120            Pixel::YA8 => AV_PIX_FMT_YA8,
1121
1122            Pixel::BGR48BE => AV_PIX_FMT_BGR48BE,
1123            Pixel::BGR48LE => AV_PIX_FMT_BGR48LE,
1124
1125            Pixel::YUV420P9BE => AV_PIX_FMT_YUV420P9BE,
1126            Pixel::YUV420P9LE => AV_PIX_FMT_YUV420P9LE,
1127            Pixel::YUV420P10BE => AV_PIX_FMT_YUV420P10BE,
1128            Pixel::YUV420P10LE => AV_PIX_FMT_YUV420P10LE,
1129            Pixel::YUV422P10BE => AV_PIX_FMT_YUV422P10BE,
1130            Pixel::YUV422P10LE => AV_PIX_FMT_YUV422P10LE,
1131            Pixel::YUV444P9BE => AV_PIX_FMT_YUV444P9BE,
1132            Pixel::YUV444P9LE => AV_PIX_FMT_YUV444P9LE,
1133            Pixel::YUV444P10BE => AV_PIX_FMT_YUV444P10BE,
1134            Pixel::YUV444P10LE => AV_PIX_FMT_YUV444P10LE,
1135            Pixel::YUV422P9BE => AV_PIX_FMT_YUV422P9BE,
1136            Pixel::YUV422P9LE => AV_PIX_FMT_YUV422P9LE,
1137            #[cfg(not(feature = "ffmpeg_4_0"))]
1138            Pixel::VDA_VLD => AV_PIX_FMT_VDA_VLD,
1139
1140            Pixel::GBRP => AV_PIX_FMT_GBRP,
1141            Pixel::GBRP9BE => AV_PIX_FMT_GBRP9BE,
1142            Pixel::GBRP9LE => AV_PIX_FMT_GBRP9LE,
1143            Pixel::GBRP10BE => AV_PIX_FMT_GBRP10BE,
1144            Pixel::GBRP10LE => AV_PIX_FMT_GBRP10LE,
1145            Pixel::GBRP16BE => AV_PIX_FMT_GBRP16BE,
1146            Pixel::GBRP16LE => AV_PIX_FMT_GBRP16LE,
1147
1148            Pixel::YUVA420P9BE => AV_PIX_FMT_YUVA420P9BE,
1149            Pixel::YUVA420P9LE => AV_PIX_FMT_YUVA420P9LE,
1150            Pixel::YUVA422P9BE => AV_PIX_FMT_YUVA422P9BE,
1151            Pixel::YUVA422P9LE => AV_PIX_FMT_YUVA422P9LE,
1152            Pixel::YUVA444P9BE => AV_PIX_FMT_YUVA444P9BE,
1153            Pixel::YUVA444P9LE => AV_PIX_FMT_YUVA444P9LE,
1154            Pixel::YUVA420P10BE => AV_PIX_FMT_YUVA420P10BE,
1155            Pixel::YUVA420P10LE => AV_PIX_FMT_YUVA420P10LE,
1156            Pixel::YUVA422P10BE => AV_PIX_FMT_YUVA422P10BE,
1157            Pixel::YUVA422P10LE => AV_PIX_FMT_YUVA422P10LE,
1158            Pixel::YUVA444P10BE => AV_PIX_FMT_YUVA444P10BE,
1159            Pixel::YUVA444P10LE => AV_PIX_FMT_YUVA444P10LE,
1160            Pixel::YUVA420P16BE => AV_PIX_FMT_YUVA420P16BE,
1161            Pixel::YUVA420P16LE => AV_PIX_FMT_YUVA420P16LE,
1162            Pixel::YUVA422P16BE => AV_PIX_FMT_YUVA422P16BE,
1163            Pixel::YUVA422P16LE => AV_PIX_FMT_YUVA422P16LE,
1164            Pixel::YUVA444P16BE => AV_PIX_FMT_YUVA444P16BE,
1165            Pixel::YUVA444P16LE => AV_PIX_FMT_YUVA444P16LE,
1166
1167            Pixel::VDPAU => AV_PIX_FMT_VDPAU,
1168
1169            Pixel::XYZ12LE => AV_PIX_FMT_XYZ12LE,
1170            Pixel::XYZ12BE => AV_PIX_FMT_XYZ12BE,
1171            Pixel::NV16 => AV_PIX_FMT_NV16,
1172            Pixel::NV20LE => AV_PIX_FMT_NV20LE,
1173            Pixel::NV20BE => AV_PIX_FMT_NV20BE,
1174
1175            Pixel::RGBA64BE => AV_PIX_FMT_RGBA64BE,
1176            Pixel::RGBA64LE => AV_PIX_FMT_RGBA64LE,
1177            Pixel::BGRA64BE => AV_PIX_FMT_BGRA64BE,
1178            Pixel::BGRA64LE => AV_PIX_FMT_BGRA64LE,
1179
1180            Pixel::YVYU422 => AV_PIX_FMT_YVYU422,
1181
1182            #[cfg(not(feature = "ffmpeg_4_0"))]
1183            Pixel::VDA => AV_PIX_FMT_VDA,
1184
1185            Pixel::YA16BE => AV_PIX_FMT_YA16BE,
1186            Pixel::YA16LE => AV_PIX_FMT_YA16LE,
1187
1188            Pixel::QSV => AV_PIX_FMT_QSV,
1189            Pixel::MMAL => AV_PIX_FMT_MMAL,
1190
1191            Pixel::D3D11VA_VLD => AV_PIX_FMT_D3D11VA_VLD,
1192
1193            Pixel::CUDA => AV_PIX_FMT_CUDA,
1194
1195            Pixel::ZRGB => AV_PIX_FMT_0RGB,
1196            Pixel::RGBZ => AV_PIX_FMT_RGB0,
1197            Pixel::ZBGR => AV_PIX_FMT_0BGR,
1198            Pixel::BGRZ => AV_PIX_FMT_BGR0,
1199            Pixel::YUVA444P => AV_PIX_FMT_YUVA444P,
1200            Pixel::YUVA422P => AV_PIX_FMT_YUVA422P,
1201
1202            Pixel::YUV420P12BE => AV_PIX_FMT_YUV420P12BE,
1203            Pixel::YUV420P12LE => AV_PIX_FMT_YUV420P12LE,
1204            Pixel::YUV420P14BE => AV_PIX_FMT_YUV420P14BE,
1205            Pixel::YUV420P14LE => AV_PIX_FMT_YUV420P14LE,
1206            Pixel::YUV422P12BE => AV_PIX_FMT_YUV422P12BE,
1207            Pixel::YUV422P12LE => AV_PIX_FMT_YUV422P12LE,
1208            Pixel::YUV422P14BE => AV_PIX_FMT_YUV422P14BE,
1209            Pixel::YUV422P14LE => AV_PIX_FMT_YUV422P14LE,
1210            Pixel::YUV444P12BE => AV_PIX_FMT_YUV444P12BE,
1211            Pixel::YUV444P12LE => AV_PIX_FMT_YUV444P12LE,
1212            Pixel::YUV444P14BE => AV_PIX_FMT_YUV444P14BE,
1213            Pixel::YUV444P14LE => AV_PIX_FMT_YUV444P14LE,
1214            Pixel::GBRP12BE => AV_PIX_FMT_GBRP12BE,
1215            Pixel::GBRP12LE => AV_PIX_FMT_GBRP12LE,
1216            Pixel::GBRP14BE => AV_PIX_FMT_GBRP14BE,
1217            Pixel::GBRP14LE => AV_PIX_FMT_GBRP14LE,
1218            Pixel::GBRAP => AV_PIX_FMT_GBRAP,
1219            Pixel::GBRAP16BE => AV_PIX_FMT_GBRAP16BE,
1220            Pixel::GBRAP16LE => AV_PIX_FMT_GBRAP16LE,
1221            Pixel::YUVJ411P => AV_PIX_FMT_YUVJ411P,
1222
1223            Pixel::BAYER_BGGR8 => AV_PIX_FMT_BAYER_BGGR8,
1224            Pixel::BAYER_RGGB8 => AV_PIX_FMT_BAYER_RGGB8,
1225            Pixel::BAYER_GBRG8 => AV_PIX_FMT_BAYER_GBRG8,
1226            Pixel::BAYER_GRBG8 => AV_PIX_FMT_BAYER_GRBG8,
1227            Pixel::BAYER_BGGR16LE => AV_PIX_FMT_BAYER_BGGR16LE,
1228            Pixel::BAYER_BGGR16BE => AV_PIX_FMT_BAYER_BGGR16BE,
1229            Pixel::BAYER_RGGB16LE => AV_PIX_FMT_BAYER_RGGB16LE,
1230            Pixel::BAYER_RGGB16BE => AV_PIX_FMT_BAYER_RGGB16BE,
1231            Pixel::BAYER_GBRG16LE => AV_PIX_FMT_BAYER_GBRG16LE,
1232            Pixel::BAYER_GBRG16BE => AV_PIX_FMT_BAYER_GBRG16BE,
1233            Pixel::BAYER_GRBG16LE => AV_PIX_FMT_BAYER_GRBG16LE,
1234            Pixel::BAYER_GRBG16BE => AV_PIX_FMT_BAYER_GRBG16BE,
1235
1236            Pixel::YUV440P10LE => AV_PIX_FMT_YUV440P10LE,
1237            Pixel::YUV440P10BE => AV_PIX_FMT_YUV440P10BE,
1238            Pixel::YUV440P12LE => AV_PIX_FMT_YUV440P12LE,
1239            Pixel::YUV440P12BE => AV_PIX_FMT_YUV440P12BE,
1240            Pixel::AYUV64LE => AV_PIX_FMT_AYUV64LE,
1241            Pixel::AYUV64BE => AV_PIX_FMT_AYUV64BE,
1242
1243            Pixel::VIDEOTOOLBOX => AV_PIX_FMT_VIDEOTOOLBOX,
1244
1245            // --- defaults
1246            #[cfg(all(feature = "ffmpeg_4_0", not(feature = "ffmpeg_7_0")))]
1247            Pixel::XVMC => AV_PIX_FMT_XVMC,
1248
1249            Pixel::RGB32 => AV_PIX_FMT_RGB32,
1250            Pixel::RGB32_1 => AV_PIX_FMT_RGB32_1,
1251            Pixel::BGR32 => AV_PIX_FMT_BGR32,
1252            Pixel::BGR32_1 => AV_PIX_FMT_BGR32_1,
1253            Pixel::ZRGB32 => AV_PIX_FMT_0RGB32,
1254            Pixel::ZBGR32 => AV_PIX_FMT_0BGR32,
1255
1256            Pixel::GRAY16 => AV_PIX_FMT_GRAY16,
1257            Pixel::YA16 => AV_PIX_FMT_YA16,
1258            Pixel::RGB48 => AV_PIX_FMT_RGB48,
1259            Pixel::RGB565 => AV_PIX_FMT_RGB565,
1260            Pixel::RGB555 => AV_PIX_FMT_RGB555,
1261            Pixel::RGB444 => AV_PIX_FMT_RGB444,
1262            Pixel::BGR48 => AV_PIX_FMT_BGR48,
1263            Pixel::BGR565 => AV_PIX_FMT_BGR565,
1264            Pixel::BGR555 => AV_PIX_FMT_BGR555,
1265            Pixel::BGR444 => AV_PIX_FMT_BGR444,
1266
1267            Pixel::YUV420P9 => AV_PIX_FMT_YUV420P9,
1268            Pixel::YUV422P9 => AV_PIX_FMT_YUV422P9,
1269            Pixel::YUV444P9 => AV_PIX_FMT_YUV444P9,
1270            Pixel::YUV420P10 => AV_PIX_FMT_YUV420P10,
1271            Pixel::YUV422P10 => AV_PIX_FMT_YUV422P10,
1272            Pixel::YUV440P10 => AV_PIX_FMT_YUV440P10,
1273            Pixel::YUV444P10 => AV_PIX_FMT_YUV444P10,
1274            Pixel::YUV420P12 => AV_PIX_FMT_YUV420P12,
1275            Pixel::YUV422P12 => AV_PIX_FMT_YUV422P12,
1276            Pixel::YUV440P12 => AV_PIX_FMT_YUV440P12,
1277            Pixel::YUV444P12 => AV_PIX_FMT_YUV444P12,
1278            Pixel::YUV420P14 => AV_PIX_FMT_YUV420P14,
1279            Pixel::YUV422P14 => AV_PIX_FMT_YUV422P14,
1280            Pixel::YUV444P14 => AV_PIX_FMT_YUV444P14,
1281            Pixel::YUV420P16 => AV_PIX_FMT_YUV420P16,
1282            Pixel::YUV422P16 => AV_PIX_FMT_YUV422P16,
1283            Pixel::YUV444P16 => AV_PIX_FMT_YUV444P16,
1284
1285            Pixel::GBRP9 => AV_PIX_FMT_GBRP9,
1286            Pixel::GBRP10 => AV_PIX_FMT_GBRP10,
1287            Pixel::GBRP12 => AV_PIX_FMT_GBRP12,
1288            Pixel::GBRP14 => AV_PIX_FMT_GBRP14,
1289            Pixel::GBRP16 => AV_PIX_FMT_GBRP16,
1290            Pixel::GBRAP16 => AV_PIX_FMT_GBRAP16,
1291
1292            Pixel::BAYER_BGGR16 => AV_PIX_FMT_BAYER_BGGR16,
1293            Pixel::BAYER_RGGB16 => AV_PIX_FMT_BAYER_RGGB16,
1294            Pixel::BAYER_GBRG16 => AV_PIX_FMT_BAYER_GBRG16,
1295            Pixel::BAYER_GRBG16 => AV_PIX_FMT_BAYER_GRBG16,
1296
1297            Pixel::YUVA420P9 => AV_PIX_FMT_YUVA420P9,
1298            Pixel::YUVA422P9 => AV_PIX_FMT_YUVA422P9,
1299            Pixel::YUVA444P9 => AV_PIX_FMT_YUVA444P9,
1300            Pixel::YUVA420P10 => AV_PIX_FMT_YUVA420P10,
1301            Pixel::YUVA422P10 => AV_PIX_FMT_YUVA422P10,
1302            Pixel::YUVA444P10 => AV_PIX_FMT_YUVA444P10,
1303            Pixel::YUVA420P16 => AV_PIX_FMT_YUVA420P16,
1304            Pixel::YUVA422P16 => AV_PIX_FMT_YUVA422P16,
1305            Pixel::YUVA444P16 => AV_PIX_FMT_YUVA444P16,
1306
1307            Pixel::XYZ12 => AV_PIX_FMT_XYZ12,
1308            Pixel::NV20 => AV_PIX_FMT_NV20,
1309            Pixel::AYUV64 => AV_PIX_FMT_AYUV64,
1310
1311            Pixel::P010LE => AV_PIX_FMT_P010LE,
1312            Pixel::P010BE => AV_PIX_FMT_P010BE,
1313            Pixel::GBRAP12BE => AV_PIX_FMT_GBRAP12BE,
1314            Pixel::GBRAP12LE => AV_PIX_FMT_GBRAP12LE,
1315            Pixel::GBRAP10LE => AV_PIX_FMT_GBRAP10LE,
1316            Pixel::GBRAP10BE => AV_PIX_FMT_GBRAP10BE,
1317            Pixel::MEDIACODEC => AV_PIX_FMT_MEDIACODEC,
1318            Pixel::GRAY12BE => AV_PIX_FMT_GRAY12BE,
1319            Pixel::GRAY12LE => AV_PIX_FMT_GRAY12LE,
1320            Pixel::GRAY10BE => AV_PIX_FMT_GRAY10BE,
1321            Pixel::GRAY10LE => AV_PIX_FMT_GRAY10LE,
1322            Pixel::P016LE => AV_PIX_FMT_P016LE,
1323            Pixel::P016BE => AV_PIX_FMT_P016BE,
1324
1325            Pixel::D3D11 => AV_PIX_FMT_D3D11,
1326            Pixel::GRAY9BE => AV_PIX_FMT_GRAY9BE,
1327            Pixel::GRAY9LE => AV_PIX_FMT_GRAY9LE,
1328            Pixel::GBRPF32BE => AV_PIX_FMT_GBRPF32BE,
1329            Pixel::GBRPF32LE => AV_PIX_FMT_GBRPF32LE,
1330            Pixel::GBRAPF32BE => AV_PIX_FMT_GBRAPF32BE,
1331            Pixel::GBRAPF32LE => AV_PIX_FMT_GBRAPF32LE,
1332            Pixel::DRM_PRIME => AV_PIX_FMT_DRM_PRIME,
1333
1334            #[cfg(feature = "ffmpeg_4_0")]
1335            Pixel::OPENCL => AV_PIX_FMT_OPENCL,
1336
1337            #[cfg(feature = "ffmpeg_4_1")]
1338            Pixel::GRAY14BE => AV_PIX_FMT_GRAY14BE,
1339            #[cfg(feature = "ffmpeg_4_1")]
1340            Pixel::GRAY14LE => AV_PIX_FMT_GRAY14LE,
1341            #[cfg(feature = "ffmpeg_4_1")]
1342            Pixel::GRAYF32BE => AV_PIX_FMT_GRAYF32BE,
1343            #[cfg(feature = "ffmpeg_4_1")]
1344            Pixel::GRAYF32LE => AV_PIX_FMT_GRAYF32LE,
1345
1346            #[cfg(feature = "ffmpeg_4_2")]
1347            Pixel::YUVA422P12BE => AV_PIX_FMT_YUVA422P12BE,
1348            #[cfg(feature = "ffmpeg_4_2")]
1349            Pixel::YUVA422P12LE => AV_PIX_FMT_YUVA422P12LE,
1350            #[cfg(feature = "ffmpeg_4_2")]
1351            Pixel::YUVA444P12BE => AV_PIX_FMT_YUVA444P12BE,
1352            #[cfg(feature = "ffmpeg_4_2")]
1353            Pixel::YUVA444P12LE => AV_PIX_FMT_YUVA444P12LE,
1354            #[cfg(feature = "ffmpeg_4_2")]
1355            Pixel::NV24 => AV_PIX_FMT_NV24,
1356            #[cfg(feature = "ffmpeg_4_2")]
1357            Pixel::NV42 => AV_PIX_FMT_NV42,
1358
1359            #[cfg(feature = "ffmpeg_4_3")]
1360            Pixel::VULKAN => AV_PIX_FMT_VULKAN,
1361            #[cfg(feature = "ffmpeg_4_3")]
1362            Pixel::Y210BE => AV_PIX_FMT_Y210BE,
1363            #[cfg(feature = "ffmpeg_4_3")]
1364            Pixel::Y210LE => AV_PIX_FMT_Y210LE,
1365
1366            #[cfg(feature = "ffmpeg_4_4")]
1367            Pixel::X2RGB10LE => AV_PIX_FMT_X2RGB10LE,
1368            #[cfg(feature = "ffmpeg_4_4")]
1369            Pixel::X2RGB10BE => AV_PIX_FMT_X2RGB10BE,
1370
1371            #[cfg(feature = "ffmpeg_5_0")]
1372            Pixel::X2BGR10LE => AV_PIX_FMT_X2BGR10LE,
1373            #[cfg(feature = "ffmpeg_5_0")]
1374            Pixel::X2BGR10BE => AV_PIX_FMT_X2BGR10BE,
1375            #[cfg(feature = "ffmpeg_5_0")]
1376            Pixel::P210BE => AV_PIX_FMT_P210BE,
1377            #[cfg(feature = "ffmpeg_5_0")]
1378            Pixel::P210LE => AV_PIX_FMT_P210LE,
1379            #[cfg(feature = "ffmpeg_5_0")]
1380            Pixel::P410BE => AV_PIX_FMT_P410BE,
1381            #[cfg(feature = "ffmpeg_5_0")]
1382            Pixel::P410LE => AV_PIX_FMT_P410LE,
1383            #[cfg(feature = "ffmpeg_5_0")]
1384            Pixel::P216BE => AV_PIX_FMT_P216BE,
1385            #[cfg(feature = "ffmpeg_5_0")]
1386            Pixel::P216LE => AV_PIX_FMT_P216LE,
1387            #[cfg(feature = "ffmpeg_5_0")]
1388            Pixel::P416BE => AV_PIX_FMT_P416BE,
1389            #[cfg(feature = "ffmpeg_5_0")]
1390            Pixel::P416LE => AV_PIX_FMT_P416LE,
1391
1392            #[cfg(feature = "ffmpeg_6_0")]
1393            Pixel::VUYA => AV_PIX_FMT_VUYA,
1394            #[cfg(feature = "ffmpeg_6_0")]
1395            Pixel::RGBAF16BE => AV_PIX_FMT_RGBAF16BE,
1396            #[cfg(feature = "ffmpeg_6_0")]
1397            Pixel::RGBAF16LE => AV_PIX_FMT_RGBAF16LE,
1398            #[cfg(feature = "ffmpeg_6_0")]
1399            Pixel::VUYX => AV_PIX_FMT_VUYX,
1400            #[cfg(feature = "ffmpeg_6_0")]
1401            Pixel::P012LE => AV_PIX_FMT_P012LE,
1402            #[cfg(feature = "ffmpeg_6_0")]
1403            Pixel::P012BE => AV_PIX_FMT_P012BE,
1404            #[cfg(feature = "ffmpeg_6_0")]
1405            Pixel::Y212BE => AV_PIX_FMT_Y212BE,
1406            #[cfg(feature = "ffmpeg_6_0")]
1407            Pixel::Y212LE => AV_PIX_FMT_Y212LE,
1408            #[cfg(feature = "ffmpeg_6_0")]
1409            Pixel::XV30BE => AV_PIX_FMT_XV30BE,
1410            #[cfg(feature = "ffmpeg_6_0")]
1411            Pixel::XV30LE => AV_PIX_FMT_XV30LE,
1412            #[cfg(feature = "ffmpeg_6_0")]
1413            Pixel::XV36BE => AV_PIX_FMT_XV36BE,
1414            #[cfg(feature = "ffmpeg_6_0")]
1415            Pixel::XV36LE => AV_PIX_FMT_XV36LE,
1416            #[cfg(feature = "ffmpeg_6_0")]
1417            Pixel::RGBF32BE => AV_PIX_FMT_RGBF32BE,
1418            #[cfg(feature = "ffmpeg_6_0")]
1419            Pixel::RGBF32LE => AV_PIX_FMT_RGBF32LE,
1420            #[cfg(feature = "ffmpeg_6_0")]
1421            Pixel::RGBAF32BE => AV_PIX_FMT_RGBAF32BE,
1422            #[cfg(feature = "ffmpeg_6_0")]
1423            Pixel::RGBAF32LE => AV_PIX_FMT_RGBAF32LE,
1424
1425            #[cfg(feature = "ffmpeg_6_1")]
1426            Pixel::P212BE => AV_PIX_FMT_P212BE,
1427            #[cfg(feature = "ffmpeg_6_1")]
1428            Pixel::P212LE => AV_PIX_FMT_P212LE,
1429            #[cfg(feature = "ffmpeg_6_1")]
1430            Pixel::P412BE => AV_PIX_FMT_P412BE,
1431            #[cfg(feature = "ffmpeg_6_1")]
1432            Pixel::P412LE => AV_PIX_FMT_P412LE,
1433            #[cfg(feature = "ffmpeg_6_1")]
1434            Pixel::GBRAP14BE => AV_PIX_FMT_GBRAP14BE,
1435            #[cfg(feature = "ffmpeg_6_1")]
1436            Pixel::GBRAP14LE => AV_PIX_FMT_GBRAP14LE,
1437
1438            #[cfg(feature = "ffmpeg_7_0")]
1439            Pixel::D3D12 => AV_PIX_FMT_D3D12,
1440
1441            #[cfg(feature = "ffmpeg_8_0")]
1442            Pixel::AYUV => AV_PIX_FMT_AYUV,
1443            #[cfg(feature = "ffmpeg_8_0")]
1444            Pixel::UYVA => AV_PIX_FMT_UYVA,
1445            #[cfg(feature = "ffmpeg_8_0")]
1446            Pixel::VYU444 => AV_PIX_FMT_VYU444,
1447            #[cfg(feature = "ffmpeg_8_0")]
1448            Pixel::V30X => AV_PIX_FMT_V30X,
1449            #[cfg(feature = "ffmpeg_8_0")]
1450            Pixel::V30XLE => AV_PIX_FMT_V30XLE,
1451            #[cfg(feature = "ffmpeg_8_0")]
1452            Pixel::V30XBE => AV_PIX_FMT_V30XBE,
1453            #[cfg(feature = "ffmpeg_8_0")]
1454            Pixel::RGBF16 => AV_PIX_FMT_RGBF16,
1455            #[cfg(feature = "ffmpeg_8_0")]
1456            Pixel::RGBF16LE => AV_PIX_FMT_RGBF16LE,
1457            #[cfg(feature = "ffmpeg_8_0")]
1458            Pixel::RGBF16BE => AV_PIX_FMT_RGBF16BE,
1459            #[cfg(feature = "ffmpeg_8_0")]
1460            Pixel::RGB96 => AV_PIX_FMT_RGB96,
1461            #[cfg(feature = "ffmpeg_8_0")]
1462            Pixel::RGB96LE => AV_PIX_FMT_RGB96LE,
1463            #[cfg(feature = "ffmpeg_8_0")]
1464            Pixel::RGB96BE => AV_PIX_FMT_RGB96BE,
1465            #[cfg(feature = "ffmpeg_8_0")]
1466            Pixel::RGBA128 => AV_PIX_FMT_RGBA128,
1467            #[cfg(feature = "ffmpeg_8_0")]
1468            Pixel::RGBA128LE => AV_PIX_FMT_RGBA128LE,
1469            #[cfg(feature = "ffmpeg_8_0")]
1470            Pixel::RGBA128BE => AV_PIX_FMT_RGBA128BE,
1471            #[cfg(feature = "ffmpeg_8_0")]
1472            Pixel::Y216 => AV_PIX_FMT_Y216,
1473            #[cfg(feature = "ffmpeg_8_0")]
1474            Pixel::Y216LE => AV_PIX_FMT_Y216LE,
1475            #[cfg(feature = "ffmpeg_8_0")]
1476            Pixel::Y216BE => AV_PIX_FMT_Y216BE,
1477            #[cfg(feature = "ffmpeg_8_0")]
1478            Pixel::XV48 => AV_PIX_FMT_XV48,
1479            #[cfg(feature = "ffmpeg_8_0")]
1480            Pixel::XV48LE => AV_PIX_FMT_XV48LE,
1481            #[cfg(feature = "ffmpeg_8_0")]
1482            Pixel::XV48BE => AV_PIX_FMT_XV48BE,
1483            #[cfg(feature = "ffmpeg_8_0")]
1484            Pixel::GBRPF16BE => AV_PIX_FMT_GBRPF16BE,
1485            #[cfg(feature = "ffmpeg_8_0")]
1486            Pixel::GBRPF16LE => AV_PIX_FMT_GBRPF16LE,
1487            #[cfg(feature = "ffmpeg_8_0")]
1488            Pixel::GBRAPF16BE => AV_PIX_FMT_GBRAPF16BE,
1489            #[cfg(feature = "ffmpeg_8_0")]
1490            Pixel::GBRAPF16LE => AV_PIX_FMT_GBRAPF16LE,
1491            #[cfg(feature = "ffmpeg_8_0")]
1492            Pixel::GRAYF16BE => AV_PIX_FMT_GRAYF16BE,
1493            #[cfg(feature = "ffmpeg_8_0")]
1494            Pixel::GRAYF16LE => AV_PIX_FMT_GRAYF16LE,
1495            #[cfg(feature = "ffmpeg_8_0")]
1496            Pixel::AMF_SURFACE => AV_PIX_FMT_AMF_SURFACE,
1497            #[cfg(feature = "ffmpeg_8_0")]
1498            Pixel::GRAY32BE => AV_PIX_FMT_GRAY32BE,
1499            #[cfg(feature = "ffmpeg_8_0")]
1500            Pixel::GRAY32LE => AV_PIX_FMT_GRAY32LE,
1501            #[cfg(feature = "ffmpeg_8_0")]
1502            Pixel::YAF16BE => AV_PIX_FMT_YAF16BE,
1503            #[cfg(feature = "ffmpeg_8_0")]
1504            Pixel::YAF16LE => AV_PIX_FMT_YAF16LE,
1505            #[cfg(feature = "ffmpeg_8_0")]
1506            Pixel::YAF32BE => AV_PIX_FMT_YAF32BE,
1507            #[cfg(feature = "ffmpeg_8_0")]
1508            Pixel::YAF32LE => AV_PIX_FMT_YAF32LE,
1509            #[cfg(feature = "ffmpeg_8_0")]
1510            Pixel::GBRAP32BE => AV_PIX_FMT_GBRAP32BE,
1511            #[cfg(feature = "ffmpeg_8_0")]
1512            Pixel::GBRAP32LE => AV_PIX_FMT_GBRAP32LE,
1513            #[cfg(feature = "ffmpeg_8_0")]
1514            Pixel::OHCODEC => AV_PIX_FMT_OHCODEC,
1515            #[cfg(feature = "ffmpeg_8_0")]
1516            Pixel::YUV444P10MSB => AV_PIX_FMT_YUV444P10MSB,
1517            #[cfg(feature = "ffmpeg_8_0")]
1518            Pixel::YUV444P10MSBBE => AV_PIX_FMT_YUV444P10MSBBE,
1519            #[cfg(feature = "ffmpeg_8_0")]
1520            Pixel::YUV444P10MSBLE => AV_PIX_FMT_YUV444P10MSBLE,
1521            #[cfg(feature = "ffmpeg_8_0")]
1522            Pixel::YUV444P12MSB => AV_PIX_FMT_YUV444P12MSB,
1523            #[cfg(feature = "ffmpeg_8_0")]
1524            Pixel::YUV444P12MSBBE => AV_PIX_FMT_YUV444P12MSBBE,
1525            #[cfg(feature = "ffmpeg_8_0")]
1526            Pixel::YUV444P12MSBLE => AV_PIX_FMT_YUV444P12MSBLE,
1527            #[cfg(feature = "ffmpeg_8_0")]
1528            Pixel::GBRP10MSB => AV_PIX_FMT_GBRP10MSB,
1529            #[cfg(feature = "ffmpeg_8_0")]
1530            Pixel::GBRP10MSBBE => AV_PIX_FMT_GBRP10MSBBE,
1531            #[cfg(feature = "ffmpeg_8_0")]
1532            Pixel::GBRP10MSBLE => AV_PIX_FMT_GBRP10MSBLE,
1533            #[cfg(feature = "ffmpeg_8_0")]
1534            Pixel::GBRP12MSB => AV_PIX_FMT_GBRP12MSB,
1535            #[cfg(feature = "ffmpeg_8_0")]
1536            Pixel::GBRP12MSBBE => AV_PIX_FMT_GBRP12MSBBE,
1537            #[cfg(feature = "ffmpeg_8_0")]
1538            Pixel::GBRP12MSBLE => AV_PIX_FMT_GBRP12MSBLE,
1539
1540            #[cfg(feature = "rpi")]
1541            Pixel::SAND128 => AV_PIX_FMT_SAND128,
1542            #[cfg(feature = "rpi")]
1543            Pixel::SAND64_10 => AV_PIX_FMT_SAND64_10,
1544            #[cfg(feature = "rpi")]
1545            Pixel::SAND64_16 => AV_PIX_FMT_SAND64_16,
1546            #[cfg(feature = "rpi")]
1547            Pixel::RPI4_8 => AV_PIX_FMT_RPI4_8,
1548            #[cfg(feature = "rpi")]
1549            Pixel::RPI4_10 => AV_PIX_FMT_RPI4_10,
1550        }
1551    }
1552}
1553
1554#[derive(Debug)]
1555pub enum ParsePixelError {
1556    NulError(NulError),
1557    UnknownFormat,
1558}
1559
1560impl fmt::Display for ParsePixelError {
1561    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
1562        match *self {
1563            ParsePixelError::NulError(ref e) => e.fmt(f),
1564            ParsePixelError::UnknownFormat => write!(f, "unknown pixel format"),
1565        }
1566    }
1567}
1568
1569impl error::Error for ParsePixelError {
1570    fn cause(&self) -> Option<&dyn error::Error> {
1571        match *self {
1572            ParsePixelError::NulError(ref e) => Some(e),
1573            ParsePixelError::UnknownFormat => None,
1574        }
1575    }
1576}
1577
1578impl From<NulError> for ParsePixelError {
1579    fn from(x: NulError) -> ParsePixelError {
1580        ParsePixelError::NulError(x)
1581    }
1582}
1583
1584impl FromStr for Pixel {
1585    type Err = ParsePixelError;
1586
1587    #[inline(always)]
1588    fn from_str(s: &str) -> Result<Pixel, ParsePixelError> {
1589        let cstring = CString::new(s)?;
1590        let format = unsafe { av_get_pix_fmt(cstring.as_ptr()) }.into();
1591
1592        if format == Pixel::None {
1593            Err(ParsePixelError::UnknownFormat)
1594        } else {
1595            Ok(format)
1596        }
1597    }
1598}