Signed-off-by: Shawn M. Chapla <schapla(a)codeweavers.com>
---
dlls/dsound/tests/capture.c | 34 +++++++++++++++++++++-------------
1 file changed, 21 insertions(+), 13 deletions(-)
diff --git a/dlls/dsound/tests/capture.c b/dlls/dsound/tests/capture.c
index e326fe8d839..fb445794bd1 100644
--- a/dlls/dsound/tests/capture.c
+++ b/dlls/dsound/tests/capture.c
@@ -30,7 +30,8 @@
#include "dsound_test.h"
-#define NOTIFICATIONS 5
+#define TIMESTAMP_CAPTURE_NTFCTNS 5
+#define TOTAL_CAPTURE_NTFCTNS (TIMESTAMP_CAPTURE_NTFCTNS + 1)
static const char * get_format_str(WORD format)
{
@@ -264,8 +265,8 @@ typedef struct {
LPDIRECTSOUNDCAPTUREBUFFER dscbo;
LPWAVEFORMATEX wfx;
- DSBPOSITIONNOTIFY posnotify[NOTIFICATIONS];
- HANDLE event[NOTIFICATIONS];
+ DSBPOSITIONNOTIFY posnotify[TOTAL_CAPTURE_NTFCTNS];
+ HANDLE event[TOTAL_CAPTURE_NTFCTNS];
LPDIRECTSOUNDNOTIFY notify;
DWORD buffer_size;
@@ -369,21 +370,24 @@ static void test_capture_buffer(LPDIRECTSOUNDCAPTURE dsco,
state.dscbo=dscbo;
state.wfx=&wfx;
state.buffer_size = dscbcaps.dwBufferBytes;
- for (i = 0; i < NOTIFICATIONS; i++)
+ for (i = 0; i < TOTAL_CAPTURE_NTFCTNS; i++)
state.event[i] = CreateEventW(NULL, FALSE, FALSE, NULL);
- state.size = dscbcaps.dwBufferBytes / NOTIFICATIONS;
+ state.size = dscbcaps.dwBufferBytes / TIMESTAMP_CAPTURE_NTFCTNS;
rc=IDirectSoundCaptureBuffer_QueryInterface(dscbo,&IID_IDirectSoundNotify,
(void **)&(state.notify));
ok((rc==DS_OK)&&(state.notify!=NULL),
"IDirectSoundCaptureBuffer_QueryInterface() failed: %08x\n", rc);
- for (i = 0; i < NOTIFICATIONS; i++) {
+ for (i = 0; i < TIMESTAMP_CAPTURE_NTFCTNS; i++) {
state.posnotify[i].dwOffset = (i * state.size) + state.size - 1;
state.posnotify[i].hEventNotify = state.event[i];
}
- rc=IDirectSoundNotify_SetNotificationPositions(state.notify,NOTIFICATIONS,
+ state.posnotify[i].dwOffset = DSBPN_OFFSETSTOP;
+ state.posnotify[i].hEventNotify = state.event[i];
+
+ rc = IDirectSoundNotify_SetNotificationPositions(state.notify, TOTAL_CAPTURE_NTFCTNS,
state.posnotify);
ok(rc==DS_OK,"IDirectSoundNotify_SetNotificationPositions() failed: %08x\n", rc);
@@ -403,15 +407,15 @@ static void test_capture_buffer(LPDIRECTSOUNDCAPTURE dsco,
"GetStatus: bad status: %x\n",status);
if (record) {
- /* wait for the notifications */
- for (i = 0; i < (NOTIFICATIONS * 2); i++) {
- rc=WaitForMultipleObjects(NOTIFICATIONS,state.event,FALSE,3000);
- ok(rc==(WAIT_OBJECT_0+(i%NOTIFICATIONS)),
+ /* wait for timestamp notifications */
+ for (i = 0; i < (TIMESTAMP_CAPTURE_NTFCTNS * 2); i++) {
+ rc = WaitForMultipleObjects(TOTAL_CAPTURE_NTFCTNS, state.event, FALSE, 3000);
+ ok(rc == (WAIT_OBJECT_0 + (i % TIMESTAMP_CAPTURE_NTFCTNS)),
"WaitForMultipleObjects failed: 0x%x\n",rc);
- if (rc!=(WAIT_OBJECT_0+(i%NOTIFICATIONS))) {
+ if (rc != (WAIT_OBJECT_0 + (i % TIMESTAMP_CAPTURE_NTFCTNS))) {
ok((rc==WAIT_TIMEOUT)||(rc==WAIT_FAILED),
"Wrong notification: should be %d, got %d\n",
- i%NOTIFICATIONS,rc-WAIT_OBJECT_0);
+ i % TIMESTAMP_CAPTURE_NTFCTNS, rc - WAIT_OBJECT_0);
}
if (!capture_buffer_service(&state))
break;
@@ -421,6 +425,10 @@ static void test_capture_buffer(LPDIRECTSOUNDCAPTURE dsco,
rc=IDirectSoundCaptureBuffer_Stop(dscbo);
ok(rc==DS_OK,"IDirectSoundCaptureBuffer_Stop() failed: %08x\n", rc);
+ /* wait for stop notification */
+ rc = WaitForSingleObject(state.event[TIMESTAMP_CAPTURE_NTFCTNS], 3000);
+ todo_wine ok(rc == WAIT_OBJECT_0, "WaitForSingleObject failed: 0x%x\n", rc);
+
rc=IDirectSoundCaptureBuffer_Stop(dscbo);
ok(rc==DS_OK,"IDirectSoundCaptureBuffer_Stop() failed: %08x\n", rc);
}
--
2.28.0