1
0
Fork 0

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

pull/6700/head
Michael Lutz 2018-04-10 23:09:57 +02:00
parent 4bfd277017
commit 27bfb1df8f
1 changed files with 57 additions and 18 deletions

View File

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