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 bb4ae5d61a3..b621b66dacd 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;
ID3D11Texture2D_GetDesc(dst_texture, &dst_desc); @@ -2538,7 +2539,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 d98d482e4a0..108065bf1d7 100644 --- a/dlls/mfmediaengine/tests/mfmediaengine.c +++ b/dlls/mfmediaengine/tests/mfmediaengine.c @@ -2105,7 +2105,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);