1use crate::sys;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5pub enum PixelFormat {
6 Unknown,
8 Nv12,
10 Nv12F,
12 I420,
14 I420F,
16 Yuyv,
18 YuyvF,
20 Uyvy,
22 UyvyF,
24 Rgb24,
26 Bgr24,
28 Rgba32,
30 Bgra32,
32}
33
34impl From<sys::CcapPixelFormat> for PixelFormat {
35 fn from(format: sys::CcapPixelFormat) -> Self {
36 match format {
37 sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_UNKNOWN => PixelFormat::Unknown,
38 sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_NV12 => PixelFormat::Nv12,
39 sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_NV12F => PixelFormat::Nv12F,
40 sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_I420 => PixelFormat::I420,
41 sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_I420F => PixelFormat::I420F,
42 sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_YUYV => PixelFormat::Yuyv,
43 sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_YUYV_F => PixelFormat::YuyvF,
44 sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_UYVY => PixelFormat::Uyvy,
45 sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_UYVY_F => PixelFormat::UyvyF,
46 sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_RGB24 => PixelFormat::Rgb24,
47 sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_BGR24 => PixelFormat::Bgr24,
48 sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_RGBA32 => PixelFormat::Rgba32,
49 sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_BGRA32 => PixelFormat::Bgra32,
50 _ => PixelFormat::Unknown,
51 }
52 }
53}
54
55impl PixelFormat {
56 pub fn to_c_enum(self) -> sys::CcapPixelFormat {
58 self.into()
59 }
60
61 pub fn from_c_enum(format: sys::CcapPixelFormat) -> Self {
63 format.into()
64 }
65
66 pub fn as_str(self) -> &'static str {
68 match self {
69 PixelFormat::Unknown => "Unknown",
70 PixelFormat::Nv12 => "NV12",
71 PixelFormat::Nv12F => "NV12F",
72 PixelFormat::I420 => "I420",
73 PixelFormat::I420F => "I420F",
74 PixelFormat::Yuyv => "YUYV",
75 PixelFormat::YuyvF => "YUYV_F",
76 PixelFormat::Uyvy => "UYVY",
77 PixelFormat::UyvyF => "UYVY_F",
78 PixelFormat::Rgb24 => "RGB24",
79 PixelFormat::Bgr24 => "BGR24",
80 PixelFormat::Rgba32 => "RGBA32",
81 PixelFormat::Bgra32 => "BGRA32",
82 }
83 }
84}
85
86impl From<PixelFormat> for sys::CcapPixelFormat {
87 fn from(val: PixelFormat) -> Self {
88 match val {
89 PixelFormat::Unknown => sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_UNKNOWN,
90 PixelFormat::Nv12 => sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_NV12,
91 PixelFormat::Nv12F => sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_NV12F,
92 PixelFormat::I420 => sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_I420,
93 PixelFormat::I420F => sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_I420F,
94 PixelFormat::Yuyv => sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_YUYV,
95 PixelFormat::YuyvF => sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_YUYV_F,
96 PixelFormat::Uyvy => sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_UYVY,
97 PixelFormat::UyvyF => sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_UYVY_F,
98 PixelFormat::Rgb24 => sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_RGB24,
99 PixelFormat::Bgr24 => sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_BGR24,
100 PixelFormat::Rgba32 => sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_RGBA32,
101 PixelFormat::Bgra32 => sys::CcapPixelFormat_CCAP_PIXEL_FORMAT_BGRA32,
102 }
103 }
104}
105
106#[derive(Debug, Clone, Copy, PartialEq, Eq)]
108pub enum FrameOrientation {
109 TopToBottom,
111 BottomToTop,
113}
114
115impl From<sys::CcapFrameOrientation> for FrameOrientation {
116 fn from(orientation: sys::CcapFrameOrientation) -> Self {
117 match orientation {
118 sys::CcapFrameOrientation_CCAP_FRAME_ORIENTATION_TOP_TO_BOTTOM => {
119 FrameOrientation::TopToBottom
120 }
121 sys::CcapFrameOrientation_CCAP_FRAME_ORIENTATION_BOTTOM_TO_TOP => {
122 FrameOrientation::BottomToTop
123 }
124 _ => FrameOrientation::TopToBottom,
125 }
126 }
127}
128
129#[derive(Debug, Clone, Copy, PartialEq, Eq)]
131pub enum PropertyName {
132 Width,
134 Height,
136 FrameRate,
138 PixelFormatInternal,
140 PixelFormatOutput,
142 FrameOrientation,
144}
145
146impl PropertyName {
147 pub fn to_c_enum(self) -> sys::CcapPropertyName {
149 self.into()
150 }
151}
152
153impl From<PropertyName> for sys::CcapPropertyName {
154 fn from(prop: PropertyName) -> Self {
155 match prop {
156 PropertyName::Width => sys::CcapPropertyName_CCAP_PROPERTY_WIDTH,
157 PropertyName::Height => sys::CcapPropertyName_CCAP_PROPERTY_HEIGHT,
158 PropertyName::FrameRate => sys::CcapPropertyName_CCAP_PROPERTY_FRAME_RATE,
159 PropertyName::PixelFormatInternal => {
160 sys::CcapPropertyName_CCAP_PROPERTY_PIXEL_FORMAT_INTERNAL
161 }
162 PropertyName::PixelFormatOutput => {
163 sys::CcapPropertyName_CCAP_PROPERTY_PIXEL_FORMAT_OUTPUT
164 }
165 PropertyName::FrameOrientation => sys::CcapPropertyName_CCAP_PROPERTY_FRAME_ORIENTATION,
166 }
167 }
168}
169
170#[derive(Debug, Clone, Copy, PartialEq, Eq)]
172pub enum ColorConversionBackend {
173 Cpu,
175 Avx2,
177 Neon,
179 Accelerate,
181}
182
183impl ColorConversionBackend {
184 pub fn to_c_enum(self) -> sys::CcapConvertBackend {
186 match self {
187 ColorConversionBackend::Cpu => sys::CcapConvertBackend_CCAP_CONVERT_BACKEND_CPU,
188 ColorConversionBackend::Avx2 => sys::CcapConvertBackend_CCAP_CONVERT_BACKEND_AVX2,
189 ColorConversionBackend::Neon => sys::CcapConvertBackend_CCAP_CONVERT_BACKEND_NEON,
190 ColorConversionBackend::Accelerate => {
191 sys::CcapConvertBackend_CCAP_CONVERT_BACKEND_APPLE_ACCELERATE
192 }
193 }
194 }
195
196 pub fn from_c_enum(backend: sys::CcapConvertBackend) -> Self {
198 match backend {
199 sys::CcapConvertBackend_CCAP_CONVERT_BACKEND_CPU => ColorConversionBackend::Cpu,
200 sys::CcapConvertBackend_CCAP_CONVERT_BACKEND_AVX2 => ColorConversionBackend::Avx2,
201 sys::CcapConvertBackend_CCAP_CONVERT_BACKEND_NEON => ColorConversionBackend::Neon,
202 sys::CcapConvertBackend_CCAP_CONVERT_BACKEND_APPLE_ACCELERATE => {
203 ColorConversionBackend::Accelerate
204 }
205 _ => ColorConversionBackend::Cpu,
206 }
207 }
208}
209
210#[derive(Debug, Clone, Copy, PartialEq, Eq)]
212pub struct Resolution {
213 pub width: u32,
215 pub height: u32,
217}
218
219impl From<sys::CcapResolution> for Resolution {
220 fn from(res: sys::CcapResolution) -> Self {
221 Resolution {
222 width: res.width,
223 height: res.height,
224 }
225 }
226}