pub trait VideoEncoder: Send {
// Required methods
fn new(width: u32, height: u32, quality: QualityPreset) -> Result<Self>
where Self: Sized;
fn process(&mut self, frame: &RawVideoFrame) -> Result<()>;
fn drain(&mut self) -> Result<()>;
fn reset(&mut self) -> Result<()>;
fn drop_encoder(&mut self);
fn get_encoder(&self) -> &Option<Video>;
fn take_encoded_recv(&mut self) -> Option<HeapCons<EncodedVideoFrame>>;
fn as_any(&self) -> &dyn Any;
}