Andrew Eikum : winecoreaudio.drv: Convert some OSStatus errors to HRESULT.

Alexandre Julliard julliard at winehq.org
Tue Dec 4 13:48:53 CST 2012


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

Author: Andrew Eikum <aeikum at codeweavers.com>
Date:   Mon Dec  3 10:28:02 2012 -0600

winecoreaudio.drv: Convert some OSStatus errors to HRESULT.

---

 dlls/winecoreaudio.drv/mmdevdrv.c |   45 ++++++++++++++++++++++++------------
 1 files changed, 30 insertions(+), 15 deletions(-)

diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c
index da0123b..06f46f7 100644
--- a/dlls/winecoreaudio.drv/mmdevdrv.c
+++ b/dlls/winecoreaudio.drv/mmdevdrv.c
@@ -55,6 +55,7 @@
 #include <libkern/OSAtomic.h>
 #include <CoreAudio/CoreAudio.h>
 #include <AudioToolbox/AudioQueue.h>
+#include <AudioToolbox/AudioFormat.h>
 
 WINE_DEFAULT_DEBUG_CHANNEL(coreaudio);
 
@@ -281,6 +282,19 @@ int WINAPI AUDDRV_GetPriority(void)
     return Priority_Neutral;
 }
 
+static HRESULT osstatus_to_hresult(OSStatus sc)
+{
+    switch(sc){
+    case kAudioFormatUnsupportedDataFormatError:
+    case kAudioFormatUnknownFormatError:
+    case kAudioDeviceUnsupportedFormatError:
+        return AUDCLNT_E_UNSUPPORTED_FORMAT;
+    case kAudioHardwareBadDeviceError:
+        return AUDCLNT_E_DEVICE_INVALIDATED;
+    }
+    return E_FAIL;
+}
+
 static void set_device_guid(EDataFlow flow, HKEY drv_key, const WCHAR *key_name,
         GUID *guid)
 {
@@ -390,7 +404,7 @@ HRESULT WINAPI AUDDRV_GetEndpointIDs(EDataFlow flow, WCHAR ***ids,
             NULL, &devsize);
     if(sc != noErr){
         WARN("Getting _Devices property size failed: %lx\n", sc);
-        return E_FAIL;
+        return osstatus_to_hresult(sc);
     }
 
     devices = HeapAlloc(GetProcessHeap(), 0, devsize);
@@ -402,7 +416,7 @@ HRESULT WINAPI AUDDRV_GetEndpointIDs(EDataFlow flow, WCHAR ***ids,
     if(sc != noErr){
         WARN("Getting _Devices property failed: %lx\n", sc);
         HeapFree(GetProcessHeap(), 0, devices);
-        return E_FAIL;
+        return osstatus_to_hresult(sc);
     }
 
     ndevices = devsize / sizeof(AudioDeviceID);
@@ -959,7 +973,7 @@ static HRESULT ca_setup_aqueue(AudioDeviceID did, EDataFlow flow,
     sc = AudioObjectGetPropertyData(did, &addr, 0, NULL, &size, &uid);
     if(sc != noErr){
         WARN("Unable to get _DeviceUID property: %lx\n", sc);
-        return E_FAIL;
+        return osstatus_to_hresult(sc);
     }
 
     hr = ca_get_audiodesc(&desc, fmt);
@@ -981,14 +995,15 @@ static HRESULT ca_setup_aqueue(AudioDeviceID did, EDataFlow flow,
     if(sc != noErr){
         WARN("Unable to create AudioQueue: %lx\n", sc);
         CFRelease(uid);
-        return E_FAIL;
+        return osstatus_to_hresult(sc);
     }
 
     sc = AudioQueueSetProperty(*aqueue, kAudioQueueProperty_CurrentDevice,
             &uid, sizeof(uid));
     if(sc != noErr){
+        WARN("Unable to change AQueue device: %lx\n", sc);
         CFRelease(uid);
-        return E_FAIL;
+        return osstatus_to_hresult(sc);
     }
 
     CFRelease(uid);
@@ -1183,7 +1198,7 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient *iface,
                 This->fmt = NULL;
                 OSSpinLockUnlock(&This->lock);
                 WARN("Couldn't allocate buffer: %lx\n", sc);
-                return E_FAIL;
+                return osstatus_to_hresult(sc);
             }
 
             buf->buf->mUserData = buf;
@@ -1280,7 +1295,7 @@ static HRESULT ca_get_max_stream_latency(ACImpl *This, UInt32 *max)
             &size);
     if(sc != noErr){
         WARN("Unable to get size for _Streams property: %lx\n", sc);
-        return E_FAIL;
+        return osstatus_to_hresult(sc);
     }
 
     ids = HeapAlloc(GetProcessHeap(), 0, size);
@@ -1291,7 +1306,7 @@ static HRESULT ca_get_max_stream_latency(ACImpl *This, UInt32 *max)
     if(sc != noErr){
         WARN("Unable to get _Streams property: %lx\n", sc);
         HeapFree(GetProcessHeap(), 0, ids);
-        return E_FAIL;
+        return osstatus_to_hresult(sc);
     }
 
     nstreams = size / sizeof(AudioStreamID);
@@ -1349,7 +1364,7 @@ static HRESULT WINAPI AudioClient_GetStreamLatency(IAudioClient *iface,
     if(sc != noErr){
         WARN("Couldn't get _Latency property: %lx\n", sc);
         OSSpinLockUnlock(&This->lock);
-        return E_FAIL;
+        return osstatus_to_hresult(sc);
     }
 
     hr = ca_get_max_stream_latency(This, &stream_latency);
@@ -1486,7 +1501,7 @@ static HRESULT WINAPI AudioClient_GetMixFormat(IAudioClient *iface,
     if(sc != noErr){
         CoTaskMemFree(fmt);
         WARN("Unable to get size for _StreamConfiguration property: %lx\n", sc);
-        return E_FAIL;
+        return osstatus_to_hresult(sc);
     }
 
     buffers = HeapAlloc(GetProcessHeap(), 0, size);
@@ -1501,7 +1516,7 @@ static HRESULT WINAPI AudioClient_GetMixFormat(IAudioClient *iface,
         CoTaskMemFree(fmt);
         HeapFree(GetProcessHeap(), 0, buffers);
         WARN("Unable to get _StreamConfiguration property: %lx\n", sc);
-        return E_FAIL;
+        return osstatus_to_hresult(sc);
     }
 
     fmt->Format.nChannels = 0;
@@ -1518,7 +1533,7 @@ static HRESULT WINAPI AudioClient_GetMixFormat(IAudioClient *iface,
     if(sc != noErr){
         CoTaskMemFree(fmt);
         WARN("Unable to get _NominalSampleRate property: %lx\n", sc);
-        return E_FAIL;
+        return osstatus_to_hresult(sc);
     }
     fmt->Format.nSamplesPerSec = rate;
 
@@ -1609,7 +1624,7 @@ static HRESULT WINAPI AudioClient_Start(IAudioClient *iface)
     if(sc != noErr){
         OSSpinLockUnlock(&This->lock);
         WARN("Unable to start audio queue: %lx\n", sc);
-        return E_FAIL;
+        return osstatus_to_hresult(sc);
     }
 
     This->playing = StatePlaying;
@@ -1672,7 +1687,7 @@ static HRESULT WINAPI AudioClient_Stop(IAudioClient *iface)
     if(sc != noErr){
         OSSpinLockUnlock(&This->lock);
         WARN("Unable to pause audio queue: %lx\n", sc);
-        return E_FAIL;
+        return osstatus_to_hresult(sc);
     }
 
     This->playing = StateStopped;
@@ -1724,7 +1739,7 @@ static HRESULT WINAPI AudioClient_Reset(IAudioClient *iface)
     if(sc != noErr){
         OSSpinLockUnlock(&This->lock);
         WARN("Unable to reset audio queue: %lx\n", sc);
-        return E_FAIL;
+        return osstatus_to_hresult(sc);
     }
 
     /* AQReset is synchronous */




More information about the wine-cvs mailing list