Charles Davis : winecoreaudio: Fix deprecation warnings in audio.c.

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


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

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

winecoreaudio: Fix deprecation warnings in audio.c.

---

 dlls/winecoreaudio.drv/audio.c |   52 ++++++++++++++++++++++++++++-----------
 1 files changed, 37 insertions(+), 15 deletions(-)

diff --git a/dlls/winecoreaudio.drv/audio.c b/dlls/winecoreaudio.drv/audio.c
index cf876ff..ded830d 100644
--- a/dlls/winecoreaudio.drv/audio.c
+++ b/dlls/winecoreaudio.drv/audio.c
@@ -486,27 +486,44 @@ BOOL CoreAudio_GetDevCaps (void)
     OSStatus status;
     UInt32 propertySize;
     AudioDeviceID devId = CoreAudio_DefaultDevice.outputDeviceID;
+    AudioObjectPropertyAddress propertyAddress;
     
-    char name[MAXPNAMELEN];
+    CFStringRef name;
+    CFRange range;
     
-    propertySize = MAXPNAMELEN;
-    status = AudioDeviceGetProperty(devId, 0 , FALSE, kAudioDevicePropertyDeviceName, &propertySize, name);
+    propertySize = sizeof(name);
+    propertyAddress.mSelector = kAudioObjectPropertyName;
+    propertyAddress.mScope = kAudioDevicePropertyScopeOutput;
+    propertyAddress.mElement = kAudioObjectPropertyElementMaster;
+    status = AudioObjectGetPropertyData(devId, &propertyAddress, 0, NULL, &propertySize, &name);
     if (status) {
-        ERR("AudioHardwareGetProperty for kAudioDevicePropertyDeviceName return %s\n", wine_dbgstr_fourcc(status));
+        ERR("AudioObjectGetPropertyData for kAudioObjectPropertyName return %s\n", wine_dbgstr_fourcc(status));
         return FALSE;
     }
     
-    memcpy(CoreAudio_DefaultDevice.ds_desc.szDesc, name, sizeof(name));
+    CFStringGetCString(name, CoreAudio_DefaultDevice.ds_desc.szDesc,
+                       sizeof(CoreAudio_DefaultDevice.ds_desc.szDesc),
+                       kCFStringEncodingUTF8);
     strcpy(CoreAudio_DefaultDevice.ds_desc.szDrvname, "winecoreaudio.drv");
-    MultiByteToWideChar(CP_UNIXCP, 0, name, sizeof(name),
-                        CoreAudio_DefaultDevice.out_caps.szPname, 
-                        sizeof(CoreAudio_DefaultDevice.out_caps.szPname) / sizeof(WCHAR));
-    memcpy(CoreAudio_DefaultDevice.dev_name, name, 32);
+    range = CFRangeMake(0, min(sizeof(CoreAudio_DefaultDevice.out_caps.szPname) / sizeof(WCHAR) - 1, CFStringGetLength(name)));
+    CFStringGetCharacters(name, range, CoreAudio_DefaultDevice.out_caps.szPname);
+    CoreAudio_DefaultDevice.out_caps.szPname[range.length] = 0;
+    CFStringGetCString(name, CoreAudio_DefaultDevice.dev_name, 32, kCFStringEncodingUTF8);
+    CFRelease(name);
     
     propertySize = sizeof(CoreAudio_DefaultDevice.streamDescription);
-    status = AudioDeviceGetProperty(devId, 0, FALSE , kAudioDevicePropertyStreamFormat, &propertySize, &CoreAudio_DefaultDevice.streamDescription);
+    /* FIXME: kAudioDevicePropertyStreamFormat is deprecated. We're
+     * "supposed" to get an AudioStream object from the AudioDevice,
+     * then query it for the format with kAudioStreamPropertyVirtualFormat.
+     * Apple says that this is for our own good, because this property
+     * "has been shown to lead to programming mistakes by clients when
+     * working with devices with multiple streams." Only one problem:
+     * which stream? For now, just query the device.
+     */
+    propertyAddress.mSelector = kAudioDevicePropertyStreamFormat;
+    status = AudioObjectGetPropertyData(devId, &propertyAddress, 0, NULL, &propertySize, &CoreAudio_DefaultDevice.streamDescription);
     if (status != noErr) {
-        ERR("AudioHardwareGetProperty for kAudioDevicePropertyStreamFormat return %s\n", wine_dbgstr_fourcc(status));
+        ERR("AudioObjectGetPropertyData for kAudioDevicePropertyStreamFormat return %s\n", wine_dbgstr_fourcc(status));
         return FALSE;
     }
     
@@ -549,6 +566,7 @@ LONG CoreAudio_WaveInit(void)
 {
     OSStatus status;
     UInt32 propertySize;
+    AudioObjectPropertyAddress propertyAddress;
     int i;
     CFStringRef  messageThreadPortName;
     CFMessagePortRef port_ReceiveInMessageThread;
@@ -557,19 +575,23 @@ LONG CoreAudio_WaveInit(void)
     TRACE("()\n");
     
     /* number of sound cards */
-    AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, &propertySize, NULL);
+    propertyAddress.mSelector = kAudioHardwarePropertyDevices;
+    propertyAddress.mScope = kAudioObjectPropertyScopeGlobal;
+    propertyAddress.mElement = kAudioObjectPropertyElementMaster;
+    AudioObjectGetPropertyDataSize(kAudioObjectSystemObject, &propertyAddress, 0, NULL, &propertySize);
     propertySize /= sizeof(AudioDeviceID);
     TRACE("sound cards : %lu\n", propertySize);
     
     /* Get the output device */
     propertySize = sizeof(CoreAudio_DefaultDevice.outputDeviceID);
-    status = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &propertySize, &CoreAudio_DefaultDevice.outputDeviceID);
+    propertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice;
+    status = AudioObjectGetPropertyData(kAudioObjectSystemObject, &propertyAddress, 0, NULL, &propertySize, &CoreAudio_DefaultDevice.outputDeviceID);
     if (status) {
-        ERR("AudioHardwareGetProperty return %s for kAudioHardwarePropertyDefaultOutputDevice\n", wine_dbgstr_fourcc(status));
+        ERR("AudioObjectGetPropertyData return %s for kAudioHardwarePropertyDefaultOutputDevice\n", wine_dbgstr_fourcc(status));
         return DRV_FAILURE;
     }
     if (CoreAudio_DefaultDevice.outputDeviceID == kAudioDeviceUnknown) {
-        ERR("AudioHardwareGetProperty: CoreAudio_DefaultDevice.outputDeviceID == kAudioDeviceUnknown\n");
+        ERR("AudioObjectGetPropertyData: CoreAudio_DefaultDevice.outputDeviceID == kAudioDeviceUnknown\n");
         return DRV_FAILURE;
     }
     




More information about the wine-cvs mailing list