use std::fmt;
pub type Result<T> = core::result::Result<T, Error>;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Error {
UnexpectedEnd,
AdtsSyncNotFound,
AdtsLayerNonZero,
AdtsReservedSampleRateIndex,
AdtsFrameLengthTooSmall,
AdtsCrcMismatch,
UnsupportedAot(u8),
UnsupportedFrameLength,
UnsupportedHeFrame960,
UnsupportedChannelConfiguration(u8),
UnsupportedSampleRateIndex(u8),
IcsInfoInvalid,
SectionDataOverrun,
InvalidCodebook(u8),
HuffmanInvalid,
SpectrumInvalid,
FilterbankInvalid,
Format(&'static str),
LoasSyncInvalid,
LatmAudioMuxVersionAReserved,
LatmConfigOutOfRange,
LatmCrcMismatch,
LatmNoPreviousMuxConfig,
LatmUnsupportedFrameLengthType,
SbrQmfInvalid,
SbrFreqBandInvalid,
SbrGridInvalid,
SbrHuffInvalid,
PsDataInvalid,
UnsupportedExtensionSbr(u8),
UnsupportedExtensionType(u8),
ExtensionPayloadInvalid,
#[allow(dead_code)]
UnsupportedCce,
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::UnexpectedEnd => write!(f, "aac: unexpected end of bitstream"),
Self::AdtsSyncNotFound => write!(f, "aac: ADTS sync not found"),
Self::AdtsLayerNonZero => write!(f, "aac: ADTS layer must be 0"),
Self::AdtsReservedSampleRateIndex => write!(f, "aac: reserved ADTS sample rate"),
Self::AdtsFrameLengthTooSmall => write!(f, "aac: ADTS frame length too small"),
Self::AdtsCrcMismatch => write!(f, "aac: ADTS CRC mismatch"),
Self::UnsupportedAot(a) => write!(f, "aac: unsupported audioObjectType {a}"),
Self::UnsupportedFrameLength => write!(f, "aac: 960-line frames are Media"),
Self::UnsupportedHeFrame960 => write!(f, "aac: HE-AAC over a 960-sample core"),
Self::UnsupportedChannelConfiguration(c) => {
write!(f, "aac: unsupported channel_configuration {c}")
}
Self::UnsupportedSampleRateIndex(i) => {
write!(f, "aac: no SWB table for samplingFrequencyIndex {i}")
}
Self::IcsInfoInvalid => write!(f, "aac: invalid ics_info"),
Self::SectionDataOverrun => write!(f, "aac: section_data overrun"),
Self::InvalidCodebook(c) => write!(f, "aac: invalid codebook {c}"),
Self::HuffmanInvalid => write!(f, "aac: Huffman codeword invalid"),
Self::SpectrumInvalid => write!(f, "aac: spectral geometry invalid"),
Self::FilterbankInvalid => write!(f, "aac: filterbank length mismatch"),
Self::Format(msg) => write!(f, "aac: {msg}"),
Self::LoasSyncInvalid => write!(f, "aac: LOAS sync invalid"),
Self::LatmAudioMuxVersionAReserved => write!(f, "aac: LATM audioMuxVersionA reserved"),
Self::LatmConfigOutOfRange => write!(f, "aac: LATM config out of range"),
Self::LatmCrcMismatch => write!(f, "aac: LATM CRC mismatch"),
Self::LatmNoPreviousMuxConfig => write!(f, "aac: LATM missing StreamMuxConfig"),
Self::LatmUnsupportedFrameLengthType => {
write!(f, "aac: LATM frameLengthType not AAC")
}
Self::SbrQmfInvalid => write!(f, "aac: SBR QMF invalid"),
Self::SbrFreqBandInvalid => write!(f, "aac: SBR frequency table invalid"),
Self::SbrGridInvalid => write!(f, "aac: SBR grid invalid"),
Self::SbrHuffInvalid => write!(f, "aac: SBR Huffman invalid"),
Self::PsDataInvalid => write!(f, "aac: PS data invalid"),
Self::UnsupportedExtensionSbr(t) => write!(f, "aac: SBR extension_type {t}"),
Self::UnsupportedExtensionType(t) => write!(f, "aac: extension_type {t}"),
Self::ExtensionPayloadInvalid => write!(f, "aac: extension_payload invalid"),
Self::UnsupportedCce => write!(f, "aac: CCE coupling is not implemented"),
}
}
}
impl std::error::Error for Error {}