1 use { 2 bytesio::bits_errors::BitError, 3 bytesio::bytes_errors::{BytesReadError, BytesWriteError}, 4 failure::{Backtrace, Fail}, 5 h264_decoder::errors::H264Error, 6 std::fmt, 7 }; 8 9 #[derive(Debug, Fail)] 10 pub enum TagParseErrorValue { 11 #[fail(display = "bytes read error")] 12 BytesReadError(BytesReadError), 13 #[fail(display = "tag data length error")] 14 TagDataLength, 15 #[fail(display = "unknow tag type error")] 16 UnknownTagType, 17 } 18 #[derive(Debug)] 19 pub struct TagParseError { 20 pub value: TagParseErrorValue, 21 } 22 23 impl From<BytesReadError> for TagParseError { from(error: BytesReadError) -> Self24 fn from(error: BytesReadError) -> Self { 25 TagParseError { 26 value: TagParseErrorValue::BytesReadError(error), 27 } 28 } 29 } 30 31 impl fmt::Display for TagParseError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result32 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 33 fmt::Display::fmt(&self.value, f) 34 } 35 } 36 37 impl Fail for TagParseError { cause(&self) -> Option<&dyn Fail>38 fn cause(&self) -> Option<&dyn Fail> { 39 self.value.cause() 40 } 41 backtrace(&self) -> Option<&Backtrace>42 fn backtrace(&self) -> Option<&Backtrace> { 43 self.value.backtrace() 44 } 45 } 46 #[derive(Debug)] 47 pub struct FlvMuxerError { 48 pub value: MuxerErrorValue, 49 } 50 51 #[derive(Debug, Fail)] 52 pub enum MuxerErrorValue { 53 // #[fail(display = "server error")] 54 // Error, 55 #[fail(display = "bytes write error")] 56 BytesWriteError(BytesWriteError), 57 } 58 59 impl From<BytesWriteError> for FlvMuxerError { from(error: BytesWriteError) -> Self60 fn from(error: BytesWriteError) -> Self { 61 FlvMuxerError { 62 value: MuxerErrorValue::BytesWriteError(error), 63 } 64 } 65 } 66 67 impl fmt::Display for FlvMuxerError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result68 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 69 fmt::Display::fmt(&self.value, f) 70 } 71 } 72 73 impl Fail for FlvMuxerError { cause(&self) -> Option<&dyn Fail>74 fn cause(&self) -> Option<&dyn Fail> { 75 self.value.cause() 76 } 77 backtrace(&self) -> Option<&Backtrace>78 fn backtrace(&self) -> Option<&Backtrace> { 79 self.value.backtrace() 80 } 81 } 82 83 #[derive(Debug)] 84 pub struct FlvDemuxerError { 85 pub value: DemuxerErrorValue, 86 } 87 88 #[derive(Debug, Fail)] 89 pub enum DemuxerErrorValue { 90 // #[fail(display = "server error")] 91 // Error, 92 #[fail(display = "bytes write error:{}", _0)] 93 BytesWriteError(#[cause] BytesWriteError), 94 #[fail(display = "bytes read error:{}", _0)] 95 BytesReadError(#[cause] BytesReadError), 96 #[fail(display = "mpeg avc error:{}", _0)] 97 MpegAvcError(#[cause] Mpeg4AvcHevcError), 98 #[fail(display = "mpeg aac error:{}", _0)] 99 MpegAacError(#[cause] MpegAacError), 100 } 101 102 impl From<BytesWriteError> for FlvDemuxerError { from(error: BytesWriteError) -> Self103 fn from(error: BytesWriteError) -> Self { 104 FlvDemuxerError { 105 value: DemuxerErrorValue::BytesWriteError(error), 106 } 107 } 108 } 109 110 impl From<BytesReadError> for FlvDemuxerError { from(error: BytesReadError) -> Self111 fn from(error: BytesReadError) -> Self { 112 FlvDemuxerError { 113 value: DemuxerErrorValue::BytesReadError(error), 114 } 115 } 116 } 117 118 impl From<Mpeg4AvcHevcError> for FlvDemuxerError { from(error: Mpeg4AvcHevcError) -> Self119 fn from(error: Mpeg4AvcHevcError) -> Self { 120 FlvDemuxerError { 121 value: DemuxerErrorValue::MpegAvcError(error), 122 } 123 } 124 } 125 126 impl From<MpegAacError> for FlvDemuxerError { from(error: MpegAacError) -> Self127 fn from(error: MpegAacError) -> Self { 128 FlvDemuxerError { 129 value: DemuxerErrorValue::MpegAacError(error), 130 } 131 } 132 } 133 134 impl fmt::Display for FlvDemuxerError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result135 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 136 fmt::Display::fmt(&self.value, f) 137 } 138 } 139 140 impl Fail for FlvDemuxerError { cause(&self) -> Option<&dyn Fail>141 fn cause(&self) -> Option<&dyn Fail> { 142 self.value.cause() 143 } 144 backtrace(&self) -> Option<&Backtrace>145 fn backtrace(&self) -> Option<&Backtrace> { 146 self.value.backtrace() 147 } 148 } 149 150 #[derive(Debug, Fail)] 151 pub enum MpegErrorValue { 152 #[fail(display = "bytes read error:{}", _0)] 153 BytesReadError(#[cause] BytesReadError), 154 #[fail(display = "bytes write error:{}", _0)] 155 BytesWriteError(#[cause] BytesWriteError), 156 #[fail(display = "bits error:{}", _0)] 157 BitError(#[cause] BitError), 158 #[fail(display = "h264 error:{}", _0)] 159 H264Error(#[cause] H264Error), 160 #[fail(display = "there is not enough bits to read")] 161 NotEnoughBitsToRead, 162 #[fail(display = "should not come here")] 163 ShouldNotComeHere, 164 #[fail(display = "the sps nal unit type is not correct")] 165 SPSNalunitTypeNotCorrect, 166 } 167 #[derive(Debug)] 168 pub struct Mpeg4AvcHevcError { 169 pub value: MpegErrorValue, 170 } 171 172 impl From<BytesReadError> for Mpeg4AvcHevcError { from(error: BytesReadError) -> Self173 fn from(error: BytesReadError) -> Self { 174 Mpeg4AvcHevcError { 175 value: MpegErrorValue::BytesReadError(error), 176 } 177 } 178 } 179 180 impl From<BytesWriteError> for Mpeg4AvcHevcError { from(error: BytesWriteError) -> Self181 fn from(error: BytesWriteError) -> Self { 182 Mpeg4AvcHevcError { 183 value: MpegErrorValue::BytesWriteError(error), 184 } 185 } 186 } 187 188 impl From<H264Error> for Mpeg4AvcHevcError { from(error: H264Error) -> Self189 fn from(error: H264Error) -> Self { 190 Mpeg4AvcHevcError { 191 value: MpegErrorValue::H264Error(error), 192 } 193 } 194 } 195 196 impl fmt::Display for Mpeg4AvcHevcError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result197 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 198 fmt::Display::fmt(&self.value, f) 199 } 200 } 201 202 impl Fail for Mpeg4AvcHevcError { cause(&self) -> Option<&dyn Fail>203 fn cause(&self) -> Option<&dyn Fail> { 204 self.value.cause() 205 } 206 backtrace(&self) -> Option<&Backtrace>207 fn backtrace(&self) -> Option<&Backtrace> { 208 self.value.backtrace() 209 } 210 } 211 212 #[derive(Debug)] 213 pub struct MpegAacError { 214 pub value: MpegErrorValue, 215 } 216 217 impl From<BytesReadError> for MpegAacError { from(error: BytesReadError) -> Self218 fn from(error: BytesReadError) -> Self { 219 MpegAacError { 220 value: MpegErrorValue::BytesReadError(error), 221 } 222 } 223 } 224 225 impl From<BytesWriteError> for MpegAacError { from(error: BytesWriteError) -> Self226 fn from(error: BytesWriteError) -> Self { 227 MpegAacError { 228 value: MpegErrorValue::BytesWriteError(error), 229 } 230 } 231 } 232 233 impl From<BitError> for MpegAacError { from(error: BitError) -> Self234 fn from(error: BitError) -> Self { 235 MpegAacError { 236 value: MpegErrorValue::BitError(error), 237 } 238 } 239 } 240 241 impl fmt::Display for MpegAacError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result242 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 243 fmt::Display::fmt(&self.value, f) 244 } 245 } 246 247 impl Fail for MpegAacError { cause(&self) -> Option<&dyn Fail>248 fn cause(&self) -> Option<&dyn Fail> { 249 self.value.cause() 250 } 251 backtrace(&self) -> Option<&Backtrace>252 fn backtrace(&self) -> Option<&Backtrace> { 253 self.value.backtrace() 254 } 255 } 256 257 #[derive(Debug, Fail)] 258 pub enum BitVecErrorValue { 259 #[fail(display = "not enough bits left")] 260 NotEnoughBits, 261 } 262 #[derive(Debug)] 263 pub struct BitVecError { 264 pub value: BitVecErrorValue, 265 } 266