ffmpeg_the_third/util/format/
pixel.rs

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