Otherwise pipelines fail to resolve when media source outputs compressed samples and applications have inserted optional effects (such as VRChat with AVPro player).
Note that the topology loader doesn't currently support MF_CONNECT_AS_OPTIONAL, although the connection succeeds in the the cases I've seen.
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/mfmediaengine/main.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/dlls/mfmediaengine/main.c b/dlls/mfmediaengine/main.c index 444c6f1bb65..026b825a7a5 100644 --- a/dlls/mfmediaengine/main.c +++ b/dlls/mfmediaengine/main.c @@ -1060,6 +1060,7 @@ static HRESULT media_engine_create_effects(struct effect *effects, size_t count,
for (i = 0; i < count; ++i) { + UINT32 method = MF_CONNECT_ALLOW_DECODER; IMFTopologyNode *node = NULL;
if (FAILED(hr = MFCreateTopologyNode(MF_TOPOLOGY_TRANSFORM_NODE, &node))) @@ -1072,7 +1073,8 @@ static HRESULT media_engine_create_effects(struct effect *effects, size_t count, IMFTopologyNode_SetUINT32(node, &MF_TOPONODE_NOSHUTDOWN_ON_REMOVE, FALSE);
if (effects[i].optional) - IMFTopologyNode_SetUINT32(node, &MF_TOPONODE_CONNECT_METHOD, MF_CONNECT_AS_OPTIONAL); + method |= MF_CONNECT_AS_OPTIONAL; + IMFTopologyNode_SetUINT32(node, &MF_TOPONODE_CONNECT_METHOD, method);
IMFTopology_AddNode(topology, node); IMFTopologyNode_ConnectOutput(last, 0, node, 0);
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=144664
Your paranoid android.
=== debian11b (64 bit WoW report) ===
user32: input.c:3875: Test succeeded inside todo block: button_down_hwnd_todo 1: got MSG_TEST_WIN hwnd 0000000001DC00E4, msg WM_LBUTTONDOWN, wparam 0x1, lparam 0x320032
Yes, this makes sense. But should it allow decoder-converter connections between effects? My understanding is that currently we do "source -> effect0 ... -> effectN -> sink", that gets resolved to whatever the loader thinks is best, but don't allow nodes before any 'effect*' node, not just the first one.