summaryrefslogtreecommitdiffstats
path: root/audio/out/ao_coreaudio_common.c
diff options
context:
space:
mode:
authorStefano Pigozzi <stefano.pigozzi@gmail.com>2013-07-01 19:13:34 +0200
committerStefano Pigozzi <stefano.pigozzi@gmail.com>2013-07-22 21:53:18 +0200
commita2d106cb3152be82ecef02ebf77b00f00341295d (patch)
treef6a0f8046a9ef645f56c3f18e3bf2de728f48e09 /audio/out/ao_coreaudio_common.c
parent7b2b292343beee6ef253b7be2a090140fee4b249 (diff)
downloadmpv-a2d106cb3152be82ecef02ebf77b00f00341295d.tar.bz2
mpv-a2d106cb3152be82ecef02ebf77b00f00341295d.tar.xz
ao_coreaudio: remove device property listener on uninit
Also extract this functionality inside a function in coreaudio_common
Diffstat (limited to 'audio/out/ao_coreaudio_common.c')
-rw-r--r--audio/out/ao_coreaudio_common.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/audio/out/ao_coreaudio_common.c b/audio/out/ao_coreaudio_common.c
index a3b7a741e3..1ea9bfe290 100644
--- a/audio/out/ao_coreaudio_common.c
+++ b/audio/out/ao_coreaudio_common.c
@@ -380,6 +380,32 @@ static OSStatus ca_enable_mixing(AudioDeviceID device, bool changed) {
return noErr;
}
+static OSStatus ca_change_device_listening(AudioDeviceID device,
+ void *flag, bool enabled)
+{
+ AudioObjectPropertyAddress p_addr = (AudioObjectPropertyAddress) {
+ .mSelector = kAudioDevicePropertyDeviceHasChanged,
+ .mScope = kAudioObjectPropertyScopeGlobal,
+ .mElement = kAudioObjectPropertyElementMaster,
+ };
+
+ if (enabled) {
+ return AudioObjectAddPropertyListener(
+ device, &p_addr, ca_device_listener, flag);
+ } else {
+ return AudioObjectRemovePropertyListener(
+ device, &p_addr, ca_device_listener, flag);
+ }
+}
+
+static OSStatus ca_enable_device_listener(AudioDeviceID device, void *flag) {
+ return ca_change_device_listening(device, flag, true);
+}
+
+static OSStatus ca_disable_device_listener(AudioDeviceID device, void *flag) {
+ return ca_change_device_listening(device, flag, false);
+}
+
static int AudioStreamChangeFormat(AudioStreamID i_stream_id,
AudioStreamBasicDescription change_format)
{