#[must_use]
pub const fn code(a: u8, b: u8, c: u8, d: u8) -> u32 {
(a as u32) | ((b as u32) << 8) | ((c as u32) << 16) | ((d as u32) << 24)
}
pub const C8: u32 = code(b'C', b'8', b' ', b' ');
pub const RGB332: u32 = code(b'R', b'G', b'B', b'8');
pub const BGR233: u32 = code(b'B', b'G', b'R', b'8');
pub const XRGB4444: u32 = code(b'X', b'R', b'1', b'2');
pub const XBGR4444: u32 = code(b'X', b'B', b'1', b'2');
pub const RGBX4444: u32 = code(b'R', b'X', b'1', b'2');
pub const BGRX4444: u32 = code(b'B', b'X', b'1', b'2');
pub const ARGB4444: u32 = code(b'A', b'R', b'1', b'2');
pub const ABGR4444: u32 = code(b'A', b'B', b'1', b'2');
pub const RGBA4444: u32 = code(b'R', b'A', b'1', b'2');
pub const BGRA4444: u32 = code(b'B', b'A', b'1', b'2');
pub const XRGB1555: u32 = code(b'X', b'R', b'1', b'5');
pub const XBGR1555: u32 = code(b'X', b'B', b'1', b'5');
pub const RGBX5551: u32 = code(b'R', b'X', b'1', b'5');
pub const BGRX5551: u32 = code(b'B', b'X', b'1', b'5');
pub const ARGB1555: u32 = code(b'A', b'R', b'1', b'5');
pub const ABGR1555: u32 = code(b'A', b'B', b'1', b'5');
pub const RGBA5551: u32 = code(b'R', b'A', b'1', b'5');
pub const BGRA5551: u32 = code(b'B', b'A', b'1', b'5');
pub const RGB565: u32 = code(b'R', b'G', b'1', b'6');
pub const BGR565: u32 = code(b'B', b'G', b'1', b'6');
pub const RGB888: u32 = code(b'R', b'G', b'2', b'4');
pub const BGR888: u32 = code(b'B', b'G', b'2', b'4');
pub const XRGB8888: u32 = code(b'X', b'R', b'2', b'4');
pub const XBGR8888: u32 = code(b'X', b'B', b'2', b'4');
pub const RGBX8888: u32 = code(b'R', b'X', b'2', b'4');
pub const BGRX8888: u32 = code(b'B', b'X', b'2', b'4');
pub const ARGB8888: u32 = code(b'A', b'R', b'2', b'4');
pub const ABGR8888: u32 = code(b'A', b'B', b'2', b'4');
pub const RGBA8888: u32 = code(b'R', b'A', b'2', b'4');
pub const BGRA8888: u32 = code(b'B', b'A', b'2', b'4');
pub const XRGB2101010: u32 = code(b'X', b'R', b'3', b'0');
pub const XBGR2101010: u32 = code(b'X', b'B', b'3', b'0');
pub const RGBX1010102: u32 = code(b'R', b'X', b'3', b'0');
pub const BGRX1010102: u32 = code(b'B', b'X', b'3', b'0');
pub const ARGB2101010: u32 = code(b'A', b'R', b'3', b'0');
pub const ABGR2101010: u32 = code(b'A', b'B', b'3', b'0');
pub const RGBA1010102: u32 = code(b'R', b'A', b'3', b'0');
pub const BGRA1010102: u32 = code(b'B', b'A', b'3', b'0');
pub const XRGB16161616F: u32 = code(b'X', b'R', b'4', b'H');
pub const XBGR16161616F: u32 = code(b'X', b'B', b'4', b'H');
pub const ARGB16161616F: u32 = code(b'A', b'R', b'4', b'H');
pub const ABGR16161616F: u32 = code(b'A', b'B', b'4', b'H');
pub const Y210: u32 = code(b'Y', b'2', b'1', b'0');
pub const Y212: u32 = code(b'Y', b'2', b'1', b'2');
pub const Y216: u32 = code(b'Y', b'2', b'1', b'6');
pub const NV12: u32 = code(b'N', b'V', b'1', b'2');
pub const NV21: u32 = code(b'N', b'V', b'2', b'1');
pub const NV15: u32 = code(b'N', b'V', b'1', b'5');
pub const NV16: u32 = code(b'N', b'V', b'1', b'6');
pub const NV61: u32 = code(b'N', b'V', b'6', b'1');
pub const NV20: u32 = code(b'N', b'V', b'2', b'0');
pub const NV24: u32 = code(b'N', b'V', b'2', b'4');
pub const NV42: u32 = code(b'N', b'V', b'4', b'2');
pub const P010: u32 = code(b'P', b'0', b'1', b'0');
pub const P012: u32 = code(b'P', b'0', b'1', b'2');
pub const P016: u32 = code(b'P', b'0', b'1', b'6');
pub const P210: u32 = code(b'P', b'2', b'1', b'0');
pub const YUV410: u32 = code(b'Y', b'U', b'V', b'9');
pub const YVU410: u32 = code(b'Y', b'V', b'U', b'9');
pub const YUV411: u32 = code(b'Y', b'U', b'1', b'1');
pub const YVU411: u32 = code(b'Y', b'V', b'1', b'1');
pub const YUV420: u32 = code(b'Y', b'U', b'1', b'2');
pub const YVU420: u32 = code(b'Y', b'V', b'1', b'2');
pub const YUV422: u32 = code(b'Y', b'U', b'1', b'6');
pub const YVU422: u32 = code(b'Y', b'V', b'1', b'6');
pub const YUV444: u32 = code(b'Y', b'U', b'2', b'4');
pub const YVU444: u32 = code(b'Y', b'V', b'2', b'4');
pub const YUYV: u32 = code(b'Y', b'U', b'Y', b'V');
pub const YVYU: u32 = code(b'Y', b'V', b'Y', b'U');
pub const UYVY: u32 = code(b'U', b'Y', b'V', b'Y');
pub const VYUY: u32 = code(b'V', b'Y', b'U', b'Y');
pub const AYUV: u32 = code(b'A', b'Y', b'U', b'V');
#[must_use]
pub const fn format_name(format: u32) -> &'static str {
match format {
C8 => "C8",
RGB332 => "RGB332",
BGR233 => "BGR233",
XRGB4444 => "XRGB4444",
XBGR4444 => "XBGR4444",
RGBX4444 => "RGBX4444",
BGRX4444 => "BGRX4444",
ARGB4444 => "ARGB4444",
ABGR4444 => "ABGR4444",
RGBA4444 => "RGBA4444",
BGRA4444 => "BGRA4444",
XRGB1555 => "XRGB1555",
XBGR1555 => "XBGR1555",
RGBX5551 => "RGBX5551",
BGRX5551 => "BGRX5551",
ARGB1555 => "ARGB1555",
ABGR1555 => "ABGR1555",
RGBA5551 => "RGBA5551",
BGRA5551 => "BGRA5551",
RGB565 => "RGB565",
BGR565 => "BGR565",
RGB888 => "RGB888",
BGR888 => "BGR888",
XRGB8888 => "XRGB8888",
XBGR8888 => "XBGR8888",
RGBX8888 => "RGBX8888",
BGRX8888 => "BGRX8888",
ARGB8888 => "ARGB8888",
ABGR8888 => "ABGR8888",
RGBA8888 => "RGBA8888",
BGRA8888 => "BGRA8888",
XRGB2101010 => "XRGB2101010",
XBGR2101010 => "XBGR2101010",
RGBX1010102 => "RGBX1010102",
BGRX1010102 => "BGRX1010102",
ARGB2101010 => "ARGB2101010",
ABGR2101010 => "ABGR2101010",
RGBA1010102 => "RGBA1010102",
BGRA1010102 => "BGRA1010102",
XRGB16161616F => "XRGB16161616F",
XBGR16161616F => "XBGR16161616F",
ARGB16161616F => "ARGB16161616F",
ABGR16161616F => "ABGR16161616F",
Y210 => "Y210",
Y212 => "Y212",
Y216 => "Y216",
NV12 => "NV12",
NV21 => "NV21",
NV15 => "NV15",
NV16 => "NV16",
NV61 => "NV61",
NV20 => "NV20",
NV24 => "NV24",
NV42 => "NV42",
P010 => "P010",
P012 => "P012",
P016 => "P016",
P210 => "P210",
YUV410 => "YUV410",
YVU410 => "YVU410",
YUV411 => "YUV411",
YVU411 => "YVU411",
YUV420 => "YUV420",
YVU420 => "YVU420",
YUV422 => "YUV422",
YVU422 => "YVU422",
YUV444 => "YUV444",
YVU444 => "YVU444",
YUYV => "YUYV",
YVYU => "YVYU",
UYVY => "UYVY",
VYUY => "VYUY",
AYUV => "AYUV",
_ => "unknown",
}
}
#[must_use]
pub const fn format_bpp(format: u32) -> u32 {
match format {
C8 | RGB332 | BGR233 => 8,
XRGB4444 | XBGR4444 | RGBX4444 | BGRX4444 | ARGB4444 | ABGR4444 | RGBA4444 | BGRA4444
| XRGB1555 | XBGR1555 | RGBX5551 | BGRX5551 | ARGB1555 | ABGR1555 | RGBA5551 | BGRA5551
| RGB565 | BGR565 | YUYV | YVYU | UYVY | VYUY => 16,
RGB888 | BGR888 => 24,
XRGB8888 | XBGR8888 | RGBX8888 | BGRX8888 | ARGB8888 | ABGR8888 | RGBA8888 | BGRA8888
| XRGB2101010 | XBGR2101010 | RGBX1010102 | BGRX1010102 | ARGB2101010 | ABGR2101010
| RGBA1010102 | BGRA1010102 | Y210 | Y212 | Y216 | AYUV => 32,
XRGB16161616F | XBGR16161616F | ARGB16161616F | ABGR16161616F => 64,
_ => 0,
}
}