1use std::os::raw::c_char;
17use num_derive::{FromPrimitive, ToPrimitive};
18use crate::sample::pa_sample_spec;
19
20pub type pa_channel_position_mask_t = u64;
21
22#[inline(always)]
23pub const fn pa_channel_position_mask(pos: pa_channel_position_t) -> pa_channel_position_mask_t {
24 1u64 << (pos as pa_channel_position_mask_t)
25}
26
27#[repr(C)]
28#[derive(Debug, Copy, Clone, PartialEq, Eq)]
29#[derive(FromPrimitive, ToPrimitive)]
30pub enum pa_channel_position_t {
31 Invalid = -1,
32 Mono = 0,
33
34 FrontLeft,
35 FrontRight,
36 FrontCenter,
37
38 RearCenter,
39 RearLeft,
40 RearRight,
41
42 Lfe,
43
44 FrontLeftOfCenter,
45 FrontRightOfCenter,
46
47 SideLeft,
48 SideRight,
49
50 Aux0,
51 Aux1,
52 Aux2,
53 Aux3,
54 Aux4,
55 Aux5,
56 Aux6,
57 Aux7,
58 Aux8,
59 Aux9,
60 Aux10,
61 Aux11,
62 Aux12,
63 Aux13,
64 Aux14,
65 Aux15,
66 Aux16,
67 Aux17,
68 Aux18,
69 Aux19,
70 Aux20,
71 Aux21,
72 Aux22,
73 Aux23,
74 Aux24,
75 Aux25,
76 Aux26,
77 Aux27,
78 Aux28,
79 Aux29,
80 Aux30,
81 Aux31,
82
83 TopCenter,
84
85 TopFrontLeft,
86 TopFrontRight,
87 TopFrontCenter,
88
89 TopRearLeft,
90 TopRearRight,
91 TopRearCenter,
92}
93
94pub const PA_CHANNEL_POSITION_MAX: usize = 51;
95
96pub const PA_CHANNEL_POSITION_INVALID: pa_channel_position_t = pa_channel_position_t::Invalid;
97pub const PA_CHANNEL_POSITION_MONO: pa_channel_position_t = pa_channel_position_t::Mono;
98pub const PA_CHANNEL_POSITION_LEFT: pa_channel_position_t = pa_channel_position_t::FrontLeft;
99pub const PA_CHANNEL_POSITION_RIGHT: pa_channel_position_t = pa_channel_position_t::FrontRight;
100pub const PA_CHANNEL_POSITION_CENTER: pa_channel_position_t = pa_channel_position_t::FrontCenter;
101pub const PA_CHANNEL_POSITION_FRONT_LEFT: pa_channel_position_t = pa_channel_position_t::FrontLeft;
102pub const PA_CHANNEL_POSITION_FRONT_RIGHT: pa_channel_position_t = pa_channel_position_t::FrontRight;
103pub const PA_CHANNEL_POSITION_FRONT_CENTER: pa_channel_position_t = pa_channel_position_t::FrontCenter;
104pub const PA_CHANNEL_POSITION_REAR_CENTER: pa_channel_position_t = pa_channel_position_t::RearCenter;
105pub const PA_CHANNEL_POSITION_REAR_LEFT: pa_channel_position_t = pa_channel_position_t::RearLeft;
106pub const PA_CHANNEL_POSITION_REAR_RIGHT: pa_channel_position_t = pa_channel_position_t::RearRight;
107pub const PA_CHANNEL_POSITION_LFE: pa_channel_position_t = pa_channel_position_t::Lfe;
108pub const PA_CHANNEL_POSITION_SUBWOOFER: pa_channel_position_t = pa_channel_position_t::Lfe;
109pub const PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER: pa_channel_position_t = pa_channel_position_t::FrontLeftOfCenter;
110pub const PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER: pa_channel_position_t = pa_channel_position_t::FrontRightOfCenter;
111pub const PA_CHANNEL_POSITION_SIDE_LEFT: pa_channel_position_t = pa_channel_position_t::SideLeft;
112pub const PA_CHANNEL_POSITION_SIDE_RIGHT: pa_channel_position_t = pa_channel_position_t::SideRight;
113pub const PA_CHANNEL_POSITION_AUX0: pa_channel_position_t = pa_channel_position_t::Aux0;
114pub const PA_CHANNEL_POSITION_AUX1: pa_channel_position_t = pa_channel_position_t::Aux1;
115pub const PA_CHANNEL_POSITION_AUX2: pa_channel_position_t = pa_channel_position_t::Aux2;
116pub const PA_CHANNEL_POSITION_AUX3: pa_channel_position_t = pa_channel_position_t::Aux3;
117pub const PA_CHANNEL_POSITION_AUX4: pa_channel_position_t = pa_channel_position_t::Aux4;
118pub const PA_CHANNEL_POSITION_AUX5: pa_channel_position_t = pa_channel_position_t::Aux5;
119pub const PA_CHANNEL_POSITION_AUX6: pa_channel_position_t = pa_channel_position_t::Aux6;
120pub const PA_CHANNEL_POSITION_AUX7: pa_channel_position_t = pa_channel_position_t::Aux7;
121pub const PA_CHANNEL_POSITION_AUX8: pa_channel_position_t = pa_channel_position_t::Aux8;
122pub const PA_CHANNEL_POSITION_AUX9: pa_channel_position_t = pa_channel_position_t::Aux9;
123pub const PA_CHANNEL_POSITION_AUX10: pa_channel_position_t = pa_channel_position_t::Aux10;
124pub const PA_CHANNEL_POSITION_AUX11: pa_channel_position_t = pa_channel_position_t::Aux11;
125pub const PA_CHANNEL_POSITION_AUX12: pa_channel_position_t = pa_channel_position_t::Aux12;
126pub const PA_CHANNEL_POSITION_AUX13: pa_channel_position_t = pa_channel_position_t::Aux13;
127pub const PA_CHANNEL_POSITION_AUX14: pa_channel_position_t = pa_channel_position_t::Aux14;
128pub const PA_CHANNEL_POSITION_AUX15: pa_channel_position_t = pa_channel_position_t::Aux15;
129pub const PA_CHANNEL_POSITION_AUX16: pa_channel_position_t = pa_channel_position_t::Aux16;
130pub const PA_CHANNEL_POSITION_AUX17: pa_channel_position_t = pa_channel_position_t::Aux17;
131pub const PA_CHANNEL_POSITION_AUX18: pa_channel_position_t = pa_channel_position_t::Aux18;
132pub const PA_CHANNEL_POSITION_AUX19: pa_channel_position_t = pa_channel_position_t::Aux19;
133pub const PA_CHANNEL_POSITION_AUX20: pa_channel_position_t = pa_channel_position_t::Aux20;
134pub const PA_CHANNEL_POSITION_AUX21: pa_channel_position_t = pa_channel_position_t::Aux21;
135pub const PA_CHANNEL_POSITION_AUX22: pa_channel_position_t = pa_channel_position_t::Aux22;
136pub const PA_CHANNEL_POSITION_AUX23: pa_channel_position_t = pa_channel_position_t::Aux23;
137pub const PA_CHANNEL_POSITION_AUX24: pa_channel_position_t = pa_channel_position_t::Aux24;
138pub const PA_CHANNEL_POSITION_AUX25: pa_channel_position_t = pa_channel_position_t::Aux25;
139pub const PA_CHANNEL_POSITION_AUX26: pa_channel_position_t = pa_channel_position_t::Aux26;
140pub const PA_CHANNEL_POSITION_AUX27: pa_channel_position_t = pa_channel_position_t::Aux27;
141pub const PA_CHANNEL_POSITION_AUX28: pa_channel_position_t = pa_channel_position_t::Aux28;
142pub const PA_CHANNEL_POSITION_AUX29: pa_channel_position_t = pa_channel_position_t::Aux29;
143pub const PA_CHANNEL_POSITION_AUX30: pa_channel_position_t = pa_channel_position_t::Aux30;
144pub const PA_CHANNEL_POSITION_AUX31: pa_channel_position_t = pa_channel_position_t::Aux31;
145pub const PA_CHANNEL_POSITION_TOP_CENTER: pa_channel_position_t = pa_channel_position_t::TopCenter;
146pub const PA_CHANNEL_POSITION_TOP_FRONT_LEFT: pa_channel_position_t = pa_channel_position_t::TopFrontLeft;
147pub const PA_CHANNEL_POSITION_TOP_FRONT_RIGHT: pa_channel_position_t = pa_channel_position_t::TopFrontRight;
148pub const PA_CHANNEL_POSITION_TOP_FRONT_CENTER: pa_channel_position_t = pa_channel_position_t::TopFrontCenter;
149pub const PA_CHANNEL_POSITION_TOP_REAR_LEFT: pa_channel_position_t = pa_channel_position_t::TopRearLeft;
150pub const PA_CHANNEL_POSITION_TOP_REAR_RIGHT: pa_channel_position_t = pa_channel_position_t::TopRearRight;
151pub const PA_CHANNEL_POSITION_TOP_REAR_CENTER: pa_channel_position_t = pa_channel_position_t::TopRearCenter;
152
153impl Default for pa_channel_position_t {
154 fn default() -> Self {
155 pa_channel_position_t::Invalid
156 }
157}
158
159#[repr(C)]
163#[derive(Debug, Copy, Clone, PartialEq, Eq)]
164#[derive(FromPrimitive, ToPrimitive)]
165pub enum pa_channel_map_def_t {
166 AIFF,
168 ALSA,
171 Aux,
173 WAVEEx,
176 OSS,
180}
181
182pub const PA_CHANNEL_MAP_DEF_MAX: usize = 5;
183
184pub const PA_CHANNEL_MAP_AIFF: pa_channel_map_def_t = pa_channel_map_def_t::AIFF;
185pub const PA_CHANNEL_MAP_ALSA: pa_channel_map_def_t = pa_channel_map_def_t::ALSA;
186pub const PA_CHANNEL_MAP_AUX: pa_channel_map_def_t = pa_channel_map_def_t::Aux;
187pub const PA_CHANNEL_MAP_WAVEEX: pa_channel_map_def_t = pa_channel_map_def_t::WAVEEx;
188pub const PA_CHANNEL_MAP_OSS: pa_channel_map_def_t = pa_channel_map_def_t::OSS;
189pub const PA_CHANNEL_MAP_DEFAULT: pa_channel_map_def_t = pa_channel_map_def_t::AIFF;
190
191impl Default for pa_channel_map_def_t {
192 fn default() -> Self {
193 PA_CHANNEL_MAP_DEFAULT
194 }
195}
196
197#[repr(C)]
198#[derive(Default, Debug, Copy, Clone)]
199pub struct pa_channel_map {
200 pub channels: u8,
201 pub map: [pa_channel_position_t; crate::sample::PA_CHANNELS_MAX as usize],
202}
203
204pub const PA_CHANNEL_MAP_SNPRINT_MAX: usize = 336;
205
206#[rustfmt::skip]
207#[link(name = "pulse")]
208extern "C" {
209 pub fn pa_channel_map_init(m: *mut pa_channel_map) -> *mut pa_channel_map;
210 pub fn pa_channel_map_init_mono(m: *mut pa_channel_map) -> *mut pa_channel_map;
211 pub fn pa_channel_map_init_stereo(m: *mut pa_channel_map) -> *mut pa_channel_map;
212 pub fn pa_channel_map_init_auto(m: *mut pa_channel_map, channels: u32, def: pa_channel_map_def_t) -> *mut pa_channel_map;
213 pub fn pa_channel_map_init_extend(m: *mut pa_channel_map, channels: u32, def: pa_channel_map_def_t) -> *mut pa_channel_map;
214 pub fn pa_channel_position_to_string(pos: pa_channel_position_t) -> *const c_char;
215 pub fn pa_channel_position_from_string(s: *const c_char) -> pa_channel_position_t;
216 pub fn pa_channel_position_to_pretty_string(pos: pa_channel_position_t) -> *const c_char;
217 pub fn pa_channel_map_snprint(s: *mut c_char, l: usize, map: *const pa_channel_map) -> *mut c_char;
218 pub fn pa_channel_map_parse(map: *mut pa_channel_map, s: *const c_char) -> *mut pa_channel_map;
219 pub fn pa_channel_map_equal(a: *const pa_channel_map, b: *const pa_channel_map) -> i32;
220 pub fn pa_channel_map_valid(map: *const pa_channel_map) -> i32;
221 pub fn pa_channel_map_compatible(map: *const pa_channel_map, ss: *const pa_sample_spec) -> i32;
222 pub fn pa_channel_map_superset(a: *const pa_channel_map, b: *const pa_channel_map) -> i32;
223 pub fn pa_channel_map_can_balance(map: *const pa_channel_map) -> i32;
224 pub fn pa_channel_map_can_fade(map: *const pa_channel_map) -> i32;
225 #[cfg(any(doc, feature = "pa_v8"))]
226 #[cfg_attr(docsrs, doc(cfg(feature = "pa_v8")))]
227 pub fn pa_channel_map_can_lfe_balance(map: *const pa_channel_map) -> i32;
228 pub fn pa_channel_map_to_name(map: *const pa_channel_map) -> *const c_char;
229 pub fn pa_channel_map_to_pretty_name(map: *const pa_channel_map) -> *const c_char;
230 pub fn pa_channel_map_has_position(map: *const pa_channel_map, p: pa_channel_position_t) -> i32;
231 pub fn pa_channel_map_mask(map: *const pa_channel_map) -> pa_channel_position_mask_t;
232}