diff --git a/dlls/mf/mf_private.h b/dlls/mf/mf_private.h index bbfadaee5d8..401e1f55b49 100644 --- a/dlls/mf/mf_private.h +++ b/dlls/mf/mf_private.h @@ -118,6 +118,7 @@ extern HRESULT urlmon_scheme_handler_construct(REFIID riid, void **obj); extern BOOL mf_is_sample_copier_transform(IMFTransform *transform); extern BOOL mf_is_sar_sink(IMFMediaSink *sink); +extern HRESULT create_topology(TOPOID id, IMFTopology **topology); extern HRESULT topology_node_get_object(IMFTopologyNode *node, REFIID riid, void **obj); extern HRESULT topology_node_get_type_handler(IMFTopologyNode *node, DWORD stream, BOOL output, IMFMediaTypeHandler **handler); extern HRESULT topology_node_init_media_type(IMFTopologyNode *node, DWORD stream, BOOL output, IMFMediaType **type); diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 58688c0cfba..fece60d37a7 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -4179,7 +4179,7 @@ static void test_topology_loader(void) { IMFTopology_GetTopologyID(topology, &oldtopoid); IMFTopology_GetTopologyID(full_topology, &newtopoid); - todo_wine ok(oldtopoid == newtopoid, "Expected the same topology id. %llu == %llu\n", oldtopoid, newtopoid); + ok(oldtopoid == newtopoid, "Expected the same topology id. %llu == %llu\n", oldtopoid, newtopoid); ok(topology != full_topology, "Expected a different object for the resolved topology.\n"); hr = IMFTopology_GetCount(full_topology, &count); @@ -4331,7 +4331,7 @@ todo_wine { ok(full_topology != topology2, "Unexpected instance.\n"); IMFTopology_GetTopologyID(topology2, &oldtopoid); IMFTopology_GetTopologyID(full_topology, &newtopoid); - todo_wine ok(oldtopoid == newtopoid, "Expected the same topology id. %llu == %llu\n", oldtopoid, newtopoid); + ok(oldtopoid == newtopoid, "Expected the same topology id. %llu == %llu\n", oldtopoid, newtopoid); hr = IMFTopology_GetUINT32(topology2, &IID_IMFTopology, &value); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); diff --git a/dlls/mf/topology.c b/dlls/mf/topology.c index f09a9c87a46..572d4d426d3 100644 --- a/dlls/mf/topology.c +++ b/dlls/mf/topology.c @@ -866,19 +866,11 @@ static TOPOID topology_generate_id(void) return next_topology_id; } -/*********************************************************************** - * MFCreateTopology (mf.@) - */ -HRESULT WINAPI MFCreateTopology(IMFTopology **topology) +HRESULT create_topology(TOPOID id, IMFTopology **topology) { struct topology *object; HRESULT hr; - TRACE("%p.\n", topology); - - if (!topology) - return E_POINTER; - if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; @@ -892,13 +884,26 @@ HRESULT WINAPI MFCreateTopology(IMFTopology **topology) return hr; } - object->id = topology_generate_id(); + object->id = id; *topology = &object->IMFTopology_iface; return S_OK; } +/*********************************************************************** + * MFCreateTopology (mf.@) + */ +HRESULT WINAPI MFCreateTopology(IMFTopology **topology) +{ + TRACE("%p.\n", topology); + + if (!topology) + return E_POINTER; + + return create_topology(topology_generate_id(), topology); +} + static HRESULT WINAPI topology_node_QueryInterface(IMFTopologyNode *iface, REFIID riid, void **out) { struct topology_node *node = impl_from_IMFTopologyNode(iface); diff --git a/dlls/mf/topology_loader.c b/dlls/mf/topology_loader.c index 11d0162d94f..96ae74dbfe2 100644 --- a/dlls/mf/topology_loader.c +++ b/dlls/mf/topology_loader.c @@ -721,6 +721,7 @@ static HRESULT WINAPI topology_loader_Load(IMFTopoLoader *iface, IMFTopology *in unsigned short i = 0; IMFStreamSink *sink; IUnknown *object; + TOPOID topoid; HRESULT hr = E_FAIL; FIXME("iface %p, input_topology %p, ret_topology %p, current_topology %p stub!\n", @@ -763,7 +764,8 @@ static HRESULT WINAPI topology_loader_Load(IMFTopoLoader *iface, IMFTopology *in return hr; } - if (FAILED(hr = MFCreateTopology(&output_topology))) + IMFTopology_GetTopologyID(input_topology, &topoid); + if (FAILED(hr = create_topology(topoid, &output_topology))) return hr; IMFTopology_CopyAllItems(input_topology, (IMFAttributes *)output_topology);