winmm/tests: check_position shouldn't fails on valid responses
Peter Åstrand
astrand at cendio.se
Fri Apr 18 04:11:16 CDT 2008
ChangeLog: Avoid spurious failures in check_position in Terminal Server
environments and others. The wavemapper is known to miss a few bytes, so
don't treat this as fatal. The waveOutGetPosition may return TIME_MIDI and
TIME_TICKS, which our own helper time_to_bytes doesn't support. Avoid
failing in this case.
Index: wave.c
===================================================================
RCS file: /home/wine/wine/dlls/winmm/tests/wave.c,v
retrieving revision 1.67
diff -u -r1.67 wave.c
--- wave.c 29 Feb 2008 12:18:36 -0000 1.67
+++ wave.c 18 Apr 2008 09:00:45 -0000
@@ -437,12 +437,12 @@
(mmtime->u.smpte.sec) +
(mmtime->u.smpte.frame / 30.0)) * pwfx->nAvgBytesPerSec;
- trace("FIXME: time_to_bytes() type not supported\n");
+ trace("FIXME: time_to_bytes() type %s not supported\n", wave_time_format(mmtime->wType));
return -1;
}
static void check_position(int device, HWAVEOUT wout, DWORD bytes,
- LPWAVEFORMATEX pwfx )
+ LPWAVEFORMATEX pwfx, BOOL wavemapper)
{
MMTIME mmtime;
DWORD samples;
@@ -453,6 +453,11 @@
samples=bytes/(pwfx->wBitsPerSample/8*pwfx->nChannels);
duration=((double)samples)/pwfx->nSamplesPerSec;
+ /* The wavemapper on Windows Server 2003 is known to do short
+ writes; only fail if not using wavemapper. Also, the system is
+ allowed to return any time format, including TIME_MIDI, which
+ our time_to_bytes doesn't support. */
+
mmtime.wType = TIME_BYTES;
rc=waveOutGetPosition(wout, &mmtime, sizeof(mmtime));
ok(rc==MMSYSERR_NOERROR,
@@ -461,7 +466,7 @@
trace("waveOutGetPosition(%s): TIME_BYTES not supported, returned %s\n",
dev_name(device),wave_time_format(mmtime.wType));
returned = time_to_bytes(&mmtime, pwfx);
- ok(returned == bytes, "waveOutGetPosition(%s): returned %d bytes, "
+ ok(returned == bytes || wavemapper || returned == -1, "waveOutGetPosition(%s): returned %d bytes, "
"should be %d\n", dev_name(device), returned, bytes);
mmtime.wType = TIME_SAMPLES;
@@ -472,7 +477,7 @@
trace("waveOutGetPosition(%s): TIME_SAMPLES not supported, "
"returned %s\n",dev_name(device),wave_time_format(mmtime.wType));
returned = time_to_bytes(&mmtime, pwfx);
- ok(returned == bytes, "waveOutGetPosition(%s): returned %d samples "
+ ok(returned == bytes || wavemapper || returned == -1, "waveOutGetPosition(%s): returned %d samples "
"(%d bytes), should be %d (%d bytes)\n", dev_name(device),
bytes_to_samples(returned, pwfx), returned,
bytes_to_samples(bytes, pwfx), bytes);
@@ -485,7 +490,7 @@
trace("waveOutGetPosition(%s): TIME_MS not supported, returned %s\n",
dev_name(device), wave_time_format(mmtime.wType));
returned = time_to_bytes(&mmtime, pwfx);
- ok(returned == bytes, "waveOutGetPosition(%s): returned %d ms, "
+ ok(returned == bytes || wavemapper || returned == -1, "waveOutGetPosition(%s): returned %d ms, "
"(%d bytes), should be %d (%d bytes)\n", dev_name(device),
bytes_to_ms(returned, pwfx), returned,
bytes_to_ms(bytes, pwfx), bytes);
@@ -498,7 +503,7 @@
trace("waveOutGetPosition(%s): TIME_SMPTE not supported, returned %s\n",
dev_name(device),wave_time_format(mmtime.wType));
returned = time_to_bytes(&mmtime, pwfx);
- ok(returned == bytes, "waveOutGetPosition(%s): SMPTE test failed\n",
+ ok(returned == bytes || wavemapper || returned == -1, "waveOutGetPosition(%s): SMPTE test failed\n",
dev_name(device));
mmtime.wType = TIME_MIDI;
@@ -509,7 +514,7 @@
trace("waveOutGetPosition(%s): TIME_MIDI not supported, returned %s\n",
dev_name(device),wave_time_format(mmtime.wType));
returned = time_to_bytes(&mmtime, pwfx);
- ok(returned == bytes, "waveOutGetPosition(%s): MIDI test failed\n",
+ ok(returned == bytes || wavemapper || returned == -1, "waveOutGetPosition(%s): MIDI test failed\n",
dev_name(device));
mmtime.wType = TIME_TICKS;
@@ -520,7 +525,7 @@
trace("waveOutGetPosition(%s): TIME_TICKS not supported, returned %s\n",
dev_name(device),wave_time_format(mmtime.wType));
returned = time_to_bytes(&mmtime, pwfx);
- ok(returned == bytes, "waveOutGetPosition(%s): TICKS test failed\n",
+ ok(returned == bytes || wavemapper || returned == -1, "waveOutGetPosition(%s): TICKS test failed\n",
dev_name(device));
}
@@ -701,7 +706,7 @@
trace("*** Warning the sound is muted, you will not hear the test\n");
/* Check that the position is 0 at start */
- check_position(device, wout, 0, pwfx);
+ check_position(device, wout, 0, pwfx, (flags & WAVE_MAPPED)|(device == WAVE_MAPPER));
rc=waveOutSetVolume(wout,0x20002000);
ok(has_volume ? rc==MMSYSERR_NOERROR : rc==MMSYSERR_NOTSUPPORTED,
@@ -771,7 +776,7 @@
"WHDR_DONE WHDR_PREPARED expected, got %s\n",
wave_header_flags(frags[i].dwFlags));
}
- check_position(device, wout, length * (loops + 1), pwfx);
+ check_position(device, wout, length * (loops + 1), pwfx, (flags & WAVE_MAPPED)|(device == WAVE_MAPPER));
}
for (i = 0; i < headers; i++) {
---
Peter Åstrand ThinLinc Chief Developer
Cendio AB http://www.cendio.se
Wallenbergs gata 4
583 30 Linköping Phone: +46-13-21 46 00
More information about the wine-patches
mailing list