From: "Sergio Gómez Del Real" Subject: [PATCH 08/10] mf: Introduce topology_loader_connect_transform() to handle connections of transform nodes in _Load(). Message-Id: <20200615014158.6836-8-sdelreal@codeweavers.com> Date: Sun, 14 Jun 2020 20:41:56 -0500 In-Reply-To: <20200615014158.6836-1-sdelreal@codeweavers.com> References: <20200615014158.6836-1-sdelreal@codeweavers.com> Signed-off-by: Sergio Gómez Del Real --- dlls/mf/topology.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/dlls/mf/topology.c b/dlls/mf/topology.c index e38035ddd2..bb8b9de267 100644 --- a/dlls/mf/topology.c +++ b/dlls/mf/topology.c @@ -2108,6 +2108,34 @@ out: return hr; } +static HRESULT topology_loader_connect_transform(struct topoloader_context *context, IMFTopologyNode *transform_node, unsigned int output_index, + IMFTopologyNode *downstream_node, unsigned int input_index) +{ + UINT32 method = MF_CONNECT_ALLOW_DECODER; + IMFTransform *transform; + IMFMediaType *mediatype; + HRESULT hr; + int i; + + IMFTopologyNode_GetObject(transform_node, (IUnknown **)&transform); + + IMFTopologyNode_GetUINT32(downstream_node, &MF_TOPONODE_CONNECT_METHOD, &method); + + i = 0; + while (SUCCEEDED(hr = IMFTransform_GetOutputAvailableType(transform, output_index, i++, &mediatype))) + { + hr = S_OK; + + IMFMediaType_Release(mediatype); + + if (SUCCEEDED(hr)) + break; + } + + IMFTransform_Release(transform); + return hr; +} + static HRESULT topology_loader_resolve_nodes(struct topoloader_context *context) { IMFTopologyNode *node, *downstream_node, *orig_node, *orig_downstream_node; @@ -2137,7 +2165,7 @@ static HRESULT topology_loader_resolve_nodes(struct topoloader_context *context) hr = topology_loader_connect_source(context, node, downstream_node, input_index); break; case MF_TOPOLOGY_TRANSFORM_NODE: - hr = S_OK; + hr = topology_loader_connect_transform(context, node, i, downstream_node, input_index); break; case MF_TOPOLOGY_TEE_NODE: FIXME("Tee node unsupported.\n"); -- 2.17.1