Nikolay Sivov : mf: Assign node id on creation.

Alexandre Julliard julliard at winehq.org
Fri Feb 22 15:22:10 CST 2019


Module: wine
Branch: master
Commit: e88a2535127b2bed36f3f98f63d5eb95b7087103
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=e88a2535127b2bed36f3f98f63d5eb95b7087103

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Fri Feb 22 10:36:50 2019 +0300

mf: Assign node id on creation.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mf/tests/mf.c |  8 ++++----
 dlls/mf/topology.c | 20 ++++++++++++++++----
 2 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c
index d6091cb..38bf48e 100644
--- a/dlls/mf/tests/mf.c
+++ b/dlls/mf/tests/mf.c
@@ -57,11 +57,10 @@ static void test_topology(void)
     ok(hr == S_OK, "Failed to create topology node, hr %#x.\n", hr);
 
     hr = IMFTopologyNode_GetTopoNodeID(node, &id);
-todo_wine
     ok(hr == S_OK, "Failed to get node id, hr %#x.\n", hr);
+    ok(((id >> 32) == GetCurrentProcessId()) && !!(id & 0xffff), "Unexpected node id %s.\n", wine_dbgstr_longlong(id));
 
     hr = IMFTopologyNode_SetTopoNodeID(node2, id);
-todo_wine
     ok(hr == S_OK, "Failed to set node id, hr %#x.\n", hr);
 
     count = 1;
@@ -96,7 +95,6 @@ todo_wine {
 
     /* Change node id, add it again. */
     hr = IMFTopologyNode_SetTopoNodeID(node, ++id);
-todo_wine
     ok(hr == S_OK, "Failed to set node id, hr %#x.\n", hr);
 
     hr = IMFTopology_GetNodeByID(topology, id, &node2);
@@ -148,7 +146,6 @@ todo_wine {
     hr = MFCreateTopologyNode(MF_TOPOLOGY_TEE_NODE, &node2);
     ok(hr == S_OK, "Failed to create topology node, hr %#x.\n", hr);
     hr = IMFTopologyNode_SetTopoNodeID(node2, id);
-todo_wine
     ok(hr == S_OK, "Failed to set node id, hr %#x.\n", hr);
     hr = IMFTopology_RemoveNode(topology, node2);
 todo_wine
@@ -179,6 +176,9 @@ todo_wine {
 todo_wine
     ok(hr == S_OK, "Failed to clear topology, hr %#x.\n", hr);
 
+    hr = IMFTopologyNode_SetTopoNodeID(node, 123);
+    ok(hr == S_OK, "Failed to set node id, hr %#x.\n", hr);
+
     IMFTopologyNode_Release(node);
     IMFTopology_Release(topology);
 }
diff --git a/dlls/mf/topology.c b/dlls/mf/topology.c
index 308a1e3..54e9faf 100644
--- a/dlls/mf/topology.c
+++ b/dlls/mf/topology.c
@@ -32,6 +32,8 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(mfplat);
 
+static LONG next_node_id;
+
 struct topology
 {
     IMFTopology IMFTopology_iface;
@@ -45,6 +47,7 @@ struct topology_node
     LONG refcount;
     IMFAttributes *attributes;
     MF_TOPOLOGY_TYPE node_type;
+    TOPOID id;
 };
 
 struct seq_source
@@ -887,16 +890,24 @@ static HRESULT WINAPI topology_node_GetNodeType(IMFTopologyNode *iface, MF_TOPOL
 
 static HRESULT WINAPI topology_node_GetTopoNodeID(IMFTopologyNode *iface, TOPOID *id)
 {
-    FIXME("(%p)->(%p)\n", iface, id);
+    struct topology_node *node = impl_from_IMFTopologyNode(iface);
 
-    return E_NOTIMPL;
+    TRACE("(%p)->(%p)\n", iface, id);
+
+    *id = node->id;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI topology_node_SetTopoNodeID(IMFTopologyNode *iface, TOPOID id)
 {
-    FIXME("(%p)->(%s)\n", iface, wine_dbgstr_longlong(id));
+    struct topology_node *node = impl_from_IMFTopologyNode(iface);
 
-    return E_NOTIMPL;
+    TRACE("(%p)->(%s)\n", iface, wine_dbgstr_longlong(id));
+
+    node->id = id;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI topology_node_GetInputCount(IMFTopologyNode *iface, DWORD *count)
@@ -1058,6 +1069,7 @@ HRESULT WINAPI MFCreateTopologyNode(MF_TOPOLOGY_TYPE node_type, IMFTopologyNode
         heap_free(object);
         return hr;
     }
+    object->id = ((TOPOID)GetCurrentProcessId() << 32) | InterlockedIncrement(&next_node_id);
 
     *node = &object->IMFTopologyNode_iface;
 




More information about the wine-cvs mailing list