diff options
author | Stefano Pigozzi <stefano.pigozzi@gmail.com> | 2013-06-25 08:24:14 +0200 |
---|---|---|
committer | Stefano Pigozzi <stefano.pigozzi@gmail.com> | 2013-07-22 21:53:17 +0200 |
commit | 40f6e2e041b7c0d690b1a22d4bb706feef991022 (patch) | |
tree | 31740f1c7d737f4e54b9c17474d15e12df63c7ac /audio/out/ao_coreaudio_common.c | |
parent | e3ce0f0f8e7865d5396347cd440e1aad8bcad680 (diff) |
ao_coreaudio: extract methods to lock/unlock device for digital output
Diffstat (limited to 'audio/out/ao_coreaudio_common.c')
-rw-r--r-- | audio/out/ao_coreaudio_common.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/audio/out/ao_coreaudio_common.c b/audio/out/ao_coreaudio_common.c index 1755004f3f..289fa93b64 100644 --- a/audio/out/ao_coreaudio_common.c +++ b/audio/out/ao_coreaudio_common.c @@ -310,3 +310,22 @@ static OSStatus ca_device_listener(AudioObjectID object, uint32_t n_addresses, return ca_property_listener(kAudioDevicePropertyDeviceHasChanged, object, n_addresses, addresses, data); } + +static OSStatus ca_lock_device(AudioDeviceID device, pid_t *pid) { + *pid = getpid(); + OSStatus err = SetAudioProperty(device, kAudioDevicePropertyHogMode, + sizeof(*pid), pid); + if (err != noErr) + *pid = -1; + + return err; +} + +static OSStatus ca_unlock_device(AudioDeviceID device, pid_t *pid) { + if (*pid == getpid()) { + *pid = -1; + return SetAudioProperty(device, kAudioDevicePropertyHogMode, + sizeof(*pid), &pid); + } + return noErr; +} |