Module: wine Branch: master Commit: 89fe38ca9e917fb8c4b12f5a725cf86e78c5347c URL: http://source.winehq.org/git/wine.git/?a=commit;h=89fe38ca9e917fb8c4b12f5a72...
Author: Jörg Höhle hoehle@users.sourceforge.net Date: Fri Sep 11 07:43:45 2009 +0200
winecoreaudio: Make supported format test more restrictive.
---
dlls/winecoreaudio.drv/audio.c | 42 +++++++++++++++++---------------------- 1 files changed, 18 insertions(+), 24 deletions(-)
diff --git a/dlls/winecoreaudio.drv/audio.c b/dlls/winecoreaudio.drv/audio.c index 10b66d0..8c42815 100644 --- a/dlls/winecoreaudio.drv/audio.c +++ b/dlls/winecoreaudio.drv/audio.c @@ -431,6 +431,22 @@ static DWORD bytes_to_mmtime(LPMMTIME lpTime, DWORD position, return MMSYSERR_NOERROR; }
+static BOOL supportedFormat(LPWAVEFORMATEX wf) +{ + if (wf->nSamplesPerSec == 0) + return FALSE; + + if (wf->wFormatTag == WAVE_FORMAT_PCM) { + if (wf->nChannels >= 1 && wf->nChannels <= 2) { + if (wf->wBitsPerSample==8||wf->wBitsPerSample==16) + return TRUE; + } + } else + WARN("only WAVE_FORMAT_PCM supported\n"); + + return FALSE; +} + /************************************************************************** * CoreAudio_GetDevCaps [internal] */ @@ -793,10 +809,7 @@ static DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags) lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, lpDesc->lpFormat->nSamplesPerSec, lpDesc->lpFormat->wBitsPerSample);
- if (lpDesc->lpFormat->wFormatTag != WAVE_FORMAT_PCM || - lpDesc->lpFormat->nChannels == 0 || - lpDesc->lpFormat->nSamplesPerSec == 0 - ) + if (!supportedFormat(lpDesc->lpFormat)) { WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%d wBitsPerSample=%d !\n", lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, @@ -893,14 +906,6 @@ static DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
wwo->waveDesc = *lpDesc; memcpy(&wwo->format, lpDesc->lpFormat, sizeof(PCMWAVEFORMAT)); - - if (wwo->format.wBitsPerSample == 0) { - WARN("Resetting zeroed wBitsPerSample\n"); - wwo->format.wBitsPerSample = 8 * - (wwo->format.wf.nAvgBytesPerSec / - wwo->format.wf.nSamplesPerSec) / - wwo->format.wf.nChannels; - }
wwo->dwPlayedTotal = 0; wwo->dwWrittenTotal = 0; @@ -1884,9 +1889,7 @@ static DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags) lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, lpDesc->lpFormat->nSamplesPerSec, lpDesc->lpFormat->wBitsPerSample);
- if (lpDesc->lpFormat->wFormatTag != WAVE_FORMAT_PCM || - lpDesc->lpFormat->nChannels == 0 || - lpDesc->lpFormat->nSamplesPerSec == 0 || + if (!supportedFormat(lpDesc->lpFormat) || lpDesc->lpFormat->nSamplesPerSec != AudioUnit_GetInputDeviceSampleRate() ) { @@ -1920,15 +1923,6 @@ static DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags) wwi->waveDesc = *lpDesc; memcpy(&wwi->format, lpDesc->lpFormat, sizeof(PCMWAVEFORMAT));
- if (wwi->format.wBitsPerSample == 0) - { - WARN("Resetting zeroed wBitsPerSample\n"); - wwi->format.wBitsPerSample = 8 * - (wwi->format.wf.nAvgBytesPerSec / - wwi->format.wf.nSamplesPerSec) / - wwi->format.wf.nChannels; - } - wwi->dwTotalRecorded = 0;
wwi->trace_on = TRACE_ON(wave);