1use linux_unsafe::{int, long, off_t, time_t, timespec, uchar, uint, ulong, void};
4
5#[allow(non_camel_case_types)]
6pub type snd_pcm_uframes_t = ulong;
7#[allow(non_camel_case_types)]
8pub type snd_pcm_sframes_t = long;
9
10pub const SNDRV_PCM_CLASS_GENERIC: int = 0;
12pub const SNDRV_PCM_CLASS_MULTI: int = 1;
14pub const SNDRV_PCM_CLASS_MODEM: int = 2;
16pub const SNDRV_PCM_CLASS_DIGITIZER: int = 3;
18pub const SNDRV_PCM_CLASS_LAST: int = SNDRV_PCM_CLASS_DIGITIZER;
19
20pub const SNDRV_PCM_SUBCLASS_GENERIC_MIX: int = 0;
22pub const SNDRV_PCM_SUBCLASS_MULTI_MIX: int = 1;
24pub const SNDRV_PCM_SUBCLASS_LAST: int = SNDRV_PCM_SUBCLASS_MULTI_MIX;
25
26pub const SNDRV_PCM_STREAM_PLAYBACK: int = 0;
28pub const SNDRV_PCM_STREAM_CAPTURE: int = 1;
30pub const SNDRV_PCM_STREAM_LAST: int = SNDRV_PCM_STREAM_CAPTURE;
31
32#[allow(non_camel_case_types)]
33pub type snd_pcm_access_t = int;
34pub const SNDRV_PCM_ACCESS_MMAP_INTERLEAVED: snd_pcm_access_t = 0;
35pub const SNDRV_PCM_ACCESS_MMAP_NONINTERLEAVED: snd_pcm_access_t = 1;
36pub const SNDRV_PCM_ACCESS_MMAP_COMPLEX: snd_pcm_access_t = 2;
37pub const SNDRV_PCM_ACCESS_RW_INTERLEAVED: snd_pcm_access_t = 3;
38pub const SNDRV_PCM_ACCESS_RW_NONINTERLEAVED: snd_pcm_access_t = 4;
39
40#[allow(non_camel_case_types)]
41pub type snd_pcm_format_t = int;
42pub const SNDRV_PCM_FORMAT_S8: snd_pcm_format_t = 0;
43pub const SNDRV_PCM_FORMAT_U8: snd_pcm_format_t = 1;
44pub const SNDRV_PCM_FORMAT_S16_LE: snd_pcm_format_t = 2;
45pub const SNDRV_PCM_FORMAT_S16_BE: snd_pcm_format_t = 3;
46pub const SNDRV_PCM_FORMAT_U16_LE: snd_pcm_format_t = 4;
47pub const SNDRV_PCM_FORMAT_U16_BE: snd_pcm_format_t = 5;
48pub const SNDRV_PCM_FORMAT_S24_LE: snd_pcm_format_t = 6;
49pub const SNDRV_PCM_FORMAT_S24_BE: snd_pcm_format_t = 7;
50pub const SNDRV_PCM_FORMAT_U24_LE: snd_pcm_format_t = 8;
51pub const SNDRV_PCM_FORMAT_U24_BE: snd_pcm_format_t = 9;
52pub const SNDRV_PCM_FORMAT_S32_LE: snd_pcm_format_t = 10;
53pub const SNDRV_PCM_FORMAT_S32_BE: snd_pcm_format_t = 11;
54pub const SNDRV_PCM_FORMAT_U32_LE: snd_pcm_format_t = 12;
55pub const SNDRV_PCM_FORMAT_U32_BE: snd_pcm_format_t = 13;
56pub const SNDRV_PCM_FORMAT_FLOAT_LE: snd_pcm_format_t = 14;
57pub const SNDRV_PCM_FORMAT_FLOAT_BE: snd_pcm_format_t = 15;
58pub const SNDRV_PCM_FORMAT_FLOAT64_LE: snd_pcm_format_t = 16;
59pub const SNDRV_PCM_FORMAT_FLOAT64_BE: snd_pcm_format_t = 17;
60pub const SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE: snd_pcm_format_t = 18;
61pub const SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE: snd_pcm_format_t = 19;
62pub const SNDRV_PCM_FORMAT_MU_LAW: snd_pcm_format_t = 20;
63pub const SNDRV_PCM_FORMAT_A_LAW: snd_pcm_format_t = 21;
64pub const SNDRV_PCM_FORMAT_IMA_ADPCM: snd_pcm_format_t = 22;
65pub const SNDRV_PCM_FORMAT_MPEG: snd_pcm_format_t = 23;
66pub const SNDRV_PCM_FORMAT_GSM: snd_pcm_format_t = 24;
67pub const SNDRV_PCM_FORMAT_S20_LE: snd_pcm_format_t = 25;
68pub const SNDRV_PCM_FORMAT_S20_BE: snd_pcm_format_t = 26;
69pub const SNDRV_PCM_FORMAT_U20_LE: snd_pcm_format_t = 27;
70pub const SNDRV_PCM_FORMAT_U20_BE: snd_pcm_format_t = 28;
71pub const SNDRV_PCM_FORMAT_SPECIAL: snd_pcm_format_t = 31;
72pub const SNDRV_PCM_FORMAT_S24_3LE: snd_pcm_format_t = 32;
73pub const SNDRV_PCM_FORMAT_S24_3BE: snd_pcm_format_t = 33;
74pub const SNDRV_PCM_FORMAT_U24_3LE: snd_pcm_format_t = 34;
75pub const SNDRV_PCM_FORMAT_U24_3BE: snd_pcm_format_t = 35;
76pub const SNDRV_PCM_FORMAT_S20_3LE: snd_pcm_format_t = 36;
77pub const SNDRV_PCM_FORMAT_S20_3BE: snd_pcm_format_t = 37;
78pub const SNDRV_PCM_FORMAT_U20_3LE: snd_pcm_format_t = 38;
79pub const SNDRV_PCM_FORMAT_U20_3BE: snd_pcm_format_t = 39;
80pub const SNDRV_PCM_FORMAT_S18_3LE: snd_pcm_format_t = 40;
81pub const SNDRV_PCM_FORMAT_S18_3BE: snd_pcm_format_t = 41;
82pub const SNDRV_PCM_FORMAT_U18_3LE: snd_pcm_format_t = 42;
83pub const SNDRV_PCM_FORMAT_U18_3BE: snd_pcm_format_t = 43;
84pub const SNDRV_PCM_FORMAT_G723_24: snd_pcm_format_t = 44;
85pub const SNDRV_PCM_FORMAT_G723_24_1B: snd_pcm_format_t = 45;
86pub const SNDRV_PCM_FORMAT_G723_40: snd_pcm_format_t = 46;
87pub const SNDRV_PCM_FORMAT_G723_40_1B: snd_pcm_format_t = 47;
88pub const SNDRV_PCM_FORMAT_DSD_U8: snd_pcm_format_t = 48;
89pub const SNDRV_PCM_FORMAT_DSD_U16_LE: snd_pcm_format_t = 49;
90pub const SNDRV_PCM_FORMAT_DSD_U32_LE: snd_pcm_format_t = 50;
91pub const SNDRV_PCM_FORMAT_DSD_U16_BE: snd_pcm_format_t = 51;
92pub const SNDRV_PCM_FORMAT_DSD_U32_BE: snd_pcm_format_t = 52;
93
94#[allow(non_camel_case_types)]
95pub type snd_pcm_subformat_t = int;
96pub const SNDRV_PCM_SUBFORMAT_STD: snd_pcm_subformat_t = 0;
97pub const SNDRV_PCM_SUBFORMAT_MSBITS_MAX: snd_pcm_subformat_t = 1;
98pub const SNDRV_PCM_SUBFORMAT_MSBITS_20: snd_pcm_subformat_t = 2;
99pub const SNDRV_PCM_SUBFORMAT_MSBITS_24: snd_pcm_subformat_t = 3;
100
101pub const SNDRV_PCM_INFO_MMAP: uint = 0x00000001; pub const SNDRV_PCM_INFO_MMAP_VALID: uint = 0x00000002; pub const SNDRV_PCM_INFO_DOUBLE: uint = 0x00000004; pub const SNDRV_PCM_INFO_BATCH: uint = 0x00000010; pub const SNDRV_PCM_INFO_SYNC_APPLPTR: uint = 0x00000020; pub const SNDRV_PCM_INFO_PERFECT_DRAIN: uint = 0x00000040; pub const SNDRV_PCM_INFO_INTERLEAVED: uint = 0x00000100; pub const SNDRV_PCM_INFO_NONINTERLEAVED: uint = 0x00000200; pub const SNDRV_PCM_INFO_COMPLEX: uint = 0x00000400; pub const SNDRV_PCM_INFO_BLOCK_TRANSFER: uint = 0x00010000; pub const SNDRV_PCM_INFO_OVERRANGE: uint = 0x00020000; pub const SNDRV_PCM_INFO_RESUME: uint = 0x00040000; pub const SNDRV_PCM_INFO_PAUSE: uint = 0x00080000; pub const SNDRV_PCM_INFO_HALF_DUPLEX: uint = 0x00100000; pub const SNDRV_PCM_INFO_JOINT_DUPLEX: uint = 0x00200000; pub const SNDRV_PCM_INFO_SYNC_START: uint = 0x00400000; pub const SNDRV_PCM_INFO_NO_PERIOD_WAKEUP: uint = 0x00800000; pub const SNDRV_PCM_INFO_HAS_WALL_CLOCK: uint = 0x01000000; pub const SNDRV_PCM_INFO_HAS_LINK_ATIME: uint = 0x01000000; pub const SNDRV_PCM_INFO_HAS_LINK_ABSOLUTE_ATIME: uint = 0x02000000; pub const SNDRV_PCM_INFO_HAS_LINK_ESTIMATED_ATIME: uint = 0x04000000; pub const SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME: uint = 0x08000000; pub const SNDRV_PCM_INFO_EXPLICIT_SYNC: uint = 0x10000000; pub const SNDRV_PCM_INFO_NO_REWINDS: uint = 0x20000000; pub const SNDRV_PCM_INFO_DRAIN_TRIGGER: uint = 0x40000000; pub const SNDRV_PCM_INFO_FIFO_IN_FRAMES: uint = 0x80000000; #[allow(non_camel_case_types)]
129pub type snd_pcm_state_t = int;
130pub const SNDRV_PCM_STATE_OPEN: snd_pcm_state_t = 0; pub const SNDRV_PCM_STATE_SETUP: snd_pcm_state_t = 1; pub const SNDRV_PCM_STATE_PREPARED: snd_pcm_state_t = 2; pub const SNDRV_PCM_STATE_RUNNING: snd_pcm_state_t = 3; pub const SNDRV_PCM_STATE_XRUN: snd_pcm_state_t = 4; pub const SNDRV_PCM_STATE_DRAINING: snd_pcm_state_t = 5; pub const SNDRV_PCM_STATE_PAUSED: snd_pcm_state_t = 6; pub const SNDRV_PCM_STATE_SUSPENDED: snd_pcm_state_t = 7; pub const SNDRV_PCM_STATE_DISCONNECTED: snd_pcm_state_t = 8; pub const SNDRV_PCM_MMAP_OFFSET_DATA: usize = 0x00000000;
141#[cfg(target_pointer_width = "32")]
142pub const SNDRV_PCM_MMAP_OFFSET_STATUS: usize = 0x80000000;
143#[cfg(target_pointer_width = "64")]
144pub const SNDRV_PCM_MMAP_OFFSET_STATUS: usize = 0x82000000;
145#[cfg(target_pointer_width = "32")]
146pub const SNDRV_PCM_MMAP_OFFSET_CONTROL: usize = 0x81000000;
147#[cfg(target_pointer_width = "64")]
148pub const SNDRV_PCM_MMAP_OFFSET_CONTROL: usize = 0x83000000;
149
150#[repr(C)]
151#[allow(non_camel_case_types)]
152#[derive(Debug, Clone, Copy)]
153pub struct snd_pcm_info {
154 pub device: uint,
156 pub subdevice: uint,
158 pub stream: int,
160 pub card: int,
162 pub id: [uchar; 64],
164 pub name: [uchar; 80],
166 pub subname: [uchar; 32],
168 pub dev_class: int,
170 pub dev_subclass: int,
172 pub subdevices_count: uint,
173 pub subdevices_avail: uint,
174 pub pad1: [uchar; 16],
176 pub reserved: [uchar; 64],
177}
178
179#[allow(non_camel_case_types)]
180pub type snd_pcm_hw_param_t = int;
181pub const SNDRV_PCM_HW_PARAM_ACCESS: snd_pcm_hw_param_t = 0; pub const SNDRV_PCM_HW_PARAM_FORMAT: snd_pcm_hw_param_t = 1; pub const SNDRV_PCM_HW_PARAM_SUBFORMAT: snd_pcm_hw_param_t = 2; pub const SNDRV_PCM_HW_PARAM_FIRST_MASK: usize = SNDRV_PCM_HW_PARAM_ACCESS as usize;
185pub const SNDRV_PCM_HW_PARAM_LAST_MASK: usize = SNDRV_PCM_HW_PARAM_SUBFORMAT as usize;
186pub const SNDRV_PCM_HW_PARAM_SAMPLE_BITS: snd_pcm_hw_param_t = 8; pub const SNDRV_PCM_HW_PARAM_FRAME_BITS: snd_pcm_hw_param_t = 9; pub const SNDRV_PCM_HW_PARAM_CHANNELS: snd_pcm_hw_param_t = 10; pub const SNDRV_PCM_HW_PARAM_RATE: snd_pcm_hw_param_t = 11; pub const SNDRV_PCM_HW_PARAM_PERIOD_TIME: snd_pcm_hw_param_t = 12; pub const SNDRV_PCM_HW_PARAM_PERIOD_SIZE: snd_pcm_hw_param_t = 13; pub const SNDRV_PCM_HW_PARAM_PERIOD_BYTES: snd_pcm_hw_param_t = 14; pub const SNDRV_PCM_HW_PARAM_PERIODS: snd_pcm_hw_param_t = 15; pub const SNDRV_PCM_HW_PARAM_BUFFER_TIME: snd_pcm_hw_param_t = 16; pub const SNDRV_PCM_HW_PARAM_BUFFER_SIZE: snd_pcm_hw_param_t = 17; pub const SNDRV_PCM_HW_PARAM_BUFFER_BYTES: snd_pcm_hw_param_t = 18; pub const SNDRV_PCM_HW_PARAM_TICK_TIME: snd_pcm_hw_param_t = 19; pub const SNDRV_PCM_HW_PARAM_FIRST_INTERVAL: usize = SNDRV_PCM_HW_PARAM_SAMPLE_BITS as usize;
199pub const SNDRV_PCM_HW_PARAM_LAST_INTERVAL: usize = SNDRV_PCM_HW_PARAM_TICK_TIME as usize;
200
201pub const SNDRV_PCM_HW_PARAMS_NORESAMPLE: int = 1 << 0; pub const SNDRV_PCM_HW_PARAMS_EXPORT_BUFFER: int = 1 << 1; pub const SNDRV_PCM_HW_PARAMS_NO_PERIOD_WAKEUP: int = 1 << 2; pub const SNDRV_PCM_HW_PARAMS_NO_DRAIN_SILENCE: int = 1 << 3; #[repr(C)]
207#[allow(non_camel_case_types)]
208#[derive(Debug, Clone, Copy)]
209pub struct snd_interval {
210 pub min: uint,
211 pub max: uint,
212 pub flags: uint,
219}
220
221pub const SNDRV_MASK_MAX: usize = 256;
222
223#[repr(C)]
224#[allow(non_camel_case_types)]
225#[derive(Debug, Clone, Copy)]
226pub struct snd_mask {
227 pub bits: [u32; (SNDRV_MASK_MAX + 31) / 32],
228}
229
230#[repr(C)]
231#[allow(non_camel_case_types)]
232#[derive(Debug, Clone, Copy)]
233pub struct snd_pcm_hw_params {
234 pub flags: uint,
235 pub masks: [snd_mask; SNDRV_PCM_HW_PARAM_LAST_MASK - SNDRV_PCM_HW_PARAM_FIRST_MASK + 1],
236 pub mres: [snd_mask; 5], pub intervals:
238 [snd_interval; SNDRV_PCM_HW_PARAM_LAST_INTERVAL - SNDRV_PCM_HW_PARAM_FIRST_INTERVAL + 1],
239 pub ires: [snd_interval; 9], pub rmask: uint, pub cmask: uint, pub info: uint, pub msbits: uint, pub rate_num: uint, pub rate_den: uint, pub fifo_size: snd_pcm_uframes_t, pub sync: [uchar; 16], pub reserved: [uchar; 48], }
250
251pub const SNDRV_PCM_TSTAMP_NONE: int = 0;
252pub const SNDRV_PCM_TSTAMP_ENABLE: int = 1;
253
254#[repr(C)]
255#[allow(non_camel_case_types)]
256#[derive(Debug, Clone, Copy)]
257pub struct snd_pcm_sw_params {
258 pub tstamp_mode: int, pub period_step: uint,
260 pub sleep_min: uint, pub avail_min: snd_pcm_uframes_t, pub xfer_align: snd_pcm_uframes_t, pub start_threshold: snd_pcm_uframes_t, pub stop_threshold: snd_pcm_uframes_t, pub silence_threshold: snd_pcm_uframes_t, pub silence_size: snd_pcm_uframes_t, pub boundary: snd_pcm_uframes_t, pub proto: uint, pub tstamp_type: uint, pub reserved: [uchar; 56], }
272
273#[repr(C)]
274#[allow(non_camel_case_types)]
275#[derive(Debug, Clone, Copy)]
276pub struct snd_pcm_channel_info {
277 pub channel: uint,
278 pub offset: off_t, pub first: uint, pub step: uint, }
282
283#[repr(C)]
284#[allow(non_camel_case_types)]
285#[derive(Debug, Clone, Copy)]
286pub struct snd_pcm_status {
287 pub state: snd_pcm_state_t, pub pad1: [u8; core::mem::size_of::<time_t>() - core::mem::size_of::<int>()], pub trigger_tstamp: timespec, pub tstamp: timespec, pub appl_ptr: snd_pcm_uframes_t, pub hw_ptr: snd_pcm_uframes_t, pub delay: snd_pcm_uframes_t, pub avail: snd_pcm_uframes_t, pub avail_max: snd_pcm_uframes_t, pub overrange: snd_pcm_uframes_t, pub suspended_state: snd_pcm_state_t, pub audio_tstamp_data: u32, pub audio_tstamp: timespec, pub driver_tstamp: timespec, pub audio_tstamp_accuracy: u32, pub reserved: [uchar; 52 - 2 * core::mem::size_of::<timespec>()], }
304
305#[repr(C)]
335#[allow(non_camel_case_types)]
336#[derive(Debug, Clone, Copy)]
337pub struct snd_xferi {
338 pub result: snd_pcm_sframes_t,
339 pub buf: *mut void,
340 pub frames: snd_pcm_uframes_t,
341}
342
343#[repr(C)]
344#[allow(non_camel_case_types)]
345#[derive(Debug, Clone, Copy)]
346pub struct snd_xfern {
347 pub result: snd_pcm_sframes_t,
348 pub bufs: *mut *mut void,
349 pub frames: snd_pcm_uframes_t,
350}
351
352pub const SNDRV_CHMAP_UNKNOWN: uint = 0;
353pub const SNDRV_CHMAP_NA: uint = 1; pub const SNDRV_CHMAP_MONO: uint = 2; pub const SNDRV_CHMAP_FL: uint = 3; pub const SNDRV_CHMAP_FR: uint = 4; pub const SNDRV_CHMAP_RL: uint = 5; pub const SNDRV_CHMAP_RR: uint = 6; pub const SNDRV_CHMAP_FC: uint = 7; pub const SNDRV_CHMAP_LFE: uint = 8; pub const SNDRV_CHMAP_SL: uint = 9; pub const SNDRV_CHMAP_SR: uint = 10; pub const SNDRV_CHMAP_RC: uint = 11; pub const SNDRV_CHMAP_FLC: uint = 12; pub const SNDRV_CHMAP_FRC: uint = 13; pub const SNDRV_CHMAP_RLC: uint = 14; pub const SNDRV_CHMAP_RRC: uint = 15; pub const SNDRV_CHMAP_FLW: uint = 16; pub const SNDRV_CHMAP_FRW: uint = 17; pub const SNDRV_CHMAP_FLH: uint = 18; pub const SNDRV_CHMAP_FCH: uint = 19; pub const SNDRV_CHMAP_FRH: uint = 20; pub const SNDRV_CHMAP_TC: uint = 21; pub const SNDRV_CHMAP_TFL: uint = 22; pub const SNDRV_CHMAP_TFR: uint = 23; pub const SNDRV_CHMAP_TFC: uint = 24; pub const SNDRV_CHMAP_TRL: uint = 25; pub const SNDRV_CHMAP_TRR: uint = 26; pub const SNDRV_CHMAP_TRC: uint = 27; pub const SNDRV_CHMAP_TFLC: uint = 28; pub const SNDRV_CHMAP_TFRC: uint = 29; pub const SNDRV_CHMAP_TSL: uint = 30; pub const SNDRV_CHMAP_TSR: uint = 31; pub const SNDRV_CHMAP_LLFE: uint = 32; pub const SNDRV_CHMAP_RLFE: uint = 33; pub const SNDRV_CHMAP_BC: uint = 34; pub const SNDRV_CHMAP_BLC: uint = 35; pub const SNDRV_CHMAP_BRC: uint = 36; pub const SNDRV_CHMAP_POSITION_MASK: uint = 0xffff;
390pub const SNDRV_CHMAP_PHASE_INVERSE: uint = 0x01 << 16;
391pub const SNDRV_CHMAP_DRIVER_SPEC: uint = 0x02 << 16;