pub mod registry;
use oxideav_core::{CodecId, CodecParameters, ExecutionContext, Frame, Packet, Result};
pub trait Decoder: Send {
fn codec_id(&self) -> &CodecId;
fn send_packet(&mut self, packet: &Packet) -> Result<()>;
fn receive_frame(&mut self) -> Result<Frame>;
fn flush(&mut self) -> Result<()>;
fn set_execution_context(&mut self, _ctx: &ExecutionContext) {}
}
pub trait Encoder: Send {
fn codec_id(&self) -> &CodecId;
fn output_params(&self) -> &CodecParameters;
fn send_frame(&mut self, frame: &Frame) -> Result<()>;
fn receive_packet(&mut self) -> Result<Packet>;
fn flush(&mut self) -> Result<()>;
fn set_execution_context(&mut self, _ctx: &ExecutionContext) {}
}
pub type DecoderFactory = fn(params: &CodecParameters) -> Result<Box<dyn Decoder>>;
pub type EncoderFactory = fn(params: &CodecParameters) -> Result<Box<dyn Encoder>>;
pub use registry::{CodecImplementation, CodecRegistry};