From 663b43f4f19d2c7d9ed64800c8086d37451c723b Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 12 Mar 2012 21:58:40 -0700 Subject: Attempted fix for the coreaudio backend --- Alc/backends/coreaudio.c | 56 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/Alc/backends/coreaudio.c b/Alc/backends/coreaudio.c index 15c08ef6..c0bcede4 100644 --- a/Alc/backends/coreaudio.c +++ b/Alc/backends/coreaudio.c @@ -173,6 +173,17 @@ static ALCenum ca_open_playback(ALCdevice *device, const ALCchar *deviceName) return ALC_INVALID_VALUE; } + /* init and start the default audio unit... */ + err = AudioUnitInitialize(data->audioUnit); + if(err != noErr) + { + ERR("AudioUnitInitialize failed\n"); + CloseComponent(data->audioUnit); + free(data); + device->ExtraData = NULL; + return ALC_FALSE; + } + return ALC_NO_ERROR; } @@ -180,6 +191,7 @@ static void ca_close_playback(ALCdevice *device) { ca_data *data = (ca_data*)device->ExtraData; + AudioUnitUninitialize(data->audioUnit); CloseComponent(data->audioUnit); free(data); @@ -194,20 +206,9 @@ static ALCboolean ca_reset_playback(ALCdevice *device) OSStatus err; UInt32 size; - /* init and start the default audio unit... */ - err = AudioUnitInitialize(data->audioUnit); - if(err != noErr) - { - ERR("AudioUnitInitialize failed\n"); - return ALC_FALSE; - } - - err = AudioOutputUnitStart(data->audioUnit); + err = AudioUnitUninitialize(data->audioUnit); if(err != noErr) - { - ERR("AudioOutputUnitStart failed\n"); - return ALC_FALSE; - } + ERR("-- AudioUnitUninitialize failed.\n"); /* retrieve default output unit's properties (output side) */ size = sizeof(AudioStreamBasicDescription); @@ -329,6 +330,29 @@ static ALCboolean ca_reset_playback(ALCdevice *device) return ALC_FALSE; } + /* init the default audio unit... */ + err = AudioUnitInitialize(data->audioUnit); + if(err != noErr) + { + ERR("AudioUnitInitialize failed\n"); + return ALC_FALSE; + } + + return ALC_TRUE; +} + +static ALCboolean ca_start_playback(ALCdevice *device) +{ + ca_data *data = (ca_data*)device->ExtraData; + OSStatus err; + + err = AudioOutputUnitStart(data->audioUnit); + if(err != noErr) + { + ERR("AudioOutputUnitStart failed\n"); + return ALC_FALSE; + } + return ALC_TRUE; } @@ -337,10 +361,9 @@ static void ca_stop_playback(ALCdevice *device) ca_data *data = (ca_data*)device->ExtraData; OSStatus err; - AudioOutputUnitStop(data->audioUnit); - err = AudioUnitUninitialize(data->audioUnit); + err = AudioOutputUnitStop(data->audioUnit); if(err != noErr) - ERR("-- AudioUnitUninitialize failed.\n"); + ERR("AudioOutputUnitStop failed\n"); } static ALCenum ca_open_capture(ALCdevice *device, const ALCchar *deviceName) @@ -645,6 +668,7 @@ static const BackendFuncs ca_funcs = { ca_open_playback, ca_close_playback, ca_reset_playback, + ca_start_playback, ca_stop_playback, ca_open_capture, ca_close_capture, -- cgit v1.2.3