1use std::error;
2use std::ffi::{CStr, CString, NulError};
3use std::fmt;
4use std::str::{from_utf8_unchecked, FromStr};
5
6use ffi::AVPixelFormat::*;
7use ffi::*;
8
9#[derive(Eq, PartialEq, Copy, Clone, Debug)]
10pub enum Pixel {
11 None,
12
13 YUV420P,
14 YUYV422,
15 RGB24,
16 BGR24,
17 YUV422P,
18 YUV444P,
19 YUV410P,
20 YUV411P,
21 GRAY8,
22 MonoWhite,
23 MonoBlack,
24 PAL8,
25 YUVJ420P,
26 YUVJ422P,
27 YUVJ444P,
28 #[cfg(feature = "ff_api_xvmc")]
29 XVMC_MPEG2_MC,
30 #[cfg(feature = "ff_api_xvmc")]
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 #[cfg(not(feature = "ff_api_xvmc"))]
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 = "rpi")]
372 RPI,
373 #[cfg(feature = "rpi")]
374 SAND128,
375 #[cfg(feature = "rpi")]
376 SAND64_10,
377 #[cfg(feature = "rpi")]
378 SAND64_16,
379 #[cfg(feature = "rpi")]
380 RPI4_8,
381 #[cfg(feature = "rpi")]
382 RPI4_10,
383}
384
385#[derive(Clone, Copy, PartialEq, Eq)]
386pub struct Descriptor {
387 ptr: *const AVPixFmtDescriptor,
388}
389
390unsafe impl Send for Descriptor {}
391unsafe impl Sync for Descriptor {}
392
393impl Pixel {
394 pub const Y400A: Pixel = Pixel::YA8;
395 pub const GRAY8A: Pixel = Pixel::YA8;
396 pub const GBR24P: Pixel = Pixel::GBRP;
397 #[cfg(feature = "ff_api_xvmc")]
398 pub const XVMC: Pixel = Pixel::XVMC_MPEG2_IDCT;
399
400 pub fn descriptor(self) -> Option<Descriptor> {
401 unsafe {
402 let ptr = av_pix_fmt_desc_get(self.into());
403
404 ptr.as_ref().map(|ptr| Descriptor { ptr })
405 }
406 }
407}
408
409impl Descriptor {
410 pub fn as_ptr(self) -> *const AVPixFmtDescriptor {
411 self.ptr
412 }
413
414 pub fn name(self) -> &'static str {
415 unsafe { from_utf8_unchecked(CStr::from_ptr((*self.as_ptr()).name).to_bytes()) }
416 }
417
418 pub fn nb_components(self) -> u8 {
419 unsafe { (*self.as_ptr()).nb_components }
420 }
421
422 pub fn log2_chroma_w(self) -> u8 {
423 unsafe { (*self.as_ptr()).log2_chroma_w }
424 }
425
426 pub fn log2_chroma_h(self) -> u8 {
427 unsafe { (*self.as_ptr()).log2_chroma_h }
428 }
429}
430
431impl From<AVPixelFormat> for Pixel {
432 #[inline]
433 fn from(value: AVPixelFormat) -> Self {
434 match value {
435 AV_PIX_FMT_NONE => Pixel::None,
436
437 AV_PIX_FMT_YUV420P => Pixel::YUV420P,
438 AV_PIX_FMT_YUYV422 => Pixel::YUYV422,
439 AV_PIX_FMT_RGB24 => Pixel::RGB24,
440 AV_PIX_FMT_BGR24 => Pixel::BGR24,
441 AV_PIX_FMT_YUV422P => Pixel::YUV422P,
442 AV_PIX_FMT_YUV444P => Pixel::YUV444P,
443 AV_PIX_FMT_YUV410P => Pixel::YUV410P,
444 AV_PIX_FMT_YUV411P => Pixel::YUV411P,
445 AV_PIX_FMT_GRAY8 => Pixel::GRAY8,
446 AV_PIX_FMT_MONOWHITE => Pixel::MonoWhite,
447 AV_PIX_FMT_MONOBLACK => Pixel::MonoBlack,
448 AV_PIX_FMT_PAL8 => Pixel::PAL8,
449 AV_PIX_FMT_YUVJ420P => Pixel::YUVJ420P,
450 AV_PIX_FMT_YUVJ422P => Pixel::YUVJ422P,
451 AV_PIX_FMT_YUVJ444P => Pixel::YUVJ444P,
452 #[cfg(not(feature = "ff_api_xvmc"))]
453 AV_PIX_FMT_XVMC => Pixel::XVMC,
454 #[cfg(feature = "ff_api_xvmc")]
455 AV_PIX_FMT_XVMC_MPEG2_MC => Pixel::XVMC_MPEG2_MC,
456 #[cfg(feature = "ff_api_xvmc")]
457 AV_PIX_FMT_XVMC_MPEG2_IDCT => Pixel::XVMC_MPEG2_IDCT,
458 AV_PIX_FMT_UYVY422 => Pixel::UYVY422,
459 AV_PIX_FMT_UYYVYY411 => Pixel::UYYVYY411,
460 AV_PIX_FMT_BGR8 => Pixel::BGR8,
461 AV_PIX_FMT_BGR4 => Pixel::BGR4,
462 AV_PIX_FMT_BGR4_BYTE => Pixel::BGR4_BYTE,
463 AV_PIX_FMT_RGB8 => Pixel::RGB8,
464 AV_PIX_FMT_RGB4 => Pixel::RGB4,
465 AV_PIX_FMT_RGB4_BYTE => Pixel::RGB4_BYTE,
466 AV_PIX_FMT_NV12 => Pixel::NV12,
467 AV_PIX_FMT_NV21 => Pixel::NV21,
468
469 AV_PIX_FMT_ARGB => Pixel::ARGB,
470 AV_PIX_FMT_RGBA => Pixel::RGBA,
471 AV_PIX_FMT_ABGR => Pixel::ABGR,
472 AV_PIX_FMT_BGRA => Pixel::BGRA,
473
474 AV_PIX_FMT_GRAY16BE => Pixel::GRAY16BE,
475 AV_PIX_FMT_GRAY16LE => Pixel::GRAY16LE,
476 AV_PIX_FMT_YUV440P => Pixel::YUV440P,
477 AV_PIX_FMT_YUVJ440P => Pixel::YUVJ440P,
478 AV_PIX_FMT_YUVA420P => Pixel::YUVA420P,
479 #[cfg(feature = "ff_api_vdpau")]
480 AV_PIX_FMT_VDPAU_H264 => Pixel::VDPAU_H264,
481 #[cfg(feature = "ff_api_vdpau")]
482 AV_PIX_FMT_VDPAU_MPEG1 => Pixel::VDPAU_MPEG1,
483 #[cfg(feature = "ff_api_vdpau")]
484 AV_PIX_FMT_VDPAU_MPEG2 => Pixel::VDPAU_MPEG2,
485 #[cfg(feature = "ff_api_vdpau")]
486 AV_PIX_FMT_VDPAU_WMV3 => Pixel::VDPAU_WMV3,
487 #[cfg(feature = "ff_api_vdpau")]
488 AV_PIX_FMT_VDPAU_VC1 => Pixel::VDPAU_VC1,
489 AV_PIX_FMT_RGB48BE => Pixel::RGB48BE,
490 AV_PIX_FMT_RGB48LE => Pixel::RGB48LE,
491
492 AV_PIX_FMT_RGB565BE => Pixel::RGB565BE,
493 AV_PIX_FMT_RGB565LE => Pixel::RGB565LE,
494 AV_PIX_FMT_RGB555BE => Pixel::RGB555BE,
495 AV_PIX_FMT_RGB555LE => Pixel::RGB555LE,
496
497 AV_PIX_FMT_BGR565BE => Pixel::BGR565BE,
498 AV_PIX_FMT_BGR565LE => Pixel::BGR565LE,
499 AV_PIX_FMT_BGR555BE => Pixel::BGR555BE,
500 AV_PIX_FMT_BGR555LE => Pixel::BGR555LE,
501
502 #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
503 AV_PIX_FMT_VAAPI_MOCO => Pixel::VAAPI_MOCO,
504 #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
505 AV_PIX_FMT_VAAPI_IDCT => Pixel::VAAPI_IDCT,
506 #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
507 AV_PIX_FMT_VAAPI_VLD => Pixel::VAAPI_VLD,
508 #[cfg(any(not(feature = "ff_api_vaapi"), feature = "ffmpeg_5_0"))]
509 AV_PIX_FMT_VAAPI => Pixel::VAAPI,
510
511 AV_PIX_FMT_YUV420P16LE => Pixel::YUV420P16LE,
512 AV_PIX_FMT_YUV420P16BE => Pixel::YUV420P16BE,
513 AV_PIX_FMT_YUV422P16LE => Pixel::YUV422P16LE,
514 AV_PIX_FMT_YUV422P16BE => Pixel::YUV422P16BE,
515 AV_PIX_FMT_YUV444P16LE => Pixel::YUV444P16LE,
516 AV_PIX_FMT_YUV444P16BE => Pixel::YUV444P16BE,
517 #[cfg(feature = "ff_api_vdpau")]
518 AV_PIX_FMT_VDPAU_MPEG4 => Pixel::VDPAU_MPEG4,
519 AV_PIX_FMT_DXVA2_VLD => Pixel::DXVA2_VLD,
520
521 AV_PIX_FMT_RGB444LE => Pixel::RGB444LE,
522 AV_PIX_FMT_RGB444BE => Pixel::RGB444BE,
523 AV_PIX_FMT_BGR444LE => Pixel::BGR444LE,
524 AV_PIX_FMT_BGR444BE => Pixel::BGR444BE,
525 AV_PIX_FMT_YA8 => Pixel::YA8,
526
527 AV_PIX_FMT_BGR48BE => Pixel::BGR48BE,
528 AV_PIX_FMT_BGR48LE => Pixel::BGR48LE,
529
530 AV_PIX_FMT_YUV420P9BE => Pixel::YUV420P9BE,
531 AV_PIX_FMT_YUV420P9LE => Pixel::YUV420P9LE,
532 AV_PIX_FMT_YUV420P10BE => Pixel::YUV420P10BE,
533 AV_PIX_FMT_YUV420P10LE => Pixel::YUV420P10LE,
534 AV_PIX_FMT_YUV422P10BE => Pixel::YUV422P10BE,
535 AV_PIX_FMT_YUV422P10LE => Pixel::YUV422P10LE,
536 AV_PIX_FMT_YUV444P9BE => Pixel::YUV444P9BE,
537 AV_PIX_FMT_YUV444P9LE => Pixel::YUV444P9LE,
538 AV_PIX_FMT_YUV444P10BE => Pixel::YUV444P10BE,
539 AV_PIX_FMT_YUV444P10LE => Pixel::YUV444P10LE,
540 AV_PIX_FMT_YUV422P9BE => Pixel::YUV422P9BE,
541 AV_PIX_FMT_YUV422P9LE => Pixel::YUV422P9LE,
542 #[cfg(not(feature = "ffmpeg_4_0"))]
543 AV_PIX_FMT_VDA_VLD => Pixel::VDA_VLD,
544
545 AV_PIX_FMT_GBRP => Pixel::GBRP,
546 AV_PIX_FMT_GBRP9BE => Pixel::GBRP9BE,
547 AV_PIX_FMT_GBRP9LE => Pixel::GBRP9LE,
548 AV_PIX_FMT_GBRP10BE => Pixel::GBRP10BE,
549 AV_PIX_FMT_GBRP10LE => Pixel::GBRP10LE,
550 AV_PIX_FMT_GBRP16BE => Pixel::GBRP16BE,
551 AV_PIX_FMT_GBRP16LE => Pixel::GBRP16LE,
552
553 AV_PIX_FMT_YUVA420P9BE => Pixel::YUVA420P9BE,
554 AV_PIX_FMT_YUVA420P9LE => Pixel::YUVA420P9LE,
555 AV_PIX_FMT_YUVA422P9BE => Pixel::YUVA422P9BE,
556 AV_PIX_FMT_YUVA422P9LE => Pixel::YUVA422P9LE,
557 AV_PIX_FMT_YUVA444P9BE => Pixel::YUVA444P9BE,
558 AV_PIX_FMT_YUVA444P9LE => Pixel::YUVA444P9LE,
559 AV_PIX_FMT_YUVA420P10BE => Pixel::YUVA420P10BE,
560 AV_PIX_FMT_YUVA420P10LE => Pixel::YUVA420P10LE,
561 AV_PIX_FMT_YUVA422P10BE => Pixel::YUVA422P10BE,
562 AV_PIX_FMT_YUVA422P10LE => Pixel::YUVA422P10LE,
563 AV_PIX_FMT_YUVA444P10BE => Pixel::YUVA444P10BE,
564 AV_PIX_FMT_YUVA444P10LE => Pixel::YUVA444P10LE,
565 AV_PIX_FMT_YUVA420P16BE => Pixel::YUVA420P16BE,
566 AV_PIX_FMT_YUVA420P16LE => Pixel::YUVA420P16LE,
567 AV_PIX_FMT_YUVA422P16BE => Pixel::YUVA422P16BE,
568 AV_PIX_FMT_YUVA422P16LE => Pixel::YUVA422P16LE,
569 AV_PIX_FMT_YUVA444P16BE => Pixel::YUVA444P16BE,
570 AV_PIX_FMT_YUVA444P16LE => Pixel::YUVA444P16LE,
571
572 AV_PIX_FMT_VDPAU => Pixel::VDPAU,
573
574 AV_PIX_FMT_XYZ12LE => Pixel::XYZ12LE,
575 AV_PIX_FMT_XYZ12BE => Pixel::XYZ12BE,
576 AV_PIX_FMT_NV16 => Pixel::NV16,
577 AV_PIX_FMT_NV20LE => Pixel::NV20LE,
578 AV_PIX_FMT_NV20BE => Pixel::NV20BE,
579
580 AV_PIX_FMT_RGBA64BE => Pixel::RGBA64BE,
581 AV_PIX_FMT_RGBA64LE => Pixel::RGBA64LE,
582 AV_PIX_FMT_BGRA64BE => Pixel::BGRA64BE,
583 AV_PIX_FMT_BGRA64LE => Pixel::BGRA64LE,
584
585 AV_PIX_FMT_YVYU422 => Pixel::YVYU422,
586
587 #[cfg(not(feature = "ffmpeg_4_0"))]
588 AV_PIX_FMT_VDA => Pixel::VDA,
589
590 AV_PIX_FMT_YA16BE => Pixel::YA16BE,
591 AV_PIX_FMT_YA16LE => Pixel::YA16LE,
592
593 AV_PIX_FMT_QSV => Pixel::QSV,
594 AV_PIX_FMT_MMAL => Pixel::MMAL,
595
596 AV_PIX_FMT_D3D11VA_VLD => Pixel::D3D11VA_VLD,
597
598 AV_PIX_FMT_CUDA => Pixel::CUDA,
599
600 AV_PIX_FMT_0RGB => Pixel::ZRGB,
601 AV_PIX_FMT_RGB0 => Pixel::RGBZ,
602 AV_PIX_FMT_0BGR => Pixel::ZBGR,
603 AV_PIX_FMT_BGR0 => Pixel::BGRZ,
604 AV_PIX_FMT_YUVA444P => Pixel::YUVA444P,
605 AV_PIX_FMT_YUVA422P => Pixel::YUVA422P,
606
607 AV_PIX_FMT_YUV420P12BE => Pixel::YUV420P12BE,
608 AV_PIX_FMT_YUV420P12LE => Pixel::YUV420P12LE,
609 AV_PIX_FMT_YUV420P14BE => Pixel::YUV420P14BE,
610 AV_PIX_FMT_YUV420P14LE => Pixel::YUV420P14LE,
611 AV_PIX_FMT_YUV422P12BE => Pixel::YUV422P12BE,
612 AV_PIX_FMT_YUV422P12LE => Pixel::YUV422P12LE,
613 AV_PIX_FMT_YUV422P14BE => Pixel::YUV422P14BE,
614 AV_PIX_FMT_YUV422P14LE => Pixel::YUV422P14LE,
615 AV_PIX_FMT_YUV444P12BE => Pixel::YUV444P12BE,
616 AV_PIX_FMT_YUV444P12LE => Pixel::YUV444P12LE,
617 AV_PIX_FMT_YUV444P14BE => Pixel::YUV444P14BE,
618 AV_PIX_FMT_YUV444P14LE => Pixel::YUV444P14LE,
619 AV_PIX_FMT_GBRP12BE => Pixel::GBRP12BE,
620 AV_PIX_FMT_GBRP12LE => Pixel::GBRP12LE,
621 AV_PIX_FMT_GBRP14BE => Pixel::GBRP14BE,
622 AV_PIX_FMT_GBRP14LE => Pixel::GBRP14LE,
623 AV_PIX_FMT_GBRAP => Pixel::GBRAP,
624 AV_PIX_FMT_GBRAP16BE => Pixel::GBRAP16BE,
625 AV_PIX_FMT_GBRAP16LE => Pixel::GBRAP16LE,
626 AV_PIX_FMT_YUVJ411P => Pixel::YUVJ411P,
627
628 AV_PIX_FMT_BAYER_BGGR8 => Pixel::BAYER_BGGR8,
629 AV_PIX_FMT_BAYER_RGGB8 => Pixel::BAYER_RGGB8,
630 AV_PIX_FMT_BAYER_GBRG8 => Pixel::BAYER_GBRG8,
631 AV_PIX_FMT_BAYER_GRBG8 => Pixel::BAYER_GRBG8,
632 AV_PIX_FMT_BAYER_BGGR16LE => Pixel::BAYER_BGGR16LE,
633 AV_PIX_FMT_BAYER_BGGR16BE => Pixel::BAYER_BGGR16BE,
634 AV_PIX_FMT_BAYER_RGGB16LE => Pixel::BAYER_RGGB16LE,
635 AV_PIX_FMT_BAYER_RGGB16BE => Pixel::BAYER_RGGB16BE,
636 AV_PIX_FMT_BAYER_GBRG16LE => Pixel::BAYER_GBRG16LE,
637 AV_PIX_FMT_BAYER_GBRG16BE => Pixel::BAYER_GBRG16BE,
638 AV_PIX_FMT_BAYER_GRBG16LE => Pixel::BAYER_GRBG16LE,
639 AV_PIX_FMT_BAYER_GRBG16BE => Pixel::BAYER_GRBG16BE,
640
641 AV_PIX_FMT_YUV440P10LE => Pixel::YUV440P10LE,
642 AV_PIX_FMT_YUV440P10BE => Pixel::YUV440P10BE,
643 AV_PIX_FMT_YUV440P12LE => Pixel::YUV440P12LE,
644 AV_PIX_FMT_YUV440P12BE => Pixel::YUV440P12BE,
645 AV_PIX_FMT_AYUV64LE => Pixel::AYUV64LE,
646 AV_PIX_FMT_AYUV64BE => Pixel::AYUV64BE,
647
648 AV_PIX_FMT_VIDEOTOOLBOX => Pixel::VIDEOTOOLBOX,
649
650 AV_PIX_FMT_P010LE => Pixel::P010LE,
651 AV_PIX_FMT_P010BE => Pixel::P010BE,
652 AV_PIX_FMT_GBRAP12BE => Pixel::GBRAP12BE,
653 AV_PIX_FMT_GBRAP12LE => Pixel::GBRAP12LE,
654 AV_PIX_FMT_GBRAP10LE => Pixel::GBRAP10LE,
655 AV_PIX_FMT_GBRAP10BE => Pixel::GBRAP10BE,
656 AV_PIX_FMT_MEDIACODEC => Pixel::MEDIACODEC,
657 AV_PIX_FMT_GRAY12BE => Pixel::GRAY12BE,
658 AV_PIX_FMT_GRAY12LE => Pixel::GRAY12LE,
659 AV_PIX_FMT_GRAY10BE => Pixel::GRAY10BE,
660 AV_PIX_FMT_GRAY10LE => Pixel::GRAY10LE,
661 AV_PIX_FMT_P016LE => Pixel::P016LE,
662 AV_PIX_FMT_P016BE => Pixel::P016BE,
663
664 AV_PIX_FMT_NB => Pixel::None,
665
666 AV_PIX_FMT_D3D11 => Pixel::D3D11,
667 AV_PIX_FMT_GRAY9BE => Pixel::GRAY9BE,
668 AV_PIX_FMT_GRAY9LE => Pixel::GRAY9LE,
669 AV_PIX_FMT_GBRPF32BE => Pixel::GBRPF32BE,
670 AV_PIX_FMT_GBRPF32LE => Pixel::GBRPF32LE,
671 AV_PIX_FMT_GBRAPF32BE => Pixel::GBRAPF32BE,
672 AV_PIX_FMT_GBRAPF32LE => Pixel::GBRAPF32LE,
673 AV_PIX_FMT_DRM_PRIME => Pixel::DRM_PRIME,
674
675 #[cfg(feature = "ffmpeg_4_0")]
676 AV_PIX_FMT_OPENCL => Pixel::OPENCL,
677
678 #[cfg(feature = "ffmpeg_4_1")]
679 AV_PIX_FMT_GRAY14BE => Pixel::GRAY14BE,
680 #[cfg(feature = "ffmpeg_4_1")]
681 AV_PIX_FMT_GRAY14LE => Pixel::GRAY14LE,
682 #[cfg(feature = "ffmpeg_4_1")]
683 AV_PIX_FMT_GRAYF32BE => Pixel::GRAYF32BE,
684 #[cfg(feature = "ffmpeg_4_1")]
685 AV_PIX_FMT_GRAYF32LE => Pixel::GRAYF32LE,
686
687 #[cfg(feature = "ffmpeg_4_2")]
688 AV_PIX_FMT_YUVA422P12BE => Pixel::YUVA422P12BE,
689 #[cfg(feature = "ffmpeg_4_2")]
690 AV_PIX_FMT_YUVA422P12LE => Pixel::YUVA422P12LE,
691 #[cfg(feature = "ffmpeg_4_2")]
692 AV_PIX_FMT_YUVA444P12BE => Pixel::YUVA444P12BE,
693 #[cfg(feature = "ffmpeg_4_2")]
694 AV_PIX_FMT_YUVA444P12LE => Pixel::YUVA444P12LE,
695 #[cfg(feature = "ffmpeg_4_2")]
696 AV_PIX_FMT_NV24 => Pixel::NV24,
697 #[cfg(feature = "ffmpeg_4_2")]
698 AV_PIX_FMT_NV42 => Pixel::NV42,
699
700 #[cfg(feature = "ffmpeg_4_3")]
701 AV_PIX_FMT_VULKAN => Pixel::VULKAN,
702 #[cfg(feature = "ffmpeg_4_3")]
703 AV_PIX_FMT_Y210BE => Pixel::Y210BE,
704 #[cfg(feature = "ffmpeg_4_3")]
705 AV_PIX_FMT_Y210LE => Pixel::Y210LE,
706
707 #[cfg(feature = "ffmpeg_4_4")]
708 AV_PIX_FMT_X2RGB10LE => Pixel::X2RGB10LE,
709 #[cfg(feature = "ffmpeg_4_4")]
710 AV_PIX_FMT_X2RGB10BE => Pixel::X2RGB10BE,
711
712 #[cfg(feature = "ffmpeg_5_0")]
713 AV_PIX_FMT_X2BGR10LE => Pixel::X2BGR10LE,
714 #[cfg(feature = "ffmpeg_5_0")]
715 AV_PIX_FMT_X2BGR10BE => Pixel::X2BGR10BE,
716 #[cfg(feature = "ffmpeg_5_0")]
717 AV_PIX_FMT_P210BE => Pixel::P210BE,
718 #[cfg(feature = "ffmpeg_5_0")]
719 AV_PIX_FMT_P210LE => Pixel::P210LE,
720 #[cfg(feature = "ffmpeg_5_0")]
721 AV_PIX_FMT_P410BE => Pixel::P410BE,
722 #[cfg(feature = "ffmpeg_5_0")]
723 AV_PIX_FMT_P410LE => Pixel::P410LE,
724 #[cfg(feature = "ffmpeg_5_0")]
725 AV_PIX_FMT_P216BE => Pixel::P216BE,
726 #[cfg(feature = "ffmpeg_5_0")]
727 AV_PIX_FMT_P216LE => Pixel::P216LE,
728 #[cfg(feature = "ffmpeg_5_0")]
729 AV_PIX_FMT_P416BE => Pixel::P416BE,
730 #[cfg(feature = "ffmpeg_5_0")]
731 AV_PIX_FMT_P416LE => Pixel::P416LE,
732
733 #[cfg(feature = "rpi")]
734 AV_PIX_FMT_RPI => Pixel::RPI,
735 #[cfg(feature = "rpi")]
736 AV_PIX_FMT_SAND128 => Pixel::SAND128,
737 #[cfg(feature = "rpi")]
738 AV_PIX_FMT_SAND64_10 => Pixel::SAND64_10,
739 #[cfg(feature = "rpi")]
740 AV_PIX_FMT_SAND64_16 => Pixel::SAND64_16,
741 #[cfg(feature = "rpi")]
742 AV_PIX_FMT_RPI4_8 => Pixel::RPI4_8,
743 #[cfg(feature = "rpi")]
744 AV_PIX_FMT_RPI4_10 => Pixel::RPI4_10,
745 }
746 }
747}
748
749impl From<Pixel> for AVPixelFormat {
750 #[inline]
751 fn from(value: Pixel) -> AVPixelFormat {
752 match value {
753 Pixel::None => AV_PIX_FMT_NONE,
754
755 Pixel::YUV420P => AV_PIX_FMT_YUV420P,
756 Pixel::YUYV422 => AV_PIX_FMT_YUYV422,
757 Pixel::RGB24 => AV_PIX_FMT_RGB24,
758 Pixel::BGR24 => AV_PIX_FMT_BGR24,
759 Pixel::YUV422P => AV_PIX_FMT_YUV422P,
760 Pixel::YUV444P => AV_PIX_FMT_YUV444P,
761 Pixel::YUV410P => AV_PIX_FMT_YUV410P,
762 Pixel::YUV411P => AV_PIX_FMT_YUV411P,
763 Pixel::GRAY8 => AV_PIX_FMT_GRAY8,
764 Pixel::MonoWhite => AV_PIX_FMT_MONOWHITE,
765 Pixel::MonoBlack => AV_PIX_FMT_MONOBLACK,
766 Pixel::PAL8 => AV_PIX_FMT_PAL8,
767 Pixel::YUVJ420P => AV_PIX_FMT_YUVJ420P,
768 Pixel::YUVJ422P => AV_PIX_FMT_YUVJ422P,
769 Pixel::YUVJ444P => AV_PIX_FMT_YUVJ444P,
770 #[cfg(feature = "ff_api_xvmc")]
771 Pixel::XVMC_MPEG2_MC => AV_PIX_FMT_XVMC_MPEG2_MC,
772 #[cfg(feature = "ff_api_xvmc")]
773 Pixel::XVMC_MPEG2_IDCT => AV_PIX_FMT_XVMC_MPEG2_IDCT,
774 Pixel::UYVY422 => AV_PIX_FMT_UYVY422,
775 Pixel::UYYVYY411 => AV_PIX_FMT_UYYVYY411,
776 Pixel::BGR8 => AV_PIX_FMT_BGR8,
777 Pixel::BGR4 => AV_PIX_FMT_BGR4,
778 Pixel::BGR4_BYTE => AV_PIX_FMT_BGR4_BYTE,
779 Pixel::RGB8 => AV_PIX_FMT_RGB8,
780 Pixel::RGB4 => AV_PIX_FMT_RGB4,
781 Pixel::RGB4_BYTE => AV_PIX_FMT_RGB4_BYTE,
782 Pixel::NV12 => AV_PIX_FMT_NV12,
783 Pixel::NV21 => AV_PIX_FMT_NV21,
784
785 Pixel::ARGB => AV_PIX_FMT_ARGB,
786 Pixel::RGBA => AV_PIX_FMT_RGBA,
787 Pixel::ABGR => AV_PIX_FMT_ABGR,
788 Pixel::BGRA => AV_PIX_FMT_BGRA,
789
790 Pixel::GRAY16BE => AV_PIX_FMT_GRAY16BE,
791 Pixel::GRAY16LE => AV_PIX_FMT_GRAY16LE,
792 Pixel::YUV440P => AV_PIX_FMT_YUV440P,
793 Pixel::YUVJ440P => AV_PIX_FMT_YUVJ440P,
794 Pixel::YUVA420P => AV_PIX_FMT_YUVA420P,
795 #[cfg(feature = "ff_api_vdpau")]
796 Pixel::VDPAU_H264 => AV_PIX_FMT_VDPAU_H264,
797 #[cfg(feature = "ff_api_vdpau")]
798 Pixel::VDPAU_MPEG1 => AV_PIX_FMT_VDPAU_MPEG1,
799 #[cfg(feature = "ff_api_vdpau")]
800 Pixel::VDPAU_MPEG2 => AV_PIX_FMT_VDPAU_MPEG2,
801 #[cfg(feature = "ff_api_vdpau")]
802 Pixel::VDPAU_WMV3 => AV_PIX_FMT_VDPAU_WMV3,
803 #[cfg(feature = "ff_api_vdpau")]
804 Pixel::VDPAU_VC1 => AV_PIX_FMT_VDPAU_VC1,
805 Pixel::RGB48BE => AV_PIX_FMT_RGB48BE,
806 Pixel::RGB48LE => AV_PIX_FMT_RGB48LE,
807
808 Pixel::RGB565BE => AV_PIX_FMT_RGB565BE,
809 Pixel::RGB565LE => AV_PIX_FMT_RGB565LE,
810 Pixel::RGB555BE => AV_PIX_FMT_RGB555BE,
811 Pixel::RGB555LE => AV_PIX_FMT_RGB555LE,
812
813 Pixel::BGR565BE => AV_PIX_FMT_BGR565BE,
814 Pixel::BGR565LE => AV_PIX_FMT_BGR565LE,
815 Pixel::BGR555BE => AV_PIX_FMT_BGR555BE,
816 Pixel::BGR555LE => AV_PIX_FMT_BGR555LE,
817
818 #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
819 Pixel::VAAPI_MOCO => AV_PIX_FMT_VAAPI_MOCO,
820 #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
821 Pixel::VAAPI_IDCT => AV_PIX_FMT_VAAPI_IDCT,
822 #[cfg(all(feature = "ff_api_vaapi", not(feature = "ffmpeg_5_0")))]
823 Pixel::VAAPI_VLD => AV_PIX_FMT_VAAPI_VLD,
824 #[cfg(not(feature = "ff_api_vaapi"))]
825 Pixel::VAAPI => AV_PIX_FMT_VAAPI,
826
827 Pixel::YUV420P16LE => AV_PIX_FMT_YUV420P16LE,
828 Pixel::YUV420P16BE => AV_PIX_FMT_YUV420P16BE,
829 Pixel::YUV422P16LE => AV_PIX_FMT_YUV422P16LE,
830 Pixel::YUV422P16BE => AV_PIX_FMT_YUV422P16BE,
831 Pixel::YUV444P16LE => AV_PIX_FMT_YUV444P16LE,
832 Pixel::YUV444P16BE => AV_PIX_FMT_YUV444P16BE,
833 #[cfg(feature = "ff_api_vdpau")]
834 Pixel::VDPAU_MPEG4 => AV_PIX_FMT_VDPAU_MPEG4,
835 Pixel::DXVA2_VLD => AV_PIX_FMT_DXVA2_VLD,
836
837 Pixel::RGB444LE => AV_PIX_FMT_RGB444LE,
838 Pixel::RGB444BE => AV_PIX_FMT_RGB444BE,
839 Pixel::BGR444LE => AV_PIX_FMT_BGR444LE,
840 Pixel::BGR444BE => AV_PIX_FMT_BGR444BE,
841 Pixel::YA8 => AV_PIX_FMT_YA8,
842
843 Pixel::BGR48BE => AV_PIX_FMT_BGR48BE,
844 Pixel::BGR48LE => AV_PIX_FMT_BGR48LE,
845
846 Pixel::YUV420P9BE => AV_PIX_FMT_YUV420P9BE,
847 Pixel::YUV420P9LE => AV_PIX_FMT_YUV420P9LE,
848 Pixel::YUV420P10BE => AV_PIX_FMT_YUV420P10BE,
849 Pixel::YUV420P10LE => AV_PIX_FMT_YUV420P10LE,
850 Pixel::YUV422P10BE => AV_PIX_FMT_YUV422P10BE,
851 Pixel::YUV422P10LE => AV_PIX_FMT_YUV422P10LE,
852 Pixel::YUV444P9BE => AV_PIX_FMT_YUV444P9BE,
853 Pixel::YUV444P9LE => AV_PIX_FMT_YUV444P9LE,
854 Pixel::YUV444P10BE => AV_PIX_FMT_YUV444P10BE,
855 Pixel::YUV444P10LE => AV_PIX_FMT_YUV444P10LE,
856 Pixel::YUV422P9BE => AV_PIX_FMT_YUV422P9BE,
857 Pixel::YUV422P9LE => AV_PIX_FMT_YUV422P9LE,
858 #[cfg(not(feature = "ffmpeg_4_0"))]
859 Pixel::VDA_VLD => AV_PIX_FMT_VDA_VLD,
860
861 Pixel::GBRP => AV_PIX_FMT_GBRP,
862 Pixel::GBRP9BE => AV_PIX_FMT_GBRP9BE,
863 Pixel::GBRP9LE => AV_PIX_FMT_GBRP9LE,
864 Pixel::GBRP10BE => AV_PIX_FMT_GBRP10BE,
865 Pixel::GBRP10LE => AV_PIX_FMT_GBRP10LE,
866 Pixel::GBRP16BE => AV_PIX_FMT_GBRP16BE,
867 Pixel::GBRP16LE => AV_PIX_FMT_GBRP16LE,
868
869 Pixel::YUVA420P9BE => AV_PIX_FMT_YUVA420P9BE,
870 Pixel::YUVA420P9LE => AV_PIX_FMT_YUVA420P9LE,
871 Pixel::YUVA422P9BE => AV_PIX_FMT_YUVA422P9BE,
872 Pixel::YUVA422P9LE => AV_PIX_FMT_YUVA422P9LE,
873 Pixel::YUVA444P9BE => AV_PIX_FMT_YUVA444P9BE,
874 Pixel::YUVA444P9LE => AV_PIX_FMT_YUVA444P9LE,
875 Pixel::YUVA420P10BE => AV_PIX_FMT_YUVA420P10BE,
876 Pixel::YUVA420P10LE => AV_PIX_FMT_YUVA420P10LE,
877 Pixel::YUVA422P10BE => AV_PIX_FMT_YUVA422P10BE,
878 Pixel::YUVA422P10LE => AV_PIX_FMT_YUVA422P10LE,
879 Pixel::YUVA444P10BE => AV_PIX_FMT_YUVA444P10BE,
880 Pixel::YUVA444P10LE => AV_PIX_FMT_YUVA444P10LE,
881 Pixel::YUVA420P16BE => AV_PIX_FMT_YUVA420P16BE,
882 Pixel::YUVA420P16LE => AV_PIX_FMT_YUVA420P16LE,
883 Pixel::YUVA422P16BE => AV_PIX_FMT_YUVA422P16BE,
884 Pixel::YUVA422P16LE => AV_PIX_FMT_YUVA422P16LE,
885 Pixel::YUVA444P16BE => AV_PIX_FMT_YUVA444P16BE,
886 Pixel::YUVA444P16LE => AV_PIX_FMT_YUVA444P16LE,
887
888 Pixel::VDPAU => AV_PIX_FMT_VDPAU,
889
890 Pixel::XYZ12LE => AV_PIX_FMT_XYZ12LE,
891 Pixel::XYZ12BE => AV_PIX_FMT_XYZ12BE,
892 Pixel::NV16 => AV_PIX_FMT_NV16,
893 Pixel::NV20LE => AV_PIX_FMT_NV20LE,
894 Pixel::NV20BE => AV_PIX_FMT_NV20BE,
895
896 Pixel::RGBA64BE => AV_PIX_FMT_RGBA64BE,
897 Pixel::RGBA64LE => AV_PIX_FMT_RGBA64LE,
898 Pixel::BGRA64BE => AV_PIX_FMT_BGRA64BE,
899 Pixel::BGRA64LE => AV_PIX_FMT_BGRA64LE,
900
901 Pixel::YVYU422 => AV_PIX_FMT_YVYU422,
902
903 #[cfg(not(feature = "ffmpeg_4_0"))]
904 Pixel::VDA => AV_PIX_FMT_VDA,
905
906 Pixel::YA16BE => AV_PIX_FMT_YA16BE,
907 Pixel::YA16LE => AV_PIX_FMT_YA16LE,
908
909 Pixel::QSV => AV_PIX_FMT_QSV,
910 Pixel::MMAL => AV_PIX_FMT_MMAL,
911
912 Pixel::D3D11VA_VLD => AV_PIX_FMT_D3D11VA_VLD,
913
914 Pixel::CUDA => AV_PIX_FMT_CUDA,
915
916 Pixel::ZRGB => AV_PIX_FMT_0RGB,
917 Pixel::RGBZ => AV_PIX_FMT_RGB0,
918 Pixel::ZBGR => AV_PIX_FMT_0BGR,
919 Pixel::BGRZ => AV_PIX_FMT_BGR0,
920 Pixel::YUVA444P => AV_PIX_FMT_YUVA444P,
921 Pixel::YUVA422P => AV_PIX_FMT_YUVA422P,
922
923 Pixel::YUV420P12BE => AV_PIX_FMT_YUV420P12BE,
924 Pixel::YUV420P12LE => AV_PIX_FMT_YUV420P12LE,
925 Pixel::YUV420P14BE => AV_PIX_FMT_YUV420P14BE,
926 Pixel::YUV420P14LE => AV_PIX_FMT_YUV420P14LE,
927 Pixel::YUV422P12BE => AV_PIX_FMT_YUV422P12BE,
928 Pixel::YUV422P12LE => AV_PIX_FMT_YUV422P12LE,
929 Pixel::YUV422P14BE => AV_PIX_FMT_YUV422P14BE,
930 Pixel::YUV422P14LE => AV_PIX_FMT_YUV422P14LE,
931 Pixel::YUV444P12BE => AV_PIX_FMT_YUV444P12BE,
932 Pixel::YUV444P12LE => AV_PIX_FMT_YUV444P12LE,
933 Pixel::YUV444P14BE => AV_PIX_FMT_YUV444P14BE,
934 Pixel::YUV444P14LE => AV_PIX_FMT_YUV444P14LE,
935 Pixel::GBRP12BE => AV_PIX_FMT_GBRP12BE,
936 Pixel::GBRP12LE => AV_PIX_FMT_GBRP12LE,
937 Pixel::GBRP14BE => AV_PIX_FMT_GBRP14BE,
938 Pixel::GBRP14LE => AV_PIX_FMT_GBRP14LE,
939 Pixel::GBRAP => AV_PIX_FMT_GBRAP,
940 Pixel::GBRAP16BE => AV_PIX_FMT_GBRAP16BE,
941 Pixel::GBRAP16LE => AV_PIX_FMT_GBRAP16LE,
942 Pixel::YUVJ411P => AV_PIX_FMT_YUVJ411P,
943
944 Pixel::BAYER_BGGR8 => AV_PIX_FMT_BAYER_BGGR8,
945 Pixel::BAYER_RGGB8 => AV_PIX_FMT_BAYER_RGGB8,
946 Pixel::BAYER_GBRG8 => AV_PIX_FMT_BAYER_GBRG8,
947 Pixel::BAYER_GRBG8 => AV_PIX_FMT_BAYER_GRBG8,
948 Pixel::BAYER_BGGR16LE => AV_PIX_FMT_BAYER_BGGR16LE,
949 Pixel::BAYER_BGGR16BE => AV_PIX_FMT_BAYER_BGGR16BE,
950 Pixel::BAYER_RGGB16LE => AV_PIX_FMT_BAYER_RGGB16LE,
951 Pixel::BAYER_RGGB16BE => AV_PIX_FMT_BAYER_RGGB16BE,
952 Pixel::BAYER_GBRG16LE => AV_PIX_FMT_BAYER_GBRG16LE,
953 Pixel::BAYER_GBRG16BE => AV_PIX_FMT_BAYER_GBRG16BE,
954 Pixel::BAYER_GRBG16LE => AV_PIX_FMT_BAYER_GRBG16LE,
955 Pixel::BAYER_GRBG16BE => AV_PIX_FMT_BAYER_GRBG16BE,
956
957 Pixel::YUV440P10LE => AV_PIX_FMT_YUV440P10LE,
958 Pixel::YUV440P10BE => AV_PIX_FMT_YUV440P10BE,
959 Pixel::YUV440P12LE => AV_PIX_FMT_YUV440P12LE,
960 Pixel::YUV440P12BE => AV_PIX_FMT_YUV440P12BE,
961 Pixel::AYUV64LE => AV_PIX_FMT_AYUV64LE,
962 Pixel::AYUV64BE => AV_PIX_FMT_AYUV64BE,
963
964 Pixel::VIDEOTOOLBOX => AV_PIX_FMT_VIDEOTOOLBOX,
965
966 #[cfg(not(feature = "ff_api_xvmc"))]
968 Pixel::XVMC => AV_PIX_FMT_XVMC,
969
970 Pixel::RGB32 => AV_PIX_FMT_RGB32,
971 Pixel::RGB32_1 => AV_PIX_FMT_RGB32_1,
972 Pixel::BGR32 => AV_PIX_FMT_BGR32,
973 Pixel::BGR32_1 => AV_PIX_FMT_BGR32_1,
974 Pixel::ZRGB32 => AV_PIX_FMT_0RGB32,
975 Pixel::ZBGR32 => AV_PIX_FMT_0BGR32,
976
977 Pixel::GRAY16 => AV_PIX_FMT_GRAY16,
978 Pixel::YA16 => AV_PIX_FMT_YA16,
979 Pixel::RGB48 => AV_PIX_FMT_RGB48,
980 Pixel::RGB565 => AV_PIX_FMT_RGB565,
981 Pixel::RGB555 => AV_PIX_FMT_RGB555,
982 Pixel::RGB444 => AV_PIX_FMT_RGB444,
983 Pixel::BGR48 => AV_PIX_FMT_BGR48,
984 Pixel::BGR565 => AV_PIX_FMT_BGR565,
985 Pixel::BGR555 => AV_PIX_FMT_BGR555,
986 Pixel::BGR444 => AV_PIX_FMT_BGR444,
987
988 Pixel::YUV420P9 => AV_PIX_FMT_YUV420P9,
989 Pixel::YUV422P9 => AV_PIX_FMT_YUV422P9,
990 Pixel::YUV444P9 => AV_PIX_FMT_YUV444P9,
991 Pixel::YUV420P10 => AV_PIX_FMT_YUV420P10,
992 Pixel::YUV422P10 => AV_PIX_FMT_YUV422P10,
993 Pixel::YUV440P10 => AV_PIX_FMT_YUV440P10,
994 Pixel::YUV444P10 => AV_PIX_FMT_YUV444P10,
995 Pixel::YUV420P12 => AV_PIX_FMT_YUV420P12,
996 Pixel::YUV422P12 => AV_PIX_FMT_YUV422P12,
997 Pixel::YUV440P12 => AV_PIX_FMT_YUV440P12,
998 Pixel::YUV444P12 => AV_PIX_FMT_YUV444P12,
999 Pixel::YUV420P14 => AV_PIX_FMT_YUV420P14,
1000 Pixel::YUV422P14 => AV_PIX_FMT_YUV422P14,
1001 Pixel::YUV444P14 => AV_PIX_FMT_YUV444P14,
1002 Pixel::YUV420P16 => AV_PIX_FMT_YUV420P16,
1003 Pixel::YUV422P16 => AV_PIX_FMT_YUV422P16,
1004 Pixel::YUV444P16 => AV_PIX_FMT_YUV444P16,
1005
1006 Pixel::GBRP9 => AV_PIX_FMT_GBRP9,
1007 Pixel::GBRP10 => AV_PIX_FMT_GBRP10,
1008 Pixel::GBRP12 => AV_PIX_FMT_GBRP12,
1009 Pixel::GBRP14 => AV_PIX_FMT_GBRP14,
1010 Pixel::GBRP16 => AV_PIX_FMT_GBRP16,
1011 Pixel::GBRAP16 => AV_PIX_FMT_GBRAP16,
1012
1013 Pixel::BAYER_BGGR16 => AV_PIX_FMT_BAYER_BGGR16,
1014 Pixel::BAYER_RGGB16 => AV_PIX_FMT_BAYER_RGGB16,
1015 Pixel::BAYER_GBRG16 => AV_PIX_FMT_BAYER_GBRG16,
1016 Pixel::BAYER_GRBG16 => AV_PIX_FMT_BAYER_GRBG16,
1017
1018 Pixel::YUVA420P9 => AV_PIX_FMT_YUVA420P9,
1019 Pixel::YUVA422P9 => AV_PIX_FMT_YUVA422P9,
1020 Pixel::YUVA444P9 => AV_PIX_FMT_YUVA444P9,
1021 Pixel::YUVA420P10 => AV_PIX_FMT_YUVA420P10,
1022 Pixel::YUVA422P10 => AV_PIX_FMT_YUVA422P10,
1023 Pixel::YUVA444P10 => AV_PIX_FMT_YUVA444P10,
1024 Pixel::YUVA420P16 => AV_PIX_FMT_YUVA420P16,
1025 Pixel::YUVA422P16 => AV_PIX_FMT_YUVA422P16,
1026 Pixel::YUVA444P16 => AV_PIX_FMT_YUVA444P16,
1027
1028 Pixel::XYZ12 => AV_PIX_FMT_XYZ12,
1029 Pixel::NV20 => AV_PIX_FMT_NV20,
1030 Pixel::AYUV64 => AV_PIX_FMT_AYUV64,
1031
1032 Pixel::P010LE => AV_PIX_FMT_P010LE,
1033 Pixel::P010BE => AV_PIX_FMT_P010BE,
1034 Pixel::GBRAP12BE => AV_PIX_FMT_GBRAP12BE,
1035 Pixel::GBRAP12LE => AV_PIX_FMT_GBRAP12LE,
1036 Pixel::GBRAP10LE => AV_PIX_FMT_GBRAP10LE,
1037 Pixel::GBRAP10BE => AV_PIX_FMT_GBRAP10BE,
1038 Pixel::MEDIACODEC => AV_PIX_FMT_MEDIACODEC,
1039 Pixel::GRAY12BE => AV_PIX_FMT_GRAY12BE,
1040 Pixel::GRAY12LE => AV_PIX_FMT_GRAY12LE,
1041 Pixel::GRAY10BE => AV_PIX_FMT_GRAY10BE,
1042 Pixel::GRAY10LE => AV_PIX_FMT_GRAY10LE,
1043 Pixel::P016LE => AV_PIX_FMT_P016LE,
1044 Pixel::P016BE => AV_PIX_FMT_P016BE,
1045
1046 Pixel::D3D11 => AV_PIX_FMT_D3D11,
1047 Pixel::GRAY9BE => AV_PIX_FMT_GRAY9BE,
1048 Pixel::GRAY9LE => AV_PIX_FMT_GRAY9LE,
1049 Pixel::GBRPF32BE => AV_PIX_FMT_GBRPF32BE,
1050 Pixel::GBRPF32LE => AV_PIX_FMT_GBRPF32LE,
1051 Pixel::GBRAPF32BE => AV_PIX_FMT_GBRAPF32BE,
1052 Pixel::GBRAPF32LE => AV_PIX_FMT_GBRAPF32LE,
1053 Pixel::DRM_PRIME => AV_PIX_FMT_DRM_PRIME,
1054
1055 #[cfg(feature = "ffmpeg_4_0")]
1056 Pixel::OPENCL => AV_PIX_FMT_OPENCL,
1057
1058 #[cfg(feature = "ffmpeg_4_1")]
1059 Pixel::GRAY14BE => AV_PIX_FMT_GRAY14BE,
1060 #[cfg(feature = "ffmpeg_4_1")]
1061 Pixel::GRAY14LE => AV_PIX_FMT_GRAY14LE,
1062 #[cfg(feature = "ffmpeg_4_1")]
1063 Pixel::GRAYF32BE => AV_PIX_FMT_GRAYF32BE,
1064 #[cfg(feature = "ffmpeg_4_1")]
1065 Pixel::GRAYF32LE => AV_PIX_FMT_GRAYF32LE,
1066
1067 #[cfg(feature = "ffmpeg_4_2")]
1068 Pixel::YUVA422P12BE => AV_PIX_FMT_YUVA422P12BE,
1069 #[cfg(feature = "ffmpeg_4_2")]
1070 Pixel::YUVA422P12LE => AV_PIX_FMT_YUVA422P12LE,
1071 #[cfg(feature = "ffmpeg_4_2")]
1072 Pixel::YUVA444P12BE => AV_PIX_FMT_YUVA444P12BE,
1073 #[cfg(feature = "ffmpeg_4_2")]
1074 Pixel::YUVA444P12LE => AV_PIX_FMT_YUVA444P12LE,
1075 #[cfg(feature = "ffmpeg_4_2")]
1076 Pixel::NV24 => AV_PIX_FMT_NV24,
1077 #[cfg(feature = "ffmpeg_4_2")]
1078 Pixel::NV42 => AV_PIX_FMT_NV42,
1079
1080 #[cfg(feature = "ffmpeg_4_3")]
1081 Pixel::VULKAN => AV_PIX_FMT_VULKAN,
1082 #[cfg(feature = "ffmpeg_4_3")]
1083 Pixel::Y210BE => AV_PIX_FMT_Y210BE,
1084 #[cfg(feature = "ffmpeg_4_3")]
1085 Pixel::Y210LE => AV_PIX_FMT_Y210LE,
1086
1087 #[cfg(feature = "ffmpeg_4_4")]
1088 Pixel::X2RGB10LE => AV_PIX_FMT_X2RGB10LE,
1089 #[cfg(feature = "ffmpeg_4_4")]
1090 Pixel::X2RGB10BE => AV_PIX_FMT_X2RGB10BE,
1091
1092 #[cfg(feature = "ffmpeg_5_0")]
1093 Pixel::X2BGR10LE => AV_PIX_FMT_X2BGR10LE,
1094 #[cfg(feature = "ffmpeg_5_0")]
1095 Pixel::X2BGR10BE => AV_PIX_FMT_X2BGR10BE,
1096 #[cfg(feature = "ffmpeg_5_0")]
1097 Pixel::P210BE => AV_PIX_FMT_P210BE,
1098 #[cfg(feature = "ffmpeg_5_0")]
1099 Pixel::P210LE => AV_PIX_FMT_P210LE,
1100 #[cfg(feature = "ffmpeg_5_0")]
1101 Pixel::P410BE => AV_PIX_FMT_P410BE,
1102 #[cfg(feature = "ffmpeg_5_0")]
1103 Pixel::P410LE => AV_PIX_FMT_P410LE,
1104 #[cfg(feature = "ffmpeg_5_0")]
1105 Pixel::P216BE => AV_PIX_FMT_P216BE,
1106 #[cfg(feature = "ffmpeg_5_0")]
1107 Pixel::P216LE => AV_PIX_FMT_P216LE,
1108 #[cfg(feature = "ffmpeg_5_0")]
1109 Pixel::P416BE => AV_PIX_FMT_P416BE,
1110 #[cfg(feature = "ffmpeg_5_0")]
1111 Pixel::P416LE => AV_PIX_FMT_P416LE,
1112
1113 #[cfg(feature = "rpi")]
1114 Pixel::RPI => AV_PIX_FMT_RPI,
1115 #[cfg(feature = "rpi")]
1116 Pixel::SAND128 => AV_PIX_FMT_SAND128,
1117 #[cfg(feature = "rpi")]
1118 Pixel::SAND64_10 => AV_PIX_FMT_SAND64_10,
1119 #[cfg(feature = "rpi")]
1120 Pixel::SAND64_16 => AV_PIX_FMT_SAND64_16,
1121 #[cfg(feature = "rpi")]
1122 Pixel::RPI4_8 => AV_PIX_FMT_RPI4_8,
1123 #[cfg(feature = "rpi")]
1124 Pixel::RPI4_10 => AV_PIX_FMT_RPI4_10,
1125 }
1126 }
1127}
1128
1129#[derive(Debug)]
1130pub enum ParsePixelError {
1131 NulError(NulError),
1132 UnknownFormat,
1133}
1134
1135impl fmt::Display for ParsePixelError {
1136 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
1137 match *self {
1138 ParsePixelError::NulError(ref e) => e.fmt(f),
1139 ParsePixelError::UnknownFormat => write!(f, "unknown pixel format"),
1140 }
1141 }
1142}
1143
1144impl error::Error for ParsePixelError {
1145 fn cause(&self) -> Option<&dyn error::Error> {
1146 match *self {
1147 ParsePixelError::NulError(ref e) => Some(e),
1148 ParsePixelError::UnknownFormat => None,
1149 }
1150 }
1151}
1152
1153impl From<NulError> for ParsePixelError {
1154 fn from(x: NulError) -> ParsePixelError {
1155 ParsePixelError::NulError(x)
1156 }
1157}
1158
1159impl FromStr for Pixel {
1160 type Err = ParsePixelError;
1161
1162 #[inline(always)]
1163 fn from_str(s: &str) -> Result<Pixel, ParsePixelError> {
1164 let cstring = CString::new(s)?;
1165 let format = unsafe { av_get_pix_fmt(cstring.as_ptr()) }.into();
1166
1167 if format == Pixel::None {
1168 Err(ParsePixelError::UnknownFormat)
1169 } else {
1170 Ok(format)
1171 }
1172 }
1173}