Files
ffmpeg-the-third/src/util/channel_layout/mask.rs
2024-05-06 02:20:01 -04:00

99 lines
4.6 KiB
Rust

use crate::ffi::*;
use libc::c_ulonglong;
bitflags! {
#[derive(Eq, PartialEq, Copy, Clone)]
pub struct ChannelLayoutMask: 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;
#[cfg(not(feature = "ffmpeg_7_0"))]
const NATIVE = AV_CH_LAYOUT_NATIVE;
const MONO = AV_CH_LAYOUT_MONO;
const STEREO = AV_CH_LAYOUT_STEREO;
const _2POINT1 = AV_CH_LAYOUT_2POINT1;
const _2_1 = AV_CH_LAYOUT_2_1;
const SURROUND = AV_CH_LAYOUT_SURROUND;
const _3POINT1 = AV_CH_LAYOUT_3POINT1;
const _4POINT0 = AV_CH_LAYOUT_4POINT0;
const _4POINT1 = AV_CH_LAYOUT_4POINT1;
const _2_2 = AV_CH_LAYOUT_2_2;
const QUAD = AV_CH_LAYOUT_QUAD;
const _5POINT0 = AV_CH_LAYOUT_5POINT0;
const _5POINT1 = AV_CH_LAYOUT_5POINT1;
const _5POINT0_BACK = AV_CH_LAYOUT_5POINT0_BACK;
const _5POINT1_BACK = AV_CH_LAYOUT_5POINT1_BACK;
const _6POINT0 = AV_CH_LAYOUT_6POINT0;
const _6POINT0_FRONT = AV_CH_LAYOUT_6POINT0_FRONT;
const HEXAGONAL = AV_CH_LAYOUT_HEXAGONAL;
#[cfg(feature = "ffmpeg_5_1")]
const _3POINT1POINT2 = AV_CH_LAYOUT_3POINT1POINT2;
const _6POINT1 = AV_CH_LAYOUT_6POINT1;
const _6POINT1_BACK = AV_CH_LAYOUT_6POINT1_BACK;
const _6POINT1_FRONT = AV_CH_LAYOUT_6POINT1_FRONT;
const _7POINT0 = AV_CH_LAYOUT_7POINT0;
const _7POINT0_FRONT = AV_CH_LAYOUT_7POINT0_FRONT;
const _7POINT1 = AV_CH_LAYOUT_7POINT1;
const _7POINT1_WIDE = AV_CH_LAYOUT_7POINT1_WIDE;
const _7POINT1_WIDE_BACK = AV_CH_LAYOUT_7POINT1_WIDE_BACK;
#[cfg(feature = "ffmpeg_5_1")]
const _5POINT1POINT2_BACK = AV_CH_LAYOUT_5POINT1POINT2_BACK;
const OCTAGONAL = AV_CH_LAYOUT_OCTAGONAL;
#[cfg(feature = "ffmpeg_5_1")]
const CUBE = AV_CH_LAYOUT_CUBE;
#[cfg(feature = "ffmpeg_5_1")]
const _5POINT1POINT4_BACK = AV_CH_LAYOUT_5POINT1POINT4_BACK;
#[cfg(feature = "ffmpeg_5_1")]
const _7POINT1POINT2 = AV_CH_LAYOUT_7POINT1POINT2;
#[cfg(feature = "ffmpeg_5_1")]
const _7POINT1POINT4_BACK = AV_CH_LAYOUT_7POINT1POINT4_BACK;
#[cfg(feature = "ffmpeg_7_0")]
const _7POINT2POINT3 = AV_CH_LAYOUT_7POINT2POINT3;
#[cfg(feature = "ffmpeg_7_0")]
const _9POINT1POINT4_BACK = AV_CH_LAYOUT_9POINT1POINT4_BACK;
const HEXADECAGONAL = AV_CH_LAYOUT_HEXADECAGONAL;
const STEREO_DOWNMIX = AV_CH_LAYOUT_STEREO_DOWNMIX;
#[cfg(feature = "ffmpeg_5_1")]
const _22POINT2 = AV_CH_LAYOUT_22POINT2;
}
}
#[cfg(not(feature = "ffmpeg_7_0"))]
impl ChannelLayoutMask {
#[inline]
pub fn channels(&self) -> i32 {
unsafe { av_get_channel_layout_nb_channels(self.bits()) }
}
pub fn default(number: i32) -> ChannelLayoutMask {
unsafe {
ChannelLayoutMask::from_bits_truncate(
av_get_default_channel_layout(number) as c_ulonglong
)
}
}
}