From: Bernhard Kölbl <bkoelbl(a)codeweavers.com> Do this by waiting for the first available frame with a separate ready event. Signed-off-by: Bernhard Kölbl <bkoelbl(a)codeweavers.com> --- dlls/mfmediaengine/tests/mfmediaengine.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/dlls/mfmediaengine/tests/mfmediaengine.c b/dlls/mfmediaengine/tests/mfmediaengine.c index aa9de414fcb..38063d1d21a 100644 --- a/dlls/mfmediaengine/tests/mfmediaengine.c +++ b/dlls/mfmediaengine/tests/mfmediaengine.c @@ -1139,7 +1139,7 @@ struct test_transfer_notify LONG refcount; IMFMediaEngineEx *media_engine; - HANDLE ready_event; + HANDLE ready_event, frame_ready_event; HRESULT error; }; @@ -1175,6 +1175,7 @@ static ULONG WINAPI test_transfer_notify_Release(IMFMediaEngineNotify *iface) if (!refcount) { + CloseHandle(notify->frame_ready_event); CloseHandle(notify->ready_event); free(notify); } @@ -1211,6 +1212,8 @@ static HRESULT WINAPI test_transfer_notify_EventNotify(IMFMediaEngineNotify *ifa notify->error = param2; /* fallthrough */ case MF_MEDIA_ENGINE_EVENT_FIRSTFRAMEREADY: + SetEvent(notify->frame_ready_event); + break; case MF_MEDIA_ENGINE_EVENT_TIMEUPDATE: SetEvent(notify->ready_event); break; @@ -1237,6 +1240,9 @@ static struct test_transfer_notify *create_transfer_notify(void) object->ready_event = CreateEventW(NULL, FALSE, FALSE, NULL); ok(!!object->ready_event, "Failed to create an event, error %lu.\n", GetLastError()); + object->frame_ready_event = CreateEventW(NULL, FALSE, FALSE, NULL); + ok(!!object->frame_ready_event, "Failed to create an event, error %lu.\n", GetLastError()); + return object; } @@ -1295,7 +1301,7 @@ static void test_TransferVideoFrame(void) SysFreeString(url); IMFByteStream_Release(stream); - res = WaitForSingleObject(notify->ready_event, 5000); + res = WaitForSingleObject(notify->frame_ready_event, 5000); ok(!res, "Unexpected res %#lx.\n", res); if (FAILED(notify->error)) @@ -1858,14 +1864,9 @@ static void test_effect(void) IMFByteStream_Release(stream); /* Wait for MediaEngine to be ready. */ - res = WaitForSingleObject(notify->ready_event, 5000); + res = WaitForSingleObject(notify->frame_ready_event, 5000); ok(!res, "Unexpected res %#lx.\n", res); - /* Wait for another update. This makes MediaEngine shutdown more consistent on Windows. */ - res = WaitForSingleObject(notify->ready_event, 500); - /* Timeupdates are missing in Wine. */ - todo_wine ok(!res, "Unexpected res %#lx.\n", res); - SetRect(&dst_rect, 0, 0, desc.Width, desc.Height); hr = IMFMediaEngineEx_TransferVideoFrame(notify->media_engine, (IUnknown *)texture, NULL, &dst_rect, NULL); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/3351