diff options
author | Stefano Pigozzi <stefano.pigozzi@gmail.com> | 2013-07-01 19:13:34 +0200 |
---|---|---|
committer | Stefano Pigozzi <stefano.pigozzi@gmail.com> | 2013-07-22 21:53:18 +0200 |
commit | a2d106cb3152be82ecef02ebf77b00f00341295d (patch) | |
tree | f6a0f8046a9ef645f56c3f18e3bf2de728f48e09 /audio/out/ao_coreaudio_common.c | |
parent | 7b2b292343beee6ef253b7be2a090140fee4b249 (diff) | |
download | mpv-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.c | 26 |
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) { |