Rémi Bernon : mf: Use topology_node_get_type_handler in MFGetTopoNodeCurrentType.

Alexandre Julliard julliard at winehq.org
Tue Jul 12 16:45:37 CDT 2022


Module: wine
Branch: master
Commit: 177046a137635a697830f23406d84b72b588784d
URL:    https://gitlab.winehq.org/wine/wine/-/commit/177046a137635a697830f23406d84b72b588784d

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Fri Jul  8 11:24:28 2022 +0200

mf: Use topology_node_get_type_handler in MFGetTopoNodeCurrentType.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>

---

 dlls/mf/topology.c | 59 +++++++++++++++++-------------------------------------
 1 file changed, 18 insertions(+), 41 deletions(-)

diff --git a/dlls/mf/topology.c b/dlls/mf/topology.c
index 29f34445bc5..e158ba1fc82 100644
--- a/dlls/mf/topology.c
+++ b/dlls/mf/topology.c
@@ -1820,7 +1820,8 @@ HRESULT WINAPI MFCreateTopologyNode(MF_TOPOLOGY_TYPE node_type, IMFTopologyNode
     return hr;
 }
 
-static HRESULT topology_node_get_type_handler(IMFTopologyNode *node, IMFMediaTypeHandler **handler)
+static HRESULT topology_node_get_type_handler(IMFTopologyNode *node, DWORD stream,
+        BOOL output, IMFMediaTypeHandler **handler)
 {
     MF_TOPOLOGY_TYPE node_type;
     IMFStreamSink *stream_sink;
@@ -1833,6 +1834,9 @@ static HRESULT topology_node_get_type_handler(IMFTopologyNode *node, IMFMediaTyp
     switch (node_type)
     {
         case MF_TOPOLOGY_OUTPUT_NODE:
+            if (output || stream)
+                return MF_E_INVALIDSTREAMNUMBER;
+
             if (SUCCEEDED(hr = topology_node_get_object(node, &IID_IMFStreamSink, (void **)&stream_sink)))
             {
                 hr = IMFStreamSink_GetMediaTypeHandler(stream_sink, handler);
@@ -1840,6 +1844,9 @@ static HRESULT topology_node_get_type_handler(IMFTopologyNode *node, IMFMediaTyp
             }
             break;
         case MF_TOPOLOGY_SOURCESTREAM_NODE:
+            if (!output || stream)
+                return MF_E_INVALIDSTREAMNUMBER;
+
             if (SUCCEEDED(hr = IMFTopologyNode_GetUnknown(node, &MF_TOPONODE_STREAM_DESCRIPTOR,
                     &IID_IMFStreamDescriptor, (void **)&sd)))
             {
@@ -1860,10 +1867,8 @@ static HRESULT topology_node_get_type_handler(IMFTopologyNode *node, IMFMediaTyp
  */
 HRESULT WINAPI MFGetTopoNodeCurrentType(IMFTopologyNode *node, DWORD stream, BOOL output, IMFMediaType **type)
 {
-    IMFMediaTypeHandler *type_handler;
+    IMFMediaTypeHandler *handler;
     MF_TOPOLOGY_TYPE node_type;
-    IMFStreamSink *stream_sink;
-    IMFStreamDescriptor *sd;
     IMFTransform *transform;
     UINT32 primary_output;
     HRESULT hr;
@@ -1873,42 +1878,15 @@ HRESULT WINAPI MFGetTopoNodeCurrentType(IMFTopologyNode *node, DWORD stream, BOO
     if (FAILED(hr = IMFTopologyNode_GetNodeType(node, &node_type)))
         return hr;
 
-    switch (node_type)
+    if (SUCCEEDED(hr = topology_node_get_type_handler(node, stream, output, &handler)))
     {
-        case MF_TOPOLOGY_OUTPUT_NODE:
-            if (output || stream)
-                return MF_E_INVALIDSTREAMNUMBER;
-
-            if (SUCCEEDED(hr = topology_node_get_object(node, &IID_IMFStreamSink, (void **)&stream_sink)))
-            {
-                hr = IMFStreamSink_GetMediaTypeHandler(stream_sink, &type_handler);
-                IMFStreamSink_Release(stream_sink);
-
-                if (SUCCEEDED(hr))
-                {
-                    hr = IMFMediaTypeHandler_GetCurrentMediaType(type_handler, type);
-                    IMFMediaTypeHandler_Release(type_handler);
-                }
-            }
-            break;
-        case MF_TOPOLOGY_SOURCESTREAM_NODE:
-            if (!output || stream)
-                return MF_E_INVALIDSTREAMNUMBER;
-
-            if (FAILED(hr = IMFTopologyNode_GetUnknown(node, &MF_TOPONODE_STREAM_DESCRIPTOR, &IID_IMFStreamDescriptor,
-                    (void **)&sd)))
-            {
-                return hr;
-            }
+        hr = IMFMediaTypeHandler_GetCurrentMediaType(handler, type);
+        IMFMediaTypeHandler_Release(handler);
+        return hr;
+    }
 
-            hr = IMFStreamDescriptor_GetMediaTypeHandler(sd, &type_handler);
-            IMFStreamDescriptor_Release(sd);
-            if (SUCCEEDED(hr))
-            {
-                hr = IMFMediaTypeHandler_GetCurrentMediaType(type_handler, type);
-                IMFMediaTypeHandler_Release(type_handler);
-            }
-            break;
+    switch (node_type)
+    {
         case MF_TOPOLOGY_TRANSFORM_NODE:
             if (SUCCEEDED(hr = topology_node_get_object(node, &IID_IMFTransform, (void **)&transform)))
             {
@@ -2291,10 +2269,9 @@ static HRESULT topology_loader_connect_source_to_sink(struct topoloader_context
 
     TRACE("attempting to connect %p:%u to %p:%u\n", source, output_index, sink, input_index);
 
-    if (FAILED(hr = topology_node_get_type_handler(source, &source_handler)))
+    if (FAILED(hr = topology_node_get_type_handler(source, output_index, TRUE, &source_handler)))
         goto done;
-
-    if (FAILED(hr = topology_node_get_type_handler(sink, &sink_handler)))
+    if (FAILED(hr = topology_node_get_type_handler(sink, input_index, FALSE, &sink_handler)))
         goto done;
 
     if (FAILED(IMFTopologyNode_GetUINT32(source, &MF_TOPONODE_CONNECT_METHOD, &source_method)))




More information about the wine-cvs mailing list