Codechange: [OSX] Use 10.6+ APIs to initialise audio when available.

save_ext
Michael Lutz 6 years ago
parent 4bfd277017
commit 27bfb1df8f

@ -18,6 +18,7 @@
#ifdef WITH_COCOA
#include "../stdafx.h"
#include "../os/macosx/macos.h"
#include "../debug.h"
#include "../driver.h"
#include "../mixer.h"
@ -47,8 +48,6 @@ static OSStatus audioCallback(void *inRefCon, AudioUnitRenderActionFlags *inActi
const char *SoundDriver_Cocoa::Start(const char * const *parm)
{
Component comp;
ComponentDescription desc;
struct AURenderCallbackStruct callback;
AudioStreamBasicDescription requestedDesc;
@ -71,21 +70,49 @@ const char *SoundDriver_Cocoa::Start(const char * const *parm)
MxInitialize((uint)requestedDesc.mSampleRate);
/* Locate the default output audio unit */
desc.componentType = kAudioUnitType_Output;
desc.componentSubType = kAudioUnitSubType_HALOutput;
desc.componentManufacturer = kAudioUnitManufacturer_Apple;
desc.componentFlags = 0;
desc.componentFlagsMask = 0;
comp = FindNextComponent (NULL, &desc);
if (comp == NULL) {
return "cocoa_s: Failed to start CoreAudio: FindNextComponent returned NULL";
}
/* Open & initialize the default output audio unit */
if (OpenAComponent(comp, &_outputAudioUnit) != noErr) {
return "cocoa_s: Failed to start CoreAudio: OpenAComponent";
#if defined(__AUDIOCOMPONENT_H__) || defined(HAVE_OSX_107_SDK)
if (MacOSVersionIsAtLeast(10, 6, 0)) {
/* Locate the default output audio unit */
AudioComponentDescription desc;
desc.componentType = kAudioUnitType_Output;
desc.componentSubType = kAudioUnitSubType_HALOutput;
desc.componentManufacturer = kAudioUnitManufacturer_Apple;
desc.componentFlags = 0;
desc.componentFlagsMask = 0;
AudioComponent comp = AudioComponentFindNext (NULL, &desc);
if (comp == NULL) {
return "cocoa_s: Failed to start CoreAudio: AudioComponentFindNext returned NULL";
}
/* Open & initialize the default output audio unit */
if (AudioComponentInstanceNew(comp, &_outputAudioUnit) != noErr) {
return "cocoa_s: Failed to start CoreAudio: AudioComponentInstanceNew";
}
} else
#endif
{
#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6)
/* Locate the default output audio unit */
ComponentDescription desc;
desc.componentType = kAudioUnitType_Output;
desc.componentSubType = kAudioUnitSubType_HALOutput;
desc.componentManufacturer = kAudioUnitManufacturer_Apple;
desc.componentFlags = 0;
desc.componentFlagsMask = 0;
Component comp = FindNextComponent (NULL, &desc);
if (comp == NULL) {
return "cocoa_s: Failed to start CoreAudio: FindNextComponent returned NULL";
}
/* Open & initialize the default output audio unit */
if (OpenAComponent(comp, &_outputAudioUnit) != noErr) {
return "cocoa_s: Failed to start CoreAudio: OpenAComponent";
}
#else
return "cocoa_s: Not supported on this OS X version";
#endif
}
if (AudioUnitInitialize(_outputAudioUnit) != noErr) {
@ -132,9 +159,21 @@ void SoundDriver_Cocoa::Stop()
return;
}
if (CloseComponent(_outputAudioUnit) != noErr) {
DEBUG(driver, 0, "cocoa_s: Core_CloseAudio: CloseComponent failed");
return;
#if defined(__AUDIOCOMPONENT_H__) || defined(HAVE_OSX_107_SDK)
if (MacOSVersionIsAtLeast(10, 6, 0)) {
if (AudioComponentInstanceDispose(_outputAudioUnit) != noErr) {
DEBUG(driver, 0, "cocoa_s: Core_CloseAudio: AudioComponentInstanceDispose failed");
return;
}
} else
#endif
{
#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6)
if (CloseComponent(_outputAudioUnit) != noErr) {
DEBUG(driver, 0, "cocoa_s: Core_CloseAudio: CloseComponent failed");
return;
}
#endif
}
}

Loading…
Cancel
Save