v4l/video/output/
parameters.rs

1use std::{fmt, mem};
2
3use crate::fraction::Fraction;
4use crate::parameters::Capabilities;
5use crate::v4l_sys::*;
6
7#[derive(Debug, Copy, Clone)]
8/// Output parameters (single-planar)
9pub struct Parameters {
10    pub capabilities: Capabilities,
11    pub interval: Fraction,
12}
13
14impl Parameters {
15    pub fn new(frac: Fraction) -> Self {
16        Parameters {
17            capabilities: Capabilities::from(0),
18            interval: frac,
19        }
20    }
21
22    pub fn with_fps(fps: u32) -> Self {
23        Parameters {
24            capabilities: Capabilities::from(0),
25            interval: Fraction::new(1, fps),
26        }
27    }
28}
29
30impl fmt::Display for Parameters {
31    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
32        writeln!(f, "capabilities : {}", self.capabilities)?;
33        writeln!(f, "interval     : {} [s]", self.interval)?;
34        Ok(())
35    }
36}
37
38impl From<v4l2_outputparm> for Parameters {
39    fn from(params: v4l2_outputparm) -> Self {
40        Self {
41            capabilities: Capabilities::from(params.capability),
42            interval: Fraction::from(params.timeperframe),
43        }
44    }
45}
46
47impl From<Parameters> for v4l2_outputparm {
48    fn from(parameters: Parameters) -> Self {
49        Self {
50            capability: parameters.capabilities.into(),
51            timeperframe: parameters.interval.into(),
52            ..unsafe { mem::zeroed() }
53        }
54    }
55}