mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-15 23:07:17 +00:00
mf: Use topology_node_get_type_handler in MFGetTopoNodeCurrentType.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
This commit is contained in:
parent
6c2b8fd3a4
commit
177046a137
|
@ -1820,7 +1820,8 @@ HRESULT WINAPI MFCreateTopologyNode(MF_TOPOLOGY_TYPE node_type, IMFTopologyNode
|
||||||
return hr;
|
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;
|
MF_TOPOLOGY_TYPE node_type;
|
||||||
IMFStreamSink *stream_sink;
|
IMFStreamSink *stream_sink;
|
||||||
|
@ -1833,6 +1834,9 @@ static HRESULT topology_node_get_type_handler(IMFTopologyNode *node, IMFMediaTyp
|
||||||
switch (node_type)
|
switch (node_type)
|
||||||
{
|
{
|
||||||
case MF_TOPOLOGY_OUTPUT_NODE:
|
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)))
|
if (SUCCEEDED(hr = topology_node_get_object(node, &IID_IMFStreamSink, (void **)&stream_sink)))
|
||||||
{
|
{
|
||||||
hr = IMFStreamSink_GetMediaTypeHandler(stream_sink, handler);
|
hr = IMFStreamSink_GetMediaTypeHandler(stream_sink, handler);
|
||||||
|
@ -1840,6 +1844,9 @@ static HRESULT topology_node_get_type_handler(IMFTopologyNode *node, IMFMediaTyp
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MF_TOPOLOGY_SOURCESTREAM_NODE:
|
case MF_TOPOLOGY_SOURCESTREAM_NODE:
|
||||||
|
if (!output || stream)
|
||||||
|
return MF_E_INVALIDSTREAMNUMBER;
|
||||||
|
|
||||||
if (SUCCEEDED(hr = IMFTopologyNode_GetUnknown(node, &MF_TOPONODE_STREAM_DESCRIPTOR,
|
if (SUCCEEDED(hr = IMFTopologyNode_GetUnknown(node, &MF_TOPONODE_STREAM_DESCRIPTOR,
|
||||||
&IID_IMFStreamDescriptor, (void **)&sd)))
|
&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)
|
HRESULT WINAPI MFGetTopoNodeCurrentType(IMFTopologyNode *node, DWORD stream, BOOL output, IMFMediaType **type)
|
||||||
{
|
{
|
||||||
IMFMediaTypeHandler *type_handler;
|
IMFMediaTypeHandler *handler;
|
||||||
MF_TOPOLOGY_TYPE node_type;
|
MF_TOPOLOGY_TYPE node_type;
|
||||||
IMFStreamSink *stream_sink;
|
|
||||||
IMFStreamDescriptor *sd;
|
|
||||||
IMFTransform *transform;
|
IMFTransform *transform;
|
||||||
UINT32 primary_output;
|
UINT32 primary_output;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
@ -1873,42 +1878,15 @@ HRESULT WINAPI MFGetTopoNodeCurrentType(IMFTopologyNode *node, DWORD stream, BOO
|
||||||
if (FAILED(hr = IMFTopologyNode_GetNodeType(node, &node_type)))
|
if (FAILED(hr = IMFTopologyNode_GetNodeType(node, &node_type)))
|
||||||
return hr;
|
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)
|
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:
|
case MF_TOPOLOGY_TRANSFORM_NODE:
|
||||||
if (SUCCEEDED(hr = topology_node_get_object(node, &IID_IMFTransform, (void **)&transform)))
|
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);
|
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;
|
goto done;
|
||||||
|
if (FAILED(hr = topology_node_get_type_handler(sink, input_index, FALSE, &sink_handler)))
|
||||||
if (FAILED(hr = topology_node_get_type_handler(sink, &sink_handler)))
|
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
if (FAILED(IMFTopologyNode_GetUINT32(source, &MF_TOPONODE_CONNECT_METHOD, &source_method)))
|
if (FAILED(IMFTopologyNode_GetUINT32(source, &MF_TOPONODE_CONNECT_METHOD, &source_method)))
|
||||||
|
|
Loading…
Reference in a new issue