=?UTF-8?Q?J=C3=B6rg=20H=C3=B6hle=20?=: mmdevapi: IsFormatSupported EXCLUSIVE mode never returns S_FALSE.

Alexandre Julliard julliard at winehq.org
Fri Oct 28 12:48:37 CDT 2011


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

Author: Jörg Höhle <hoehle at users.sourceforge.net>
Date:   Thu Sep  8 15:21:52 2011 +0200

mmdevapi: IsFormatSupported EXCLUSIVE mode never returns S_FALSE.

---

 dlls/winealsa.drv/mmdevdrv.c      |    8 +++++++-
 dlls/winecoreaudio.drv/mmdevdrv.c |    8 +++-----
 dlls/wineoss.drv/mmdevdrv.c       |   16 +++++++++-------
 3 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c
index ac5be34..25693c0 100644
--- a/dlls/winealsa.drv/mmdevdrv.c
+++ b/dlls/winealsa.drv/mmdevdrv.c
@@ -1204,8 +1204,11 @@ static HRESULT WINAPI AudioClient_IsFormatSupported(IAudioClient *iface,
 
     dump_fmt(fmt);
 
-    if(out)
+    if(out){
         *out = NULL;
+        if(mode != AUDCLNT_SHAREMODE_SHARED)
+            out = NULL;
+    }
 
     EnterCriticalSection(&This->lock);
 
@@ -1339,6 +1342,9 @@ exit:
     LeaveCriticalSection(&This->lock);
     HeapFree(GetProcessHeap(), 0, formats);
 
+    if(hr == S_FALSE && !out)
+        hr = AUDCLNT_E_UNSUPPORTED_FORMAT;
+
     if(hr == S_FALSE && out) {
         closest->nBlockAlign =
             closest->nChannels * closest->wBitsPerSample / 8;
diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c
index 79cf5e3..a35f18c 100644
--- a/dlls/winecoreaudio.drv/mmdevdrv.c
+++ b/dlls/winecoreaudio.drv/mmdevdrv.c
@@ -1145,6 +1145,9 @@ static HRESULT WINAPI AudioClient_IsFormatSupported(IAudioClient *iface,
 
     dump_fmt(pwfx);
 
+    if(outpwfx)
+        *outpwfx = NULL;
+
     if(pwfx->wFormatTag == WAVE_FORMAT_EXTENSIBLE &&
             fmtex->dwChannelMask != 0 &&
             fmtex->dwChannelMask != get_channel_mask(pwfx->nChannels))
@@ -1156,17 +1159,12 @@ static HRESULT WINAPI AudioClient_IsFormatSupported(IAudioClient *iface,
     if(SUCCEEDED(hr)){
         AudioQueueDispose(aqueue, 1);
         OSSpinLockUnlock(&This->lock);
-        if(outpwfx)
-            *outpwfx = NULL;
         TRACE("returning %08x\n", S_OK);
         return S_OK;
     }
 
     OSSpinLockUnlock(&This->lock);
 
-    if(outpwfx)
-        *outpwfx = NULL;
-
     TRACE("returning %08x\n", AUDCLNT_E_UNSUPPORTED_FORMAT);
     return AUDCLNT_E_UNSUPPORTED_FORMAT;
 }
diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c
index f8316ee..24cd147 100644
--- a/dlls/wineoss.drv/mmdevdrv.c
+++ b/dlls/wineoss.drv/mmdevdrv.c
@@ -714,9 +714,6 @@ static HRESULT setup_oss_device(int fd, const WAVEFORMATEX *fmt,
     WAVEFORMATEXTENSIBLE *fmtex = (void*)fmt;
     WAVEFORMATEX *closest = NULL;
 
-    if(out)
-        *out = NULL;
-
     tmp = oss_format = get_oss_format(fmt);
     if(oss_format < 0)
         return AUDCLNT_E_UNSUPPORTED_FORMAT;
@@ -767,6 +764,9 @@ static HRESULT setup_oss_device(int fd, const WAVEFORMATEX *fmt,
             ret = S_FALSE;
     }
 
+    if(ret == S_FALSE && !out)
+        ret = AUDCLNT_E_UNSUPPORTED_FORMAT;
+
     if(ret == S_FALSE && out){
         closest->nBlockAlign =
             closest->nChannels * closest->wBitsPerSample / 8;
@@ -901,10 +901,6 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient *iface,
     }
 
     hr = setup_oss_device(This->fd, fmt, NULL, FALSE);
-    if(hr == S_FALSE){
-        LeaveCriticalSection(&This->lock);
-        return AUDCLNT_E_UNSUPPORTED_FORMAT;
-    }
     if(FAILED(hr)){
         LeaveCriticalSection(&This->lock);
         return hr;
@@ -1137,6 +1133,12 @@ static HRESULT WINAPI AudioClient_IsFormatSupported(IAudioClient *iface,
 
     dump_fmt(pwfx);
 
+    if(outpwfx){
+        *outpwfx = NULL;
+        if(mode != AUDCLNT_SHAREMODE_SHARED)
+            outpwfx = NULL;
+    }
+
     if(This->dataflow == eRender)
         fd = open(This->devnode, O_WRONLY, 0);
     else if(This->dataflow == eCapture)




More information about the wine-cvs mailing list