Don't flag failed opens of unsupported formats as an error.

This commit is contained in:
Robert Reif 2003-11-11 21:56:21 +00:00 committed by Alexandre Julliard
parent 75101add12
commit 56c449b9e6
1 changed files with 13 additions and 7 deletions

View File

@ -171,7 +171,7 @@ static const char * wave_open_flags(DWORD flags)
return msg; return msg;
} }
static void wave_out_test_deviceOut(int device, int format, DWORD flags) static void wave_out_test_deviceOut(int device, int format, DWORD flags, LPWAVEOUTCAPS pcaps)
{ {
WAVEFORMATEX wfx; WAVEFORMATEX wfx;
HWAVEOUT wout; HWAVEOUT wout;
@ -197,6 +197,7 @@ static void wave_out_test_deviceOut(int device, int format, DWORD flags)
rc=waveOutOpen(&wout,device,&wfx,(DWORD)hevent,0,CALLBACK_EVENT|flags); rc=waveOutOpen(&wout,device,&wfx,(DWORD)hevent,0,CALLBACK_EVENT|flags);
/* Note: Win9x doesn't know WAVE_FORMAT_DIRECT */ /* Note: Win9x doesn't know WAVE_FORMAT_DIRECT */
ok(rc==MMSYSERR_NOERROR || rc==MMSYSERR_BADDEVICEID || ok(rc==MMSYSERR_NOERROR || rc==MMSYSERR_BADDEVICEID ||
(rc==WAVERR_BADFORMAT && (flags & WAVE_FORMAT_DIRECT) && (pcaps->dwFormats & win_formats[format][0])) ||
(rc==MMSYSERR_INVALFLAG && (flags & WAVE_FORMAT_DIRECT)), (rc==MMSYSERR_INVALFLAG && (flags & WAVE_FORMAT_DIRECT)),
"waveOutOpen: device=%d format=%ldx%2dx%d flags=%lx(%s) rc=%d(%s)\n",device, "waveOutOpen: device=%d format=%ldx%2dx%d flags=%lx(%s) rc=%d(%s)\n",device,
wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels,CALLBACK_EVENT|flags, wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels,CALLBACK_EVENT|flags,
@ -305,8 +306,8 @@ static void wave_out_tests()
for (f=0;f<NB_WIN_FORMATS;f++) { for (f=0;f<NB_WIN_FORMATS;f++) {
if (caps.dwFormats & win_formats[f][0]) { if (caps.dwFormats & win_formats[f][0]) {
wave_out_test_deviceOut(d,f,0); wave_out_test_deviceOut(d,f,0,&caps);
wave_out_test_deviceOut(d,f,WAVE_FORMAT_DIRECT); wave_out_test_deviceOut(d,f,WAVE_FORMAT_DIRECT,&caps);
} }
} }
@ -364,7 +365,7 @@ static const char * wave_in_error(MMRESULT error)
return msg; return msg;
} }
static void wave_in_test_deviceIn(int device, int format, DWORD flags) static void wave_in_test_deviceIn(int device, int format, DWORD flags, LPWAVEINCAPS pcaps)
{ {
WAVEFORMATEX wfx; WAVEFORMATEX wfx;
HWAVEIN win; HWAVEIN win;
@ -390,6 +391,7 @@ static void wave_in_test_deviceIn(int device, int format, DWORD flags)
rc=waveInOpen(&win,device,&wfx,(DWORD)hevent,0,CALLBACK_EVENT|flags); rc=waveInOpen(&win,device,&wfx,(DWORD)hevent,0,CALLBACK_EVENT|flags);
/* Note: Win9x doesn't know WAVE_FORMAT_DIRECT */ /* Note: Win9x doesn't know WAVE_FORMAT_DIRECT */
ok(rc==MMSYSERR_NOERROR || rc==MMSYSERR_BADDEVICEID || ok(rc==MMSYSERR_NOERROR || rc==MMSYSERR_BADDEVICEID ||
(rc==WAVERR_BADFORMAT && (flags & WAVE_FORMAT_DIRECT) && (pcaps->dwFormats & win_formats[format][0])) ||
(rc==MMSYSERR_INVALFLAG && (flags & WAVE_FORMAT_DIRECT)), (rc==MMSYSERR_INVALFLAG && (flags & WAVE_FORMAT_DIRECT)),
"waveInOpen: device=%d format=%ldx%2dx%d flags=%lx(%s) rc=%d(%s)\n",device, "waveInOpen: device=%d format=%ldx%2dx%d flags=%lx(%s) rc=%d(%s)\n",device,
wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels,CALLBACK_EVENT|flags, wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels,CALLBACK_EVENT|flags,
@ -411,11 +413,15 @@ static void wave_in_test_deviceIn(int device, int format, DWORD flags)
frag.lpData=malloc(wfx.nAvgBytesPerSec); frag.lpData=malloc(wfx.nAvgBytesPerSec);
frag.dwBufferLength=wfx.nAvgBytesPerSec; frag.dwBufferLength=wfx.nAvgBytesPerSec;
frag.dwBytesRecorded=0;
frag.dwUser=0;
frag.dwFlags=0; frag.dwFlags=0;
frag.dwLoops=0; frag.dwLoops=0;
frag.lpNext=0;
rc=waveInPrepareHeader(win, &frag, sizeof(frag)); rc=waveInPrepareHeader(win, &frag, sizeof(frag));
ok(rc==MMSYSERR_NOERROR, "waveOutPrepareHeader: device=%d rc=%d\n",device,rc); ok(rc==MMSYSERR_NOERROR, "waveInPrepareHeader: device=%d rc=%d\n",device,rc);
ok(frag.dwFlags&WHDR_PREPARED,"waveInPrepareHeader: prepared flag not set\n");
if (winetest_interactive && rc==MMSYSERR_NOERROR) { if (winetest_interactive && rc==MMSYSERR_NOERROR) {
trace("Recording at %ldx%2dx%d %04lx\n", trace("Recording at %ldx%2dx%d %04lx\n",
@ -501,8 +507,8 @@ static void wave_in_tests()
for (f=0;f<NB_WIN_FORMATS;f++) { for (f=0;f<NB_WIN_FORMATS;f++) {
if (caps.dwFormats & win_formats[f][0]) { if (caps.dwFormats & win_formats[f][0]) {
wave_in_test_deviceIn(d,f,0); wave_in_test_deviceIn(d,f,0, &caps);
wave_in_test_deviceIn(d,f,WAVE_FORMAT_DIRECT); wave_in_test_deviceIn(d,f,WAVE_FORMAT_DIRECT, &caps);
} }
} }