uvc/
formats.rs

1use uvc_sys::*;
2
3#[derive(Debug, Copy, Clone)]
4/// Format one can request a stream to produce
5pub 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)]
13/// Format of a frame
14pub 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, // unreachable
58            _ => 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}