use std::ffi::CStr;
use std::sync::Once;
static INIT: Once = Once::new();
pub fn ensure_initialized() {
INIT.call_once(|| {
});
}
pub fn av_error_string(errnum: i32) -> String {
const BUF_SIZE: usize = 256;
let mut buf = [0i8; BUF_SIZE];
unsafe {
crate::av_strerror(errnum, buf.as_mut_ptr(), BUF_SIZE);
}
let c_str = unsafe { CStr::from_ptr(buf.as_ptr()) };
c_str.to_string_lossy().into_owned()
}
#[macro_export]
macro_rules! check_av_error {
($expr:expr) => {{
let ret = $expr;
if ret < 0 {
Err($crate::av_error_string(ret))
} else {
Ok(ret)
}
}};
}
#[cfg(test)]
mod tests {
use super::*;
use crate::error_codes;
#[test]
fn ensure_initialized_should_be_idempotent() {
ensure_initialized();
ensure_initialized();
ensure_initialized();
}
#[test]
fn av_error_string_should_return_non_empty_message() {
let error_str = av_error_string(error_codes::ENOMEM);
assert!(!error_str.is_empty());
}
}