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