Charles Davis : winecoreaudio: Don't use Component Manager on Mac OS 10.6.

Alexandre Julliard julliard at winehq.org
Mon Jan 31 11:26:14 CST 2011


Module: wine
Branch: master
Commit: 459d9427a8b233ad31e7044fa2a647a1b7792dc8
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=459d9427a8b233ad31e7044fa2a647a1b7792dc8

Author: Charles Davis <cdavis at mymail.mines.edu>
Date:   Sat Jan 29 16:45:53 2011 -0700

winecoreaudio: Don't use Component Manager on Mac OS 10.6.

---

 configure                          |    9 ++++++-
 configure.ac                       |   10 ++++++-
 dlls/winecoreaudio.drv/audiounit.c |   50 ++++++++++++++++++++++++++---------
 include/config.h.in                |    3 ++
 4 files changed, 56 insertions(+), 16 deletions(-)

diff --git a/configure b/configure
index 124b7cd..89bfefa 100755
--- a/configure
+++ b/configure
@@ -5764,6 +5764,7 @@ for ac_header in \
 	ApplicationServices/ApplicationServices.h \
 	AudioToolbox/AudioConverter.h \
 	AudioUnit/AudioUnit.h \
+	AudioUnit/AudioComponent.h \
 	CL/cl.h \
 	Carbon/Carbon.h \
 	CoreAudio/CoreAudio.h \
@@ -6526,8 +6527,14 @@ fi
     fi
     if test "$ac_cv_header_CoreAudio_CoreAudio_h" = "yes" -a "$ac_cv_header_AudioUnit_AudioUnit_h" = "yes"
     then
-                COREAUDIO="-framework CoreAudio -framework AudioUnit -framework CoreServices -framework AudioToolbox -framework CoreMIDI"
+        if test "$ac_cv_header_AudioUnit_AudioComponent_h" = "yes"
+        then
+            COREAUDIO="-framework CoreFoundation -framework CoreAudio -framework AudioUnit -framework AudioToolbox -framework CoreMIDI"
+
+        else
+                        COREAUDIO="-framework CoreAudio -framework AudioUnit -framework CoreServices -framework AudioToolbox -framework CoreMIDI"
 
+        fi
     fi
     if test "$ac_cv_header_OpenAL_al_h" = "yes"
     then
