=?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