=?UTF-8?Q?J=C3=B6rg=20H=C3=B6hle=20?=: mmdevapi/tests: Fix errors and crashes in various native configurations.
Alexandre Julliard
julliard at winehq.org
Thu Feb 9 15:21:48 CST 2012
Module: wine
Branch: master
Commit: ac8360b3bfc081d50b23e2a4b6ea68f4027c7fab
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ac8360b3bfc081d50b23e2a4b6ea68f4027c7fab
Author: Jörg Höhle <hoehle at users.sourceforge.net>
Date: Wed Jan 25 19:14:06 2012 +0100
mmdevapi/tests: Fix errors and crashes in various native configurations.
---
dlls/mmdevapi/tests/render.c | 103 ++++++++++++++++++++++++++++++++++--------
1 files changed, 84 insertions(+), 19 deletions(-)
diff --git a/dlls/mmdevapi/tests/render.c b/dlls/mmdevapi/tests/render.c
index 928d93e..df0d177 100644
--- a/dlls/mmdevapi/tests/render.c
+++ b/dlls/mmdevapi/tests/render.c
@@ -237,8 +237,8 @@ static void test_audioclient(void)
hexcl = S_OK;
hr = IAudioClient_IsFormatSupported(ac, 0xffffffff, pwfx, NULL);
- ok(hr == E_INVALIDARG ||
- hr == AUDCLNT_E_UNSUPPORTED_FORMAT,
+ ok(hr == E_INVALIDARG/*w32*/ ||
+ broken(hr == AUDCLNT_E_UNSUPPORTED_FORMAT/*w64 response from exclusive mode driver */),
"IsFormatSupported(0xffffffff) call returns %08x\n", hr);
}
@@ -250,7 +250,7 @@ static void test_audioclient(void)
hr = IAudioClient_Initialize(ac, AUDCLNT_SHAREMODE_SHARED, 0xffffffff, 5000000, 0, pwfx, NULL);
ok(hr == E_INVALIDARG, "Initialize with invalid flags returns %08x\n", hr);
- /* It seems that if length > 2s or periodicity != 0 the length is ignored and call succeeds
+ /* A period != 0 is ignored and the call succeeds.
* Since we can only initialize successfully once, skip those tests.
*/
hr = IAudioClient_Initialize(ac, AUDCLNT_SHAREMODE_SHARED, 0, 5000000, 0, NULL, NULL);
@@ -430,8 +430,9 @@ static void test_formats(AUDCLNT_SHAREMODE mode)
/* Vista returns E_INVALIDARG upon AUDCLNT_STREAMFLAGS_RATEADJUST */
hr = IAudioClient_Initialize(ac, mode, 0, 5000000, 0, &fmt, NULL);
if ((hrs == S_OK) ^ (hr == S_OK))
- trace("Initialize (%u , %ux%2ux%u) returns %08x unlike IsFormatSupported\n",
- mode, fmt.nSamplesPerSec, fmt.wBitsPerSample, fmt.nChannels, hr);
+ trace("Initialize (%s, %ux%2ux%u) returns %08x unlike IsFormatSupported\n",
+ mode == AUDCLNT_SHAREMODE_SHARED ? "shared " : "exclus.",
+ fmt.nSamplesPerSec, fmt.wBitsPerSample, fmt.nChannels, hr);
if (mode == AUDCLNT_SHAREMODE_SHARED)
ok(hrs == S_OK ? hr == S_OK : hr == AUDCLNT_E_UNSUPPORTED_FORMAT,
"Initialize(shared, %ux%2ux%u) returns %08x\n",
@@ -443,10 +444,12 @@ static void test_formats(AUDCLNT_SHAREMODE mode)
fmt.nSamplesPerSec, fmt.wBitsPerSample, fmt.nChannels, hr, hrs);
else
/* On testbot 48000x16x1 claims support, but does not Initialize.
- * Some cards Initialize 44100|48000x16x1 yet claim no support. */
+ * Some cards Initialize 44100|48000x16x1 yet claim no support;
+ * F. Gouget's w7 bots do that for 12000|96000x8|16x1|2 */
ok(hrs == S_OK ? hr == S_OK || broken(hr == AUDCLNT_E_ENDPOINT_CREATE_FAILED)
: hr == AUDCLNT_E_ENDPOINT_CREATE_FAILED || broken(hr == S_OK &&
- fmt.nChannels == 1 && pwfx->wBitsPerSample == fmt.wBitsPerSample),
+ ((fmt.nChannels == 1 && fmt.wBitsPerSample == 16) ||
+ (fmt.nSamplesPerSec == 12000 || fmt.nSamplesPerSec == 96000))),
"Initialize(exclus., %ux%2ux%u) returns %08x\n",
fmt.nSamplesPerSec, fmt.wBitsPerSample, fmt.nChannels, hr);
@@ -599,6 +602,7 @@ static void test_event(void)
{
HANDLE event;
HRESULT hr;
+ DWORD r;
IAudioClient *ac;
WAVEFORMATEX *pwfx;
@@ -627,12 +631,41 @@ static void test_event(void)
hr = IAudioClient_SetEventHandle(ac, event);
ok(hr == S_OK, "SetEventHandle failed: %08x\n", hr);
+ hr = IAudioClient_SetEventHandle(ac, event);
+ todo_wine ok(hr == HRESULT_FROM_WIN32(ERROR_INVALID_NAME), "SetEventHandle returns %08x\n", hr);
+
+ r = WaitForSingleObject(event, 40);
+ ok(r == WAIT_TIMEOUT, "Wait(event) before Start gave %x\n", r);
+
hr = IAudioClient_Start(ac);
ok(hr == S_OK, "Start failed: %08x\n", hr);
+ r = WaitForSingleObject(event, 20);
+ ok(r == WAIT_OBJECT_0, "Wait(event) after Start gave %x\n", r);
+
hr = IAudioClient_Stop(ac);
ok(hr == S_OK, "Stop failed: %08x\n", hr);
+ ok(ResetEvent(event), "ResetEvent\n");
+
+ /* Still receiving events! */
+ r = WaitForSingleObject(event, 20);
+ todo_wine ok(r == WAIT_OBJECT_0, "Wait(event) after Stop gave %x\n", r);
+
+ hr = IAudioClient_Reset(ac);
+ ok(hr == S_OK, "Reset failed: %08x\n", hr);
+
+ ok(ResetEvent(event), "ResetEvent\n");
+
+ r = WaitForSingleObject(event, 120);
+ todo_wine ok(r == WAIT_OBJECT_0, "Wait(event) after Reset gave %x\n", r);
+
+ hr = IAudioClient_SetEventHandle(ac, NULL);
+ ok(hr == E_INVALIDARG, "SetEventHandle(NULL) returns %08x\n", hr);
+
+ r = WaitForSingleObject(event, 70);
+ todo_wine ok(r == WAIT_OBJECT_0, "Wait(NULL event) gave %x\n", r);
+
/* test releasing a playing stream */
hr = IAudioClient_Start(ac);
ok(hr == S_OK, "Start failed: %08x\n", hr);
@@ -889,14 +922,17 @@ static void test_session(void)
0, 5000000, 0, pwfx, &ses1_guid);
ok(hr == S_OK, "Initialize failed: %08x\n", hr);
- hr = IMMDevice_Activate(dev, &IID_IAudioClient, CLSCTX_INPROC_SERVER,
- NULL, (void**)&ses1_ac2);
- ok(hr == S_OK, "Activation failed with %08x\n", hr);
- if(FAILED(hr)){
+ if(hr == S_OK){
+ hr = IMMDevice_Activate(dev, &IID_IAudioClient, CLSCTX_INPROC_SERVER,
+ NULL, (void**)&ses1_ac2);
+ ok(hr == S_OK, "Activation failed with %08x\n", hr);
+ }
+ if(hr != S_OK){
skip("Unable to open the same device twice. Skipping session tests\n");
ref = IAudioClient_Release(ses1_ac1);
ok(ref == 0, "AudioClient wasn't released: %u\n", ref);
+ CoTaskMemFree(pwfx);
return;
}
@@ -1076,8 +1112,15 @@ static void test_streamvolume(void)
0, fmt, NULL);
ok(hr == S_OK, "Initialize failed: %08x\n", hr);
- hr = IAudioClient_GetService(ac, &IID_IAudioStreamVolume, (void**)&asv);
- ok(hr == S_OK, "GetService failed: %08x\n", hr);
+ if(hr == S_OK){
+ hr = IAudioClient_GetService(ac, &IID_IAudioStreamVolume, (void**)&asv);
+ ok(hr == S_OK, "GetService failed: %08x\n", hr);
+ }
+ if(hr != S_OK){
+ IAudioClient_Release(ac);
+ CoTaskMemFree(fmt);
+ return;
+ }
hr = IAudioStreamVolume_GetChannelCount(asv, NULL);
ok(hr == E_POINTER, "GetChannelCount gave wrong error: %08x\n", hr);
@@ -1173,8 +1216,15 @@ static void test_channelvolume(void)
AUDCLNT_STREAMFLAGS_NOPERSIST, 5000000, 0, fmt, NULL);
ok(hr == S_OK, "Initialize failed: %08x\n", hr);
- hr = IAudioClient_GetService(ac, &IID_IChannelAudioVolume, (void**)&acv);
- ok(hr == S_OK, "GetService failed: %08x\n", hr);
+ if(hr == S_OK){
+ hr = IAudioClient_GetService(ac, &IID_IChannelAudioVolume, (void**)&acv);
+ ok(hr == S_OK, "GetService failed: %08x\n", hr);
+ }
+ if(hr != S_OK){
+ IAudioClient_Release(ac);
+ CoTaskMemFree(fmt);
+ return;
+ }
hr = IChannelAudioVolume_GetChannelCount(acv, NULL);
ok(hr == NULL_PTR_ERR, "GetChannelCount gave wrong error: %08x\n", hr);
@@ -1273,8 +1323,15 @@ static void test_simplevolume(void)
AUDCLNT_STREAMFLAGS_NOPERSIST, 5000000, 0, fmt, NULL);
ok(hr == S_OK, "Initialize failed: %08x\n", hr);
- hr = IAudioClient_GetService(ac, &IID_ISimpleAudioVolume, (void**)&sav);
- ok(hr == S_OK, "GetService failed: %08x\n", hr);
+ if(hr == S_OK){
+ hr = IAudioClient_GetService(ac, &IID_ISimpleAudioVolume, (void**)&sav);
+ ok(hr == S_OK, "GetService failed: %08x\n", hr);
+ }
+ if(hr != S_OK){
+ IAudioClient_Release(ac);
+ CoTaskMemFree(fmt);
+ return;
+ }
hr = ISimpleAudioVolume_GetMasterVolume(sav, NULL);
ok(hr == NULL_PTR_ERR, "GetMasterVolume gave wrong error: %08x\n", hr);
@@ -1360,8 +1417,15 @@ static void test_volume_dependence(void)
AUDCLNT_STREAMFLAGS_NOPERSIST, 5000000, 0, fmt, &session);
ok(hr == S_OK, "Initialize failed: %08x\n", hr);
- hr = IAudioClient_GetService(ac, &IID_ISimpleAudioVolume, (void**)&sav);
- ok(hr == S_OK, "GetService (SimpleAudioVolume) failed: %08x\n", hr);
+ if(hr == S_OK){
+ hr = IAudioClient_GetService(ac, &IID_ISimpleAudioVolume, (void**)&sav);
+ ok(hr == S_OK, "GetService (SimpleAudioVolume) failed: %08x\n", hr);
+ }
+ if(hr != S_OK){
+ IAudioClient_Release(ac);
+ CoTaskMemFree(fmt);
+ return;
+ }
hr = IAudioClient_GetService(ac, &IID_IChannelAudioVolume, (void**)&cav);
ok(hr == S_OK, "GetService (ChannelAudioVolme) failed: %08x\n", hr);
@@ -1678,6 +1742,7 @@ static void test_worst_case(void)
CoTaskMemFree(pwfx);
IAudioClient_Release(ac);
+ IAudioClock_Release(acl);
IAudioRenderClient_Release(arc);
}
More information about the wine-cvs
mailing list