| 1 | use libc::{c_char, c_int, size_t}; |
| 2 | |
| 3 | // Note: FFmpeg's AVERROR and AVUNERROR are conditionally defined based on |
| 4 | // whether EDOM is positive, claiming that "Some platforms have E* and errno |
| 5 | // already negated". This can be traced to a commit in 2007 where "some |
| 6 | // platforms" were specifically identified as BeOS (so maybe also Haiku?): |
| 7 | // https://github.com/FFmpeg/FFmpeg/commit/8fa36ae09dddb1b639b4df5d505c0dbcf4e916e4 |
| 8 | // constness is more valuable than BeOS support, so if someone really needs it, |
| 9 | // send a patch with cfg_attr. |
| 10 | |
| 11 | #[inline (always)] |
| 12 | pub const fn AVERROR(e: c_int) -> c_int { |
| 13 | -e |
| 14 | } |
| 15 | |
| 16 | #[inline (always)] |
| 17 | pub const fn AVUNERROR(e: c_int) -> c_int { |
| 18 | -e |
| 19 | } |
| 20 | |
| 21 | macro_rules! FFERRTAG { |
| 22 | ($a:expr, $b:expr, $c:expr, $d:expr) => { |
| 23 | -MKTAG!($a, $b, $c, $d) as c_int |
| 24 | }; |
| 25 | } |
| 26 | |
| 27 | pub const AVERROR_BSF_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'B' , b'S' , b'F' ); |
| 28 | pub const AVERROR_BUG: c_int = FFERRTAG!(b'B' , b'U' , b'G' , b'!' ); |
| 29 | pub const AVERROR_BUFFER_TOO_SMALL: c_int = FFERRTAG!(b'B' , b'U' , b'F' , b'S' ); |
| 30 | pub const AVERROR_DECODER_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'D' , b'E' , b'C' ); |
| 31 | pub const AVERROR_DEMUXER_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'D' , b'E' , b'M' ); |
| 32 | pub const AVERROR_ENCODER_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'E' , b'N' , b'C' ); |
| 33 | pub const AVERROR_EOF: c_int = FFERRTAG!(b'E' , b'O' , b'F' , b' ' ); |
| 34 | pub const AVERROR_EXIT: c_int = FFERRTAG!(b'E' , b'X' , b'I' , b'T' ); |
| 35 | pub const AVERROR_EXTERNAL: c_int = FFERRTAG!(b'E' , b'X' , b'T' , b' ' ); |
| 36 | pub const AVERROR_FILTER_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'F' , b'I' , b'L' ); |
| 37 | pub const AVERROR_INVALIDDATA: c_int = FFERRTAG!(b'I' , b'N' , b'D' , b'A' ); |
| 38 | pub const AVERROR_MUXER_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'M' , b'U' , b'X' ); |
| 39 | pub const AVERROR_OPTION_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'O' , b'P' , b'T' ); |
| 40 | pub const AVERROR_PATCHWELCOME: c_int = FFERRTAG!(b'P' , b'A' , b'W' , b'E' ); |
| 41 | pub const AVERROR_PROTOCOL_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'P' , b'R' , b'O' ); |
| 42 | |
| 43 | pub const AVERROR_STREAM_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'S' , b'T' , b'R' ); |
| 44 | |
| 45 | pub const AVERROR_BUG2: c_int = FFERRTAG!(b'B' , b'U' , b'G' , b' ' ); |
| 46 | pub const AVERROR_UNKNOWN: c_int = FFERRTAG!(b'U' , b'N' , b'K' , b'N' ); |
| 47 | |
| 48 | pub const AVERROR_HTTP_BAD_REQUEST: c_int = FFERRTAG!(0xF8, b'4' , b'0' , b'0' ); |
| 49 | pub const AVERROR_HTTP_UNAUTHORIZED: c_int = FFERRTAG!(0xF8, b'4' , b'0' , b'1' ); |
| 50 | pub const AVERROR_HTTP_FORBIDDEN: c_int = FFERRTAG!(0xF8, b'4' , b'0' , b'3' ); |
| 51 | pub const AVERROR_HTTP_NOT_FOUND: c_int = FFERRTAG!(0xF8, b'4' , b'0' , b'4' ); |
| 52 | pub const AVERROR_HTTP_TOO_MANY_REQUESTS: c_int = FFERRTAG!(0xF8, b'4' , b'2' , b'9' ); |
| 53 | pub const AVERROR_HTTP_OTHER_4XX: c_int = FFERRTAG!(0xF8, b'4' , b'X' , b'X' ); |
| 54 | pub const AVERROR_HTTP_SERVER_ERROR: c_int = FFERRTAG!(0xF8, b'5' , b'X' , b'X' ); |
| 55 | |
| 56 | #[inline (always)] |
| 57 | pub unsafe fn av_make_error_string( |
| 58 | errbuf: *mut c_char, |
| 59 | errbuf_size: size_t, |
| 60 | errnum: c_int, |
| 61 | ) -> *mut c_char { |
| 62 | av_strerror(errnum, errbuf, errbuf_size); |
| 63 | |
| 64 | errbuf |
| 65 | } |
| 66 | |
| 67 | unsafeextern "C" { |
| 68 | pub unsafefn av_strerror(errnum: c_int, errbuf: *mut c_char, errbuf_size: size_t) -> c_int; |
| 69 | } |
| 70 | |