use derive_more::{Display, IsVariant};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Display, IsVariant)]
#[display("{}", self.as_str())]
#[non_exhaustive]
pub enum PixelFormat {
Unknown(u32),
Yuv420p,
Yuv422p,
Yuv440p,
Yuv444p,
Yuv411p,
Yuv410p,
Yuvj411p,
Yuvj420p,
Yuvj422p,
Yuvj440p,
Yuvj444p,
Yuv420p9Le,
Yuv420p9Be,
Yuv420p10Le,
Yuv420p10Be,
Yuv420p12Le,
Yuv420p12Be,
Yuv420p14Le,
Yuv420p14Be,
Yuv420p16Le,
Yuv420p16Be,
Yuv422p9Le,
Yuv422p9Be,
Yuv422p10Le,
Yuv422p10Be,
Yuv422p12Le,
Yuv422p12Be,
Yuv422p14Le,
Yuv422p14Be,
Yuv422p16Le,
Yuv422p16Be,
Yuv440p10Le,
Yuv440p10Be,
Yuv440p12Le,
Yuv440p12Be,
Yuv444p9Le,
Yuv444p9Be,
Yuv444p10Le,
Yuv444p10Be,
Yuv444p12Le,
Yuv444p12Be,
Yuv444p14Le,
Yuv444p14Be,
Yuv444p16Le,
Yuv444p16Be,
Yuv444p10MsbLe,
Yuv444p10MsbBe,
Yuv444p12MsbLe,
Yuv444p12MsbBe,
Yuva420p,
Yuva422p,
Yuva444p,
Yuva420p9Le,
Yuva420p9Be,
Yuva422p9Le,
Yuva422p9Be,
Yuva444p9Le,
Yuva444p9Be,
Yuva420p10Le,
Yuva420p10Be,
Yuva422p10Le,
Yuva422p10Be,
Yuva444p10Le,
Yuva444p10Be,
Yuva420p12Le,
Yuva422p12Le,
Yuva422p12Be,
Yuva444p12Le,
Yuva444p12Be,
Yuva444p14Le,
Yuva420p16Le,
Yuva420p16Be,
Yuva422p16Le,
Yuva422p16Be,
Yuva444p16Le,
Yuva444p16Be,
Nv12,
Nv21,
Nv16,
Nv24,
Nv42,
Nv20Le,
Nv20Be,
P010Le,
P010Be,
P012Le,
P012Be,
P016Le,
P016Be,
P210Le,
P210Be,
P212Le,
P212Be,
P216Le,
P216Be,
P410Le,
P410Be,
P412Le,
P412Be,
P416Le,
P416Be,
Yuyv422,
Uyvy422,
Yvyu422,
Uyyvyy411,
Y210Le,
Y210Be,
Y212Le,
Y212Be,
Y216Le,
Y216Be,
V210,
V410Le,
Xv30Le,
Xv30Be,
V30xLe,
V30xBe,
Xv36Le,
Xv36Be,
Xv48Le,
Xv48Be,
Vuya,
Vuyx,
Ayuv,
Ayuv64Le,
Ayuv64Be,
Uyva,
Vyu444,
Xyz12Le,
Xyz12Be,
Rgb24,
Bgr24,
Rgba,
Bgra,
Argb,
Abgr,
Rgbx,
Bgrx,
Xrgb,
Xbgr,
X2Rgb10Le,
X2Rgb10Be,
X2Bgr10Le,
X2Bgr10Be,
Gbr24p,
Rgb4,
Rgb4Byte,
Rgb8,
Bgr4,
Bgr4Byte,
Bgr8,
Rgb444Le,
Rgb444Be,
Bgr444Le,
Bgr444Be,
Rgb555Le,
Rgb555Be,
Bgr555Le,
Bgr555Be,
Rgb565Le,
Rgb565Be,
Bgr565Le,
Bgr565Be,
Rgb48Le,
Rgb48Be,
Bgr48Le,
Bgr48Be,
Rgba64Le,
Rgba64Be,
Bgra64Le,
Bgra64Be,
Rgb96Le,
Rgb96Be,
Rgba128Le,
Rgba128Be,
Rgbf16Le,
Rgbf16Be,
Rgbf32Le,
Rgbf32Be,
Rgbaf16Le,
Rgbaf16Be,
Rgbaf32Le,
Rgbaf32Be,
Gbrp,
Gbrp9Le,
Gbrp9Be,
Gbrp10Le,
Gbrp10Be,
Gbrp10MsbLe,
Gbrp10MsbBe,
Gbrp12Le,
Gbrp12Be,
Gbrp12MsbLe,
Gbrp12MsbBe,
Gbrp14Le,
Gbrp14Be,
Gbrp16Le,
Gbrp16Be,
Gbrpf16Le,
Gbrpf16Be,
Gbrpf32Le,
Gbrpf32Be,
Gbrap,
Gbrap10Le,
Gbrap10Be,
Gbrap12Le,
Gbrap12Be,
Gbrap14Le,
Gbrap14Be,
Gbrap16Le,
Gbrap16Be,
Gbrap32Le,
Gbrap32Be,
Gbrapf16Le,
Gbrapf16Be,
Gbrapf32Le,
Gbrapf32Be,
Gray8,
Gray8a,
Gray9Le,
Gray9Be,
Gray10Le,
Gray10Be,
Gray12Le,
Gray12Be,
Gray14Le,
Gray14Be,
Gray16Le,
Gray16Be,
Gray32Le,
Gray32Be,
Grayf32Le,
Grayf32Be,
Grayf16Le,
Grayf16Be,
Ya8,
Y400a,
Ya16Le,
Ya16Be,
Yaf16Le,
Yaf16Be,
Yaf32Le,
Yaf32Be,
Monowhite,
Monoblack,
Pal8,
BayerBggr8,
BayerRggb8,
BayerGbrg8,
BayerGrbg8,
BayerBggr10Le,
BayerRggb10Le,
BayerGbrg10Le,
BayerGrbg10Le,
BayerBggr12Le,
BayerRggb12Le,
BayerGbrg12Le,
BayerGrbg12Le,
BayerBggr14Le,
BayerRggb14Le,
BayerGbrg14Le,
BayerGrbg14Le,
BayerBggr16Le,
BayerBggr16Be,
BayerRggb16Le,
BayerRggb16Be,
BayerGbrg16Le,
BayerGbrg16Be,
BayerGrbg16Le,
BayerGrbg16Be,
}
impl Default for PixelFormat {
#[inline]
fn default() -> Self {
Self::Unknown(0)
}
}
impl PixelFormat {
#[inline]
pub const fn to_u32(self) -> u32 {
match self {
Self::Yuv420p => 100,
Self::Yuv422p => 101,
Self::Yuv440p => 102,
Self::Yuv444p => 103,
Self::Yuv411p => 104,
Self::Yuv410p => 105,
Self::Yuvj411p => 106,
Self::Yuvj420p => 107,
Self::Yuvj422p => 108,
Self::Yuvj440p => 109,
Self::Yuvj444p => 110,
Self::Yuv420p9Le => 111,
Self::Yuv420p9Be => 112,
Self::Yuv420p10Le => 113,
Self::Yuv420p10Be => 114,
Self::Yuv420p12Le => 115,
Self::Yuv420p12Be => 116,
Self::Yuv420p14Le => 117,
Self::Yuv420p14Be => 118,
Self::Yuv420p16Le => 119,
Self::Yuv420p16Be => 120,
Self::Yuv422p9Le => 121,
Self::Yuv422p9Be => 122,
Self::Yuv422p10Le => 123,
Self::Yuv422p10Be => 124,
Self::Yuv422p12Le => 125,
Self::Yuv422p12Be => 126,
Self::Yuv422p14Le => 127,
Self::Yuv422p14Be => 128,
Self::Yuv422p16Le => 129,
Self::Yuv422p16Be => 130,
Self::Yuv440p10Le => 131,
Self::Yuv440p10Be => 132,
Self::Yuv440p12Le => 133,
Self::Yuv440p12Be => 134,
Self::Yuv444p9Le => 140,
Self::Yuv444p9Be => 141,
Self::Yuv444p10Le => 142,
Self::Yuv444p10Be => 143,
Self::Yuv444p12Le => 144,
Self::Yuv444p12Be => 145,
Self::Yuv444p14Le => 146,
Self::Yuv444p14Be => 147,
Self::Yuv444p16Le => 148,
Self::Yuv444p16Be => 149,
Self::Yuv444p10MsbLe => 150,
Self::Yuv444p10MsbBe => 151,
Self::Yuv444p12MsbLe => 152,
Self::Yuv444p12MsbBe => 153,
Self::Yuva420p => 200,
Self::Yuva422p => 201,
Self::Yuva444p => 202,
Self::Yuva420p9Le => 203,
Self::Yuva420p9Be => 216,
Self::Yuva422p9Le => 204,
Self::Yuva422p9Be => 217,
Self::Yuva444p9Le => 205,
Self::Yuva444p9Be => 218,
Self::Yuva420p10Le => 206,
Self::Yuva420p10Be => 219,
Self::Yuva422p10Le => 207,
Self::Yuva422p10Be => 220,
Self::Yuva444p10Le => 208,
Self::Yuva444p10Be => 221,
Self::Yuva420p12Le => 215,
Self::Yuva422p12Le => 209,
Self::Yuva422p12Be => 222,
Self::Yuva444p12Le => 210,
Self::Yuva444p12Be => 223,
Self::Yuva444p14Le => 211,
Self::Yuva420p16Le => 212,
Self::Yuva420p16Be => 224,
Self::Yuva422p16Le => 213,
Self::Yuva422p16Be => 225,
Self::Yuva444p16Le => 214,
Self::Yuva444p16Be => 226,
Self::Nv12 => 300,
Self::Nv21 => 301,
Self::Nv16 => 302,
Self::Nv24 => 303,
Self::Nv42 => 304,
Self::Nv20Le => 305,
Self::Nv20Be => 306,
Self::P010Le => 310,
Self::P010Be => 311,
Self::P012Le => 312,
Self::P012Be => 320,
Self::P016Le => 313,
Self::P016Be => 321,
Self::P210Le => 314,
Self::P210Be => 322,
Self::P212Le => 315,
Self::P212Be => 323,
Self::P216Le => 316,
Self::P216Be => 324,
Self::P410Le => 317,
Self::P410Be => 325,
Self::P412Le => 318,
Self::P412Be => 326,
Self::P416Le => 319,
Self::P416Be => 327,
Self::Yuyv422 => 400,
Self::Uyvy422 => 401,
Self::Yvyu422 => 402,
Self::Uyyvyy411 => 403,
Self::Y210Le => 410,
Self::Y210Be => 420,
Self::Y212Le => 411,
Self::Y212Be => 421,
Self::Y216Le => 412,
Self::Y216Be => 422,
Self::V210 => 413,
Self::V410Le => 414,
Self::Xv30Le => 415,
Self::Xv30Be => 423,
Self::V30xLe => 433,
Self::V30xBe => 434,
Self::Xv36Le => 416,
Self::Xv36Be => 424,
Self::Xv48Le => 425,
Self::Xv48Be => 426,
Self::Vuya => 417,
Self::Vuyx => 418,
Self::Ayuv => 427,
Self::Ayuv64Le => 419,
Self::Ayuv64Be => 428,
Self::Uyva => 429,
Self::Vyu444 => 430,
Self::Xyz12Le => 431,
Self::Xyz12Be => 432,
Self::Rgb24 => 500,
Self::Bgr24 => 501,
Self::Rgba => 502,
Self::Bgra => 503,
Self::Argb => 504,
Self::Abgr => 505,
Self::Rgbx => 506,
Self::Bgrx => 507,
Self::Xrgb => 508,
Self::Xbgr => 509,
Self::X2Rgb10Le => 510,
Self::X2Rgb10Be => 512,
Self::X2Bgr10Le => 511,
Self::X2Bgr10Be => 513,
Self::Gbr24p => 514,
Self::Rgb4 => 515,
Self::Rgb4Byte => 516,
Self::Rgb8 => 517,
Self::Bgr4 => 518,
Self::Bgr4Byte => 519,
Self::Bgr8 => 560,
Self::Rgb444Le => 520,
Self::Rgb444Be => 561,
Self::Bgr444Le => 521,
Self::Bgr444Be => 562,
Self::Rgb555Le => 522,
Self::Rgb555Be => 563,
Self::Bgr555Le => 523,
Self::Bgr555Be => 564,
Self::Rgb565Le => 524,
Self::Rgb565Be => 565,
Self::Bgr565Le => 525,
Self::Bgr565Be => 566,
Self::Rgb48Le => 530,
Self::Rgb48Be => 567,
Self::Bgr48Le => 531,
Self::Bgr48Be => 568,
Self::Rgba64Le => 532,
Self::Rgba64Be => 569,
Self::Bgra64Le => 533,
Self::Bgra64Be => 570,
Self::Rgb96Le => 571,
Self::Rgb96Be => 572,
Self::Rgba128Le => 573,
Self::Rgba128Be => 574,
Self::Rgbf16Le => 540,
Self::Rgbf16Be => 541,
Self::Rgbf32Le => 542,
Self::Rgbf32Be => 543,
Self::Rgbaf16Le => 544,
Self::Rgbaf16Be => 545,
Self::Rgbaf32Le => 546,
Self::Rgbaf32Be => 547,
Self::Gbrp => 600,
Self::Gbrp9Le => 601,
Self::Gbrp9Be => 608,
Self::Gbrp10Le => 602,
Self::Gbrp10Be => 609,
Self::Gbrp10MsbLe => 630,
Self::Gbrp10MsbBe => 631,
Self::Gbrp12Le => 603,
Self::Gbrp12Be => 610,
Self::Gbrp12MsbLe => 632,
Self::Gbrp12MsbBe => 633,
Self::Gbrp14Le => 604,
Self::Gbrp14Be => 611,
Self::Gbrp16Le => 605,
Self::Gbrp16Be => 612,
Self::Gbrpf16Le => 606,
Self::Gbrpf16Be => 613,
Self::Gbrpf32Le => 607,
Self::Gbrpf32Be => 614,
Self::Gbrap => 620,
Self::Gbrap10Le => 621,
Self::Gbrap10Be => 634,
Self::Gbrap12Le => 622,
Self::Gbrap12Be => 635,
Self::Gbrap14Le => 623,
Self::Gbrap14Be => 636,
Self::Gbrap16Le => 624,
Self::Gbrap16Be => 637,
Self::Gbrap32Le => 638,
Self::Gbrap32Be => 639,
Self::Gbrapf16Le => 625,
Self::Gbrapf16Be => 640,
Self::Gbrapf32Le => 626,
Self::Gbrapf32Be => 641,
Self::Gray8 => 700,
Self::Gray8a => 701,
Self::Gray9Le => 702,
Self::Gray9Be => 712,
Self::Gray10Le => 703,
Self::Gray10Be => 713,
Self::Gray12Le => 704,
Self::Gray12Be => 714,
Self::Gray14Le => 705,
Self::Gray14Be => 715,
Self::Gray16Le => 706,
Self::Gray16Be => 716,
Self::Gray32Le => 717,
Self::Gray32Be => 718,
Self::Grayf32Le => 707,
Self::Grayf32Be => 719,
Self::Grayf16Le => 720,
Self::Grayf16Be => 721,
Self::Ya8 => 730,
Self::Y400a => 731,
Self::Ya16Le => 732,
Self::Ya16Be => 733,
Self::Yaf16Le => 734,
Self::Yaf16Be => 735,
Self::Yaf32Le => 736,
Self::Yaf32Be => 737,
Self::Monowhite => 740,
Self::Monoblack => 741,
Self::Pal8 => 800,
Self::BayerBggr8 => 900,
Self::BayerRggb8 => 901,
Self::BayerGbrg8 => 902,
Self::BayerGrbg8 => 903,
Self::BayerBggr10Le => 910,
Self::BayerRggb10Le => 911,
Self::BayerGbrg10Le => 912,
Self::BayerGrbg10Le => 913,
Self::BayerBggr12Le => 920,
Self::BayerRggb12Le => 921,
Self::BayerGbrg12Le => 922,
Self::BayerGrbg12Le => 923,
Self::BayerBggr14Le => 930,
Self::BayerRggb14Le => 931,
Self::BayerGbrg14Le => 932,
Self::BayerGrbg14Le => 933,
Self::BayerBggr16Le => 940,
Self::BayerBggr16Be => 944,
Self::BayerRggb16Le => 941,
Self::BayerRggb16Be => 945,
Self::BayerGbrg16Le => 942,
Self::BayerGbrg16Be => 946,
Self::BayerGrbg16Le => 943,
Self::BayerGrbg16Be => 947,
Self::Unknown(value) => value,
}
}
#[inline]
pub const fn from_u32(value: u32) -> Self {
match value {
100 => Self::Yuv420p,
101 => Self::Yuv422p,
102 => Self::Yuv440p,
103 => Self::Yuv444p,
104 => Self::Yuv411p,
105 => Self::Yuv410p,
106 => Self::Yuvj411p,
107 => Self::Yuvj420p,
108 => Self::Yuvj422p,
109 => Self::Yuvj440p,
110 => Self::Yuvj444p,
111 => Self::Yuv420p9Le,
112 => Self::Yuv420p9Be,
113 => Self::Yuv420p10Le,
114 => Self::Yuv420p10Be,
115 => Self::Yuv420p12Le,
116 => Self::Yuv420p12Be,
117 => Self::Yuv420p14Le,
118 => Self::Yuv420p14Be,
119 => Self::Yuv420p16Le,
120 => Self::Yuv420p16Be,
121 => Self::Yuv422p9Le,
122 => Self::Yuv422p9Be,
123 => Self::Yuv422p10Le,
124 => Self::Yuv422p10Be,
125 => Self::Yuv422p12Le,
126 => Self::Yuv422p12Be,
127 => Self::Yuv422p14Le,
128 => Self::Yuv422p14Be,
129 => Self::Yuv422p16Le,
130 => Self::Yuv422p16Be,
131 => Self::Yuv440p10Le,
132 => Self::Yuv440p10Be,
133 => Self::Yuv440p12Le,
134 => Self::Yuv440p12Be,
140 => Self::Yuv444p9Le,
141 => Self::Yuv444p9Be,
142 => Self::Yuv444p10Le,
143 => Self::Yuv444p10Be,
144 => Self::Yuv444p12Le,
145 => Self::Yuv444p12Be,
146 => Self::Yuv444p14Le,
147 => Self::Yuv444p14Be,
148 => Self::Yuv444p16Le,
149 => Self::Yuv444p16Be,
150 => Self::Yuv444p10MsbLe,
151 => Self::Yuv444p10MsbBe,
152 => Self::Yuv444p12MsbLe,
153 => Self::Yuv444p12MsbBe,
200 => Self::Yuva420p,
201 => Self::Yuva422p,
202 => Self::Yuva444p,
203 => Self::Yuva420p9Le,
204 => Self::Yuva422p9Le,
205 => Self::Yuva444p9Le,
206 => Self::Yuva420p10Le,
207 => Self::Yuva422p10Le,
208 => Self::Yuva444p10Le,
209 => Self::Yuva422p12Le,
210 => Self::Yuva444p12Le,
211 => Self::Yuva444p14Le,
212 => Self::Yuva420p16Le,
213 => Self::Yuva422p16Le,
214 => Self::Yuva444p16Le,
215 => Self::Yuva420p12Le,
216 => Self::Yuva420p9Be,
217 => Self::Yuva422p9Be,
218 => Self::Yuva444p9Be,
219 => Self::Yuva420p10Be,
220 => Self::Yuva422p10Be,
221 => Self::Yuva444p10Be,
222 => Self::Yuva422p12Be,
223 => Self::Yuva444p12Be,
224 => Self::Yuva420p16Be,
225 => Self::Yuva422p16Be,
226 => Self::Yuva444p16Be,
300 => Self::Nv12,
301 => Self::Nv21,
302 => Self::Nv16,
303 => Self::Nv24,
304 => Self::Nv42,
305 => Self::Nv20Le,
306 => Self::Nv20Be,
310 => Self::P010Le,
311 => Self::P010Be,
312 => Self::P012Le,
313 => Self::P016Le,
314 => Self::P210Le,
315 => Self::P212Le,
316 => Self::P216Le,
317 => Self::P410Le,
318 => Self::P412Le,
319 => Self::P416Le,
320 => Self::P012Be,
321 => Self::P016Be,
322 => Self::P210Be,
323 => Self::P212Be,
324 => Self::P216Be,
325 => Self::P410Be,
326 => Self::P412Be,
327 => Self::P416Be,
400 => Self::Yuyv422,
401 => Self::Uyvy422,
402 => Self::Yvyu422,
403 => Self::Uyyvyy411,
410 => Self::Y210Le,
411 => Self::Y212Le,
412 => Self::Y216Le,
413 => Self::V210,
414 => Self::V410Le,
415 => Self::Xv30Le,
416 => Self::Xv36Le,
417 => Self::Vuya,
418 => Self::Vuyx,
419 => Self::Ayuv64Le,
420 => Self::Y210Be,
421 => Self::Y212Be,
422 => Self::Y216Be,
423 => Self::Xv30Be,
433 => Self::V30xLe,
434 => Self::V30xBe,
424 => Self::Xv36Be,
425 => Self::Xv48Le,
426 => Self::Xv48Be,
427 => Self::Ayuv,
428 => Self::Ayuv64Be,
429 => Self::Uyva,
430 => Self::Vyu444,
431 => Self::Xyz12Le,
432 => Self::Xyz12Be,
500 => Self::Rgb24,
501 => Self::Bgr24,
502 => Self::Rgba,
503 => Self::Bgra,
504 => Self::Argb,
505 => Self::Abgr,
506 => Self::Rgbx,
507 => Self::Bgrx,
508 => Self::Xrgb,
509 => Self::Xbgr,
510 => Self::X2Rgb10Le,
511 => Self::X2Bgr10Le,
512 => Self::X2Rgb10Be,
513 => Self::X2Bgr10Be,
514 => Self::Gbr24p,
515 => Self::Rgb4,
516 => Self::Rgb4Byte,
517 => Self::Rgb8,
518 => Self::Bgr4,
519 => Self::Bgr4Byte,
560 => Self::Bgr8,
520 => Self::Rgb444Le,
521 => Self::Bgr444Le,
522 => Self::Rgb555Le,
523 => Self::Bgr555Le,
524 => Self::Rgb565Le,
525 => Self::Bgr565Le,
561 => Self::Rgb444Be,
562 => Self::Bgr444Be,
563 => Self::Rgb555Be,
564 => Self::Bgr555Be,
565 => Self::Rgb565Be,
566 => Self::Bgr565Be,
530 => Self::Rgb48Le,
531 => Self::Bgr48Le,
532 => Self::Rgba64Le,
533 => Self::Bgra64Le,
567 => Self::Rgb48Be,
568 => Self::Bgr48Be,
569 => Self::Rgba64Be,
570 => Self::Bgra64Be,
571 => Self::Rgb96Le,
572 => Self::Rgb96Be,
573 => Self::Rgba128Le,
574 => Self::Rgba128Be,
540 => Self::Rgbf16Le,
541 => Self::Rgbf16Be,
542 => Self::Rgbf32Le,
543 => Self::Rgbf32Be,
544 => Self::Rgbaf16Le,
545 => Self::Rgbaf16Be,
546 => Self::Rgbaf32Le,
547 => Self::Rgbaf32Be,
600 => Self::Gbrp,
601 => Self::Gbrp9Le,
602 => Self::Gbrp10Le,
603 => Self::Gbrp12Le,
604 => Self::Gbrp14Le,
605 => Self::Gbrp16Le,
606 => Self::Gbrpf16Le,
607 => Self::Gbrpf32Le,
608 => Self::Gbrp9Be,
609 => Self::Gbrp10Be,
610 => Self::Gbrp12Be,
611 => Self::Gbrp14Be,
612 => Self::Gbrp16Be,
613 => Self::Gbrpf16Be,
614 => Self::Gbrpf32Be,
630 => Self::Gbrp10MsbLe,
631 => Self::Gbrp10MsbBe,
632 => Self::Gbrp12MsbLe,
633 => Self::Gbrp12MsbBe,
620 => Self::Gbrap,
621 => Self::Gbrap10Le,
622 => Self::Gbrap12Le,
623 => Self::Gbrap14Le,
624 => Self::Gbrap16Le,
625 => Self::Gbrapf16Le,
626 => Self::Gbrapf32Le,
634 => Self::Gbrap10Be,
635 => Self::Gbrap12Be,
636 => Self::Gbrap14Be,
637 => Self::Gbrap16Be,
638 => Self::Gbrap32Le,
639 => Self::Gbrap32Be,
640 => Self::Gbrapf16Be,
641 => Self::Gbrapf32Be,
700 => Self::Gray8,
701 => Self::Gray8a,
702 => Self::Gray9Le,
703 => Self::Gray10Le,
704 => Self::Gray12Le,
705 => Self::Gray14Le,
706 => Self::Gray16Le,
707 => Self::Grayf32Le,
712 => Self::Gray9Be,
713 => Self::Gray10Be,
714 => Self::Gray12Be,
715 => Self::Gray14Be,
716 => Self::Gray16Be,
717 => Self::Gray32Le,
718 => Self::Gray32Be,
719 => Self::Grayf32Be,
720 => Self::Grayf16Le,
721 => Self::Grayf16Be,
730 => Self::Ya8,
731 => Self::Y400a,
732 => Self::Ya16Le,
733 => Self::Ya16Be,
734 => Self::Yaf16Le,
735 => Self::Yaf16Be,
736 => Self::Yaf32Le,
737 => Self::Yaf32Be,
740 => Self::Monowhite,
741 => Self::Monoblack,
800 => Self::Pal8,
900 => Self::BayerBggr8,
901 => Self::BayerRggb8,
902 => Self::BayerGbrg8,
903 => Self::BayerGrbg8,
910 => Self::BayerBggr10Le,
911 => Self::BayerRggb10Le,
912 => Self::BayerGbrg10Le,
913 => Self::BayerGrbg10Le,
920 => Self::BayerBggr12Le,
921 => Self::BayerRggb12Le,
922 => Self::BayerGbrg12Le,
923 => Self::BayerGrbg12Le,
930 => Self::BayerBggr14Le,
931 => Self::BayerRggb14Le,
932 => Self::BayerGbrg14Le,
933 => Self::BayerGrbg14Le,
940 => Self::BayerBggr16Le,
941 => Self::BayerRggb16Le,
942 => Self::BayerGbrg16Le,
943 => Self::BayerGrbg16Le,
944 => Self::BayerBggr16Be,
945 => Self::BayerRggb16Be,
946 => Self::BayerGbrg16Be,
947 => Self::BayerGrbg16Be,
_ => Self::Unknown(value),
}
}
#[inline]
pub const fn is_bayer(self) -> bool {
matches!(
self,
Self::BayerBggr8
| Self::BayerRggb8
| Self::BayerGbrg8
| Self::BayerGrbg8
| Self::BayerBggr10Le
| Self::BayerRggb10Le
| Self::BayerGbrg10Le
| Self::BayerGrbg10Le
| Self::BayerBggr12Le
| Self::BayerRggb12Le
| Self::BayerGbrg12Le
| Self::BayerGrbg12Le
| Self::BayerBggr14Le
| Self::BayerRggb14Le
| Self::BayerGbrg14Le
| Self::BayerGrbg14Le
| Self::BayerBggr16Le
| Self::BayerBggr16Be
| Self::BayerRggb16Le
| Self::BayerRggb16Be
| Self::BayerGbrg16Le
| Self::BayerGbrg16Be
| Self::BayerGrbg16Le
| Self::BayerGrbg16Be,
)
}
}
impl PixelFormat {
#[cfg_attr(not(tarpaulin), inline(always))]
pub const fn as_str(&self) -> &'static str {
match self {
Self::Unknown(_) => "unknown",
Self::Yuv420p => "yuv420p",
Self::Yuv422p => "yuv422p",
Self::Yuv440p => "yuv440p",
Self::Yuv444p => "yuv444p",
Self::Yuv411p => "yuv411p",
Self::Yuv410p => "yuv410p",
Self::Yuvj411p => "yuvj411p",
Self::Yuvj420p => "yuvj420p",
Self::Yuvj422p => "yuvj422p",
Self::Yuvj440p => "yuvj440p",
Self::Yuvj444p => "yuvj444p",
Self::Yuv420p9Le => "yuv420p9le",
Self::Yuv420p9Be => "yuv420p9be",
Self::Yuv420p10Le => "yuv420p10le",
Self::Yuv420p10Be => "yuv420p10be",
Self::Yuv420p12Le => "yuv420p12le",
Self::Yuv420p12Be => "yuv420p12be",
Self::Yuv420p14Le => "yuv420p14le",
Self::Yuv420p14Be => "yuv420p14be",
Self::Yuv420p16Le => "yuv420p16le",
Self::Yuv420p16Be => "yuv420p16be",
Self::Yuv422p9Le => "yuv422p9le",
Self::Yuv422p9Be => "yuv422p9be",
Self::Yuv422p10Le => "yuv422p10le",
Self::Yuv422p10Be => "yuv422p10be",
Self::Yuv422p12Le => "yuv422p12le",
Self::Yuv422p12Be => "yuv422p12be",
Self::Yuv422p14Le => "yuv422p14le",
Self::Yuv422p14Be => "yuv422p14be",
Self::Yuv422p16Le => "yuv422p16le",
Self::Yuv422p16Be => "yuv422p16be",
Self::Yuv440p10Le => "yuv440p10le",
Self::Yuv440p10Be => "yuv440p10be",
Self::Yuv440p12Le => "yuv440p12le",
Self::Yuv440p12Be => "yuv440p12be",
Self::Yuv444p9Le => "yuv444p9le",
Self::Yuv444p9Be => "yuv444p9be",
Self::Yuv444p10Le => "yuv444p10le",
Self::Yuv444p10Be => "yuv444p10be",
Self::Yuv444p12Le => "yuv444p12le",
Self::Yuv444p12Be => "yuv444p12be",
Self::Yuv444p14Le => "yuv444p14le",
Self::Yuv444p14Be => "yuv444p14be",
Self::Yuv444p16Le => "yuv444p16le",
Self::Yuv444p16Be => "yuv444p16be",
Self::Yuv444p10MsbLe => "yuv444p10msble",
Self::Yuv444p10MsbBe => "yuv444p10msbbe",
Self::Yuv444p12MsbLe => "yuv444p12msble",
Self::Yuv444p12MsbBe => "yuv444p12msbbe",
Self::Yuva420p => "yuva420p",
Self::Yuva422p => "yuva422p",
Self::Yuva444p => "yuva444p",
Self::Yuva420p9Le => "yuva420p9le",
Self::Yuva420p9Be => "yuva420p9be",
Self::Yuva422p9Le => "yuva422p9le",
Self::Yuva422p9Be => "yuva422p9be",
Self::Yuva444p9Le => "yuva444p9le",
Self::Yuva444p9Be => "yuva444p9be",
Self::Yuva420p10Le => "yuva420p10le",
Self::Yuva420p10Be => "yuva420p10be",
Self::Yuva422p10Le => "yuva422p10le",
Self::Yuva422p10Be => "yuva422p10be",
Self::Yuva444p10Le => "yuva444p10le",
Self::Yuva444p10Be => "yuva444p10be",
Self::Yuva420p12Le => "yuva420p12le",
Self::Yuva422p12Le => "yuva422p12le",
Self::Yuva422p12Be => "yuva422p12be",
Self::Yuva444p12Le => "yuva444p12le",
Self::Yuva444p12Be => "yuva444p12be",
Self::Yuva444p14Le => "yuva444p14le",
Self::Yuva420p16Le => "yuva420p16le",
Self::Yuva420p16Be => "yuva420p16be",
Self::Yuva422p16Le => "yuva422p16le",
Self::Yuva422p16Be => "yuva422p16be",
Self::Yuva444p16Le => "yuva444p16le",
Self::Yuva444p16Be => "yuva444p16be",
Self::Nv12 => "nv12",
Self::Nv21 => "nv21",
Self::Nv16 => "nv16",
Self::Nv24 => "nv24",
Self::Nv42 => "nv42",
Self::Nv20Le => "nv20le",
Self::Nv20Be => "nv20be",
Self::P010Le => "p010le",
Self::P010Be => "p010be",
Self::P012Le => "p012le",
Self::P012Be => "p012be",
Self::P016Le => "p016le",
Self::P016Be => "p016be",
Self::P210Le => "p210le",
Self::P210Be => "p210be",
Self::P212Le => "p212le",
Self::P212Be => "p212be",
Self::P216Le => "p216le",
Self::P216Be => "p216be",
Self::P410Le => "p410le",
Self::P410Be => "p410be",
Self::P412Le => "p412le",
Self::P412Be => "p412be",
Self::P416Le => "p416le",
Self::P416Be => "p416be",
Self::Yuyv422 => "yuyv422",
Self::Uyvy422 => "uyvy422",
Self::Yvyu422 => "yvyu422",
Self::Uyyvyy411 => "uyyvyy411",
Self::Y210Le => "y210le",
Self::Y210Be => "y210be",
Self::Y212Le => "y212le",
Self::Y212Be => "y212be",
Self::Y216Le => "y216le",
Self::Y216Be => "y216be",
Self::V210 => "v210",
Self::V410Le => "v410le",
Self::Xv30Le => "xv30le",
Self::Xv30Be => "xv30be",
Self::V30xLe => "v30xle",
Self::V30xBe => "v30xbe",
Self::Xv36Le => "xv36le",
Self::Xv36Be => "xv36be",
Self::Xv48Le => "xv48le",
Self::Xv48Be => "xv48be",
Self::Vuya => "vuya",
Self::Vuyx => "vuyx",
Self::Ayuv => "ayuv",
Self::Ayuv64Le => "ayuv64le",
Self::Ayuv64Be => "ayuv64be",
Self::Uyva => "uyva",
Self::Vyu444 => "vyu444",
Self::Xyz12Le => "xyz12le",
Self::Xyz12Be => "xyz12be",
Self::Rgb24 => "rgb24",
Self::Bgr24 => "bgr24",
Self::Rgba => "rgba",
Self::Bgra => "bgra",
Self::Argb => "argb",
Self::Abgr => "abgr",
Self::Rgbx => "rgb0",
Self::Bgrx => "bgr0",
Self::Xrgb => "0rgb",
Self::Xbgr => "0bgr",
Self::X2Rgb10Le => "x2rgb10le",
Self::X2Rgb10Be => "x2rgb10be",
Self::X2Bgr10Le => "x2bgr10le",
Self::X2Bgr10Be => "x2bgr10be",
Self::Gbr24p => "gbr24p",
Self::Rgb4 => "rgb4",
Self::Rgb4Byte => "rgb4_byte",
Self::Rgb8 => "rgb8",
Self::Bgr4 => "bgr4",
Self::Bgr4Byte => "bgr4_byte",
Self::Bgr8 => "bgr8",
Self::Rgb444Le => "rgb444le",
Self::Rgb444Be => "rgb444be",
Self::Bgr444Le => "bgr444le",
Self::Bgr444Be => "bgr444be",
Self::Rgb555Le => "rgb555le",
Self::Rgb555Be => "rgb555be",
Self::Bgr555Le => "bgr555le",
Self::Bgr555Be => "bgr555be",
Self::Rgb565Le => "rgb565le",
Self::Rgb565Be => "rgb565be",
Self::Bgr565Le => "bgr565le",
Self::Bgr565Be => "bgr565be",
Self::Rgb48Le => "rgb48le",
Self::Rgb48Be => "rgb48be",
Self::Bgr48Le => "bgr48le",
Self::Bgr48Be => "bgr48be",
Self::Rgba64Le => "rgba64le",
Self::Rgba64Be => "rgba64be",
Self::Bgra64Le => "bgra64le",
Self::Bgra64Be => "bgra64be",
Self::Rgb96Le => "rgb96le",
Self::Rgb96Be => "rgb96be",
Self::Rgba128Le => "rgba128le",
Self::Rgba128Be => "rgba128be",
Self::Rgbf16Le => "rgbf16le",
Self::Rgbf16Be => "rgbf16be",
Self::Rgbf32Le => "rgbf32le",
Self::Rgbf32Be => "rgbf32be",
Self::Rgbaf16Le => "rgbaf16le",
Self::Rgbaf16Be => "rgbaf16be",
Self::Rgbaf32Le => "rgbaf32le",
Self::Rgbaf32Be => "rgbaf32be",
Self::Gbrp => "gbrp",
Self::Gbrp9Le => "gbrp9le",
Self::Gbrp9Be => "gbrp9be",
Self::Gbrp10Le => "gbrp10le",
Self::Gbrp10Be => "gbrp10be",
Self::Gbrp10MsbLe => "gbrp10msble",
Self::Gbrp10MsbBe => "gbrp10msbbe",
Self::Gbrp12Le => "gbrp12le",
Self::Gbrp12Be => "gbrp12be",
Self::Gbrp12MsbLe => "gbrp12msble",
Self::Gbrp12MsbBe => "gbrp12msbbe",
Self::Gbrp14Le => "gbrp14le",
Self::Gbrp14Be => "gbrp14be",
Self::Gbrp16Le => "gbrp16le",
Self::Gbrp16Be => "gbrp16be",
Self::Gbrpf16Le => "gbrpf16le",
Self::Gbrpf16Be => "gbrpf16be",
Self::Gbrpf32Le => "gbrpf32le",
Self::Gbrpf32Be => "gbrpf32be",
Self::Gbrap => "gbrap",
Self::Gbrap10Le => "gbrap10le",
Self::Gbrap10Be => "gbrap10be",
Self::Gbrap12Le => "gbrap12le",
Self::Gbrap12Be => "gbrap12be",
Self::Gbrap14Le => "gbrap14le",
Self::Gbrap14Be => "gbrap14be",
Self::Gbrap16Le => "gbrap16le",
Self::Gbrap16Be => "gbrap16be",
Self::Gbrap32Le => "gbrap32le",
Self::Gbrap32Be => "gbrap32be",
Self::Gbrapf16Le => "gbrapf16le",
Self::Gbrapf16Be => "gbrapf16be",
Self::Gbrapf32Le => "gbrapf32le",
Self::Gbrapf32Be => "gbrapf32be",
Self::Gray8 => "gray8",
Self::Gray8a => "gray8a",
Self::Gray9Le => "gray9le",
Self::Gray9Be => "gray9be",
Self::Gray10Le => "gray10le",
Self::Gray10Be => "gray10be",
Self::Gray12Le => "gray12le",
Self::Gray12Be => "gray12be",
Self::Gray14Le => "gray14le",
Self::Gray14Be => "gray14be",
Self::Gray16Le => "gray16le",
Self::Gray16Be => "gray16be",
Self::Gray32Le => "gray32le",
Self::Gray32Be => "gray32be",
Self::Grayf32Le => "grayf32le",
Self::Grayf32Be => "grayf32be",
Self::Grayf16Le => "grayf16le",
Self::Grayf16Be => "grayf16be",
Self::Ya8 => "ya8",
Self::Y400a => "y400a",
Self::Ya16Le => "ya16le",
Self::Ya16Be => "ya16be",
Self::Yaf16Le => "yaf16le",
Self::Yaf16Be => "yaf16be",
Self::Yaf32Le => "yaf32le",
Self::Yaf32Be => "yaf32be",
Self::Monowhite => "monowhite",
Self::Monoblack => "monoblack",
Self::Pal8 => "pal8",
Self::BayerBggr8 => "bayer_bggr8",
Self::BayerRggb8 => "bayer_rggb8",
Self::BayerGbrg8 => "bayer_gbrg8",
Self::BayerGrbg8 => "bayer_grbg8",
Self::BayerBggr10Le => "bayer_bggr10le",
Self::BayerRggb10Le => "bayer_rggb10le",
Self::BayerGbrg10Le => "bayer_gbrg10le",
Self::BayerGrbg10Le => "bayer_grbg10le",
Self::BayerBggr12Le => "bayer_bggr12le",
Self::BayerRggb12Le => "bayer_rggb12le",
Self::BayerGbrg12Le => "bayer_gbrg12le",
Self::BayerGrbg12Le => "bayer_grbg12le",
Self::BayerBggr14Le => "bayer_bggr14le",
Self::BayerRggb14Le => "bayer_rggb14le",
Self::BayerGbrg14Le => "bayer_gbrg14le",
Self::BayerGrbg14Le => "bayer_grbg14le",
Self::BayerBggr16Le => "bayer_bggr16le",
Self::BayerBggr16Be => "bayer_bggr16be",
Self::BayerRggb16Le => "bayer_rggb16le",
Self::BayerRggb16Be => "bayer_rggb16be",
Self::BayerGbrg16Le => "bayer_gbrg16le",
Self::BayerGbrg16Be => "bayer_gbrg16be",
Self::BayerGrbg16Le => "bayer_grbg16le",
Self::BayerGrbg16Be => "bayer_grbg16be",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[cfg(any(feature = "alloc", feature = "std"))]
use std::format;
#[test]
fn default_is_unknown() {
assert!(matches!(PixelFormat::default(), PixelFormat::Unknown(0)));
}
#[test]
fn round_trip_u32_for_known_variants() {
let all = [
PixelFormat::Unknown(0),
PixelFormat::Yuv420p,
PixelFormat::Yuv444p,
PixelFormat::Yuv420p10Le,
PixelFormat::Yuv422p16Le,
PixelFormat::Yuva444p,
PixelFormat::Nv12,
PixelFormat::P010Le,
PixelFormat::P416Le,
PixelFormat::Yuyv422,
PixelFormat::V210,
PixelFormat::Ayuv64Le,
PixelFormat::Rgb24,
PixelFormat::Bgra,
PixelFormat::Rgb565Le,
PixelFormat::Rgba64Le,
PixelFormat::Rgbf32Le,
PixelFormat::Gbrp,
PixelFormat::Gbrap16Le,
PixelFormat::Gbrapf32Le,
PixelFormat::Gray8,
PixelFormat::Gray16Le,
PixelFormat::Ya16Le,
PixelFormat::Monowhite,
PixelFormat::Pal8,
PixelFormat::BayerBggr8,
PixelFormat::BayerRggb16Le,
];
for fmt in all {
assert_eq!(
PixelFormat::from_u32(fmt.to_u32()),
fmt,
"round-trip failed for {fmt:?}"
);
}
}
#[test]
fn unknown_for_garbage_u32() {
assert_eq!(PixelFormat::from_u32(99_999), PixelFormat::Unknown(99_999));
assert_eq!(PixelFormat::from_u32(1), PixelFormat::Unknown(1));
}
#[test]
fn unknown_round_trip_is_lossless() {
for n in [1u32, 42, 99_999, u32::MAX, 0] {
let p = PixelFormat::from_u32(n);
assert_eq!(p.to_u32(), n, "lossless round-trip broken for {n}");
}
}
#[cfg(any(feature = "alloc", feature = "std"))]
#[test]
fn display_uses_ffmpeg_lowercase_names() {
assert_eq!(format!("{}", PixelFormat::Yuv420p), "yuv420p");
assert_eq!(format!("{}", PixelFormat::Nv12), "nv12");
assert_eq!(format!("{}", PixelFormat::P010Le), "p010le");
assert_eq!(format!("{}", PixelFormat::Rgba64Le), "rgba64le");
assert_eq!(format!("{}", PixelFormat::BayerBggr12Le), "bayer_bggr12le");
assert_eq!(format!("{}", PixelFormat::Unknown(0)), "unknown");
}
#[test]
fn is_bayer_partition() {
assert!(PixelFormat::BayerBggr8.is_bayer());
assert!(PixelFormat::BayerRggb16Le.is_bayer());
assert!(PixelFormat::BayerGrbg12Le.is_bayer());
assert!(!PixelFormat::Yuv420p.is_bayer());
assert!(!PixelFormat::Rgb24.is_bayer());
assert!(!PixelFormat::Unknown(0).is_bayer());
}
#[test]
fn is_variant_helpers_compile() {
assert!(PixelFormat::Yuv420p.is_yuv_420_p());
assert!(PixelFormat::Nv12.is_nv_12());
assert!(PixelFormat::P010Le.is_p_010_le());
assert!(!PixelFormat::Yuv420p.is_unknown());
}
#[test]
fn copy_and_eq() {
let p = PixelFormat::Nv12;
let q = p; assert_eq!(p, q);
assert_ne!(p, PixelFormat::Yuv420p);
}
}