1use uvc_sys::*;
2
3#[derive(Debug, Copy, Clone)]
4pub struct StreamFormat {
6 pub width: u32,
7 pub height: u32,
8 pub fps: u32,
9 pub format: FrameFormat,
10}
11
12#[derive(Debug, PartialEq, Copy, Clone)]
13pub enum FrameFormat {
15 Unknown,
16 Any,
17 Uncompressed,
18 Compressed,
19 YUYV,
20 UYVY,
21 RGB,
22 BGR,
23 MJPEG,
24 GRAY8,
25 GRAY16,
26 BY8,
27 BA81,
28 SGRBG8,
29 SGBRG8,
30 SRGGB8,
31 SBGGR8,
32 Count,
33}
34
35#[allow(non_upper_case_globals, unreachable_patterns)]
36impl From<uvc_frame_format> for FrameFormat {
37 fn from(code: uvc_frame_format) -> Self {
38 match code {
39 uvc_frame_format_UVC_FRAME_FORMAT_ANY => FrameFormat::Any,
40 uvc_frame_format_UVC_FRAME_FORMAT_UNCOMPRESSED => FrameFormat::Uncompressed,
41 uvc_frame_format_UVC_FRAME_FORMAT_COMPRESSED => FrameFormat::Compressed,
42 uvc_frame_format_UVC_FRAME_FORMAT_YUYV => FrameFormat::YUYV,
43 uvc_frame_format_UVC_FRAME_FORMAT_UYVY => FrameFormat::UYVY,
44 uvc_frame_format_UVC_FRAME_FORMAT_RGB => FrameFormat::RGB,
45 uvc_frame_format_UVC_FRAME_FORMAT_BGR => FrameFormat::BGR,
46 uvc_frame_format_UVC_FRAME_FORMAT_MJPEG => FrameFormat::MJPEG,
47 uvc_frame_format_UVC_FRAME_FORMAT_GRAY8 => FrameFormat::GRAY8,
48 uvc_frame_format_UVC_FRAME_FORMAT_GRAY16 => FrameFormat::GRAY16,
49 uvc_frame_format_UVC_FRAME_FORMAT_BY8 => FrameFormat::BY8,
50 uvc_frame_format_UVC_FRAME_FORMAT_BA81 => FrameFormat::BA81,
51 uvc_frame_format_UVC_FRAME_FORMAT_SGRBG8 => FrameFormat::SGRBG8,
52 uvc_frame_format_UVC_FRAME_FORMAT_SGBRG8 => FrameFormat::SGBRG8,
53 uvc_frame_format_UVC_FRAME_FORMAT_SRGGB8 => FrameFormat::SRGGB8,
54 uvc_frame_format_UVC_FRAME_FORMAT_SBGGR8 => FrameFormat::SBGGR8,
55
56 uvc_frame_format_UVC_FRAME_FORMAT_COUNT => FrameFormat::Count,
57 uvc_frame_format_UVC_FRAME_FORMAT_UNKNOWN => FrameFormat::Unknown, _ => FrameFormat::Unknown,
59 }
60 }
61}
62
63impl Into<uvc_frame_format> for FrameFormat {
64 fn into(self: FrameFormat) -> uvc_frame_format {
65 match self {
66 FrameFormat::Any => uvc_frame_format_UVC_FRAME_FORMAT_ANY,
67 FrameFormat::Uncompressed => uvc_frame_format_UVC_FRAME_FORMAT_UNCOMPRESSED,
68 FrameFormat::Compressed => uvc_frame_format_UVC_FRAME_FORMAT_COMPRESSED,
69 FrameFormat::YUYV => uvc_frame_format_UVC_FRAME_FORMAT_YUYV,
70 FrameFormat::UYVY => uvc_frame_format_UVC_FRAME_FORMAT_UYVY,
71 FrameFormat::RGB => uvc_frame_format_UVC_FRAME_FORMAT_RGB,
72 FrameFormat::BGR => uvc_frame_format_UVC_FRAME_FORMAT_BGR,
73 FrameFormat::MJPEG => uvc_frame_format_UVC_FRAME_FORMAT_MJPEG,
74 FrameFormat::GRAY8 => uvc_frame_format_UVC_FRAME_FORMAT_GRAY8,
75 FrameFormat::GRAY16 => uvc_frame_format_UVC_FRAME_FORMAT_GRAY16,
76 FrameFormat::BY8 => uvc_frame_format_UVC_FRAME_FORMAT_BY8,
77 FrameFormat::BA81 => uvc_frame_format_UVC_FRAME_FORMAT_BA81,
78 FrameFormat::SGRBG8 => uvc_frame_format_UVC_FRAME_FORMAT_SGRBG8,
79 FrameFormat::SGBRG8 => uvc_frame_format_UVC_FRAME_FORMAT_SGBRG8,
80 FrameFormat::SRGGB8 => uvc_frame_format_UVC_FRAME_FORMAT_SRGGB8,
81 FrameFormat::SBGGR8 => uvc_frame_format_UVC_FRAME_FORMAT_SBGGR8,
82 FrameFormat::Count => uvc_frame_format_UVC_FRAME_FORMAT_COUNT,
83 FrameFormat::Unknown => uvc_frame_format_UVC_FRAME_FORMAT_UNKNOWN,
84 }
85 }
86}