16685cacbSHarlanC use { 2ccd9a1faSHarlan bytesio::bits_errors::BitError, 36685cacbSHarlanC bytesio::bytes_errors::{BytesReadError, BytesWriteError}, 46685cacbSHarlanC failure::{Backtrace, Fail}, 57f3675feSHarlan h264_decoder::errors::H264Error, 66685cacbSHarlanC std::fmt, 76685cacbSHarlanC }; 815fa2386SHarlanC 915fa2386SHarlanC #[derive(Debug, Fail)] 1015fa2386SHarlanC pub enum TagParseErrorValue { 11*69de9bbdSHarlanC #[fail(display = "bytes read error")] 1215fa2386SHarlanC BytesReadError(BytesReadError), 13*69de9bbdSHarlanC #[fail(display = "tag data length error")] 1415fa2386SHarlanC TagDataLength, 15*69de9bbdSHarlanC #[fail(display = "unknow tag type error")] 1615fa2386SHarlanC UnknownTagType, 1715fa2386SHarlanC } 1815fa2386SHarlanC #[derive(Debug)] 1915fa2386SHarlanC pub struct TagParseError { 2015fa2386SHarlanC pub value: TagParseErrorValue, 2115fa2386SHarlanC } 2215fa2386SHarlanC 2315fa2386SHarlanC impl From<BytesReadError> for TagParseError { from(error: BytesReadError) -> Self2415fa2386SHarlanC fn from(error: BytesReadError) -> Self { 2515fa2386SHarlanC TagParseError { 2615fa2386SHarlanC value: TagParseErrorValue::BytesReadError(error), 2715fa2386SHarlanC } 2815fa2386SHarlanC } 2915fa2386SHarlanC } 3015fa2386SHarlanC 3115fa2386SHarlanC impl fmt::Display for TagParseError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result3215fa2386SHarlanC fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 3315fa2386SHarlanC fmt::Display::fmt(&self.value, f) 3415fa2386SHarlanC } 3515fa2386SHarlanC } 3615fa2386SHarlanC 3715fa2386SHarlanC impl Fail for TagParseError { cause(&self) -> Option<&dyn Fail>3815fa2386SHarlanC fn cause(&self) -> Option<&dyn Fail> { 3915fa2386SHarlanC self.value.cause() 4015fa2386SHarlanC } 4115fa2386SHarlanC backtrace(&self) -> Option<&Backtrace>4215fa2386SHarlanC fn backtrace(&self) -> Option<&Backtrace> { 4315fa2386SHarlanC self.value.backtrace() 4415fa2386SHarlanC } 4515fa2386SHarlanC } 4615fa2386SHarlanC #[derive(Debug)] 4713bac29aSHarlan pub struct FlvMuxerError { 4815fa2386SHarlanC pub value: MuxerErrorValue, 4915fa2386SHarlanC } 5015fa2386SHarlanC 5115fa2386SHarlanC #[derive(Debug, Fail)] 5215fa2386SHarlanC pub enum MuxerErrorValue { 5315fa2386SHarlanC // #[fail(display = "server error")] 5415fa2386SHarlanC // Error, 5515fa2386SHarlanC #[fail(display = "bytes write error")] 5615fa2386SHarlanC BytesWriteError(BytesWriteError), 5715fa2386SHarlanC } 5815fa2386SHarlanC 5913bac29aSHarlan impl From<BytesWriteError> for FlvMuxerError { from(error: BytesWriteError) -> Self6015fa2386SHarlanC fn from(error: BytesWriteError) -> Self { 6113bac29aSHarlan FlvMuxerError { 6215fa2386SHarlanC value: MuxerErrorValue::BytesWriteError(error), 6315fa2386SHarlanC } 6415fa2386SHarlanC } 6515fa2386SHarlanC } 6615fa2386SHarlanC 6713bac29aSHarlan impl fmt::Display for FlvMuxerError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result6815fa2386SHarlanC fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 6915fa2386SHarlanC fmt::Display::fmt(&self.value, f) 7015fa2386SHarlanC } 7115fa2386SHarlanC } 7215fa2386SHarlanC 7313bac29aSHarlan impl Fail for FlvMuxerError { cause(&self) -> Option<&dyn Fail>7413bac29aSHarlan fn cause(&self) -> Option<&dyn Fail> { 7513bac29aSHarlan self.value.cause() 7613bac29aSHarlan } 7713bac29aSHarlan backtrace(&self) -> Option<&Backtrace>7813bac29aSHarlan fn backtrace(&self) -> Option<&Backtrace> { 7913bac29aSHarlan self.value.backtrace() 8013bac29aSHarlan } 8113bac29aSHarlan } 8213bac29aSHarlan 8315fa2386SHarlanC #[derive(Debug)] 8415fa2386SHarlanC pub struct FlvDemuxerError { 8515fa2386SHarlanC pub value: DemuxerErrorValue, 8615fa2386SHarlanC } 8715fa2386SHarlanC 8815fa2386SHarlanC #[derive(Debug, Fail)] 8915fa2386SHarlanC pub enum DemuxerErrorValue { 9015fa2386SHarlanC // #[fail(display = "server error")] 9115fa2386SHarlanC // Error, 92*69de9bbdSHarlanC #[fail(display = "bytes write error:{}", _0)] 936685cacbSHarlanC BytesWriteError(#[cause] BytesWriteError), 94*69de9bbdSHarlanC #[fail(display = "bytes read error:{}", _0)] 956685cacbSHarlanC BytesReadError(#[cause] BytesReadError), 96*69de9bbdSHarlanC #[fail(display = "mpeg avc error:{}", _0)] 9706c50324SHarlan MpegAvcError(#[cause] Mpeg4AvcHevcError), 98*69de9bbdSHarlanC #[fail(display = "mpeg aac error:{}", _0)] 996685cacbSHarlanC MpegAacError(#[cause] MpegAacError), 10015fa2386SHarlanC } 10115fa2386SHarlanC 10215fa2386SHarlanC impl From<BytesWriteError> for FlvDemuxerError { from(error: BytesWriteError) -> Self10315fa2386SHarlanC fn from(error: BytesWriteError) -> Self { 10415fa2386SHarlanC FlvDemuxerError { 10515fa2386SHarlanC value: DemuxerErrorValue::BytesWriteError(error), 10615fa2386SHarlanC } 10715fa2386SHarlanC } 10815fa2386SHarlanC } 10915fa2386SHarlanC 11015fa2386SHarlanC impl From<BytesReadError> for FlvDemuxerError { from(error: BytesReadError) -> Self11115fa2386SHarlanC fn from(error: BytesReadError) -> Self { 11215fa2386SHarlanC FlvDemuxerError { 11315fa2386SHarlanC value: DemuxerErrorValue::BytesReadError(error), 11415fa2386SHarlanC } 11515fa2386SHarlanC } 11615fa2386SHarlanC } 11715fa2386SHarlanC 11806c50324SHarlan impl From<Mpeg4AvcHevcError> for FlvDemuxerError { from(error: Mpeg4AvcHevcError) -> Self11906c50324SHarlan fn from(error: Mpeg4AvcHevcError) -> Self { 12015fa2386SHarlanC FlvDemuxerError { 12115fa2386SHarlanC value: DemuxerErrorValue::MpegAvcError(error), 12215fa2386SHarlanC } 12315fa2386SHarlanC } 12415fa2386SHarlanC } 12515fa2386SHarlanC 12615fa2386SHarlanC impl From<MpegAacError> for FlvDemuxerError { from(error: MpegAacError) -> Self12715fa2386SHarlanC fn from(error: MpegAacError) -> Self { 12815fa2386SHarlanC FlvDemuxerError { 12915fa2386SHarlanC value: DemuxerErrorValue::MpegAacError(error), 13015fa2386SHarlanC } 13115fa2386SHarlanC } 13215fa2386SHarlanC } 13315fa2386SHarlanC 13415fa2386SHarlanC impl fmt::Display for FlvDemuxerError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result13515fa2386SHarlanC fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 13615fa2386SHarlanC fmt::Display::fmt(&self.value, f) 13715fa2386SHarlanC } 13815fa2386SHarlanC } 13915fa2386SHarlanC 1406685cacbSHarlanC impl Fail for FlvDemuxerError { cause(&self) -> Option<&dyn Fail>1416685cacbSHarlanC fn cause(&self) -> Option<&dyn Fail> { 1426685cacbSHarlanC self.value.cause() 1436685cacbSHarlanC } 1446685cacbSHarlanC backtrace(&self) -> Option<&Backtrace>1456685cacbSHarlanC fn backtrace(&self) -> Option<&Backtrace> { 1466685cacbSHarlanC self.value.backtrace() 1476685cacbSHarlanC } 1486685cacbSHarlanC } 1496685cacbSHarlanC 15015fa2386SHarlanC #[derive(Debug, Fail)] 1516685cacbSHarlanC pub enum MpegErrorValue { 152*69de9bbdSHarlanC #[fail(display = "bytes read error:{}", _0)] 1536685cacbSHarlanC BytesReadError(#[cause] BytesReadError), 154*69de9bbdSHarlanC #[fail(display = "bytes write error:{}", _0)] 1556685cacbSHarlanC BytesWriteError(#[cause] BytesWriteError), 156*69de9bbdSHarlanC #[fail(display = "bits error:{}", _0)] 157ccd9a1faSHarlan BitError(#[cause] BitError), 158*69de9bbdSHarlanC #[fail(display = "h264 error:{}", _0)] 159ccd9a1faSHarlan H264Error(#[cause] H264Error), 160*69de9bbdSHarlanC #[fail(display = "there is not enough bits to read")] 16115fa2386SHarlanC NotEnoughBitsToRead, 162*69de9bbdSHarlanC #[fail(display = "should not come here")] 16315fa2386SHarlanC ShouldNotComeHere, 164*69de9bbdSHarlanC #[fail(display = "the sps nal unit type is not correct")] 165ccd9a1faSHarlan SPSNalunitTypeNotCorrect, 16615fa2386SHarlanC } 16715fa2386SHarlanC #[derive(Debug)] 16806c50324SHarlan pub struct Mpeg4AvcHevcError { 1696685cacbSHarlanC pub value: MpegErrorValue, 17015fa2386SHarlanC } 17115fa2386SHarlanC 17206c50324SHarlan impl From<BytesReadError> for Mpeg4AvcHevcError { from(error: BytesReadError) -> Self17315fa2386SHarlanC fn from(error: BytesReadError) -> Self { 17406c50324SHarlan Mpeg4AvcHevcError { 1756685cacbSHarlanC value: MpegErrorValue::BytesReadError(error), 17615fa2386SHarlanC } 17715fa2386SHarlanC } 17815fa2386SHarlanC } 17915fa2386SHarlanC 18006c50324SHarlan impl From<BytesWriteError> for Mpeg4AvcHevcError { from(error: BytesWriteError) -> Self18115fa2386SHarlanC fn from(error: BytesWriteError) -> Self { 18206c50324SHarlan Mpeg4AvcHevcError { 1836685cacbSHarlanC value: MpegErrorValue::BytesWriteError(error), 18415fa2386SHarlanC } 18515fa2386SHarlanC } 18615fa2386SHarlanC } 18715fa2386SHarlanC 18806c50324SHarlan impl From<H264Error> for Mpeg4AvcHevcError { from(error: H264Error) -> Self189ccd9a1faSHarlan fn from(error: H264Error) -> Self { 19006c50324SHarlan Mpeg4AvcHevcError { 191ccd9a1faSHarlan value: MpegErrorValue::H264Error(error), 192ccd9a1faSHarlan } 193ccd9a1faSHarlan } 194ccd9a1faSHarlan } 195ccd9a1faSHarlan 19606c50324SHarlan impl fmt::Display for Mpeg4AvcHevcError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result1976685cacbSHarlanC fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 1986685cacbSHarlanC fmt::Display::fmt(&self.value, f) 1996685cacbSHarlanC } 2006685cacbSHarlanC } 2016685cacbSHarlanC 20206c50324SHarlan impl Fail for Mpeg4AvcHevcError { cause(&self) -> Option<&dyn Fail>2036685cacbSHarlanC fn cause(&self) -> Option<&dyn Fail> { 2046685cacbSHarlanC self.value.cause() 2056685cacbSHarlanC } 2066685cacbSHarlanC backtrace(&self) -> Option<&Backtrace>2076685cacbSHarlanC fn backtrace(&self) -> Option<&Backtrace> { 2086685cacbSHarlanC self.value.backtrace() 2096685cacbSHarlanC } 2106685cacbSHarlanC } 2116685cacbSHarlanC 21215fa2386SHarlanC #[derive(Debug)] 21315fa2386SHarlanC pub struct MpegAacError { 2146685cacbSHarlanC pub value: MpegErrorValue, 21515fa2386SHarlanC } 21615fa2386SHarlanC 21715fa2386SHarlanC impl From<BytesReadError> for MpegAacError { from(error: BytesReadError) -> Self21815fa2386SHarlanC fn from(error: BytesReadError) -> Self { 21915fa2386SHarlanC MpegAacError { 2206685cacbSHarlanC value: MpegErrorValue::BytesReadError(error), 22115fa2386SHarlanC } 22215fa2386SHarlanC } 22315fa2386SHarlanC } 22415fa2386SHarlanC 22515fa2386SHarlanC impl From<BytesWriteError> for MpegAacError { from(error: BytesWriteError) -> Self22615fa2386SHarlanC fn from(error: BytesWriteError) -> Self { 22715fa2386SHarlanC MpegAacError { 2286685cacbSHarlanC value: MpegErrorValue::BytesWriteError(error), 22915fa2386SHarlanC } 23015fa2386SHarlanC } 23115fa2386SHarlanC } 23215fa2386SHarlanC 233ccd9a1faSHarlan impl From<BitError> for MpegAacError { from(error: BitError) -> Self234ccd9a1faSHarlan fn from(error: BitError) -> Self { 235ccd9a1faSHarlan MpegAacError { 236ccd9a1faSHarlan value: MpegErrorValue::BitError(error), 237ccd9a1faSHarlan } 238ccd9a1faSHarlan } 239ccd9a1faSHarlan } 240ccd9a1faSHarlan 2416685cacbSHarlanC impl fmt::Display for MpegAacError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result2426685cacbSHarlanC fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 2436685cacbSHarlanC fmt::Display::fmt(&self.value, f) 2446685cacbSHarlanC } 2456685cacbSHarlanC } 2466685cacbSHarlanC 2476685cacbSHarlanC impl Fail for MpegAacError { cause(&self) -> Option<&dyn Fail>2486685cacbSHarlanC fn cause(&self) -> Option<&dyn Fail> { 2496685cacbSHarlanC self.value.cause() 2506685cacbSHarlanC } 2516685cacbSHarlanC backtrace(&self) -> Option<&Backtrace>2526685cacbSHarlanC fn backtrace(&self) -> Option<&Backtrace> { 2536685cacbSHarlanC self.value.backtrace() 2546685cacbSHarlanC } 2556685cacbSHarlanC } 2566685cacbSHarlanC 25715fa2386SHarlanC #[derive(Debug, Fail)] 25815fa2386SHarlanC pub enum BitVecErrorValue { 259*69de9bbdSHarlanC #[fail(display = "not enough bits left")] 26015fa2386SHarlanC NotEnoughBits, 26115fa2386SHarlanC } 26215fa2386SHarlanC #[derive(Debug)] 26315fa2386SHarlanC pub struct BitVecError { 26415fa2386SHarlanC pub value: BitVecErrorValue, 26515fa2386SHarlanC } 266