use linux_unsafe::{int, long, off_t, time_t, timespec, uchar, uint, ulong, void};
#[allow(non_camel_case_types)]
pub type snd_pcm_uframes_t = ulong;
#[allow(non_camel_case_types)]
pub type snd_pcm_sframes_t = long;
pub const SNDRV_PCM_CLASS_GENERIC: int = 0;
pub const SNDRV_PCM_CLASS_MULTI: int = 1;
pub const SNDRV_PCM_CLASS_MODEM: int = 2;
pub const SNDRV_PCM_CLASS_DIGITIZER: int = 3;
pub const SNDRV_PCM_CLASS_LAST: int = SNDRV_PCM_CLASS_DIGITIZER;
pub const SNDRV_PCM_SUBCLASS_GENERIC_MIX: int = 0;
pub const SNDRV_PCM_SUBCLASS_MULTI_MIX: int = 1;
pub const SNDRV_PCM_SUBCLASS_LAST: int = SNDRV_PCM_SUBCLASS_MULTI_MIX;
pub const SNDRV_PCM_STREAM_PLAYBACK: int = 0;
pub const SNDRV_PCM_STREAM_CAPTURE: int = 1;
pub const SNDRV_PCM_STREAM_LAST: int = SNDRV_PCM_STREAM_CAPTURE;
#[allow(non_camel_case_types)]
pub type snd_pcm_access_t = int;
pub const SNDRV_PCM_ACCESS_MMAP_INTERLEAVED: snd_pcm_access_t = 0;
pub const SNDRV_PCM_ACCESS_MMAP_NONINTERLEAVED: snd_pcm_access_t = 1;
pub const SNDRV_PCM_ACCESS_MMAP_COMPLEX: snd_pcm_access_t = 2;
pub const SNDRV_PCM_ACCESS_RW_INTERLEAVED: snd_pcm_access_t = 3;
pub const SNDRV_PCM_ACCESS_RW_NONINTERLEAVED: snd_pcm_access_t = 4;
#[allow(non_camel_case_types)]
pub type snd_pcm_format_t = int;
pub const SNDRV_PCM_FORMAT_S8: snd_pcm_format_t = 0;
pub const SNDRV_PCM_FORMAT_U8: snd_pcm_format_t = 1;
pub const SNDRV_PCM_FORMAT_S16_LE: snd_pcm_format_t = 2;
pub const SNDRV_PCM_FORMAT_S16_BE: snd_pcm_format_t = 3;
pub const SNDRV_PCM_FORMAT_U16_LE: snd_pcm_format_t = 4;
pub const SNDRV_PCM_FORMAT_U16_BE: snd_pcm_format_t = 5;
pub const SNDRV_PCM_FORMAT_S24_LE: snd_pcm_format_t = 6;
pub const SNDRV_PCM_FORMAT_S24_BE: snd_pcm_format_t = 7;
pub const SNDRV_PCM_FORMAT_U24_LE: snd_pcm_format_t = 8;
pub const SNDRV_PCM_FORMAT_U24_BE: snd_pcm_format_t = 9;
pub const SNDRV_PCM_FORMAT_S32_LE: snd_pcm_format_t = 10;
pub const SNDRV_PCM_FORMAT_S32_BE: snd_pcm_format_t = 11;
pub const SNDRV_PCM_FORMAT_U32_LE: snd_pcm_format_t = 12;
pub const SNDRV_PCM_FORMAT_U32_BE: snd_pcm_format_t = 13;
pub const SNDRV_PCM_FORMAT_FLOAT_LE: snd_pcm_format_t = 14;
pub const SNDRV_PCM_FORMAT_FLOAT_BE: snd_pcm_format_t = 15;
pub const SNDRV_PCM_FORMAT_FLOAT64_LE: snd_pcm_format_t = 16;
pub const SNDRV_PCM_FORMAT_FLOAT64_BE: snd_pcm_format_t = 17;
pub const SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE: snd_pcm_format_t = 18;
pub const SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE: snd_pcm_format_t = 19;
pub const SNDRV_PCM_FORMAT_MU_LAW: snd_pcm_format_t = 20;
pub const SNDRV_PCM_FORMAT_A_LAW: snd_pcm_format_t = 21;
pub const SNDRV_PCM_FORMAT_IMA_ADPCM: snd_pcm_format_t = 22;
pub const SNDRV_PCM_FORMAT_MPEG: snd_pcm_format_t = 23;
pub const SNDRV_PCM_FORMAT_GSM: snd_pcm_format_t = 24;
pub const SNDRV_PCM_FORMAT_S20_LE: snd_pcm_format_t = 25;
pub const SNDRV_PCM_FORMAT_S20_BE: snd_pcm_format_t = 26;
pub const SNDRV_PCM_FORMAT_U20_LE: snd_pcm_format_t = 27;
pub const SNDRV_PCM_FORMAT_U20_BE: snd_pcm_format_t = 28;
pub const SNDRV_PCM_FORMAT_SPECIAL: snd_pcm_format_t = 31;
pub const SNDRV_PCM_FORMAT_S24_3LE: snd_pcm_format_t = 32;
pub const SNDRV_PCM_FORMAT_S24_3BE: snd_pcm_format_t = 33;
pub const SNDRV_PCM_FORMAT_U24_3LE: snd_pcm_format_t = 34;
pub const SNDRV_PCM_FORMAT_U24_3BE: snd_pcm_format_t = 35;
pub const SNDRV_PCM_FORMAT_S20_3LE: snd_pcm_format_t = 36;
pub const SNDRV_PCM_FORMAT_S20_3BE: snd_pcm_format_t = 37;
pub const SNDRV_PCM_FORMAT_U20_3LE: snd_pcm_format_t = 38;
pub const SNDRV_PCM_FORMAT_U20_3BE: snd_pcm_format_t = 39;
pub const SNDRV_PCM_FORMAT_S18_3LE: snd_pcm_format_t = 40;
pub const SNDRV_PCM_FORMAT_S18_3BE: snd_pcm_format_t = 41;
pub const SNDRV_PCM_FORMAT_U18_3LE: snd_pcm_format_t = 42;
pub const SNDRV_PCM_FORMAT_U18_3BE: snd_pcm_format_t = 43;
pub const SNDRV_PCM_FORMAT_G723_24: snd_pcm_format_t = 44;
pub const SNDRV_PCM_FORMAT_G723_24_1B: snd_pcm_format_t = 45;
pub const SNDRV_PCM_FORMAT_G723_40: snd_pcm_format_t = 46;
pub const SNDRV_PCM_FORMAT_G723_40_1B: snd_pcm_format_t = 47;
pub const SNDRV_PCM_FORMAT_DSD_U8: snd_pcm_format_t = 48;
pub const SNDRV_PCM_FORMAT_DSD_U16_LE: snd_pcm_format_t = 49;
pub const SNDRV_PCM_FORMAT_DSD_U32_LE: snd_pcm_format_t = 50;
pub const SNDRV_PCM_FORMAT_DSD_U16_BE: snd_pcm_format_t = 51;
pub const SNDRV_PCM_FORMAT_DSD_U32_BE: snd_pcm_format_t = 52;
#[allow(non_camel_case_types)]
pub type snd_pcm_subformat_t = int;
pub const SNDRV_PCM_SUBFORMAT_STD: snd_pcm_subformat_t = 0;
pub const SNDRV_PCM_SUBFORMAT_MSBITS_MAX: snd_pcm_subformat_t = 1;
pub const SNDRV_PCM_SUBFORMAT_MSBITS_20: snd_pcm_subformat_t = 2;
pub const SNDRV_PCM_SUBFORMAT_MSBITS_24: snd_pcm_subformat_t = 3;
pub 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)]
pub type snd_pcm_state_t = int;
pub 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;
#[cfg(target_pointer_width = "32")]
pub const SNDRV_PCM_MMAP_OFFSET_STATUS: usize = 0x80000000;
#[cfg(target_pointer_width = "64")]
pub const SNDRV_PCM_MMAP_OFFSET_STATUS: usize = 0x82000000;
#[cfg(target_pointer_width = "32")]
pub const SNDRV_PCM_MMAP_OFFSET_CONTROL: usize = 0x81000000;
#[cfg(target_pointer_width = "64")]
pub const SNDRV_PCM_MMAP_OFFSET_CONTROL: usize = 0x83000000;
#[repr(C)]
#[allow(non_camel_case_types)]
#[derive(Debug, Clone, Copy)]
pub struct snd_pcm_info {
pub device: uint,
pub subdevice: uint,
pub stream: int,
pub card: int,
pub id: [uchar; 64],
pub name: [uchar; 80],
pub subname: [uchar; 32],
pub dev_class: int,
pub dev_subclass: int,
pub subdevices_count: uint,
pub subdevices_avail: uint,
pub pad1: [uchar; 16],
pub reserved: [uchar; 64],
}
#[allow(non_camel_case_types)]
pub type snd_pcm_hw_param_t = int;
pub 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;
pub const SNDRV_PCM_HW_PARAM_LAST_MASK: usize = SNDRV_PCM_HW_PARAM_SUBFORMAT as usize;
pub 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;
pub const SNDRV_PCM_HW_PARAM_LAST_INTERVAL: usize = SNDRV_PCM_HW_PARAM_TICK_TIME as usize;
pub 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)]
#[allow(non_camel_case_types)]
#[derive(Debug, Clone, Copy)]
pub struct snd_interval {
pub min: uint,
pub max: uint,
pub flags: uint,
}
pub const SNDRV_MASK_MAX: usize = 256;
#[repr(C)]
#[allow(non_camel_case_types)]
#[derive(Debug, Clone, Copy)]
pub struct snd_mask {
pub bits: [u32; (SNDRV_MASK_MAX + 31) / 32],
}
#[repr(C)]
#[allow(non_camel_case_types)]
#[derive(Debug, Clone, Copy)]
pub struct snd_pcm_hw_params {
pub flags: uint,
pub masks: [snd_mask; SNDRV_PCM_HW_PARAM_LAST_MASK - SNDRV_PCM_HW_PARAM_FIRST_MASK + 1],
pub mres: [snd_mask; 5],
pub intervals:
[snd_interval; SNDRV_PCM_HW_PARAM_LAST_INTERVAL - SNDRV_PCM_HW_PARAM_FIRST_INTERVAL + 1],
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],
}
pub const SNDRV_PCM_TSTAMP_NONE: int = 0;
pub const SNDRV_PCM_TSTAMP_ENABLE: int = 1;
#[repr(C)]
#[allow(non_camel_case_types)]
#[derive(Debug, Clone, Copy)]
pub struct snd_pcm_sw_params {
pub tstamp_mode: int,
pub period_step: uint,
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],
}
#[repr(C)]
#[allow(non_camel_case_types)]
#[derive(Debug, Clone, Copy)]
pub struct snd_pcm_channel_info {
pub channel: uint,
pub offset: off_t,
pub first: uint,
pub step: uint,
}
#[repr(C)]
#[allow(non_camel_case_types)]
#[derive(Debug, Clone, Copy)]
pub struct snd_pcm_status {
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>()],
}
#[repr(C)]
#[allow(non_camel_case_types)]
#[derive(Debug, Clone, Copy)]
pub struct snd_xferi {
pub result: snd_pcm_sframes_t,
pub buf: *mut void,
pub frames: snd_pcm_uframes_t,
}
#[repr(C)]
#[allow(non_camel_case_types)]
#[derive(Debug, Clone, Copy)]
pub struct snd_xfern {
pub result: snd_pcm_sframes_t,
pub bufs: *mut *mut void,
pub frames: snd_pcm_uframes_t,
}
pub const SNDRV_CHMAP_UNKNOWN: uint = 0;
pub 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;
pub const SNDRV_CHMAP_PHASE_INVERSE: uint = 0x01 << 16;
pub const SNDRV_CHMAP_DRIVER_SPEC: uint = 0x02 << 16;