Skip to main content

camera_stream/
types.rs

1#![allow(unused)]
2
3#[cfg(feature = "alloc")]
4extern crate alloc;
5#[cfg(feature = "alloc")]
6use alloc::vec::Vec;
7
8/// Pixel formats encountered across platforms.
9#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
10#[non_exhaustive]
11pub enum PixelFormat {
12    Nv12,
13    Yuyv,
14    Uyvy,
15    Bgra32,
16    Jpeg,
17}
18
19/// Pixel dimensions of a frame.
20#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
21pub struct Size {
22    pub width: u32,
23    pub height: u32,
24}
25
26/// Frame rate as a rational number.
27#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
28pub struct FrameRate {
29    pub numerator: u32,
30    pub denominator: u32,
31}
32
33impl FrameRate {
34    pub fn as_f64(&self) -> f64 {
35        self.numerator as f64 / self.denominator as f64
36    }
37}
38
39/// Range of supported frame rates.
40#[derive(Debug, Clone, Copy, PartialEq)]
41pub struct FrameRateRange {
42    pub min: FrameRate,
43    pub max: FrameRate,
44}
45
46/// Describes a supported camera format.
47#[cfg(feature = "alloc")]
48#[derive(Debug, Clone, PartialEq)]
49pub struct FormatDescriptor {
50    pub pixel_format: PixelFormat,
51    pub size: Size,
52    pub frame_rate_ranges: Vec<FrameRateRange>,
53}
54
55/// Configuration for opening a camera stream.
56#[derive(Debug, Clone)]
57pub struct StreamConfig {
58    pub pixel_format: PixelFormat,
59    pub size: Size,
60    pub frame_rate: FrameRate,
61}