use async_trait::async_trait;
use crate::error::Result;
use crate::frame::{FrameData, VideoFrame};
#[async_trait]
pub trait VideoSource: Send {
type Frame: FrameData;
async fn start(&mut self) -> Result<()>;
async fn next_frame(&mut self) -> Result<Option<VideoFrame<Self::Frame>>>;
async fn stop(&mut self) -> Result<()>;
}