pub mod bitreader;
pub mod bitwriter;
pub mod decode;
pub mod dequant;
pub mod encoder;
pub mod entropy;
pub mod fdct;
pub mod headers;
pub mod idct;
pub mod marker_write;
pub mod quantize_fwd;
pub mod vlc_encode;
pub mod vlc_tables;
pub mod zigzag;
pub use decode::{Mpeg2Decoder, Mpeg2Frame};
pub use encoder::{Mpeg2Encoder, Mpeg2EncoderConfig};
pub use headers::{
PictureCodingExtension, PictureHeader, SequenceExtension, SequenceHeader, SliceHeader,
};
use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Mpeg2Error {
StartCodeNotFound(u8),
UnexpectedEof {
need: usize,
have: usize,
},
Unsupported(String),
InvalidData(String),
VlcDecode(String),
InvalidConfig(String),
Encode(String),
}
impl fmt::Display for Mpeg2Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::StartCodeNotFound(code) => {
write!(f, "MPEG-2 start code 0x{code:02X} not found")
}
Self::UnexpectedEof { need, have } => {
write!(
f,
"MPEG-2 unexpected end of stream: need {need} bits, have {have}"
)
}
Self::Unsupported(msg) => write!(f, "MPEG-2 unsupported: {msg}"),
Self::InvalidData(msg) => write!(f, "MPEG-2 invalid data: {msg}"),
Self::VlcDecode(msg) => write!(f, "MPEG-2 VLC decode error: {msg}"),
Self::InvalidConfig(msg) => write!(f, "MPEG-2 invalid encoder config: {msg}"),
Self::Encode(msg) => write!(f, "MPEG-2 encode error: {msg}"),
}
}
}
impl std::error::Error for Mpeg2Error {}
pub type Mpeg2Result<T> = Result<T, Mpeg2Error>;