1extern crate ffmpeg_next as ffmpeg;
2
3use ffmpeg::Error as FfmpegError;
4
5#[derive(Debug, Clone)]
8pub enum Error {
9 ReadExhausted,
10 DecodeExhausted,
11 WriteRetryLimitReached,
12 InvalidFrameFormat,
13 InvalidExtraData,
14 MissingCodecParameters,
15 UnsupportedCodecParameterSets,
16 InvalidResizeParameters,
17 UninitializedCodec,
18 UnsupportedCodecHardwareAccelerationDeviceType,
19 BackendError(FfmpegError),
20}
21
22impl std::error::Error for Error {
23 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
24 match *self {
25 Error::ReadExhausted => None,
26 Error::DecodeExhausted => None,
27 Error::WriteRetryLimitReached => None,
28 Error::InvalidFrameFormat => None,
29 Error::InvalidExtraData => None,
30 Error::MissingCodecParameters => None,
31 Error::UnsupportedCodecParameterSets => None,
32 Error::InvalidResizeParameters => None,
33 Error::UninitializedCodec => None,
34 Error::UnsupportedCodecHardwareAccelerationDeviceType => None,
35 Error::BackendError(ref internal) => Some(internal),
36 }
37 }
38}
39
40impl std::fmt::Display for Error {
41 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
42 match *self {
43 Error::ReadExhausted => write!(f, "stream exhausted"),
44 Error::DecodeExhausted => write!(f, "stream exhausted"),
45 Error::WriteRetryLimitReached => {
46 write!(f, "cannot write to video stream, even after multiple tries")
47 }
48 Error::InvalidFrameFormat => write!(
49 f,
50 "provided frame does not match expected dimensions and/or pixel format"
51 ),
52 Error::InvalidExtraData => write!(f, "codec parameters extradata is corrupted"),
53 Error::MissingCodecParameters => write!(f, "codec parameters missing"),
54 Error::UnsupportedCodecParameterSets => write!(
55 f,
56 "extracting parameter sets for this codec is not suppored"
57 ),
58 Error::InvalidResizeParameters => {
59 write!(f, "cannot resize frame into provided dimensions")
60 }
61 Error::UninitializedCodec => {
62 write!(f, "codec context is not initialized properly")
63 }
64 Error::UnsupportedCodecHardwareAccelerationDeviceType => {
65 write!(f, "codec does not supported hardware acceleration device")
66 }
67 Error::BackendError(ref internal) => internal.fmt(f),
68 }
69 }
70}
71
72impl From<FfmpegError> for Error {
73 fn from(internal: FfmpegError) -> Error {
74 Error::BackendError(internal)
75 }
76}