├── .gitignore ├── src ├── avutil │ ├── util.rs │ ├── mod.rs │ ├── macros.rs │ ├── rational.rs │ ├── error.rs │ └── pixfmt.rs └── lib.rs ├── shell.nix ├── README.md ├── .travis └── install_linux.sh ├── .travis.yml └── Cargo.toml /.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | Cargo.lock 3 | /tmp 4 | -------------------------------------------------------------------------------- /src/avutil/util.rs: -------------------------------------------------------------------------------- 1 | use crate::{AVRational, AV_TIME_BASE}; 2 | 3 | pub const AV_NOPTS_VALUE: i64 = 0x8000000000000000u64 as i64; 4 | pub const AV_TIME_BASE_Q: AVRational = AVRational { 5 | num: 1, 6 | den: AV_TIME_BASE as _, 7 | }; 8 | -------------------------------------------------------------------------------- /src/avutil/mod.rs: -------------------------------------------------------------------------------- 1 | #[macro_use] 2 | mod macros; 3 | 4 | mod error; 5 | pub use self::error::*; 6 | 7 | mod util; 8 | pub use self::util::*; 9 | 10 | mod rational; 11 | pub use self::rational::*; 12 | 13 | mod pixfmt; 14 | pub use self::pixfmt::*; 15 | -------------------------------------------------------------------------------- /src/avutil/macros.rs: -------------------------------------------------------------------------------- 1 | #[macro_export] 2 | macro_rules! MKBETAG { 3 | ($a:expr, $b:expr, $c:expr, $d:expr) => { 4 | ($d as isize) | (($c as isize) << 8) | (($b as isize) << 16) | (($a as isize) << 24) 5 | }; 6 | } 7 | 8 | #[macro_export] 9 | macro_rules! MKTAG { 10 | ($a:expr, $b:expr, $c:expr, $d:expr) => { 11 | ($a as isize) | (($b as isize) << 8) | (($c as isize) << 16) | (($d as isize) << 24) 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | #![allow(non_upper_case_globals)] 2 | #![allow(non_camel_case_types)] 3 | #![allow(non_snake_case)] 4 | #![allow(clippy::approx_constant)] 5 | #![allow(clippy::missing_safety_doc)] 6 | #![allow(clippy::redundant_static_lifetimes)] 7 | #![allow(clippy::too_many_arguments)] 8 | #![allow(clippy::type_complexity)] 9 | #![allow(clippy::upper_case_acronyms)] 10 | 11 | include!(concat!(env!("OUT_DIR"), "/bindings.rs")); 12 | 13 | #[macro_use] 14 | mod avutil; 15 | pub use crate::avutil::*; 16 | -------------------------------------------------------------------------------- /shell.nix: -------------------------------------------------------------------------------- 1 | let 2 | mozilla = import (builtins.fetchTarball https://github.com/mozilla/nixpkgs-mozilla/archive/master.tar.gz); 3 | in 4 | 5 | with (import { 6 | overlays = [mozilla]; 7 | }); 8 | 9 | mkShell { 10 | name = "ffmpeg-sys"; 11 | 12 | buildInputs = [ 13 | # For building. 14 | clang rustChannels.stable.rust pkg-config ffmpeg_6 15 | ]; 16 | 17 | RUST_BACKTRACE = 1; 18 | RUSTFLAGS = "-C target-cpu=native"; 19 | 20 | LIBCLANG_PATH = "${llvmPackages.libclang.lib}/lib"; 21 | } 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Rust FFI bindings for ffmpeg 2 | 3 | Low-level bindings for ffmpeg autogenerated with bindgen. This crate supports cross-compilation automatically. 4 | 5 | For higher-level library, see [ffmpeg crate](https://lib.rs/ffmpeg). 6 | 7 | ## Building 8 | 9 | By default, the crate will search for ffmpeg v4 installed on the system. 10 | 11 | This crate can also download, build and statically link its own copy of ffmpeg if you enable `build` feature: 12 | 13 | ```toml 14 | [dependencies] 15 | ffmpeg-sys = { version = "4", features = ["build"] } 16 | ``` 17 | 18 | See [Cargo features](https://github.com/meh/rust-ffmpeg/blob/HEAD/Cargo.toml) to control which codecs are included. 19 | 20 | -------------------------------------------------------------------------------- /.travis/install_linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | sudo apt-get update -q 4 | # From https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu 5 | sudo apt-get -y --force-yes install autoconf automake build-essential libass-dev libfreetype6-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev 6 | sudo apt-get install yasm 7 | pushd ~ 8 | git clone https://github.com/FFmpeg/FFmpeg.git 9 | cd FFmpeg 10 | git checkout release/3.2 11 | mkdir ~/FFmpeg-build 12 | cd ~/FFmpeg-build 13 | ../FFmpeg/configure --disable-ffprobe --disable-ffserver --disable-doc --enable-avresample 14 | make -j 15 | sudo make install 16 | make distclean 17 | popd 18 | -------------------------------------------------------------------------------- /src/avutil/rational.rs: -------------------------------------------------------------------------------- 1 | use crate::AVRational; 2 | use std::os::raw::c_int; 3 | 4 | #[inline(always)] 5 | pub unsafe fn av_make_q(num: c_int, den: c_int) -> AVRational { 6 | AVRational { num, den } 7 | } 8 | 9 | #[inline(always)] 10 | pub unsafe fn av_cmp_q(a: AVRational, b: AVRational) -> c_int { 11 | let tmp = i64::from(a.num) * i64::from(b.den) - i64::from(b.num) * i64::from(a.den); 12 | 13 | if tmp != 0 { 14 | (((tmp ^ i64::from(a.den) ^ i64::from(b.den)) >> 63) | 1) as c_int 15 | } else if b.den != 0 && a.den != 0 { 16 | 0 17 | } else if a.num != 0 && b.num != 0 { 18 | (a.num >> 31) - (b.num >> 31) 19 | } else { 20 | c_int::min_value() 21 | } 22 | } 23 | 24 | #[inline(always)] 25 | pub unsafe fn av_q2d(a: AVRational) -> f64 { 26 | f64::from(a.num) / f64::from(a.den) 27 | } 28 | 29 | #[inline(always)] 30 | pub unsafe fn av_inv_q(q: AVRational) -> AVRational { 31 | AVRational { 32 | num: q.den, 33 | den: q.num, 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | language: rust 3 | rust: 4 | - stable 5 | - beta 6 | - nightly 7 | os: 8 | - linux 9 | - os: osx 10 | osx_image: xcode12.5 11 | matrix: 12 | allow_failures: 13 | - rust: nightly 14 | addons: 15 | apt: 16 | packages: 17 | - build-essential 18 | before_install: 19 | # Without rustfmt, bindgen puts everything on one line and any warnings dump so many logs they break Travis 20 | # See https://github.com/rust-lang/rust-bindgen/issues/1600 21 | # optional, because nightlies may not have it 22 | - rustup component add rustfmt || true 23 | - if [[ $TRAVIS_OS_NAME == 'linux' ]]; then ./.travis/install_linux.sh; fi 24 | - if [[ $TRAVIS_OS_NAME == 'osx' ]]; then brew update; fi 25 | - if [[ $TRAVIS_OS_NAME == 'osx' ]]; then brew install yasm; fi 26 | 27 | script: | 28 | if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then 29 | # Current Travis Ubuntu version uses libav which doesn't come with libswresample 30 | cargo build --verbose --no-default-features --features "avcodec avfilter avformat avresample swscale" && 31 | cargo test --verbose --no-default-features --features "avcodec avfilter avformat avresample swscale" 32 | else 33 | travis_wait cargo build --verbose --features "build" 34 | cargo test --verbose --features "build" 35 | fi 36 | 37 | after_failure: 38 | - find /usr -type f 2>/dev/null | grep -E 'lib(avcodec/version|avcodec/avcodec).h$' | xargs -I THEFILE -- sh -c 'echo "=== THEFILE ==="; cat THEFILE' 39 | -------------------------------------------------------------------------------- /src/avutil/error.rs: -------------------------------------------------------------------------------- 1 | use std::os::raw::{c_char, c_int}; 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_OTHER_4XX: c_int = FFERRTAG!(0xF8, b'4', b'X', b'X'); 53 | pub const AVERROR_HTTP_SERVER_ERROR: c_int = FFERRTAG!(0xF8, b'5', b'X', b'X'); 54 | 55 | #[inline(always)] 56 | pub unsafe fn av_make_error_string( 57 | errbuf: *mut c_char, 58 | errbuf_size: usize, 59 | errnum: c_int, 60 | ) -> *mut c_char { 61 | av_strerror(errnum, errbuf, errbuf_size); 62 | 63 | errbuf 64 | } 65 | 66 | extern "C" { 67 | pub fn av_strerror(errnum: c_int, errbuf: *mut c_char, errbuf_size: usize) -> c_int; 68 | } 69 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "ffmpeg-sys" 3 | version = "6.0.0" 4 | build = "build.rs" 5 | links = "ffmpeg" 6 | readme = "README.md" 7 | authors = ["meh. "] 8 | license = "WTFPL" 9 | edition = "2021" 10 | 11 | description = "FFI bindings to FFmpeg" 12 | repository = "https://github.com/meh/rust-ffmpeg-sys" 13 | keywords = ["audio", "video"] 14 | 15 | [lib] 16 | # Disable doctests as a workaround for https://github.com/rust-lang/rust-bindgen/issues/1313 17 | doctest = false 18 | 19 | [dependencies] 20 | libc = "0.2.88" 21 | 22 | [dependencies.serde] 23 | version = "1.0.0" 24 | optional = true 25 | features = ["derive"] 26 | 27 | [build-dependencies] 28 | num_cpus = "1.13.0" 29 | cc = "1.0.67" 30 | pkg-config = "0.3.19" 31 | bindgen = "0.64" 32 | regex = "1" 33 | 34 | [target.'cfg(target_env = "msvc")'.build-dependencies] 35 | vcpkg = "0.2.11" 36 | 37 | [features] 38 | default = ["avcodec", "avdevice", "avfilter", "avformat", "swresample", "swscale"] 39 | 40 | static = [] 41 | build = ["static"] 42 | 43 | # licensing 44 | build-license-gpl = ["build"] 45 | build-license-nonfree = ["build"] 46 | build-license-version3 = ["build"] 47 | 48 | # misc 49 | build-drm = ["build"] 50 | build-nvenc = ["build"] 51 | build-pic = ["build"] 52 | build-zlib = ["build"] 53 | 54 | # ssl 55 | build-lib-gnutls = ["build"] 56 | build-lib-openssl = ["build"] 57 | 58 | # filters 59 | build-lib-fontconfig = ["build"] 60 | build-lib-frei0r = ["build"] 61 | build-lib-ladspa = ["build"] 62 | build-lib-ass = ["build"] 63 | build-lib-freetype = ["build"] 64 | build-lib-freebidi = ["build"] 65 | build-lib-opencv = ["build"] 66 | 67 | # encoders/decoders 68 | build-lib-aacplus = ["build"] 69 | build-lib-celt = ["build"] 70 | build-lib-dcadec = ["build"] 71 | build-lib-faac = ["build"] 72 | build-lib-fdk-aac = ["build"] 73 | build-lib-gsm = ["build"] 74 | build-lib-ilbc = ["build"] 75 | build-lib-kvazaar = ["build"] 76 | build-lib-mp3lame = ["build"] 77 | build-lib-opencore-amrnb = ["build"] 78 | build-lib-opencore-amrwb = ["build"] 79 | build-lib-openh264 = ["build"] 80 | build-lib-openjpeg = ["build"] 81 | build-lib-opus = ["build"] 82 | build-lib-schroedinger = ["build"] 83 | build-lib-shine = ["build"] 84 | build-lib-snappy = ["build"] 85 | build-lib-speex = ["build"] 86 | build-lib-stagefright-h264 = ["build"] 87 | build-lib-theora = ["build"] 88 | build-lib-twolame = ["build"] 89 | build-lib-utvideo = ["build"] 90 | build-lib-vo-aacenc = ["build"] 91 | build-lib-vo-amrwbenc = ["build"] 92 | build-lib-vorbis = ["build"] 93 | build-lib-vpx = ["build"] 94 | build-lib-wavpack = ["build"] 95 | build-lib-webp = ["build"] 96 | build-lib-x264 = ["build"] 97 | build-lib-x265 = ["build"] 98 | build-lib-avs = ["build"] 99 | build-lib-xvid = ["build"] 100 | 101 | # protocols 102 | build-lib-smbclient = ["build"] 103 | build-lib-ssh = ["build"] 104 | 105 | # components 106 | avcodec = [] 107 | avdevice = ["avformat"] 108 | avfilter = [] 109 | avformat = ["avcodec"] 110 | avresample = [] 111 | postproc = [] 112 | swresample = [] 113 | swscale = [] 114 | lib-drm = [] 115 | -------------------------------------------------------------------------------- /src/avutil/pixfmt.rs: -------------------------------------------------------------------------------- 1 | use crate::AVPixelFormat; 2 | use crate::AVPixelFormat::*; 3 | 4 | #[cfg(target_endian = "little")] 5 | pub const AV_PIX_FMT_RGB32: AVPixelFormat = AV_PIX_FMT_BGRA; 6 | #[cfg(target_endian = "little")] 7 | pub const AV_PIX_FMT_RGB32_1: AVPixelFormat = AV_PIX_FMT_ABGR; 8 | #[cfg(target_endian = "little")] 9 | pub const AV_PIX_FMT_BGR32: AVPixelFormat = AV_PIX_FMT_RGBA; 10 | #[cfg(target_endian = "little")] 11 | pub const AV_PIX_FMT_BGR32_1: AVPixelFormat = AV_PIX_FMT_ARGB; 12 | #[cfg(target_endian = "little")] 13 | pub const AV_PIX_FMT_0RGB32: AVPixelFormat = AV_PIX_FMT_BGR0; 14 | #[cfg(target_endian = "little")] 15 | pub const AV_PIX_FMT_0BGR32: AVPixelFormat = AV_PIX_FMT_RGB0; 16 | 17 | #[cfg(target_endian = "little")] 18 | pub const AV_PIX_FMT_GRAY16: AVPixelFormat = AV_PIX_FMT_GRAY16LE; 19 | #[cfg(target_endian = "little")] 20 | pub const AV_PIX_FMT_YA16: AVPixelFormat = AV_PIX_FMT_YA16LE; 21 | #[cfg(target_endian = "little")] 22 | pub const AV_PIX_FMT_RGB48: AVPixelFormat = AV_PIX_FMT_RGB48LE; 23 | #[cfg(target_endian = "little")] 24 | pub const AV_PIX_FMT_RGB565: AVPixelFormat = AV_PIX_FMT_RGB565LE; 25 | #[cfg(target_endian = "little")] 26 | pub const AV_PIX_FMT_RGB555: AVPixelFormat = AV_PIX_FMT_RGB555LE; 27 | #[cfg(target_endian = "little")] 28 | pub const AV_PIX_FMT_RGB444: AVPixelFormat = AV_PIX_FMT_RGB444LE; 29 | #[cfg(target_endian = "little")] 30 | pub const AV_PIX_FMT_BGR48: AVPixelFormat = AV_PIX_FMT_BGR48LE; 31 | #[cfg(target_endian = "little")] 32 | pub const AV_PIX_FMT_BGR565: AVPixelFormat = AV_PIX_FMT_BGR565LE; 33 | #[cfg(target_endian = "little")] 34 | pub const AV_PIX_FMT_BGR555: AVPixelFormat = AV_PIX_FMT_BGR555LE; 35 | #[cfg(target_endian = "little")] 36 | pub const AV_PIX_FMT_BGR444: AVPixelFormat = AV_PIX_FMT_BGR444LE; 37 | 38 | #[cfg(target_endian = "little")] 39 | pub const AV_PIX_FMT_YUV420P9: AVPixelFormat = AV_PIX_FMT_YUV420P9LE; 40 | #[cfg(target_endian = "little")] 41 | pub const AV_PIX_FMT_YUV422P9: AVPixelFormat = AV_PIX_FMT_YUV422P9LE; 42 | #[cfg(target_endian = "little")] 43 | pub const AV_PIX_FMT_YUV444P9: AVPixelFormat = AV_PIX_FMT_YUV444P9LE; 44 | #[cfg(target_endian = "little")] 45 | pub const AV_PIX_FMT_YUV420P10: AVPixelFormat = AV_PIX_FMT_YUV420P10LE; 46 | #[cfg(target_endian = "little")] 47 | pub const AV_PIX_FMT_YUV422P10: AVPixelFormat = AV_PIX_FMT_YUV422P10LE; 48 | #[cfg(target_endian = "little")] 49 | pub const AV_PIX_FMT_YUV440P10: AVPixelFormat = AV_PIX_FMT_YUV440P10LE; 50 | #[cfg(target_endian = "little")] 51 | pub const AV_PIX_FMT_YUV444P10: AVPixelFormat = AV_PIX_FMT_YUV444P10LE; 52 | #[cfg(target_endian = "little")] 53 | pub const AV_PIX_FMT_YUV420P12: AVPixelFormat = AV_PIX_FMT_YUV420P12LE; 54 | #[cfg(target_endian = "little")] 55 | pub const AV_PIX_FMT_YUV422P12: AVPixelFormat = AV_PIX_FMT_YUV422P12LE; 56 | #[cfg(target_endian = "little")] 57 | pub const AV_PIX_FMT_YUV440P12: AVPixelFormat = AV_PIX_FMT_YUV440P12LE; 58 | #[cfg(target_endian = "little")] 59 | pub const AV_PIX_FMT_YUV444P12: AVPixelFormat = AV_PIX_FMT_YUV444P12LE; 60 | #[cfg(target_endian = "little")] 61 | pub const AV_PIX_FMT_YUV420P14: AVPixelFormat = AV_PIX_FMT_YUV420P14LE; 62 | #[cfg(target_endian = "little")] 63 | pub const AV_PIX_FMT_YUV422P14: AVPixelFormat = AV_PIX_FMT_YUV422P14LE; 64 | #[cfg(target_endian = "little")] 65 | pub const AV_PIX_FMT_YUV444P14: AVPixelFormat = AV_PIX_FMT_YUV444P14LE; 66 | #[cfg(target_endian = "little")] 67 | pub const AV_PIX_FMT_YUV420P16: AVPixelFormat = AV_PIX_FMT_YUV420P16LE; 68 | #[cfg(target_endian = "little")] 69 | pub const AV_PIX_FMT_YUV422P16: AVPixelFormat = AV_PIX_FMT_YUV422P16LE; 70 | #[cfg(target_endian = "little")] 71 | pub const AV_PIX_FMT_YUV444P16: AVPixelFormat = AV_PIX_FMT_YUV444P16LE; 72 | 73 | #[cfg(target_endian = "little")] 74 | pub const AV_PIX_FMT_GBRP9: AVPixelFormat = AV_PIX_FMT_GBRP9LE; 75 | #[cfg(target_endian = "little")] 76 | pub const AV_PIX_FMT_GBRP10: AVPixelFormat = AV_PIX_FMT_GBRP10LE; 77 | #[cfg(target_endian = "little")] 78 | pub const AV_PIX_FMT_GBRP12: AVPixelFormat = AV_PIX_FMT_GBRP12LE; 79 | #[cfg(target_endian = "little")] 80 | pub const AV_PIX_FMT_GBRP14: AVPixelFormat = AV_PIX_FMT_GBRP14LE; 81 | #[cfg(target_endian = "little")] 82 | pub const AV_PIX_FMT_GBRP16: AVPixelFormat = AV_PIX_FMT_GBRP16LE; 83 | #[cfg(target_endian = "little")] 84 | pub const AV_PIX_FMT_GBRAP16: AVPixelFormat = AV_PIX_FMT_GBRAP16LE; 85 | 86 | #[cfg(target_endian = "little")] 87 | pub const AV_PIX_FMT_BAYER_BGGR16: AVPixelFormat = AV_PIX_FMT_BAYER_BGGR16LE; 88 | #[cfg(target_endian = "little")] 89 | pub const AV_PIX_FMT_BAYER_RGGB16: AVPixelFormat = AV_PIX_FMT_BAYER_RGGB16LE; 90 | #[cfg(target_endian = "little")] 91 | pub const AV_PIX_FMT_BAYER_GBRG16: AVPixelFormat = AV_PIX_FMT_BAYER_GBRG16LE; 92 | #[cfg(target_endian = "little")] 93 | pub const AV_PIX_FMT_BAYER_GRBG16: AVPixelFormat = AV_PIX_FMT_BAYER_GRBG16LE; 94 | 95 | #[cfg(target_endian = "little")] 96 | pub const AV_PIX_FMT_YUVA420P9: AVPixelFormat = AV_PIX_FMT_YUVA420P9LE; 97 | #[cfg(target_endian = "little")] 98 | pub const AV_PIX_FMT_YUVA422P9: AVPixelFormat = AV_PIX_FMT_YUVA422P9LE; 99 | #[cfg(target_endian = "little")] 100 | pub const AV_PIX_FMT_YUVA444P9: AVPixelFormat = AV_PIX_FMT_YUVA444P9LE; 101 | #[cfg(target_endian = "little")] 102 | pub const AV_PIX_FMT_YUVA420P10: AVPixelFormat = AV_PIX_FMT_YUVA420P10LE; 103 | #[cfg(target_endian = "little")] 104 | pub const AV_PIX_FMT_YUVA422P10: AVPixelFormat = AV_PIX_FMT_YUVA422P10LE; 105 | #[cfg(target_endian = "little")] 106 | pub const AV_PIX_FMT_YUVA444P10: AVPixelFormat = AV_PIX_FMT_YUVA444P10LE; 107 | #[cfg(target_endian = "little")] 108 | pub const AV_PIX_FMT_YUVA420P16: AVPixelFormat = AV_PIX_FMT_YUVA420P16LE; 109 | #[cfg(target_endian = "little")] 110 | pub const AV_PIX_FMT_YUVA422P16: AVPixelFormat = AV_PIX_FMT_YUVA422P16LE; 111 | #[cfg(target_endian = "little")] 112 | pub const AV_PIX_FMT_YUVA444P16: AVPixelFormat = AV_PIX_FMT_YUVA444P16LE; 113 | 114 | #[cfg(target_endian = "little")] 115 | pub const AV_PIX_FMT_XYZ12: AVPixelFormat = AV_PIX_FMT_XYZ12LE; 116 | #[cfg(target_endian = "little")] 117 | pub const AV_PIX_FMT_NV20: AVPixelFormat = AV_PIX_FMT_NV20LE; 118 | #[cfg(target_endian = "little")] 119 | pub const AV_PIX_FMT_AYUV64: AVPixelFormat = AV_PIX_FMT_AYUV64LE; 120 | 121 | #[cfg(target_endian = "big")] 122 | pub const AV_PIX_FMT_RGB32: AVPixelFormat = AV_PIX_FMT_ARGB; 123 | #[cfg(target_endian = "big")] 124 | pub const AV_PIX_FMT_RGB32_1: AVPixelFormat = AV_PIX_FMT_RGBA; 125 | #[cfg(target_endian = "big")] 126 | pub const AV_PIX_FMT_BGR32: AVPixelFormat = AV_PIX_FMT_ABGR; 127 | #[cfg(target_endian = "big")] 128 | pub const AV_PIX_FMT_BGR32_1: AVPixelFormat = AV_PIX_FMT_BGRA; 129 | #[cfg(target_endian = "big")] 130 | pub const AV_PIX_FMT_0RGB32: AVPixelFormat = AV_PIX_FMT_0RGB; 131 | #[cfg(target_endian = "big")] 132 | pub const AV_PIX_FMT_0BGR32: AVPixelFormat = AV_PIX_FMT_0BGR; 133 | 134 | #[cfg(target_endian = "big")] 135 | pub const AV_PIX_FMT_GRAY16: AVPixelFormat = AV_PIX_FMT_GRAY16BE; 136 | #[cfg(target_endian = "big")] 137 | pub const AV_PIX_FMT_YA16: AVPixelFormat = AV_PIX_FMT_YA16BE; 138 | #[cfg(target_endian = "big")] 139 | pub const AV_PIX_FMT_RGB48: AVPixelFormat = AV_PIX_FMT_RGB48BE; 140 | #[cfg(target_endian = "big")] 141 | pub const AV_PIX_FMT_RGB565: AVPixelFormat = AV_PIX_FMT_RGB565BE; 142 | #[cfg(target_endian = "big")] 143 | pub const AV_PIX_FMT_RGB555: AVPixelFormat = AV_PIX_FMT_RGB555BE; 144 | #[cfg(target_endian = "big")] 145 | pub const AV_PIX_FMT_RGB444: AVPixelFormat = AV_PIX_FMT_RGB444BE; 146 | #[cfg(target_endian = "big")] 147 | pub const AV_PIX_FMT_BGR48: AVPixelFormat = AV_PIX_FMT_BGR48BE; 148 | #[cfg(target_endian = "big")] 149 | pub const AV_PIX_FMT_BGR565: AVPixelFormat = AV_PIX_FMT_BGR565BE; 150 | #[cfg(target_endian = "big")] 151 | pub const AV_PIX_FMT_BGR555: AVPixelFormat = AV_PIX_FMT_BGR555BE; 152 | #[cfg(target_endian = "big")] 153 | pub const AV_PIX_FMT_BGR444: AVPixelFormat = AV_PIX_FMT_BGR444BE; 154 | 155 | #[cfg(target_endian = "big")] 156 | pub const AV_PIX_FMT_YUV420P9: AVPixelFormat = AV_PIX_FMT_YUV420P9BE; 157 | #[cfg(target_endian = "big")] 158 | pub const AV_PIX_FMT_YUV422P9: AVPixelFormat = AV_PIX_FMT_YUV422P9BE; 159 | #[cfg(target_endian = "big")] 160 | pub const AV_PIX_FMT_YUV444P9: AVPixelFormat = AV_PIX_FMT_YUV444P9BE; 161 | #[cfg(target_endian = "big")] 162 | pub const AV_PIX_FMT_YUV420P10: AVPixelFormat = AV_PIX_FMT_YUV420P10BE; 163 | #[cfg(target_endian = "big")] 164 | pub const AV_PIX_FMT_YUV422P10: AVPixelFormat = AV_PIX_FMT_YUV422P10BE; 165 | #[cfg(target_endian = "big")] 166 | pub const AV_PIX_FMT_YUV440P10: AVPixelFormat = AV_PIX_FMT_YUV440P10BE; 167 | #[cfg(target_endian = "big")] 168 | pub const AV_PIX_FMT_YUV444P10: AVPixelFormat = AV_PIX_FMT_YUV444P10BE; 169 | #[cfg(target_endian = "big")] 170 | pub const AV_PIX_FMT_YUV420P12: AVPixelFormat = AV_PIX_FMT_YUV420P12BE; 171 | #[cfg(target_endian = "big")] 172 | pub const AV_PIX_FMT_YUV422P12: AVPixelFormat = AV_PIX_FMT_YUV422P12BE; 173 | #[cfg(target_endian = "big")] 174 | pub const AV_PIX_FMT_YUV440P12: AVPixelFormat = AV_PIX_FMT_YUV440P12BE; 175 | #[cfg(target_endian = "big")] 176 | pub const AV_PIX_FMT_YUV444P12: AVPixelFormat = AV_PIX_FMT_YUV444P12BE; 177 | #[cfg(target_endian = "big")] 178 | pub const AV_PIX_FMT_YUV420P14: AVPixelFormat = AV_PIX_FMT_YUV420P14BE; 179 | #[cfg(target_endian = "big")] 180 | pub const AV_PIX_FMT_YUV422P14: AVPixelFormat = AV_PIX_FMT_YUV422P14BE; 181 | #[cfg(target_endian = "big")] 182 | pub const AV_PIX_FMT_YUV444P14: AVPixelFormat = AV_PIX_FMT_YUV444P14BE; 183 | #[cfg(target_endian = "big")] 184 | pub const AV_PIX_FMT_YUV420P16: AVPixelFormat = AV_PIX_FMT_YUV420P16BE; 185 | #[cfg(target_endian = "big")] 186 | pub const AV_PIX_FMT_YUV422P16: AVPixelFormat = AV_PIX_FMT_YUV422P16BE; 187 | #[cfg(target_endian = "big")] 188 | pub const AV_PIX_FMT_YUV444P16: AVPixelFormat = AV_PIX_FMT_YUV444P16BE; 189 | 190 | #[cfg(target_endian = "big")] 191 | pub const AV_PIX_FMT_GBRP9: AVPixelFormat = AV_PIX_FMT_GBRP9BE; 192 | #[cfg(target_endian = "big")] 193 | pub const AV_PIX_FMT_GBRP10: AVPixelFormat = AV_PIX_FMT_GBRP10BE; 194 | #[cfg(target_endian = "big")] 195 | pub const AV_PIX_FMT_GBRP12: AVPixelFormat = AV_PIX_FMT_GBRP12BE; 196 | #[cfg(target_endian = "big")] 197 | pub const AV_PIX_FMT_GBRP14: AVPixelFormat = AV_PIX_FMT_GBRP14BE; 198 | #[cfg(target_endian = "big")] 199 | pub const AV_PIX_FMT_GBRP16: AVPixelFormat = AV_PIX_FMT_GBRP16BE; 200 | #[cfg(target_endian = "big")] 201 | pub const AV_PIX_FMT_GBRAP16: AVPixelFormat = AV_PIX_FMT_GBRAP16BE; 202 | 203 | #[cfg(target_endian = "big")] 204 | pub const AV_PIX_FMT_BAYER_BGGR16: AVPixelFormat = AV_PIX_FMT_BAYER_BGGR16BE; 205 | #[cfg(target_endian = "big")] 206 | pub const AV_PIX_FMT_BAYER_RGGB16: AVPixelFormat = AV_PIX_FMT_BAYER_RGGB16BE; 207 | #[cfg(target_endian = "big")] 208 | pub const AV_PIX_FMT_BAYER_GBRG16: AVPixelFormat = AV_PIX_FMT_BAYER_GBRG16BE; 209 | #[cfg(target_endian = "big")] 210 | pub const AV_PIX_FMT_BAYER_GRBG16: AVPixelFormat = AV_PIX_FMT_BAYER_GRBG16BE; 211 | 212 | #[cfg(target_endian = "big")] 213 | pub const AV_PIX_FMT_YUVA420P9: AVPixelFormat = AV_PIX_FMT_YUVA420P9BE; 214 | #[cfg(target_endian = "big")] 215 | pub const AV_PIX_FMT_YUVA422P9: AVPixelFormat = AV_PIX_FMT_YUVA422P9BE; 216 | #[cfg(target_endian = "big")] 217 | pub const AV_PIX_FMT_YUVA444P9: AVPixelFormat = AV_PIX_FMT_YUVA444P9BE; 218 | #[cfg(target_endian = "big")] 219 | pub const AV_PIX_FMT_YUVA420P10: AVPixelFormat = AV_PIX_FMT_YUVA420P10BE; 220 | #[cfg(target_endian = "big")] 221 | pub const AV_PIX_FMT_YUVA422P10: AVPixelFormat = AV_PIX_FMT_YUVA422P10BE; 222 | #[cfg(target_endian = "big")] 223 | pub const AV_PIX_FMT_YUVA444P10: AVPixelFormat = AV_PIX_FMT_YUVA444P10BE; 224 | #[cfg(target_endian = "big")] 225 | pub const AV_PIX_FMT_YUVA420P16: AVPixelFormat = AV_PIX_FMT_YUVA420P16BE; 226 | #[cfg(target_endian = "big")] 227 | pub const AV_PIX_FMT_YUVA422P16: AVPixelFormat = AV_PIX_FMT_YUVA422P16BE; 228 | #[cfg(target_endian = "big")] 229 | pub const AV_PIX_FMT_YUVA444P16: AVPixelFormat = AV_PIX_FMT_YUVA444P16BE; 230 | 231 | #[cfg(target_endian = "big")] 232 | pub const AV_PIX_FMT_XYZ12: AVPixelFormat = AV_PIX_FMT_XYZ12BE; 233 | #[cfg(target_endian = "big")] 234 | pub const AV_PIX_FMT_NV20: AVPixelFormat = AV_PIX_FMT_NV20BE; 235 | #[cfg(target_endian = "big")] 236 | pub const AV_PIX_FMT_AYUV64: AVPixelFormat = AV_PIX_FMT_AYUV64BE; 237 | --------------------------------------------------------------------------------