ffav_sys/avutil/
error.rs

1use libc::{c_char, c_int, size_t};
2
3#[inline(always)]
4pub fn AVERROR(e: c_int) -> c_int {
5    -e
6}
7
8#[inline(always)]
9pub fn AVUNERROR(e: c_int) -> c_int {
10    -e
11}
12
13macro_rules! FFERRTAG {
14    ($a:expr, $b:expr, $c:expr, $d:expr) => {
15        -MKTAG!($a, $b, $c, $d) as c_int
16    };
17}
18
19pub const AVERROR_BSF_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'B', b'S', b'F');
20pub const AVERROR_BUG: c_int = FFERRTAG!(b'B', b'U', b'G', b'!');
21pub const AVERROR_BUFFER_TOO_SMALL: c_int = FFERRTAG!(b'B', b'U', b'F', b'S');
22pub const AVERROR_DECODER_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'D', b'E', b'C');
23pub const AVERROR_DEMUXER_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'D', b'E', b'M');
24pub const AVERROR_ENCODER_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'E', b'N', b'C');
25pub const AVERROR_EOF: c_int = FFERRTAG!(b'E', b'O', b'F', b' ');
26pub const AVERROR_EXIT: c_int = FFERRTAG!(b'E', b'X', b'I', b'T');
27pub const AVERROR_EXTERNAL: c_int = FFERRTAG!(b'E', b'X', b'T', b' ');
28pub const AVERROR_FILTER_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'F', b'I', b'L');
29pub const AVERROR_INVALIDDATA: c_int = FFERRTAG!(b'I', b'N', b'D', b'A');
30pub const AVERROR_MUXER_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'M', b'U', b'X');
31pub const AVERROR_OPTION_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'O', b'P', b'T');
32pub const AVERROR_PATCHWELCOME: c_int = FFERRTAG!(b'P', b'A', b'W', b'E');
33pub const AVERROR_PROTOCOL_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'P', b'R', b'O');
34
35pub const AVERROR_STREAM_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'S', b'T', b'R');
36
37pub const AVERROR_BUG2: c_int = FFERRTAG!(b'B', b'U', b'G', b' ');
38pub const AVERROR_UNKNOWN: c_int = FFERRTAG!(b'U', b'N', b'K', b'N');
39
40pub const AVERROR_HTTP_BAD_REQUEST: c_int = FFERRTAG!(0xF8, b'4', b'0', b'0');
41pub const AVERROR_HTTP_UNAUTHORIZED: c_int = FFERRTAG!(0xF8, b'4', b'0', b'1');
42pub const AVERROR_HTTP_FORBIDDEN: c_int = FFERRTAG!(0xF8, b'4', b'0', b'3');
43pub const AVERROR_HTTP_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'4', b'0', b'4');
44pub const AVERROR_HTTP_OTHER_4XX: c_int = FFERRTAG!(0xF8, b'4', b'X', b'X');
45pub const AVERROR_HTTP_SERVER_ERROR: c_int = FFERRTAG!(0xF8, b'5', b'X', b'X');
46
47/// # Safety
48#[inline(always)]
49pub unsafe fn av_make_error_string(
50    errbuf: *mut c_char,
51    errbuf_size: size_t,
52    errnum: c_int,
53) -> *mut c_char {
54    av_strerror(errnum, errbuf, errbuf_size);
55
56    errbuf
57}
58
59extern "C" {
60    pub fn av_strerror(errnum: c_int, errbuf: *mut c_char, errbuf_size: size_t) -> c_int;
61}
62
63pub fn av_err2str(errnum: c_int) -> String {
64    unsafe {
65        use crate::AV_ERROR_MAX_STRING_SIZE;
66        let mut buf: [c_char; AV_ERROR_MAX_STRING_SIZE] = [0; AV_ERROR_MAX_STRING_SIZE];
67        if av_strerror(errnum, buf.as_mut_ptr(), buf.len()) == 0 {
68            std::ffi::CStr::from_ptr(buf.as_ptr())
69                .to_str()
70                .unwrap()
71                .to_owned()
72        } else {
73            "".to_owned()
74        }
75    }
76}