use super::{
CodecConfig, DecodedFrame, DecodedSurface, DecoderCapabilities, DecoderStats,
EncodedAccessUnit, VideoError,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SubmitOutcome {
Submitted,
WaitingForConfiguration,
Reconfigured,
WaitingForKeyframe,
DroppedForBackpressure,
}
pub trait VideoDecoder {
type Surface: DecodedSurface;
fn capabilities(&self) -> DecoderCapabilities;
fn configure(&mut self, config: CodecConfig) -> Result<(), VideoError>;
fn submit(&mut self, frame: EncodedAccessUnit) -> Result<SubmitOutcome, VideoError>;
fn latest_frame(&mut self) -> Option<DecodedFrame<Self::Surface>>;
fn flush(&mut self) -> Result<(), VideoError>;
fn stats(&self) -> DecoderStats;
}