1use crate::pixel_format::PixelFormat;
2
3#[derive(Debug, Clone)]
4pub struct CameraConfig {
5 pub resolution_req: Vec<(u32, u32, Priority)>,
6 pub fps_req: Option<(u32, Priority)>,
7 pub format_req: Vec<(PixelFormat, Priority)>,
8 pub buffer_count: usize, pub align_stride: Option<usize>, }
11
12#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
13pub enum Priority {
14 Low = 0,
15 Medium = 50,
16 High = 100,
17 Required = 255, }
19
20impl Default for CameraConfig {
21 fn default() -> Self {
22 Self::new()
23 }
24}
25
26impl CameraConfig {
27 pub fn new() -> Self {
28 Self {
29 resolution_req: vec![],
30 fps_req: None,
31 format_req: vec![],
32 buffer_count: 3,
33 align_stride: Some(256), }
35 }
36
37 pub fn resolution(mut self, w: u32, h: u32, p: Priority) -> Self {
39 self.resolution_req.push((w, h, p));
40 self
41 }
42
43 pub fn fps(mut self, fps: u32, p: Priority) -> Self {
45 self.fps_req = Some((fps, p));
46 self
47 }
48
49 pub fn format<T: Into<PixelFormat>>(mut self, fmt: T, p: Priority) -> Self {
52 self.format_req.push((fmt.into(), p));
53 self
54 }
55
56 pub fn buffer_count(mut self, count: usize) -> Self {
58 self.buffer_count = count;
59 self
60 }
61}