diff --git a/src/lib.rs b/src/lib.rs index 65f0a72..8b4e029 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,6 +16,7 @@ pub use util::chroma; pub use util::time; pub use util::frame::{self, Frame}; pub use util::samples::Samples; +pub use util::channel_layout::{self, ChannelLayout}; #[cfg(feature = "format")] pub mod format; diff --git a/src/util/channel_layout.rs b/src/util/channel_layout.rs new file mode 100644 index 0000000..cd3b505 --- /dev/null +++ b/src/util/channel_layout.rs @@ -0,0 +1,61 @@ +use libc::c_ulonglong; +use ffi::*; + +bitflags! { + flags ChannelLayout: c_ulonglong { + const FRONT_LEFT = AV_CH_FRONT_LEFT, + const FRONT_RIGHT = AV_CH_FRONT_RIGHT, + const FRONT_CENTER = AV_CH_FRONT_CENTER, + const LOW_FREQUENCY = AV_CH_LOW_FREQUENCY, + const BACK_LEFT = AV_CH_BACK_LEFT, + const BACK_RIGHT = AV_CH_BACK_RIGHT, + const FRONT_LEFT_OF_CENTER = AV_CH_FRONT_LEFT_OF_CENTER, + const FRONT_RIGHT_OF_CENTER = AV_CH_FRONT_RIGHT_OF_CENTER, + const BACK_CENTER = AV_CH_BACK_CENTER, + const SIDE_LEFT = AV_CH_SIDE_LEFT, + const SIDE_RIGHT = AV_CH_SIDE_RIGHT, + const TOP_CENTER = AV_CH_TOP_CENTER, + const TOP_FRONT_LEFT = AV_CH_TOP_FRONT_LEFT, + const TOP_FRONT_CENTER = AV_CH_TOP_FRONT_CENTER, + const TOP_FRONT_RIGHT = AV_CH_TOP_FRONT_RIGHT, + const TOP_BACK_LEFT = AV_CH_TOP_BACK_LEFT, + const TOP_BACK_CENTER = AV_CH_TOP_BACK_CENTER, + const TOP_BACK_RIGHT = AV_CH_TOP_BACK_RIGHT, + const STEREO_LEFT = AV_CH_STEREO_LEFT, + const STEREO_RIGHT = AV_CH_STEREO_RIGHT, + const WIDE_LEFT = AV_CH_WIDE_LEFT, + const WIDE_RIGHT = AV_CH_WIDE_RIGHT, + const SURROUND_DIRECT_LEFT = AV_CH_SURROUND_DIRECT_LEFT, + const SURROUND_DIRECT_RIGHT = AV_CH_SURROUND_DIRECT_RIGHT, + const LOW_FREQUENCY_2 = AV_CH_LOW_FREQUENCY_2, + const NATIVE = AV_CH_LAYOUT_NATIVE, + + const MONO = FRONT_CENTER.bits, + const STEREO = FRONT_LEFT.bits | FRONT_RIGHT.bits, + const _2POINT1 = STEREO.bits | LOW_FREQUENCY.bits, + const _2_1 = STEREO.bits | BACK_CENTER.bits, + const SURROUND = STEREO.bits | FRONT_CENTER.bits, + const _3POINT1 = SURROUND.bits | LOW_FREQUENCY.bits, + const _4POINT0 = SURROUND.bits | BACK_CENTER.bits, + const _4POINT1 = _4POINT0.bits | LOW_FREQUENCY.bits, + const _2_2 = STEREO.bits | SIDE_LEFT.bits | SIDE_RIGHT.bits, + const QUAD = STEREO.bits | BACK_LEFT.bits | BACK_RIGHT.bits, + const _5POINT0 = SURROUND.bits | SIDE_LEFT.bits | SIDE_RIGHT.bits, + const _5POINT1 = _5POINT0.bits | LOW_FREQUENCY.bits, + const _5POINT0_BACK = SURROUND.bits | BACK_LEFT.bits | BACK_RIGHT.bits, + const _5POINT1_BACK = _5POINT0_BACK.bits | LOW_FREQUENCY.bits, + const _6POINT0 = _5POINT0.bits | BACK_CENTER.bits, + const _6POINT0_FRONT = _2_2.bits | FRONT_LEFT_OF_CENTER.bits | FRONT_RIGHT_OF_CENTER.bits, + const HEXAGONAL = _5POINT0_BACK.bits | BACK_CENTER.bits, + const _6POINT1 = _5POINT1.bits | BACK_CENTER.bits, + const _6POINT1_BACK = _5POINT1_BACK.bits | BACK_CENTER.bits, + const _6POINT1_FRONT = _6POINT0_FRONT.bits | LOW_FREQUENCY.bits, + const _7POINT0 = _5POINT0.bits | BACK_LEFT.bits | BACK_RIGHT.bits, + const _7POINT0_FRONT = _5POINT0.bits | FRONT_LEFT_OF_CENTER.bits | FRONT_RIGHT_OF_CENTER.bits, + const _7POINT1 = _5POINT1.bits | BACK_LEFT.bits | BACK_RIGHT.bits, + const _7POINT1_WIDE = _5POINT1.bits | FRONT_LEFT_OF_CENTER.bits | FRONT_RIGHT_OF_CENTER.bits, + const _7POINT1_WIDE_BACK = _5POINT1_BACK.bits | FRONT_LEFT_OF_CENTER.bits | FRONT_RIGHT_OF_CENTER.bits, + const OCTAGONAL = _5POINT0.bits | BACK_LEFT.bits | BACK_CENTER.bits | BACK_RIGHT.bits, + const STEREO_DOWNMIX = STEREO_LEFT.bits | STEREO_RIGHT.bits, + } +} diff --git a/src/util/mod.rs b/src/util/mod.rs index 57b979a..996ef4a 100644 --- a/src/util/mod.rs +++ b/src/util/mod.rs @@ -9,6 +9,7 @@ pub mod frame; pub mod chroma; pub mod time; pub mod samples; +pub mod channel_layout; use std::ffi::CStr; use std::str::from_utf8_unchecked;