1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
use std::io; use crate::video::capture::Parameters as CaptureParameters; use crate::video::output::Parameters as OutputParameters; use crate::{ format::Description as FormatDescription, format::Format, format::FourCC, frameinterval::FrameInterval, framesize::FrameSize, }; /// Capture device protocol pub trait Capture { /// Returns a vector of all frame intervals that the device supports for the given pixel format /// and frame size fn enum_frameintervals( &self, fourcc: FourCC, width: u32, height: u32, ) -> io::Result<Vec<FrameInterval>>; /// Returns a vector of valid framesizes that the device supports for the given pixel format fn enum_framesizes(&self, fourcc: FourCC) -> io::Result<Vec<FrameSize>>; /// Returns a vector of valid formats for this device /// /// The "emulated" field describes formats filled in by libv4lconvert. /// There may be a conversion related performance penalty when using them. fn enum_formats(&self) -> io::Result<Vec<FormatDescription>>; /// Returns the format currently in use fn format(&self) -> io::Result<Format>; /// Modifies the capture format and returns the actual format /// /// The driver tries to match the format parameters on a best effort basis. /// Thus, if the combination of format properties cannot be achieved, the closest possible /// settings are used and reported back. /// /// /// # Arguments /// /// * `fmt` - Desired format fn set_format(&self, fmt: &Format) -> io::Result<Format>; /// Returns the parameters currently in use fn params(&self) -> io::Result<CaptureParameters>; /// Modifies the capture parameters and returns the actual parameters /// /// # Arguments /// /// * `params` - Desired parameters fn set_params(&self, params: &CaptureParameters) -> io::Result<CaptureParameters>; } /// Output device protocol pub trait Output { /// Returns a vector of all frame intervals that the device supports for the given pixel format /// and frame size fn enum_frameintervals( &self, fourcc: FourCC, width: u32, height: u32, ) -> io::Result<Vec<FrameInterval>>; /// Returns a vector of valid framesizes that the device supports for the given pixel format fn enum_framesizes(&self, fourcc: FourCC) -> io::Result<Vec<FrameSize>>; /// Returns a vector of valid formats for this device /// /// The "emulated" field describes formats filled in by libv4lconvert. /// There may be a conversion related performance penalty when using them. fn enum_formats(&self) -> io::Result<Vec<FormatDescription>>; /// Returns the format currently in use fn format(&self) -> io::Result<Format>; /// Modifies the capture format and returns the actual format /// /// The driver tries to match the format parameters on a best effort basis. /// Thus, if the combination of format properties cannot be achieved, the closest possible /// settings are used and reported back. /// /// # Arguments /// /// * `fmt` - Desired format fn set_format(&self, fmt: &Format) -> io::Result<Format>; /// Returns the parameters currently in use fn params(&self) -> io::Result<OutputParameters>; /// Modifies the output parameters and returns the actual parameters /// /// # Arguments /// /// * `params` - Desired parameters fn set_params(&self, params: &OutputParameters) -> io::Result<OutputParameters>; }