Skip to main content

v4l/
fraction.rs

1use crate::v4l_sys::*;
2use std::fmt;
3
4#[derive(Debug, Default, Clone, Copy)]
5/// Fraction used for timing settings
6pub struct Fraction {
7    pub numerator: u32,
8    pub denominator: u32,
9}
10
11impl Fraction {
12    /// Returns a fraction representation
13    ///
14    /// # Arguments
15    ///
16    /// * `num` - Numerator
17    /// * `denom` - Denominator
18    ///
19    /// # Example
20    ///
21    /// ```
22    /// use v4l::fraction::Fraction;
23    /// let frac = Fraction::new(30, 1);
24    /// ```
25    pub fn new(num: u32, denom: u32) -> Self {
26        Fraction {
27            numerator: num,
28            denominator: denom,
29        }
30    }
31}
32
33impl fmt::Display for Fraction {
34    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
35        write!(f, "{}/{}", self.numerator, self.denominator)
36    }
37}
38
39impl From<v4l2_fract> for Fraction {
40    fn from(frac: v4l2_fract) -> Self {
41        Self {
42            numerator: frac.numerator,
43            denominator: frac.denominator,
44        }
45    }
46}
47
48impl From<Fraction> for v4l2_fract {
49    fn from(fraction: Fraction) -> Self {
50        Self {
51            numerator: fraction.numerator,
52            denominator: fraction.denominator,
53        }
54    }
55}