From 177046a137635a697830f23406d84b72b588784d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Fri, 8 Jul 2022 11:24:28 +0200 Subject: [PATCH] mf: Use topology_node_get_type_handler in MFGetTopoNodeCurrentType. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: RĂ©mi Bernon --- 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; + if (SUCCEEDED(hr = topology_node_get_type_handler(node, stream, output, &handler))) + { + hr = IMFMediaTypeHandler_GetCurrentMediaType(handler, type); + IMFMediaTypeHandler_Release(handler); + return hr; + } + 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, &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 = IMFStreamDescriptor_GetMediaTypeHandler(sd, &type_handler); - IMFStreamDescriptor_Release(sd); - if (SUCCEEDED(hr)) - { - hr = IMFMediaTypeHandler_GetCurrentMediaType(type_handler, type); - IMFMediaTypeHandler_Release(type_handler); - } - break; 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)))