summaryrefslogtreecommitdiffstats
path: root/third_party/rust/coreaudio-sys-utils/src/audio_object.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /third_party/rust/coreaudio-sys-utils/src/audio_object.rs
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/coreaudio-sys-utils/src/audio_object.rs')
-rw-r--r--third_party/rust/coreaudio-sys-utils/src/audio_object.rs147
1 files changed, 147 insertions, 0 deletions
diff --git a/third_party/rust/coreaudio-sys-utils/src/audio_object.rs b/third_party/rust/coreaudio-sys-utils/src/audio_object.rs
new file mode 100644
index 0000000000..368d6caadc
--- /dev/null
+++ b/third_party/rust/coreaudio-sys-utils/src/audio_object.rs
@@ -0,0 +1,147 @@
+use coreaudio_sys::*;
+use std::fmt;
+use std::os::raw::c_void;
+use std::ptr;
+
+pub fn audio_object_has_property(id: AudioObjectID, address: &AudioObjectPropertyAddress) -> bool {
+ unsafe { AudioObjectHasProperty(id, address) != 0 }
+}
+
+pub fn audio_object_get_property_data<T>(
+ id: AudioObjectID,
+ address: &AudioObjectPropertyAddress,
+ size: *mut usize,
+ data: *mut T,
+) -> OSStatus {
+ unsafe {
+ AudioObjectGetPropertyData(
+ id,
+ address,
+ 0,
+ ptr::null(),
+ size as *mut UInt32,
+ data as *mut c_void,
+ )
+ }
+}
+
+pub fn audio_object_get_property_data_with_qualifier<T, Q>(
+ id: AudioObjectID,
+ address: &AudioObjectPropertyAddress,
+ qualifier_size: usize,
+ qualifier_data: *const Q,
+ size: *mut usize,
+ data: *mut T,
+) -> OSStatus {
+ unsafe {
+ AudioObjectGetPropertyData(
+ id,
+ address,
+ qualifier_size as UInt32,
+ qualifier_data as *const c_void,
+ size as *mut UInt32,
+ data as *mut c_void,
+ )
+ }
+}
+
+pub fn audio_object_get_property_data_size(
+ id: AudioObjectID,
+ address: &AudioObjectPropertyAddress,
+ size: *mut usize,
+) -> OSStatus {
+ unsafe { AudioObjectGetPropertyDataSize(id, address, 0, ptr::null(), size as *mut UInt32) }
+}
+
+pub fn audio_object_get_property_data_size_with_qualifier<Q>(
+ id: AudioObjectID,
+ address: &AudioObjectPropertyAddress,
+ qualifier_size: usize,
+ qualifier_data: *const Q,
+ size: *mut usize,
+) -> OSStatus {
+ unsafe {
+ AudioObjectGetPropertyDataSize(
+ id,
+ address,
+ qualifier_size as UInt32,
+ qualifier_data as *const c_void,
+ size as *mut UInt32,
+ )
+ }
+}
+
+pub fn audio_object_set_property_data<T>(
+ id: AudioObjectID,
+ address: &AudioObjectPropertyAddress,
+ size: usize,
+ data: *const T,
+) -> OSStatus {
+ unsafe {
+ AudioObjectSetPropertyData(
+ id,
+ address,
+ 0,
+ ptr::null(),
+ size as UInt32,
+ data as *const c_void,
+ )
+ }
+}
+
+#[allow(non_camel_case_types)]
+pub type audio_object_property_listener_proc =
+ extern "C" fn(AudioObjectID, u32, *const AudioObjectPropertyAddress, *mut c_void) -> OSStatus;
+
+pub fn audio_object_add_property_listener<T>(
+ id: AudioObjectID,
+ address: &AudioObjectPropertyAddress,
+ listener: audio_object_property_listener_proc,
+ data: *mut T,
+) -> OSStatus {
+ unsafe { AudioObjectAddPropertyListener(id, address, Some(listener), data as *mut c_void) }
+}
+
+pub fn audio_object_remove_property_listener<T>(
+ id: AudioObjectID,
+ address: &AudioObjectPropertyAddress,
+ listener: audio_object_property_listener_proc,
+ data: *mut T,
+) -> OSStatus {
+ unsafe { AudioObjectRemovePropertyListener(id, address, Some(listener), data as *mut c_void) }
+}
+
+#[derive(Debug, PartialEq)]
+pub enum PropertySelector {
+ DefaultOutputDevice,
+ DefaultInputDevice,
+ DeviceIsAlive,
+ DataSource,
+ Unknown,
+}
+
+impl From<AudioObjectPropertySelector> for PropertySelector {
+ fn from(p: AudioObjectPropertySelector) -> Self {
+ use coreaudio_sys as sys;
+ match p {
+ sys::kAudioHardwarePropertyDefaultOutputDevice => Self::DefaultOutputDevice,
+ sys::kAudioHardwarePropertyDefaultInputDevice => Self::DefaultInputDevice,
+ sys::kAudioDevicePropertyDeviceIsAlive => Self::DeviceIsAlive,
+ sys::kAudioDevicePropertyDataSource => Self::DataSource,
+ _ => Self::Unknown,
+ }
+ }
+}
+
+impl fmt::Display for PropertySelector {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ let s = match self {
+ Self::DefaultOutputDevice => "kAudioHardwarePropertyDefaultOutputDevice",
+ Self::DefaultInputDevice => "kAudioHardwarePropertyDefaultInputDevice",
+ Self::DeviceIsAlive => "kAudioDevicePropertyDeviceIsAlive",
+ Self::DataSource => "kAudioDevicePropertyDataSource",
+ _ => "Unknown",
+ };
+ write!(f, "{}", s)
+ }
+}