wmvcore/tests: Test OnTime callback events synchronously.

This commit is contained in:
Rémi Bernon 2022-11-28 11:18:00 +01:00 committed by Alexandre Julliard
parent ce64755578
commit 31a08b84ce

View file

@ -1834,9 +1834,8 @@ struct callback
struct teststream *stream;
QWORD last_pts;
QWORD expect_ontime;
HANDLE ontime_event;
QWORD expect_time;
HANDLE expect_ontime, got_ontime;
};
static struct callback *impl_from_IWMReaderCallback(IWMReaderCallback *iface)
@ -2148,6 +2147,7 @@ static HRESULT WINAPI callback_advanced_OnStreamSample(IWMReaderCallbackAdvanced
static HRESULT WINAPI callback_advanced_OnTime(IWMReaderCallbackAdvanced *iface, QWORD time, void *context)
{
struct callback *callback = impl_from_IWMReaderCallbackAdvanced(iface);
DWORD ret;
if (winetest_debug > 1)
trace("%lu: %04lx: IWMReaderCallbackAdvanced::OnTime(time %I64u)\n",
@ -2155,9 +2155,11 @@ static HRESULT WINAPI callback_advanced_OnTime(IWMReaderCallbackAdvanced *iface,
ok(callback->callback_tid == GetCurrentThreadId(), "got wrong thread\n");
ok(time == callback->expect_ontime, "Got time %I64u.\n", time);
ok(time == callback->expect_time, "Got time %I64u.\n", time);
ok(context == (void *)callback->expect_context, "Got unexpected context %p.\n", context);
SetEvent(callback->ontime_event);
ret = WaitForSingleObject(callback->expect_ontime, 100);
ok(!ret, "Wait timed out.\n");
SetEvent(callback->got_ontime);
return S_OK;
}
@ -2379,7 +2381,8 @@ static void callback_init(struct callback *callback, struct teststream *stream)
callback->got_stopped = CreateEventW(NULL, FALSE, FALSE, NULL);
callback->expect_eof = CreateEventW(NULL, FALSE, FALSE, NULL);
callback->got_eof = CreateEventW(NULL, FALSE, FALSE, NULL);
callback->ontime_event = CreateEventW(NULL, FALSE, FALSE, NULL);
callback->expect_ontime = CreateEventW(NULL, FALSE, FALSE, NULL);
callback->got_ontime = CreateEventW(NULL, FALSE, FALSE, NULL);
callback->stream = stream;
}
@ -2393,7 +2396,8 @@ static void callback_cleanup(struct callback *callback)
CloseHandle(callback->expect_stopped);
CloseHandle(callback->got_eof);
CloseHandle(callback->expect_eof);
CloseHandle(callback->ontime_event);
CloseHandle(callback->got_ontime);
CloseHandle(callback->expect_ontime);
}
#define wait_opened_callback(a) wait_opened_callback_(__LINE__, a)
@ -2445,6 +2449,18 @@ static void wait_eof_callback_(int line, struct callback *callback)
ok_(__FILE__, line)(callback->eof_count == 1, "Got %u WMT_EOF callbacks.\n", callback->eof_count);
}
#define wait_ontime_callback(a) wait_ontime_callback_(__LINE__, a)
static void wait_ontime_callback_(int line, struct callback *callback)
{
DWORD ret;
ret = WaitForSingleObject(callback->got_ontime, 0);
ok_(__FILE__, line)(ret == WAIT_TIMEOUT, "Got unexpected OnTime.\n");
SetEvent(callback->expect_ontime);
ret = WaitForSingleObject(callback->got_ontime, 1000);
ok_(__FILE__, line)(!ret, "Wait timed out.\n");
}
static void check_async_get_output_setting(IWMReaderAdvanced2 *reader, DWORD output, const WCHAR *name,
WMT_ATTR_DATATYPE expect_type, DWORD expect_value, HRESULT expect_hr)
{
@ -2546,8 +2562,8 @@ static void run_async_reader(IWMReader *reader, IWMReaderAdvanced2 *advanced, st
ok(hr == S_OK, "Got hr %#lx.\n", hr);
hr = IWMReaderAdvanced2_DeliverTime(advanced, test_wmv_duration * 2);
ok(hr == S_OK, "Got hr %#lx.\n", hr);
wait_eof_callback(callback);
wait_ontime_callback(callback);
hr = IWMReader_Stop(reader);
ok(hr == S_OK, "Got hr %#lx.\n", hr);
@ -3054,24 +3070,19 @@ static void test_async_reader_streaming(void)
ok(hr == E_UNEXPECTED, "Got hr %#lx.\n", hr);
hr = IWMReaderAdvanced2_SetUserProvidedClock(advanced, TRUE);
ok(hr == S_OK, "Got hr %#lx.\n", hr);
callback.expect_ontime = 0;
callback.expect_time = 0;
hr = IWMReaderAdvanced2_DeliverTime(advanced, 0);
ok(hr == S_OK, "Got hr %#lx.\n", hr);
ret = WaitForSingleObject(callback.ontime_event, 1000);
ok(!ret, "Wait timed out.\n");
callback.expect_ontime = test_wmv_duration / 2;
wait_ontime_callback(&callback);
callback.expect_time = test_wmv_duration / 2;
hr = IWMReaderAdvanced2_DeliverTime(advanced, test_wmv_duration / 2);
ok(hr == S_OK, "Got hr %#lx.\n", hr);
ret = WaitForSingleObject(callback.ontime_event, 1000);
ok(!ret, "Wait timed out.\n");
callback.expect_ontime = test_wmv_duration * 2;
wait_ontime_callback(&callback);
callback.expect_time = test_wmv_duration * 2;
hr = IWMReaderAdvanced2_DeliverTime(advanced, test_wmv_duration * 2);
ok(hr == S_OK, "Got hr %#lx.\n", hr);
wait_eof_callback(&callback);
ret = WaitForSingleObject(callback.ontime_event, 1000);
ok(!ret, "Wait timed out.\n");
wait_ontime_callback(&callback);
hr = IWMReader_Start(reader, 0, 0, 1.0f, (void *)NULL);
ok(hr == S_OK, "Got hr %#lx.\n", hr);
@ -3079,8 +3090,8 @@ static void test_async_reader_streaming(void)
hr = IWMReaderAdvanced2_DeliverTime(advanced, test_wmv_duration * 2);
ok(hr == S_OK, "Got hr %#lx.\n", hr);
wait_eof_callback(&callback);
wait_ontime_callback(&callback);
hr = IWMReader_Stop(reader);
ok(hr == S_OK, "Got hr %#lx.\n", hr);