diff --git a/src/avutil/error.rs b/src/avutil/error.rs new file mode 100644 index 0000000..5aa4d1f --- /dev/null +++ b/src/avutil/error.rs @@ -0,0 +1,18 @@ +use crate::ffi; +use rusty_ffmpeg::ffi::AV_ERROR_MAX_STRING_SIZE; +use std::ffi::{c_int, CStr}; + +/// Return a description of the AVERROR code errnum. +/// +/// Return `Some(description)` on success, a negative value if a description for +/// errnum cannot be found. +pub fn err2str(errnum: c_int) -> Option { + const ERRBUF_SIZE: usize = AV_ERROR_MAX_STRING_SIZE as usize; + let mut errbuf = [0u8; ERRBUF_SIZE]; + if unsafe { ffi::av_strerror(errnum, errbuf.as_mut_ptr() as _, ERRBUF_SIZE) } == 0 { + let result = CStr::from_bytes_until_nul(&errbuf).unwrap(); + Some(result.to_string_lossy().into_owned()) + } else { + None + } +} diff --git a/src/avutil/mod.rs b/src/avutil/mod.rs index 5ad9a67..c042fea 100644 --- a/src/avutil/mod.rs +++ b/src/avutil/mod.rs @@ -2,6 +2,7 @@ mod audio_fifo; mod channel_layout; mod dict; +mod error; mod file; mod frame; mod imgutils; @@ -18,6 +19,7 @@ mod timestamp; pub use audio_fifo::*; pub use channel_layout::*; pub use dict::*; +pub use error::*; pub use file::*; pub use frame::*; pub use imgutils::*;