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.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.c')
-rw-r--r-- | audio/out/ao_coreaudio.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/audio/out/ao_coreaudio.c b/audio/out/ao_coreaudio.c index 649f372cf4..9206d31bf9 100644 --- a/audio/out/ao_coreaudio.c +++ b/audio/out/ao_coreaudio.c @@ -430,7 +430,6 @@ static int init_digital(struct ao *ao, AudioStreamBasicDescription asbd) struct priv *p = ao->priv; struct priv_d *d = p->digital; OSStatus err = noErr; - AudioObjectPropertyAddress p_addr; uint32_t size; uint32_t is_alive = 1; @@ -524,17 +523,8 @@ static int init_digital(struct ao *ao, AudioStreamBasicDescription asbd) if (!AudioStreamChangeFormat(d->stream, d->stream_asbd)) goto coreaudio_error; - p_addr = (AudioObjectPropertyAddress) { - .mSelector = kAudioDevicePropertyDeviceHasChanged, - .mScope = kAudioObjectPropertyScopeGlobal, - .mElement = kAudioObjectPropertyElementMaster, - }; - - const int *stream_asdb_changed = &(d->stream_asbd_changed); - err = AudioObjectAddPropertyListener(p->device, - &p_addr, - ca_device_listener, - (void *)stream_asdb_changed); + void *changed = (void *) &(d->stream_asbd_changed); + err = ca_enable_device_listener(p->device, changed); CHECK_CA_ERROR("cannot install format change listener during init"); #if BYTE_ORDER == BIG_ENDIAN @@ -634,6 +624,10 @@ static void uninit(struct ao *ao, bool immed) } else { struct priv_d *d = p->digital; + void *changed = (void *) &(d->stream_asbd_changed); + err = ca_disable_device_listener(p->device, changed); + CHECK_CA_WARN("can't remove device listener, this may cause a crash"); + err = AudioDeviceStop(p->device, d->render_cb); CHECK_CA_WARN("failed to stop audio device"); |