From: Conor McCarthy <cmccarthy@codeweavers.com> Unless MF_TOPOLOGY_ENABLE_XVP_FOR_PLAYBACK is set. --- dlls/mf/tests/topology.c | 2 -- dlls/mf/topology_loader.c | 11 +++++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/dlls/mf/tests/topology.c b/dlls/mf/tests/topology.c index eb029e3449e..6d433b3e1c2 100644 --- a/dlls/mf/tests/topology.c +++ b/dlls/mf/tests/topology.c @@ -3292,13 +3292,11 @@ todo_wine { hr = IMFTopologyNode_GetGUID(mft_node, &MF_TOPONODE_TRANSFORM_OBJECTID, &class_id); if (test->flags & LOADER_SET_XVP_FOR_PLAYBACK) { - todo_wine ok(hr == MF_E_ATTRIBUTENOTFOUND, "Got attribute hr %#lx.\n", hr); } else { ok(hr == S_OK, "Failed to get attribute, hr %#lx.\n", hr); - todo_wine_if(IsEqualGUID(&test->converter_class, &CLSID_CColorConvertDMO)) ok(IsEqualGUID(&class_id, &test->converter_class), "got MF_TOPONODE_TRANSFORM_OBJECTID %s.\n", debugstr_guid(&class_id)); } diff --git a/dlls/mf/topology_loader.c b/dlls/mf/topology_loader.c index 85d6104a688..9cf4ee0b28c 100644 --- a/dlls/mf/topology_loader.c +++ b/dlls/mf/topology_loader.c @@ -464,6 +464,7 @@ static HRESULT topology_branch_connect_indirect(IMFTopology *topology, BOOL deco IMFTopologyNode *node; unsigned int i, count; GUID category, guid; + UINT32 enable_xvp; HRESULT hr; TRACE("topology %p, decoder %u, branch %s, upstream %s.\n", topology, decoder, @@ -474,10 +475,15 @@ static HRESULT topology_branch_connect_indirect(IMFTopology *topology, BOOL deco if (FAILED(hr = IMFMediaType_GetGUID(upstream, &MF_MT_SUBTYPE, &input_info.guidSubtype))) return hr; + if (FAILED(IMFTopology_GetUINT32(topology, &MF_TOPOLOGY_ENABLE_XVP_FOR_PLAYBACK, &enable_xvp))) + enable_xvp = 0; + if (IsEqualGUID(&input_info.guidMajorType, &MFMediaType_Audio)) category = decoder ? MFT_CATEGORY_AUDIO_DECODER : MFT_CATEGORY_AUDIO_EFFECT; else if (IsEqualGUID(&input_info.guidMajorType, &MFMediaType_Video)) - category = decoder ? MFT_CATEGORY_VIDEO_DECODER : MFT_CATEGORY_VIDEO_PROCESSOR; + category = decoder ? MFT_CATEGORY_VIDEO_DECODER + : enable_xvp ? MFT_CATEGORY_VIDEO_PROCESSOR + : MFT_CATEGORY_VIDEO_EFFECT; else return MF_E_INVALIDMEDIATYPE; @@ -503,7 +509,8 @@ static HRESULT topology_branch_connect_indirect(IMFTopology *topology, BOOL deco continue; IMFTopologyNode_SetObject(node, (IUnknown *)transform); IMFTopologyNode_DeleteItem(node, &MF_TOPONODE_TRANSFORM_OBJECTID); - if (SUCCEEDED(IMFActivate_GetGUID(activates[i], &MFT_TRANSFORM_CLSID_Attribute, &guid))) + if (SUCCEEDED(IMFActivate_GetGUID(activates[i], &MFT_TRANSFORM_CLSID_Attribute, &guid)) + && !IsEqualGUID(&guid, &CLSID_VideoProcessorMFT)) IMFTopologyNode_SetGUID(node, &MF_TOPONODE_TRANSFORM_OBJECTID, &guid); IMFTransform_Release(transform); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10596