Module: wine Branch: master Commit: 3e1d4028811e5b57df264ac21dd4c56b383f9da9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3e1d4028811e5b57df264ac21d...
Author: Jörg Höhle hoehle@users.sourceforge.net Date: Tue Aug 2 21:49:12 2011 +0200
mmdevapi: IsFormatSupported fills closest match iff it returns S_FALSE.
---
dlls/winealsa.drv/mmdevdrv.c | 12 ++++++------ dlls/wineoss.drv/mmdevdrv.c | 14 ++++++++------ 2 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c index 916c247..0c47876 100644 --- a/dlls/winealsa.drv/mmdevdrv.c +++ b/dlls/winealsa.drv/mmdevdrv.c @@ -1189,6 +1189,9 @@ static HRESULT WINAPI AudioClient_IsFormatSupported(IAudioClient *iface,
dump_fmt(fmt);
+ if(out) + *out = NULL; + EnterCriticalSection(&This->lock);
if((err = snd_pcm_hw_params_any(This->pcm_handle, This->hw_params)) < 0){ @@ -1320,17 +1323,14 @@ exit: LeaveCriticalSection(&This->lock); HeapFree(GetProcessHeap(), 0, formats);
- if(hr == S_OK || !out){ - CoTaskMemFree(closest); - if(out) - *out = NULL; - }else if(closest){ + if(hr == S_FALSE && out) { closest->nBlockAlign = closest->nChannels * closest->wBitsPerSample / 8; closest->nAvgBytesPerSec = closest->nBlockAlign * closest->nSamplesPerSec; *out = closest; - } + } else + CoTaskMemFree(closest);
TRACE("returning: %08x\n", hr); return hr; diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c index 93f71cc..629f4f7 100644 --- a/dlls/wineoss.drv/mmdevdrv.c +++ b/dlls/wineoss.drv/mmdevdrv.c @@ -676,6 +676,9 @@ static HRESULT setup_oss_device(ACImpl *This, 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; @@ -689,6 +692,8 @@ static HRESULT setup_oss_device(ACImpl *This, const WAVEFORMATEX *fmt, }
closest = clone_format(fmt); + if(!closest) + return E_OUTOFMEMORY;
tmp = fmt->nSamplesPerSec; if(ioctl(This->fd, SNDCTL_DSP_SPEED, &tmp) < 0){ @@ -723,17 +728,14 @@ static HRESULT setup_oss_device(ACImpl *This, const WAVEFORMATEX *fmt, ret = S_FALSE; }
- if(ret == S_OK || !out){ - CoTaskMemFree( closest); - if(out) - *out = NULL; - }else{ + if(ret == S_FALSE && out){ closest->nBlockAlign = closest->nChannels * closest->wBitsPerSample / 8; closest->nAvgBytesPerSec = closest->nBlockAlign * closest->nSamplesPerSec; *out = closest; - } + } else + CoTaskMemFree(closest);
TRACE("returning: %08x\n", ret); return ret;