1use std::convert::TryFrom;
2use std::fmt;
3
4#[derive(Debug, Copy, Clone)]
5#[repr(u32)]
6pub enum TransferFunction {
9 Default = 0,
11 Rec709 = 1,
13 SRGB = 2,
15 OPRGB = 3,
17 SMPTE240M = 4,
19 None = 5,
21 DCIP3 = 6,
23 SMPTE2084 = 7,
25}
26
27impl fmt::Display for TransferFunction {
28 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
29 match self {
30 Self::Default => write!(f, "default transfer function"),
31 Self::Rec709 => write!(f, "Rec. 709 transfer function"),
32 Self::SRGB => write!(f, "sRGB transfer function"),
33 Self::OPRGB => write!(f, "opRGB transfer function"),
34 Self::SMPTE240M => write!(f, "SMPTE 240M transfer function"),
35 Self::None => write!(f, "No transfer function"),
36 Self::DCIP3 => write!(f, "DCI-P3 transfer function"),
37 Self::SMPTE2084 => write!(f, "SMPTE 2084 transfer function"),
38 }
39 }
40}
41
42impl TryFrom<u32> for TransferFunction {
43 type Error = ();
44
45 fn try_from(colorspace_code: u32) -> Result<Self, Self::Error> {
46 match colorspace_code {
47 0 => Ok(Self::Default),
48 1 => Ok(Self::Rec709),
49 2 => Ok(Self::SRGB),
50 3 => Ok(Self::OPRGB),
51 4 => Ok(Self::SMPTE240M),
52 5 => Ok(Self::None),
53 6 => Ok(Self::DCIP3),
54 7 => Ok(Self::SMPTE2084),
55 _ => Err(()),
56 }
57 }
58}