Module: wine Branch: master Commit: 177046a137635a697830f23406d84b72b588784d URL: https://gitlab.winehq.org/wine/wine/-/commit/177046a137635a697830f23406d84b7...
Author: Rémi Bernon rbernon@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@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)))