From e8db20c86b2294d9cc2b4321ffc685d6e952616b Mon Sep 17 00:00:00 2001 From: meh Date: Fri, 28 Aug 2015 21:20:40 +0200 Subject: [PATCH] codec/capabilities: add Capabilities and getter --- src/codec/capabilities.rs | 25 +++++++++++++++++++++++++ src/codec/codec.rs | 10 ++++++---- src/codec/mod.rs | 3 +++ 3 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 src/codec/capabilities.rs 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;