diff --git a/src/codec/capabilities.rs b/src/codec/capabilities.rs new file mode 100644 index 0000000..c4a5a25 --- /dev/null +++ b/src/codec/capabilities.rs @@ -0,0 +1,25 @@ +use libc::c_uint; +use ffi::*; + +bitflags! { + flags Capabilities: c_uint { + const DRAW_HORIZ_BAND = CODEC_CAP_DRAW_HORIZ_BAND, + const DR1 = CODEC_CAP_DR1, + const TRUNCATED = CODEC_CAP_TRUNCATED, + const HWACCEL = CODEC_CAP_HWACCEL, + const DELAY = CODEC_CAP_DELAY, + const SMALL_LAST_FRAME = CODEC_CAP_SMALL_LAST_FRAME, + const HWACCEL_VDPAU = CODEC_CAP_HWACCEL_VDPAU, + const SUBFRAMES = CODEC_CAP_SUBFRAMES, + const EXPERIMENTAL = CODEC_CAP_EXPERIMENTAL, + const CHANNEL_CONF = CODEC_CAP_CHANNEL_CONF, + const NEG_LINESIZES = CODEC_CAP_NEG_LINESIZES, + const FRAME_THREADS = CODEC_CAP_FRAME_THREADS, + const SLICE_THREADS = CODEC_CAP_SLICE_THREADS, + const PARAM_CHANGE = CODEC_CAP_PARAM_CHANGE, + const AUTO_THREADS = CODEC_CAP_AUTO_THREADS, + const VARIABLE_FRAME_SIZE = CODEC_CAP_VARIABLE_FRAME_SIZE, + const INTRA_ONLY = CODEC_CAP_INTRA_ONLY, + const LOSSLESS = CODEC_CAP_LOSSLESS, + } +} diff --git a/src/codec/codec.rs b/src/codec/codec.rs index 7c294fd..859317b 100644 --- a/src/codec/codec.rs +++ b/src/codec/codec.rs @@ -3,7 +3,7 @@ use std::ffi::CStr; use std::str::from_utf8_unchecked; use ffi::*; -use super::{Id, Context, Video, Audio}; +use super::{Id, Context, Video, Audio, Capabilities}; use ::{Error, media}; use ::codec::context::Opened; @@ -90,13 +90,15 @@ impl<'a> Codec<'a> { } } - // capabilities - pub fn max_lowres(&self) -> i32 { unsafe { av_codec_get_max_lowres(self.as_ptr()) } } - // profiles + pub fn capabilities(&self) -> Capabilities { + unsafe { + Capabilities::from_bits_truncate((*self.as_ptr()).capabilities as u32) + } + } } diff --git a/src/codec/mod.rs b/src/codec/mod.rs index c67abe5..18aa93c 100644 --- a/src/codec/mod.rs +++ b/src/codec/mod.rs @@ -12,6 +12,9 @@ pub mod discard; pub mod context; pub use self::context::Context; +pub mod capabilities; +pub use self::capabilities::Capabilities; + pub mod codec; pub mod video;