[v2 03/10] mf: Add topoloader_context structure for use in _Load().
Sergio Gómez Del Real
sdelreal at codeweavers.com
Sun Jul 5 09:16:08 CDT 2020
Signed-off-by: Sergio Gómez Del Real <sdelreal at codeweavers.com>
---
dlls/mf/topology.c | 23 ++++++++++++++++++++---
1 file changed, 20 insertions(+), 3 deletions(-)
diff --git a/dlls/mf/topology.c b/dlls/mf/topology.c
index 3090ba9bce..70b9f4962c 100644
--- a/dlls/mf/topology.c
+++ b/dlls/mf/topology.c
@@ -1935,9 +1935,18 @@ static ULONG WINAPI topology_loader_Release(IMFTopoLoader *iface)
return refcount;
}
+struct topoloader_context
+{
+ IMFTopology *input_topology;
+ IMFTopology *output_topology;
+ GUID key;
+ unsigned int marker;
+};
+
static HRESULT WINAPI topology_loader_Load(IMFTopoLoader *iface, IMFTopology *input_topology,
IMFTopology **output_topology, IMFTopology *current_topology)
{
+ struct topoloader_context context = { 0 };
MF_TOPOLOGY_TYPE node_type;
IMFTopologyNode *node;
IMFStreamSink *sink;
@@ -1952,13 +1961,16 @@ static HRESULT WINAPI topology_loader_Load(IMFTopoLoader *iface, IMFTopology *in
FIXME("Current topology instance is ignored.\n");
if (FAILED(IMFTopology_GetNodeCount(input_topology, &count))
- || FAILED(MFCreateTopology(output_topology))
+ || FAILED(MFCreateTopology(&context.output_topology))
|| count < 2)
{
hr = MF_E_TOPO_UNSUPPORTED;
return hr;
}
+ context.input_topology = input_topology;
+ memset(&context.key, 0xff, sizeof(context.key));
+
i = 0;
while (SUCCEEDED(IMFTopology_GetNode(input_topology, i++, &node)))
{
@@ -1971,7 +1983,7 @@ static HRESULT WINAPI topology_loader_Load(IMFTopoLoader *iface, IMFTopology *in
/* Sinks must be bound beforehand. */
if (FAILED(IUnknown_QueryInterface(object, &IID_IMFStreamSink, (void **)&sink)))
{
- IMFTopology_Release(*output_topology);
+ IMFTopology_Release(context.output_topology);
IMFTopologyNode_Release(node);
IUnknown_Release(object);
hr = MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED;
@@ -1985,7 +1997,12 @@ static HRESULT WINAPI topology_loader_Load(IMFTopoLoader *iface, IMFTopology *in
IMFTopologyNode_Release(node);
}
- return IMFTopology_CloneFrom(*output_topology, input_topology);
+ if (FAILED(hr = IMFTopology_CloneFrom(context.output_topology, input_topology)))
+ IMFTopology_Release(context.output_topology);
+ else
+ *output_topology = context.output_topology;
+
+ return hr;
}
static const IMFTopoLoaderVtbl topologyloadervtbl =
--
2.17.1
More information about the wine-devel
mailing list