1 use std::ffi::CStr; 2 use std::str::from_utf8_unchecked; 3 4 use ffi::AVColorSpace::*; 5 use ffi::*; 6 7 #[derive(Eq, PartialEq, Clone, Copy, Debug)] 8 pub enum Space { 9 RGB, 10 BT709, 11 Unspecified, 12 Reserved, 13 FCC, 14 BT470BG, 15 SMPTE170M, 16 SMPTE240M, 17 YCGCO, 18 BT2020NCL, 19 BT2020CL, 20 SMPTE2085, 21 22 ChromaDerivedNCL, 23 ChromaDerivedCL, 24 ICTCP, 25 } 26 27 impl Space { 28 pub const YCOCG: Space = Space::YCGCO; 29 name(&self) -> Option<&'static str>30 pub fn name(&self) -> Option<&'static str> { 31 if *self == Space::Unspecified { 32 return None; 33 } 34 unsafe { 35 let ptr = av_color_space_name((*self).into()); 36 ptr.as_ref() 37 .map(|ptr| from_utf8_unchecked(CStr::from_ptr(ptr).to_bytes())) 38 } 39 } 40 } 41 42 impl From<AVColorSpace> for Space { from(value: AVColorSpace) -> Self43 fn from(value: AVColorSpace) -> Self { 44 match value { 45 AVCOL_SPC_RGB => Space::RGB, 46 AVCOL_SPC_BT709 => Space::BT709, 47 AVCOL_SPC_UNSPECIFIED => Space::Unspecified, 48 AVCOL_SPC_RESERVED => Space::Reserved, 49 AVCOL_SPC_FCC => Space::FCC, 50 AVCOL_SPC_BT470BG => Space::BT470BG, 51 AVCOL_SPC_SMPTE170M => Space::SMPTE170M, 52 AVCOL_SPC_SMPTE240M => Space::SMPTE240M, 53 AVCOL_SPC_YCGCO => Space::YCGCO, 54 AVCOL_SPC_BT2020_NCL => Space::BT2020NCL, 55 AVCOL_SPC_BT2020_CL => Space::BT2020CL, 56 AVCOL_SPC_SMPTE2085 => Space::SMPTE2085, 57 AVCOL_SPC_NB => Space::Unspecified, 58 59 AVCOL_SPC_CHROMA_DERIVED_NCL => Space::ChromaDerivedNCL, 60 AVCOL_SPC_CHROMA_DERIVED_CL => Space::ChromaDerivedCL, 61 AVCOL_SPC_ICTCP => Space::ICTCP, 62 } 63 } 64 } 65 66 impl From<Space> for AVColorSpace { from(value: Space) -> AVColorSpace67 fn from(value: Space) -> AVColorSpace { 68 match value { 69 Space::RGB => AVCOL_SPC_RGB, 70 Space::BT709 => AVCOL_SPC_BT709, 71 Space::Unspecified => AVCOL_SPC_UNSPECIFIED, 72 Space::Reserved => AVCOL_SPC_RESERVED, 73 Space::FCC => AVCOL_SPC_FCC, 74 Space::BT470BG => AVCOL_SPC_BT470BG, 75 Space::SMPTE170M => AVCOL_SPC_SMPTE170M, 76 Space::SMPTE240M => AVCOL_SPC_SMPTE240M, 77 Space::YCGCO => AVCOL_SPC_YCGCO, 78 Space::BT2020NCL => AVCOL_SPC_BT2020_NCL, 79 Space::BT2020CL => AVCOL_SPC_BT2020_CL, 80 Space::SMPTE2085 => AVCOL_SPC_SMPTE2085, 81 82 Space::ChromaDerivedNCL => AVCOL_SPC_CHROMA_DERIVED_NCL, 83 Space::ChromaDerivedCL => AVCOL_SPC_CHROMA_DERIVED_CL, 84 Space::ICTCP => AVCOL_SPC_ICTCP, 85 } 86 } 87 } 88