use ff_format::{ErrorSeverity, MediaError};
use thiserror::Error;
#[derive(Error, Debug)]
pub enum RemuxError {
#[error("invalid configuration: {reason}")]
InvalidConfig {
reason: String,
},
#[error("remux operation failed: {reason}")]
OperationFailed {
reason: String,
},
#[error("ffmpeg error: {message} (code={code})")]
Ffmpeg {
code: i32,
message: String,
},
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
}
impl RemuxError {
pub(crate) fn from_ffmpeg_error(errnum: i32) -> Self {
RemuxError::Ffmpeg {
code: errnum,
message: ff_sys::av_error_string(errnum),
}
}
}
impl MediaError for RemuxError {
fn severity(&self) -> ErrorSeverity {
match self {
Self::Ffmpeg { .. } => ErrorSeverity::Other,
Self::InvalidConfig { .. } | Self::OperationFailed { .. } | Self::Io(_) => {
ErrorSeverity::Fatal
}
}
}
}