summaryrefslogtreecommitdiffstats
path: root/third_party/rust/cubeb-sys/src/device.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/cubeb-sys/src/device.rs')
-rw-r--r--third_party/rust/cubeb-sys/src/device.rs174
1 files changed, 174 insertions, 0 deletions
diff --git a/third_party/rust/cubeb-sys/src/device.rs b/third_party/rust/cubeb-sys/src/device.rs
new file mode 100644
index 0000000000..4672a94ecb
--- /dev/null
+++ b/third_party/rust/cubeb-sys/src/device.rs
@@ -0,0 +1,174 @@
+// Copyright © 2017-2018 Mozilla Foundation
+//
+// This program is made available under an ISC-style license. See the
+// accompanying file LICENSE for details.
+
+use callbacks::cubeb_device_collection_changed_callback;
+use context::cubeb;
+use std::os::raw::{c_char, c_int, c_uint, c_void};
+use std::{fmt, mem};
+
+cubeb_enum! {
+ pub enum cubeb_device_fmt {
+ CUBEB_DEVICE_FMT_S16LE = 0x0010,
+ CUBEB_DEVICE_FMT_S16BE = 0x0020,
+ CUBEB_DEVICE_FMT_F32LE = 0x1000,
+ CUBEB_DEVICE_FMT_F32BE = 0x2000,
+ }
+}
+
+#[cfg(target_endian = "big")]
+pub const CUBEB_DEVICE_FMT_S16NE: cubeb_device_fmt = CUBEB_DEVICE_FMT_S16BE;
+#[cfg(target_endian = "big")]
+pub const CUBEB_DEVICE_FMT_F32NE: cubeb_device_fmt = CUBEB_DEVICE_FMT_F32BE;
+#[cfg(target_endian = "little")]
+pub const CUBEB_DEVICE_FMT_S16NE: cubeb_device_fmt = CUBEB_DEVICE_FMT_S16LE;
+#[cfg(target_endian = "little")]
+pub const CUBEB_DEVICE_FMT_F32NE: cubeb_device_fmt = CUBEB_DEVICE_FMT_F32LE;
+
+pub const CUBEB_DEVICE_FMT_S16_MASK: cubeb_device_fmt =
+ CUBEB_DEVICE_FMT_S16LE | CUBEB_DEVICE_FMT_S16BE;
+pub const CUBEB_DEVICE_FMT_F32_MASK: cubeb_device_fmt =
+ CUBEB_DEVICE_FMT_F32LE | CUBEB_DEVICE_FMT_F32BE;
+pub const CUBEB_DEVICE_FMT_ALL: cubeb_device_fmt =
+ CUBEB_DEVICE_FMT_S16_MASK | CUBEB_DEVICE_FMT_F32_MASK;
+
+cubeb_enum! {
+ pub enum cubeb_device_pref {
+ CUBEB_DEVICE_PREF_NONE = 0x00,
+ CUBEB_DEVICE_PREF_MULTIMEDIA = 0x01,
+ CUBEB_DEVICE_PREF_VOICE = 0x02,
+ CUBEB_DEVICE_PREF_NOTIFICATION = 0x04,
+ CUBEB_DEVICE_PREF_ALL = 0x0F,
+ }
+}
+
+cubeb_enum! {
+ pub enum cubeb_device_state {
+ CUBEB_DEVICE_STATE_DISABLED,
+ CUBEB_DEVICE_STATE_UNPLUGGED,
+ CUBEB_DEVICE_STATE_ENABLED,
+ }
+}
+cubeb_enum! {
+ pub enum cubeb_device_type {
+ CUBEB_DEVICE_TYPE_UNKNOWN,
+ CUBEB_DEVICE_TYPE_INPUT,
+ CUBEB_DEVICE_TYPE_OUTPUT,
+ }
+}
+
+pub type cubeb_devid = *const c_void;
+
+#[repr(C)]
+pub struct cubeb_device {
+ pub output_name: *mut c_char,
+ pub input_name: *mut c_char,
+}
+
+// Explicit Debug impl to work around bug in ctest
+impl Default for cubeb_device {
+ fn default() -> Self {
+ unsafe { mem::zeroed() }
+ }
+}
+
+impl fmt::Debug for cubeb_device {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ f.debug_struct("cubeb_device")
+ .field("output_name", &self.output_name)
+ .field("input_name", &self.input_name)
+ .finish()
+ }
+}
+
+#[repr(C)]
+pub struct cubeb_device_collection {
+ pub device: *mut cubeb_device_info,
+ pub count: usize,
+}
+
+impl Default for cubeb_device_collection {
+ fn default() -> Self {
+ unsafe { mem::zeroed() }
+ }
+}
+
+impl fmt::Debug for cubeb_device_collection {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ f.debug_struct("cubeb_device_collection")
+ .field("device", &self.device)
+ .field("count", &self.count)
+ .finish()
+ }
+}
+
+#[repr(C)]
+pub struct cubeb_device_info {
+ pub devid: cubeb_devid,
+ pub device_id: *const c_char,
+ pub friendly_name: *const c_char,
+ pub group_id: *const c_char,
+ pub vendor_name: *const c_char,
+
+ pub device_type: cubeb_device_type,
+ pub state: cubeb_device_state,
+ pub preferred: cubeb_device_pref,
+
+ pub format: cubeb_device_fmt,
+ pub default_format: cubeb_device_fmt,
+ pub max_channels: c_uint,
+ pub default_rate: c_uint,
+ pub max_rate: c_uint,
+ pub min_rate: c_uint,
+
+ pub latency_lo: c_uint,
+ pub latency_hi: c_uint,
+}
+
+impl Default for cubeb_device_info {
+ fn default() -> Self {
+ unsafe { mem::zeroed() }
+ }
+}
+
+impl fmt::Debug for cubeb_device_info {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ f.debug_struct("cubeb_device_info")
+ .field("devid", &self.devid)
+ .field("device_id", &self.device_id)
+ .field("friendly_name", &self.friendly_name)
+ .field("group_id", &self.group_id)
+ .field("vendor_name", &self.vendor_name)
+ .field("device_type", &self.device_type)
+ .field("state", &self.state)
+ .field("preferred", &self.preferred)
+ .field("format", &self.format)
+ .field("default_format", &self.default_format)
+ .field("max_channels", &self.max_channels)
+ .field("default_rate", &self.default_rate)
+ .field("max_rate", &self.max_rate)
+ .field("min_rate", &self.min_rate)
+ .field("latency_lo", &self.latency_lo)
+ .field("latency_hi", &self.latency_hi)
+ .finish()
+ }
+}
+
+extern "C" {
+ pub fn cubeb_enumerate_devices(
+ context: *mut cubeb,
+ devtype: cubeb_device_type,
+ collection: *mut cubeb_device_collection,
+ ) -> c_int;
+ pub fn cubeb_device_collection_destroy(
+ context: *mut cubeb,
+ collection: *mut cubeb_device_collection,
+ ) -> c_int;
+ pub fn cubeb_register_device_collection_changed(
+ context: *mut cubeb,
+ devtype: cubeb_device_type,
+ callback: cubeb_device_collection_changed_callback,
+ user_ptr: *mut c_void,
+ ) -> c_int;
+}