1
0
mirror of https://github.com/wine-mirror/wine synced 2024-07-01 07:14:31 +00:00

mf/topoloader: Preserve input topology id.

This commit is contained in:
Santino Mazza 2024-03-11 11:29:48 -03:00 committed by Alexandre Julliard
parent 4da091eddd
commit b37d3f232b
4 changed files with 21 additions and 13 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);