From: Conor McCarthy cmccarthy@codeweavers.com
--- dlls/mfmediaengine/main.c | 9 ++++++++- dlls/mfmediaengine/tests/mfmediaengine.c | 1 - 2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/dlls/mfmediaengine/main.c b/dlls/mfmediaengine/main.c index 3594a52bb6e..be6c3f86ed6 100644 --- a/dlls/mfmediaengine/main.c +++ b/dlls/mfmediaengine/main.c @@ -2522,6 +2522,7 @@ static HRESULT media_engine_transfer_d3d11(struct media_engine *engine, ID3D11Te ID3D11Device *device; IMFSample *sample; UINT subresource; + LONGLONG pts; HRESULT hr;
if (!src_rect) @@ -2532,7 +2533,13 @@ static HRESULT media_engine_transfer_d3d11(struct media_engine *engine, ID3D11Te color = &color_default;
if (!video_frame_sink_get_sample(engine->presentation.frame_sink, &sample)) - return MF_E_UNEXPECTED; + { + /* The app does not need to call OnVideoStreamTick() before transferring + * a frame, but we need it to get the current sample. */ + IMFMediaEngineEx_OnVideoStreamTick(&engine->IMFMediaEngineEx_iface, &pts); + if (!video_frame_sink_get_sample(engine->presentation.frame_sink, &sample)) + return MF_E_UNEXPECTED; + } hr = get_d3d11_resource_from_sample(sample, &src_texture, &subresource); IMFSample_Release(sample); if (FAILED(hr)) diff --git a/dlls/mfmediaengine/tests/mfmediaengine.c b/dlls/mfmediaengine/tests/mfmediaengine.c index 288c7e6ae23..8ea7a69b158 100644 --- a/dlls/mfmediaengine/tests/mfmediaengine.c +++ b/dlls/mfmediaengine/tests/mfmediaengine.c @@ -2018,7 +2018,6 @@ static void test_effect(void)
SetRect(&dst_rect, 0, 0, desc.Width, desc.Height); hr = IMFMediaEngineEx_TransferVideoFrame(notify->media_engine, (IUnknown *)texture, NULL, &dst_rect, NULL); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
count = test_transform_get_sample_count(video_effect);