From: Conor McCarthy cmccarthy@codeweavers.com
The need to call media_engine_render_d3d11 becomes fully known in media_engine_transfer_d3d11(), so it makes sense to call it only from there.
Both of these functions call media_engine_lock_d3d_device(), therefore the null check of device_manager has no effect, so this commit removes it.
This change reveals a failure in test_effect() which previously was silent (nothing is transferred but no error was returned). --- dlls/mfmediaengine/main.c | 10 ++++++---- dlls/mfmediaengine/tests/mfmediaengine.c | 1 + 2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/dlls/mfmediaengine/main.c b/dlls/mfmediaengine/main.c index dd239962bae..dc6857a38ca 100644 --- a/dlls/mfmediaengine/main.c +++ b/dlls/mfmediaengine/main.c @@ -2495,6 +2495,9 @@ static HRESULT get_d3d11_resource_from_sample(IMFSample *sample, ID3D11Texture2D return hr; }
+static HRESULT media_engine_render_d3d11(struct media_engine *engine, ID3D11Texture2D *texture, + const MFVideoNormalizedRect *src_rect, const RECT *dst_rect, const MFARGB *color); + static HRESULT media_engine_transfer_d3d11(struct media_engine *engine, ID3D11Texture2D *dst_texture, const MFVideoNormalizedRect *src_rect, const RECT *dst_rect, const MFARGB *color) { @@ -2522,7 +2525,7 @@ static HRESULT media_engine_transfer_d3d11(struct media_engine *engine, ID3D11Te hr = get_d3d11_resource_from_sample(sample, &src_texture, &subresource); IMFSample_Release(sample); if (FAILED(hr)) - return hr; + return media_engine_render_d3d11(engine, dst_texture, src_rect, dst_rect, color);
ID3D11Texture2D_GetDesc(src_texture, &src_desc); ID3D11Texture2D_GetDesc(dst_texture, &dst_desc); @@ -2538,7 +2541,7 @@ static HRESULT media_engine_transfer_d3d11(struct media_engine *engine, ID3D11Te dst_rect->top + src_box.bottom - src_box.top > dst_desc.Height) { ID3D11Texture2D_Release(src_texture); - return MF_E_UNEXPECTED; + return media_engine_render_d3d11(engine, dst_texture, src_rect, dst_rect, color); }
if (FAILED(hr = media_engine_lock_d3d_device(engine, &device))) @@ -2722,8 +2725,7 @@ static HRESULT WINAPI media_engine_TransferVideoFrame(IMFMediaEngineEx *iface, I
if (SUCCEEDED(IUnknown_QueryInterface(surface, &IID_ID3D11Texture2D, (void **)&texture))) { - if (!engine->device_manager || FAILED(hr = media_engine_transfer_d3d11(engine, texture, src_rect, dst_rect, color))) - hr = media_engine_render_d3d11(engine, texture, src_rect, dst_rect, color); + hr = media_engine_transfer_d3d11(engine, texture, src_rect, dst_rect, color); ID3D11Texture2D_Release(texture); } else diff --git a/dlls/mfmediaengine/tests/mfmediaengine.c b/dlls/mfmediaengine/tests/mfmediaengine.c index 51b472535b5..1757abeee35 100644 --- a/dlls/mfmediaengine/tests/mfmediaengine.c +++ b/dlls/mfmediaengine/tests/mfmediaengine.c @@ -2114,6 +2114,7 @@ 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);