ffmpeg_the_third/util/channel_layout/
mask.rs1use crate::ffi::*;
2use libc::c_ulonglong;
3
4bitflags::bitflags! {
5 #[derive(Eq, PartialEq, Copy, Clone, Debug)]
6 pub struct ChannelLayoutMask: c_ulonglong {
7 const FRONT_LEFT = AV_CH_FRONT_LEFT;
8 const FRONT_RIGHT = AV_CH_FRONT_RIGHT;
9 const FRONT_CENTER = AV_CH_FRONT_CENTER;
10 const LOW_FREQUENCY = AV_CH_LOW_FREQUENCY;
11 const BACK_LEFT = AV_CH_BACK_LEFT;
12 const BACK_RIGHT = AV_CH_BACK_RIGHT;
13 const FRONT_LEFT_OF_CENTER = AV_CH_FRONT_LEFT_OF_CENTER;
14 const FRONT_RIGHT_OF_CENTER = AV_CH_FRONT_RIGHT_OF_CENTER;
15 const BACK_CENTER = AV_CH_BACK_CENTER;
16 const SIDE_LEFT = AV_CH_SIDE_LEFT;
17 const SIDE_RIGHT = AV_CH_SIDE_RIGHT;
18 const TOP_CENTER = AV_CH_TOP_CENTER;
19 const TOP_FRONT_LEFT = AV_CH_TOP_FRONT_LEFT;
20 const TOP_FRONT_CENTER = AV_CH_TOP_FRONT_CENTER;
21 const TOP_FRONT_RIGHT = AV_CH_TOP_FRONT_RIGHT;
22 const TOP_BACK_LEFT = AV_CH_TOP_BACK_LEFT;
23 const TOP_BACK_CENTER = AV_CH_TOP_BACK_CENTER;
24 const TOP_BACK_RIGHT = AV_CH_TOP_BACK_RIGHT;
25 const STEREO_LEFT = AV_CH_STEREO_LEFT;
26 const STEREO_RIGHT = AV_CH_STEREO_RIGHT;
27 const WIDE_LEFT = AV_CH_WIDE_LEFT;
28 const WIDE_RIGHT = AV_CH_WIDE_RIGHT;
29 const SURROUND_DIRECT_LEFT = AV_CH_SURROUND_DIRECT_LEFT;
30 const SURROUND_DIRECT_RIGHT = AV_CH_SURROUND_DIRECT_RIGHT;
31 const LOW_FREQUENCY_2 = AV_CH_LOW_FREQUENCY_2;
32 #[cfg(not(feature = "ffmpeg_7_0"))]
33 const NATIVE = AV_CH_LAYOUT_NATIVE;
34
35 const MONO = AV_CH_LAYOUT_MONO;
36 const STEREO = AV_CH_LAYOUT_STEREO;
37 const _2POINT1 = AV_CH_LAYOUT_2POINT1;
38 const _2_1 = AV_CH_LAYOUT_2_1;
39 const SURROUND = AV_CH_LAYOUT_SURROUND;
40 const _3POINT1 = AV_CH_LAYOUT_3POINT1;
41 const _4POINT0 = AV_CH_LAYOUT_4POINT0;
42 const _4POINT1 = AV_CH_LAYOUT_4POINT1;
43 const _2_2 = AV_CH_LAYOUT_2_2;
44 const QUAD = AV_CH_LAYOUT_QUAD;
45 const _5POINT0 = AV_CH_LAYOUT_5POINT0;
46 const _5POINT1 = AV_CH_LAYOUT_5POINT1;
47 const _5POINT0_BACK = AV_CH_LAYOUT_5POINT0_BACK;
48 const _5POINT1_BACK = AV_CH_LAYOUT_5POINT1_BACK;
49 const _6POINT0 = AV_CH_LAYOUT_6POINT0;
50 const _6POINT0_FRONT = AV_CH_LAYOUT_6POINT0_FRONT;
51 const HEXAGONAL = AV_CH_LAYOUT_HEXAGONAL;
52 const _3POINT1POINT2 = AV_CH_LAYOUT_3POINT1POINT2;
53 const _6POINT1 = AV_CH_LAYOUT_6POINT1;
54 const _6POINT1_BACK = AV_CH_LAYOUT_6POINT1_BACK;
55 const _6POINT1_FRONT = AV_CH_LAYOUT_6POINT1_FRONT;
56 const _7POINT0 = AV_CH_LAYOUT_7POINT0;
57 const _7POINT0_FRONT = AV_CH_LAYOUT_7POINT0_FRONT;
58 const _7POINT1 = AV_CH_LAYOUT_7POINT1;
59 const _7POINT1_WIDE = AV_CH_LAYOUT_7POINT1_WIDE;
60 const _7POINT1_WIDE_BACK = AV_CH_LAYOUT_7POINT1_WIDE_BACK;
61 const _5POINT1POINT2_BACK = AV_CH_LAYOUT_5POINT1POINT2_BACK;
62 const OCTAGONAL = AV_CH_LAYOUT_OCTAGONAL;
63 const CUBE = AV_CH_LAYOUT_CUBE;
64 const _5POINT1POINT4_BACK = AV_CH_LAYOUT_5POINT1POINT4_BACK;
65 const _7POINT1POINT2 = AV_CH_LAYOUT_7POINT1POINT2;
66 const _7POINT1POINT4_BACK = AV_CH_LAYOUT_7POINT1POINT4_BACK;
67 #[cfg(feature = "ffmpeg_7_0")]
68 const _7POINT2POINT3 = AV_CH_LAYOUT_7POINT2POINT3;
69 #[cfg(feature = "ffmpeg_7_0")]
70 const _9POINT1POINT4_BACK = AV_CH_LAYOUT_9POINT1POINT4_BACK;
71 const HEXADECAGONAL = AV_CH_LAYOUT_HEXADECAGONAL;
72 const STEREO_DOWNMIX = AV_CH_LAYOUT_STEREO_DOWNMIX;
73 const _22POINT2 = AV_CH_LAYOUT_22POINT2;
74 }
75}
76
77#[cfg(not(feature = "ffmpeg_7_0"))]
78impl ChannelLayoutMask {
79 #[inline]
80 pub fn channels(&self) -> i32 {
81 unsafe { av_get_channel_layout_nb_channels(self.bits()) }
82 }
83
84 pub fn default(number: i32) -> ChannelLayoutMask {
85 unsafe {
86 ChannelLayoutMask::from_bits_truncate(
87 av_get_default_channel_layout(number) as c_ulonglong
88 )
89 }
90 }
91}