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,
};
pub trait Capture {
fn enum_frameintervals(
&self,
fourcc: FourCC,
width: u32,
height: u32,
) -> io::Result<Vec<FrameInterval>>;
fn enum_framesizes(&self, fourcc: FourCC) -> io::Result<Vec<FrameSize>>;
fn enum_formats(&self) -> io::Result<Vec<FormatDescription>>;
fn format(&self) -> io::Result<Format>;
fn set_format(&self, fmt: &Format) -> io::Result<Format>;
fn params(&self) -> io::Result<CaptureParameters>;
fn set_params(&self, params: &CaptureParameters) -> io::Result<CaptureParameters>;
}
pub trait Output {
fn enum_frameintervals(
&self,
fourcc: FourCC,
width: u32,
height: u32,
) -> io::Result<Vec<FrameInterval>>;
fn enum_framesizes(&self, fourcc: FourCC) -> io::Result<Vec<FrameSize>>;
fn enum_formats(&self) -> io::Result<Vec<FormatDescription>>;
fn format(&self) -> io::Result<Format>;
fn set_format(&self, fmt: &Format) -> io::Result<Format>;
fn params(&self) -> io::Result<OutputParameters>;
fn set_params(&self, params: &OutputParameters) -> io::Result<OutputParameters>;
}