[PATCH 08/10] mf: Introduce topology_loader_connect_transform() to handle connections of transform nodes in _Load().

Sergio Gómez Del Real sdelreal at codeweavers.com
Sun Jun 14 20:41:56 CDT 2020


Signed-off-by: Sergio Gómez Del Real <sdelreal at codeweavers.com>
---
 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




More information about the wine-devel mailing list