Skip to main content

v4l/format/
colorspace.rs

1use std::convert::TryFrom;
2use std::fmt;
3
4#[derive(Debug, Copy, Clone)]
5#[repr(u32)]
6/// Colorspace for pixels.
7///
8/// The driver decides this for capture streams and the user sets it for
9/// output streams.
10pub enum Colorspace {
11    /// driver will pick default
12    Default = 0,
13    /// SMPTE 170M
14    SMPTE170M = 1,
15    /// SMPTE 240M
16    SMPTE240M = 2,
17    /// Rec. 709, aka BT.709
18    Rec709 = 3,
19    // BT878=4: deprecated, no driver returns this
20    /// NTSC
21    NTSC = 5,
22    /// EBU Tech 3213
23    EBUTech3212 = 6,
24    /// use for JPEGs: sRGB colorspace, YCbCr encoding, and full range quantization
25    JPEG = 7,
26    /// sRGB
27    SRGB = 8,
28    /// opRGB
29    OPRGB = 9,
30    /// Rec. 2020, aka BT.2020
31    Rec2020 = 10,
32    /// for RAW images
33    RAW = 11,
34    /// DCI-P3
35    DCIP3 = 12,
36}
37
38impl fmt::Display for Colorspace {
39    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
40        match self {
41            Self::Default => write!(f, "default"),
42            Self::SMPTE170M => write!(f, "SMPTE 170M"),
43            Self::SMPTE240M => write!(f, "SMPTE 240M"),
44            Self::Rec709 => write!(f, "Rec. 709"),
45            Self::NTSC => write!(f, "NTSC"),
46            Self::EBUTech3212 => write!(f, "EBU Tech 3213"),
47            Self::JPEG => write!(f, "JPEG"),
48            Self::SRGB => write!(f, "sRGB"),
49            Self::OPRGB => write!(f, "opRGB"),
50            Self::Rec2020 => write!(f, "Rec. 2020"),
51            Self::RAW => write!(f, "RAW"),
52            Self::DCIP3 => write!(f, "DCI-P3"),
53        }
54    }
55}
56
57impl TryFrom<u32> for Colorspace {
58    type Error = ();
59
60    fn try_from(code: u32) -> Result<Self, Self::Error> {
61        match code {
62            0 => Ok(Self::Default),
63            1 => Ok(Self::SMPTE170M),
64            2 => Ok(Self::SMPTE240M),
65            3 => Ok(Self::Rec709),
66            5 => Ok(Self::NTSC),
67            6 => Ok(Self::EBUTech3212),
68            7 => Ok(Self::JPEG),
69            8 => Ok(Self::SRGB),
70            9 => Ok(Self::OPRGB),
71            10 => Ok(Self::Rec2020),
72            11 => Ok(Self::RAW),
73            12 => Ok(Self::DCIP3),
74            _ => Err(()),
75        }
76    }
77}