diff --git a/configure.ac b/configure.ac
index eb7b4a1..c0a9d7f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -371,6 +371,7 @@ AC_CHECK_HEADERS(\
 	ApplicationServices/ApplicationServices.h \
 	AudioToolbox/AudioConverter.h \
 	AudioUnit/AudioUnit.h \
+	AudioUnit/AudioComponent.h \
 	CL/cl.h \
 	Carbon/Carbon.h \
 	CoreAudio/CoreAudio.h \
@@ -711,8 +712,13 @@ case $host_os in
     fi
     if test "$ac_cv_header_CoreAudio_CoreAudio_h" = "yes" -a "$ac_cv_header_AudioUnit_AudioUnit_h" = "yes"
     then
-        dnl CoreServices needed by AudioUnit
-        AC_SUBST(COREAUDIO,"-framework CoreAudio -framework AudioUnit -framework CoreServices -framework AudioToolbox -framework CoreMIDI")
+        if test "$ac_cv_header_AudioUnit_AudioComponent_h" = "yes"
+        then
+            AC_SUBST(COREAUDIO,"-framework CoreFoundation -framework CoreAudio -framework AudioUnit -framework AudioToolbox -framework CoreMIDI")
+        else
+            dnl CoreServices needed by AudioUnit
+            AC_SUBST(COREAUDIO,"-framework CoreAudio -framework AudioUnit -framework CoreServices -framework AudioToolbox -framework CoreMIDI")
+        fi
     fi
     if test "$ac_cv_header_OpenAL_al_h" = "yes"
     then
diff --git a/dlls/winecoreaudio.drv/audiounit.c b/dlls/winecoreaudio.drv/audiounit.c
index bef882b..5191669 100644
--- a/dlls/winecoreaudio.drv/audiounit.c
+++ b/dlls/winecoreaudio.drv/audiounit.c
@@ -24,7 +24,9 @@
 
 #define ULONG CoreFoundation_ULONG
 #define HRESULT CoreFoundation_HRESULT
+#ifndef HAVE_AUDIOUNIT_AUDIOCOMPONENT_H
 #include <CoreServices/CoreServices.h>
+#endif
 #include <AudioUnit/AudioUnit.h>
 #include <AudioToolbox/AudioToolbox.h>
 #undef ULONG
@@ -35,6 +37,28 @@
 #include "coreaudio.h"
 #include "wine/debug.h"
 
+#ifndef HAVE_AUDIOUNIT_AUDIOCOMPONENT_H
+/* Define new AudioComponent Manager functions for compatibility's sake */
+typedef Component AudioComponent;
+typedef ComponentDescription AudioComponentDescription;
+typedef ComponentInstance AudioComponentInstance;
+
+static inline AudioComponent AudioComponentFindNext(AudioComponent ac, AudioComponentDescription *desc)
+{
+    return FindNextComponent(ac, desc);
+}
+
+static inline OSStatus AudioComponentInstanceNew(AudioComponent ac, AudioComponentInstance *aci)
+{
+    return OpenAComponent(ac, aci);
+}
+
+static inline OSStatus AudioComponentInstanceDispose(AudioComponentInstance aci)
+{
+    return CloseComponent(aci);
+}
+#endif
+
 WINE_DEFAULT_DEBUG_CHANNEL(wave);
 WINE_DECLARE_DEBUG_CHANNEL(midi);
 
@@ -68,8 +92,8 @@ extern OSStatus CoreAudio_wiAudioUnitIOProc(void *inRefCon,
 int AudioUnit_CreateDefaultAudioUnit(void *wwo, AudioUnit *au)
 {
     OSStatus err;
-    Component comp;
-    ComponentDescription desc;
+    AudioComponent comp;
+    AudioComponentDescription desc;
     AURenderCallbackStruct callbackStruct;
 
     TRACE("\n");
@@ -80,11 +104,11 @@ int AudioUnit_CreateDefaultAudioUnit(void *wwo, AudioUnit *au)
     desc.componentFlags = 0;
     desc.componentFlagsMask = 0;
 
-    comp = FindNextComponent(NULL, &desc);
+    comp = AudioComponentFindNext(NULL, &desc);
     if (comp == NULL)
         return 0;
     
-    err = OpenAComponent(comp, au);
+    err = AudioComponentInstanceNew(comp, au);
     if (err != noErr || *au == NULL)
         return 0;
         
@@ -102,7 +126,7 @@ int AudioUnit_CreateDefaultAudioUnit(void *wwo, AudioUnit *au)
 
 int AudioUnit_CloseAudioUnit(AudioUnit au)
 {
-    OSStatus err = CloseComponent(au);
+    OSStatus err = AudioComponentInstanceDispose(au);
     return (err == noErr);
 }
 
@@ -198,8 +222,8 @@ int AudioUnit_CreateInputUnit(void* wwi, AudioUnit* out_au,
         UInt32* outFrameCount)
 {
     OSStatus                    err = noErr;
-    ComponentDescription        description;
-    Component                   component;
+    AudioComponentDescription   description;
+    AudioComponent              component;
     AudioUnit                   au;
     UInt32                      param;
     AURenderCallbackStruct      callback;
@@ -220,17 +244,17 @@ int AudioUnit_CreateInputUnit(void* wwi, AudioUnit* out_au,
     description.componentFlags          = 0;
     description.componentFlagsMask      = 0;
 
-    component = FindNextComponent(NULL, &description);
+    component = AudioComponentFindNext(NULL, &description);
     if (!component)
     {
-        ERR("FindNextComponent(kAudioUnitSubType_HALOutput) failed\n");
+        ERR("AudioComponentFindNext(kAudioUnitSubType_HALOutput) failed\n");
         return 0;
     }
 
-    err = OpenAComponent(component, &au);
+    err = AudioComponentInstanceNew(component, &au);
     if (err != noErr || au == NULL)
     {
-        ERR("OpenAComponent failed: %08lx\n", err);
+        ERR("AudioComponentInstanceNew failed: %08lx\n", err);
         return 0;
     }
 
@@ -343,7 +367,7 @@ int AudioUnit_CreateInputUnit(void* wwi, AudioUnit* out_au,
 
 error:
     if (au)
-        CloseComponent(au);
+        AudioComponentInstanceDispose(au);
     return 0;
 }
 
@@ -353,7 +377,7 @@ error:
 int SynthUnit_CreateDefaultSynthUnit(AUGraph *graph, AudioUnit *synth)
 {
     OSStatus err;
-    ComponentDescription desc;
+    AudioComponentDescription desc;
     AUNode synthNode;
     AUNode outNode;
 
diff --git a/include/config.h.in b/include/config.h.in
index dab00b2..5cae81b 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -40,6 +40,9 @@
 /* Define to 1 if you have the <AudioToolbox/AudioConverter.h> header file. */
 #undef HAVE_AUDIOTOOLBOX_AUDIOCONVERTER_H
 
+/* Define to 1 if you have the <AudioUnit/AudioComponent.h> header file. */
+#undef HAVE_AUDIOUNIT_AUDIOCOMPONENT_H
+
 /* Define to 1 if you have the <AudioUnit/AudioUnit.h> header file. */
 #undef HAVE_AUDIOUNIT_AUDIOUNIT_H
 




More information about the wine-cvs mailing list