=?UTF-8?Q?J=C3=B6rg=20H=C3=B6hle=20?=: winmm/tests: Properly recover from the WAVERR_STILLPLAYING case.
Alexandre Julliard
julliard at winehq.org
Thu Jan 19 14:56:54 CST 2012
Module: wine
Branch: master
Commit: 32c23cbc80a3ce9690e255f0fb31e1d27114b99d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=32c23cbc80a3ce9690e255f0fb31e1d27114b99d
Author: Jörg Höhle <hoehle at users.sourceforge.net>
Date: Wed Jan 18 20:30:31 2012 +0100
winmm/tests: Properly recover from the WAVERR_STILLPLAYING case.
---
dlls/winmm/tests/wave.c | 43 +++++++++++++++++++++++++++++++------------
1 files changed, 31 insertions(+), 12 deletions(-)
diff --git a/dlls/winmm/tests/wave.c b/dlls/winmm/tests/wave.c
index a7614a5..a96d088 100644
--- a/dlls/winmm/tests/wave.c
+++ b/dlls/winmm/tests/wave.c
@@ -684,7 +684,8 @@ static void wave_out_test_deviceOut(int device, double duration,
if (rc!=MMSYSERR_NOERROR)
goto EXIT;
- WaitForSingleObject(hevent,10000);
+ rc=WaitForSingleObject(hevent,9000);
+ ok(rc==WAIT_OBJECT_0, "missing WOM_OPEN notification\n");
ok(pwfx->nChannels==nChannels &&
pwfx->wBitsPerSample==wBitsPerSample &&
@@ -787,7 +788,8 @@ static void wave_out_test_deviceOut(int device, double duration,
ok(rc==MMSYSERR_NOERROR,"waveOutWrite(%s, header[%d]): rc=%s\n",
dev_name(device),(i+1)%headers,wave_out_error(rc));
}
- WaitForSingleObject(hevent,10000);
+ rc=WaitForSingleObject(hevent,8000);
+ ok(rc==WAIT_OBJECT_0, "missing WOM_DONE notification\n");
}
}
@@ -807,12 +809,29 @@ static void wave_out_test_deviceOut(int device, double duration,
"waveOutUnprepareHeader(%s): rc=%s\n",dev_name(device),
wave_out_error(rc));
}
- HeapFree(GetProcessHeap(), 0, buffer);
-
rc=waveOutClose(wout);
ok(rc==MMSYSERR_NOERROR,"waveOutClose(%s): rc=%s\n",dev_name(device),
wave_out_error(rc));
- WaitForSingleObject(hevent,10000);
+ if (rc==WAVERR_STILLPLAYING) {
+ /* waveOutReset ought to return all buffers s.t. waveOutClose succeeds */
+ rc=waveOutReset(wout);
+ ok(rc==MMSYSERR_NOERROR,"waveOutReset(%s): rc=%s\n",dev_name(device),
+ wave_out_error(rc));
+
+ for (i = 0; i < headers; i++) {
+ rc=waveOutUnprepareHeader(wout, &frags[i], sizeof(frags[0]));
+ ok(rc==MMSYSERR_NOERROR,
+ "waveOutUnprepareHeader(%s): rc=%s\n",dev_name(device),
+ wave_out_error(rc));
+ }
+ rc=waveOutClose(wout);
+ ok(rc==MMSYSERR_NOERROR,"waveOutClose(%s): rc=%s\n",dev_name(device),
+ wave_out_error(rc));
+ }
+ rc=WaitForSingleObject(hevent,1500);
+ ok(rc==WAIT_OBJECT_0, "missing WOM_CLOSE notification\n");
+
+ HeapFree(GetProcessHeap(), 0, buffer);
EXIT:
if ((flags & CALLBACK_TYPEMASK) == CALLBACK_THREAD) {
PostThreadMessage(thread_id, WM_APP, 0, 0);
@@ -970,20 +989,20 @@ static void wave_out_test_device(UINT_PTR device)
format.nBlockAlign=format.nChannels*format.wBitsPerSample/8;
format.nAvgBytesPerSec=format.nSamplesPerSec*format.nBlockAlign;
format.cbSize=0;
- wave_out_test_deviceOut(device,1.0,1,0,&format,WAVE_FORMAT_2M08,
+ wave_out_test_deviceOut(device,0.6,1,0,&format,WAVE_FORMAT_2M08,
CALLBACK_EVENT,&capsA,TRUE,FALSE,FALSE);
- wave_out_test_deviceOut(device,1.0,1,0,&format,WAVE_FORMAT_2M08,
+ wave_out_test_deviceOut(device,0.6,1,0,&format,WAVE_FORMAT_2M08,
CALLBACK_EVENT,&capsA,TRUE,FALSE,TRUE);
- wave_out_test_deviceOut(device,1.0,1,0,&format,WAVE_FORMAT_2M08,
+ wave_out_test_deviceOut(device,0.6,1,0,&format,WAVE_FORMAT_2M08,
CALLBACK_FUNCTION,&capsA,TRUE,FALSE,FALSE);
- wave_out_test_deviceOut(device,1.0,1,0,&format,WAVE_FORMAT_2M08,
+ wave_out_test_deviceOut(device,0.6,1,0,&format,WAVE_FORMAT_2M08,
CALLBACK_FUNCTION,&capsA,TRUE,FALSE,TRUE);
- wave_out_test_deviceOut(device,1.0,1,0,&format,WAVE_FORMAT_2M08,
+ wave_out_test_deviceOut(device,0.6,1,0,&format,WAVE_FORMAT_2M08,
CALLBACK_THREAD,&capsA,TRUE,FALSE,FALSE);
- wave_out_test_deviceOut(device,1.0,1,0,&format,WAVE_FORMAT_2M08,
+ wave_out_test_deviceOut(device,0.6,1,0,&format,WAVE_FORMAT_2M08,
CALLBACK_THREAD,&capsA,TRUE,FALSE,TRUE);
- wave_out_test_deviceOut(device,1.0,10,0,&format,WAVE_FORMAT_2M08,
+ wave_out_test_deviceOut(device,0.8,10,0,&format,WAVE_FORMAT_2M08,
CALLBACK_EVENT,&capsA,TRUE,FALSE,FALSE);
wave_out_test_deviceOut(device,1.0,5,1,&format,WAVE_FORMAT_2M08,
CALLBACK_EVENT,&capsA,TRUE,FALSE,FALSE);
More information about the wine-cvs
mailing list