[PATCH 1/3] mf: Add attributes store to topology object.

Nikolay Sivov nsivov at codeweavers.com
Tue Feb 19 23:28:01 CST 2019


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/mf/Makefile.in |   1 +
 dlls/mf/topology.c  | 459 ++++++++++++++++++++++----------------------
 2 files changed, 226 insertions(+), 234 deletions(-)

diff --git a/dlls/mf/Makefile.in b/dlls/mf/Makefile.in
index 9c61d94c8a..f05364bca6 100644
--- a/dlls/mf/Makefile.in
+++ b/dlls/mf/Makefile.in
@@ -1,5 +1,6 @@
 MODULE    = mf.dll
 IMPORTLIB = mf
+IMPORTS   = mfplat
 
 C_SRCS = \
 	main.c \
diff --git a/dlls/mf/topology.c b/dlls/mf/topology.c
index e8389cf4df..fbd8bf3bd9 100644
--- a/dlls/mf/topology.c
+++ b/dlls/mf/topology.c
@@ -24,34 +24,37 @@
 #include "windef.h"
 #include "winbase.h"
 #include "initguid.h"
+#include "mfapi.h"
 #include "mfidl.h"
 
 #include "wine/debug.h"
+#include "wine/heap.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(mfplat);
 
-typedef struct mftopology
+struct topology
 {
     IMFTopology IMFTopology_iface;
-    LONG ref;
-} mftopology;
+    LONG refcount;
+    IMFAttributes *attributes;
+};
 
-static inline mftopology *impl_from_IMFTopology(IMFTopology *iface)
+static inline struct topology *impl_from_IMFTopology(IMFTopology *iface)
 {
-    return CONTAINING_RECORD(iface, mftopology, IMFTopology_iface);
+    return CONTAINING_RECORD(iface, struct topology, IMFTopology_iface);
 }
 
-static HRESULT WINAPI mftopology_QueryInterface(IMFTopology *iface, REFIID riid, void **out)
+static HRESULT WINAPI topology_QueryInterface(IMFTopology *iface, REFIID riid, void **out)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), out);
+    TRACE("(%p)->(%s %p)\n", iface, debugstr_guid(riid), out);
 
     if (IsEqualIID(riid, &IID_IMFTopology) ||
             IsEqualIID(riid, &IID_IMFAttributes) ||
             IsEqualIID(riid, &IID_IUnknown))
     {
-        *out = &This->IMFTopology_iface;
+        *out = &topology->IMFTopology_iface;
     }
     else
     {
@@ -64,440 +67,421 @@ static HRESULT WINAPI mftopology_QueryInterface(IMFTopology *iface, REFIID riid,
     return S_OK;
 }
 
-static ULONG WINAPI mftopology_AddRef(IMFTopology *iface)
+static ULONG WINAPI topology_AddRef(IMFTopology *iface)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
-    ULONG ref = InterlockedIncrement(&This->ref);
+    struct topology *topology = impl_from_IMFTopology(iface);
+    ULONG refcount = InterlockedIncrement(&topology->refcount);
 
-    TRACE("(%p) ref=%u\n", This, ref);
+    TRACE("(%p) refcount=%u\n", iface, refcount);
 
-    return ref;
+    return refcount;
 }
 
-static ULONG WINAPI mftopology_Release(IMFTopology *iface)
+static ULONG WINAPI topology_Release(IMFTopology *iface)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
-    ULONG ref = InterlockedDecrement(&This->ref);
+    struct topology *topology = impl_from_IMFTopology(iface);
+    ULONG refcount = InterlockedDecrement(&topology->refcount);
 
-    TRACE("(%p) ref=%u\n", This, ref);
+    TRACE("(%p) refcount=%u\n", iface, refcount);
 
-    if (!ref)
+    if (!refcount)
     {
-        HeapFree(GetProcessHeap(), 0, This);
+        IMFAttributes_Release(topology->attributes);
+        heap_free(topology);
     }
 
-    return ref;
+    return refcount;
 }
 
-static HRESULT WINAPI mftopology_GetItem(IMFTopology *iface, REFGUID key, PROPVARIANT *value)
+static HRESULT WINAPI topology_GetItem(IMFTopology *iface, REFGUID key, PROPVARIANT *value)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %p)\n", This, debugstr_guid(key), value);
+    TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(key), value);
 
-    return E_NOTIMPL;
+    return IMFAttributes_GetItem(topology->attributes, key, value);
 }
 
-static HRESULT WINAPI mftopology_GetItemType(IMFTopology *iface, REFGUID key, MF_ATTRIBUTE_TYPE *type)
+static HRESULT WINAPI topology_GetItemType(IMFTopology *iface, REFGUID key, MF_ATTRIBUTE_TYPE *type)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %p)\n", This, debugstr_guid(key), type);
+    TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(key), type);
 
-    return E_NOTIMPL;
+    return IMFAttributes_GetItemType(topology->attributes, key, type);
 }
 
-static HRESULT WINAPI mftopology_CompareItem(IMFTopology *iface, REFGUID key, REFPROPVARIANT value, BOOL *result)
+static HRESULT WINAPI topology_CompareItem(IMFTopology *iface, REFGUID key, REFPROPVARIANT value, BOOL *result)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %p, %p)\n", This, debugstr_guid(key), value, result);
+    TRACE("(%p)->(%s, %p, %p)\n", iface, debugstr_guid(key), value, result);
 
-    return E_NOTIMPL;
+    return IMFAttributes_CompareItem(topology->attributes, key, value, result);
 }
 
-static HRESULT WINAPI mftopology_Compare(IMFTopology *iface, IMFAttributes *theirs, MF_ATTRIBUTES_MATCH_TYPE type,
-                BOOL *result)
+static HRESULT WINAPI topology_Compare(IMFTopology *iface, IMFAttributes *theirs, MF_ATTRIBUTES_MATCH_TYPE type,
+        BOOL *result)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%p, %d, %p)\n", This, theirs, type, result);
+    TRACE("(%p)->(%p, %d, %p)\n", iface, theirs, type, result);
 
-    return E_NOTIMPL;
+    return IMFAttributes_Compare(topology->attributes, theirs, type, result);
 }
 
-static HRESULT WINAPI mftopology_GetUINT32(IMFTopology *iface, REFGUID key, UINT32 *value)
+static HRESULT WINAPI topology_GetUINT32(IMFTopology *iface, REFGUID key, UINT32 *value)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %p)\n", This, debugstr_guid(key), value);
+    TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(key), value);
 
-    return E_NOTIMPL;
+    return IMFAttributes_GetUINT32(topology->attributes, key, value);
 }
 
-static HRESULT WINAPI mftopology_GetUINT64(IMFTopology *iface, REFGUID key, UINT64 *value)
+static HRESULT WINAPI topology_GetUINT64(IMFTopology *iface, REFGUID key, UINT64 *value)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %p)\n", This, debugstr_guid(key), value);
+    TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(key), value);
 
-    return E_NOTIMPL;
+    return IMFAttributes_GetUINT64(topology->attributes, key, value);
 }
 
-static HRESULT WINAPI mftopology_GetDouble(IMFTopology *iface, REFGUID key, double *value)
+static HRESULT WINAPI topology_GetDouble(IMFTopology *iface, REFGUID key, double *value)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %p)\n", This, debugstr_guid(key), value);
+    TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(key), value);
 
-    return E_NOTIMPL;
+    return IMFAttributes_GetDouble(topology->attributes, key, value);
 }
 
-static HRESULT WINAPI mftopology_GetGUID(IMFTopology *iface, REFGUID key, GUID *value)
+static HRESULT WINAPI topology_GetGUID(IMFTopology *iface, REFGUID key, GUID *value)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %p)\n", This, debugstr_guid(key), value);
+    TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(key), value);
 
-    return E_NOTIMPL;
+    return IMFAttributes_GetGUID(topology->attributes, key, value);
 }
 
-static HRESULT WINAPI mftopology_GetStringLength(IMFTopology *iface, REFGUID key, UINT32 *length)
+static HRESULT WINAPI topology_GetStringLength(IMFTopology *iface, REFGUID key, UINT32 *length)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %p)\n", This, debugstr_guid(key), length);
+    TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(key), length);
 
-    return E_NOTIMPL;
+    return IMFAttributes_GetStringLength(topology->attributes, key, length);
 }
 
-static HRESULT WINAPI mftopology_GetString(IMFTopology *iface, REFGUID key, WCHAR *value,
-                UINT32 size, UINT32 *length)
+static HRESULT WINAPI topology_GetString(IMFTopology *iface, REFGUID key, WCHAR *value,
+        UINT32 size, UINT32 *length)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %p, %d, %p)\n", This, debugstr_guid(key), value, size, length);
+    TRACE("(%p)->(%s, %p, %d, %p)\n", iface, debugstr_guid(key), value, size, length);
 
-    return E_NOTIMPL;
+    return IMFAttributes_GetString(topology->attributes, key, value, size, length);
 }
 
-static HRESULT WINAPI mftopology_GetAllocatedString(IMFTopology *iface, REFGUID key,
-                                      WCHAR **value, UINT32 *length)
+static HRESULT WINAPI topology_GetAllocatedString(IMFTopology *iface, REFGUID key,
+        WCHAR **value, UINT32 *length)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %p, %p)\n", This, debugstr_guid(key), value, length);
+    TRACE("(%p)->(%s, %p, %p)\n", iface, debugstr_guid(key), value, length);
 
-    return E_NOTIMPL;
+    return IMFAttributes_GetAllocatedString(topology->attributes, key, value, length);
 }
 
-static HRESULT WINAPI mftopology_GetBlobSize(IMFTopology *iface, REFGUID key, UINT32 *size)
+static HRESULT WINAPI topology_GetBlobSize(IMFTopology *iface, REFGUID key, UINT32 *size)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %p)\n", This, debugstr_guid(key), size);
+    TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(key), size);
 
-    return E_NOTIMPL;
+    return IMFAttributes_GetBlobSize(topology->attributes, key, size);
 }
 
-static HRESULT WINAPI mftopology_GetBlob(IMFTopology *iface, REFGUID key, UINT8 *buf,
-                UINT32 bufsize, UINT32 *blobsize)
+static HRESULT WINAPI topology_GetBlob(IMFTopology *iface, REFGUID key, UINT8 *buf,
+        UINT32 bufsize, UINT32 *blobsize)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %p, %d, %p)\n", This, debugstr_guid(key), buf, bufsize, blobsize);
+    TRACE("(%p)->(%s, %p, %d, %p)\n", iface, debugstr_guid(key), buf, bufsize, blobsize);
 
-    return E_NOTIMPL;
+    return IMFAttributes_GetBlob(topology->attributes, key, buf, bufsize, blobsize);
 }
 
-static HRESULT WINAPI mftopology_GetAllocatedBlob(IMFTopology *iface, REFGUID key, UINT8 **buf, UINT32 *size)
+static HRESULT WINAPI topology_GetAllocatedBlob(IMFTopology *iface, REFGUID key, UINT8 **buf, UINT32 *size)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %p, %p)\n", This, debugstr_guid(key), buf, size);
+    TRACE("(%p)->(%s, %p, %p)\n", iface, debugstr_guid(key), buf, size);
 
-    return E_NOTIMPL;
+    return IMFAttributes_GetAllocatedBlob(topology->attributes, key, buf, size);
 }
 
-static HRESULT WINAPI mftopology_GetUnknown(IMFTopology *iface, REFGUID key, REFIID riid, void **ppv)
+static HRESULT WINAPI topology_GetUnknown(IMFTopology *iface, REFGUID key, REFIID riid, void **ppv)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %s, %p)\n", This, debugstr_guid(key), debugstr_guid(riid), ppv);
+    TRACE("(%p)->(%s, %s, %p)\n", iface, debugstr_guid(key), debugstr_guid(riid), ppv);
 
-    return E_NOTIMPL;
+    return IMFAttributes_GetUnknown(topology->attributes, key, riid, ppv);
 }
 
-static HRESULT WINAPI mftopology_SetItem(IMFTopology *iface, REFGUID key, REFPROPVARIANT Value)
+static HRESULT WINAPI topology_SetItem(IMFTopology *iface, REFGUID key, REFPROPVARIANT value)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %p)\n", This, debugstr_guid(key), Value);
+    TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(key), value);
 
-    return E_NOTIMPL;
+    return IMFAttributes_SetItem(topology->attributes, key, value);
 }
 
-static HRESULT WINAPI mftopology_DeleteItem(IMFTopology *iface, REFGUID key)
+static HRESULT WINAPI topology_DeleteItem(IMFTopology *iface, REFGUID key)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s)\n", This, debugstr_guid(key));
+    TRACE("(%p)->(%s)\n", topology, debugstr_guid(key));
 
-    return E_NOTIMPL;
+    return IMFAttributes_DeleteItem(topology->attributes, key);
 }
 
-static HRESULT WINAPI mftopology_DeleteAllItems(IMFTopology *iface)
+static HRESULT WINAPI topology_DeleteAllItems(IMFTopology *iface)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)\n", This);
+    TRACE("(%p)\n", iface);
 
-    return E_NOTIMPL;
+    return IMFAttributes_DeleteAllItems(topology->attributes);
 }
 
-static HRESULT WINAPI mftopology_SetUINT32(IMFTopology *iface, REFGUID key, UINT32 value)
+static HRESULT WINAPI topology_SetUINT32(IMFTopology *iface, REFGUID key, UINT32 value)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %d)\n", This, debugstr_guid(key), value);
+    TRACE("(%p)->(%s, %d)\n", iface, debugstr_guid(key), value);
 
-    return E_NOTIMPL;
+    return IMFAttributes_SetUINT32(topology->attributes, key, value);
 }
 
-static HRESULT WINAPI mftopology_SetUINT64(IMFTopology *iface, REFGUID key, UINT64 value)
+static HRESULT WINAPI topology_SetUINT64(IMFTopology *iface, REFGUID key, UINT64 value)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %s)\n", This, debugstr_guid(key), wine_dbgstr_longlong(value));
+    TRACE("(%p)->(%s, %s)\n", iface, debugstr_guid(key), wine_dbgstr_longlong(value));
 
-    return E_NOTIMPL;
+    return IMFAttributes_SetUINT64(topology->attributes, key, value);
 }
 
-static HRESULT WINAPI mftopology_SetDouble(IMFTopology *iface, REFGUID key, double value)
+static HRESULT WINAPI topology_SetDouble(IMFTopology *iface, REFGUID key, double value)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %f)\n", This, debugstr_guid(key), value);
+    TRACE("(%p)->(%s, %f)\n", iface, debugstr_guid(key), value);
 
-    return E_NOTIMPL;
+    return IMFAttributes_SetDouble(topology->attributes, key, value);
 }
 
-static HRESULT WINAPI mftopology_SetGUID(IMFTopology *iface, REFGUID key, REFGUID value)
+static HRESULT WINAPI topology_SetGUID(IMFTopology *iface, REFGUID key, REFGUID value)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %s)\n", This, debugstr_guid(key), debugstr_guid(value));
+    TRACE("(%p)->(%s, %s)\n", iface, debugstr_guid(key), debugstr_guid(value));
 
-    return E_NOTIMPL;
+    return IMFAttributes_SetGUID(topology->attributes, key, value);
 }
 
-static HRESULT WINAPI mftopology_SetString(IMFTopology *iface, REFGUID key, const WCHAR *value)
+static HRESULT WINAPI topology_SetString(IMFTopology *iface, REFGUID key, const WCHAR *value)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %s)\n", This, debugstr_guid(key), debugstr_w(value));
+    TRACE("(%p)->(%s, %s)\n", iface, debugstr_guid(key), debugstr_w(value));
 
-    return E_NOTIMPL;
+    return IMFAttributes_SetString(topology->attributes, key, value);
 }
 
-static HRESULT WINAPI mftopology_SetBlob(IMFTopology *iface, REFGUID key, const UINT8 *buf, UINT32 size)
+static HRESULT WINAPI topology_SetBlob(IMFTopology *iface, REFGUID key, const UINT8 *buf, UINT32 size)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %p, %d)\n", This, debugstr_guid(key), buf, size);
+    TRACE("(%p)->(%s, %p, %d)\n", iface, debugstr_guid(key), buf, size);
 
-    return E_NOTIMPL;
+    return IMFAttributes_SetBlob(topology->attributes, key, buf, size);
 }
 
-static HRESULT WINAPI mftopology_SetUnknown(IMFTopology *iface, REFGUID key, IUnknown *unknown)
+static HRESULT WINAPI topology_SetUnknown(IMFTopology *iface, REFGUID key, IUnknown *unknown)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%s, %p)\n", This, debugstr_guid(key), unknown);
+    TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(key), unknown);
 
-    return E_NOTIMPL;
+    return IMFAttributes_SetUnknown(topology->attributes, key, unknown);
 }
 
-static HRESULT WINAPI mftopology_LockStore(IMFTopology *iface)
+static HRESULT WINAPI topology_LockStore(IMFTopology *iface)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)\n", This);
+    TRACE("(%p)\n", iface);
 
-    return E_NOTIMPL;
+    return IMFAttributes_LockStore(topology->attributes);
 }
 
-static HRESULT WINAPI mftopology_UnlockStore(IMFTopology *iface)
+static HRESULT WINAPI topology_UnlockStore(IMFTopology *iface)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)\n", This);
+    TRACE("(%p)\n", iface);
 
-    return E_NOTIMPL;
+    return IMFAttributes_UnlockStore(topology->attributes);
 }
 
-static HRESULT WINAPI mftopology_GetCount(IMFTopology *iface, UINT32 *count)
+static HRESULT WINAPI topology_GetCount(IMFTopology *iface, UINT32 *count)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%p)\n", This, count);
+    TRACE("(%p)->(%p)\n", iface, count);
 
-    return E_NOTIMPL;
+    return IMFAttributes_GetCount(topology->attributes, count);
 }
 
-static HRESULT WINAPI mftopology_GetItemByIndex(IMFTopology *iface, UINT32 index, GUID *key, PROPVARIANT *value)
+static HRESULT WINAPI topology_GetItemByIndex(IMFTopology *iface, UINT32 index, GUID *key, PROPVARIANT *value)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%u, %p, %p)\n", This, index, key, value);
+    TRACE("(%p)->(%u, %p, %p)\n", iface, index, key, value);
 
-    return E_NOTIMPL;
+    return IMFAttributes_GetItemByIndex(topology->attributes, index, key, value);
 }
 
-static HRESULT WINAPI mftopology_CopyAllItems(IMFTopology *iface, IMFAttributes *dest)
+static HRESULT WINAPI topology_CopyAllItems(IMFTopology *iface, IMFAttributes *dest)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
+    struct topology *topology = impl_from_IMFTopology(iface);
 
-    FIXME("(%p)->(%p)\n", This, dest);
+    TRACE("(%p)->(%p)\n", iface, dest);
 
-    return E_NOTIMPL;
+    return IMFAttributes_CopyAllItems(topology->attributes, dest);
 }
 
-static HRESULT WINAPI mftopology_GetTopologyID(IMFTopology *iface, TOPOID *id)
+static HRESULT WINAPI topology_GetTopologyID(IMFTopology *iface, TOPOID *id)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
-
-    FIXME("(%p)->(%p)\n", This, id);
+    FIXME("(%p)->(%p)\n", iface, id);
 
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI mftopology_AddNode(IMFTopology *iface, IMFTopologyNode *node)
+static HRESULT WINAPI topology_AddNode(IMFTopology *iface, IMFTopologyNode *node)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
-
-    FIXME("(%p)->(%p)\n", This, node);
+    FIXME("(%p)->(%p)\n", iface, node);
 
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI mftopology_RemoveNode(IMFTopology *iface, IMFTopologyNode *node)
+static HRESULT WINAPI topology_RemoveNode(IMFTopology *iface, IMFTopologyNode *node)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
-
-    FIXME("(%p)->(%p)\n", This, node);
+    FIXME("(%p)->(%p)\n", iface, node);
 
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI mftopology_GetNodeCount(IMFTopology *iface, WORD *count)
+static HRESULT WINAPI topology_GetNodeCount(IMFTopology *iface, WORD *count)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
-
-    FIXME("(%p)->(%p)\n", This, count);
+    FIXME("(%p)->(%p)\n", iface, count);
 
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI mftopology_GetNode(IMFTopology *iface, WORD index, IMFTopologyNode **node)
+static HRESULT WINAPI topology_GetNode(IMFTopology *iface, WORD index, IMFTopologyNode **node)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
-
-    FIXME("(%p)->(%u, %p)\n", This, index, node);
+    FIXME("(%p)->(%u, %p)\n", iface, index, node);
 
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI mftopology_Clear(IMFTopology *iface)
+static HRESULT WINAPI topology_Clear(IMFTopology *iface)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
-
-    FIXME("(%p)\n", This);
+    FIXME("(%p)\n", iface);
 
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI mftopology_CloneFrom(IMFTopology *iface, IMFTopology *topology)
+static HRESULT WINAPI topology_CloneFrom(IMFTopology *iface, IMFTopology *src_topology)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
-
-    FIXME("(%p)->(%p)\n", This, topology);
+    FIXME("(%p)->(%p)\n", iface, src_topology);
 
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI mftopology_GetNodeByID(IMFTopology *iface, TOPOID id, IMFTopologyNode **node)
+static HRESULT WINAPI topology_GetNodeByID(IMFTopology *iface, TOPOID id, IMFTopologyNode **node)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
-
-    FIXME("(%p)->(%p)\n", This, node);
+    FIXME("(%p)->(%p)\n", iface, node);
 
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI mftopology_GetSourceNodeCollection(IMFTopology *iface, IMFCollection **collection)
+static HRESULT WINAPI topology_GetSourceNodeCollection(IMFTopology *iface, IMFCollection **collection)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
-
-    FIXME("(%p)->(%p)\n", This, collection);
+    FIXME("(%p)->(%p)\n", iface, collection);
 
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI mftopology_GetOutputNodeCollection(IMFTopology *iface, IMFCollection **collection)
+static HRESULT WINAPI topology_GetOutputNodeCollection(IMFTopology *iface, IMFCollection **collection)
 {
-    mftopology *This = impl_from_IMFTopology(iface);
-
-    FIXME("(%p)->(%p)\n", This, collection);
+    FIXME("(%p)->(%p)\n", iface, collection);
 
     return E_NOTIMPL;
 }
 
-static const IMFTopologyVtbl mftopologyvtbl =
-{
-    mftopology_QueryInterface,
-    mftopology_AddRef,
-    mftopology_Release,
-    mftopology_GetItem,
-    mftopology_GetItemType,
-    mftopology_CompareItem,
-    mftopology_Compare,
-    mftopology_GetUINT32,
-    mftopology_GetUINT64,
-    mftopology_GetDouble,
-    mftopology_GetGUID,
-    mftopology_GetStringLength,
-    mftopology_GetString,
-    mftopology_GetAllocatedString,
-    mftopology_GetBlobSize,
-    mftopology_GetBlob,
-    mftopology_GetAllocatedBlob,
-    mftopology_GetUnknown,
-    mftopology_SetItem,
-    mftopology_DeleteItem,
-    mftopology_DeleteAllItems,
-    mftopology_SetUINT32,
-    mftopology_SetUINT64,
-    mftopology_SetDouble,
-    mftopology_SetGUID,
-    mftopology_SetString,
-    mftopology_SetBlob,
-    mftopology_SetUnknown,
-    mftopology_LockStore,
-    mftopology_UnlockStore,
-    mftopology_GetCount,
-    mftopology_GetItemByIndex,
-    mftopology_CopyAllItems,
-    mftopology_GetTopologyID,
-    mftopology_AddNode,
-    mftopology_RemoveNode,
-    mftopology_GetNodeCount,
-    mftopology_GetNode,
-    mftopology_Clear,
-    mftopology_CloneFrom,
-    mftopology_GetNodeByID,
-    mftopology_GetSourceNodeCollection,
-    mftopology_GetOutputNodeCollection,
+static const IMFTopologyVtbl topologyvtbl =
+{
+    topology_QueryInterface,
+    topology_AddRef,
+    topology_Release,
+    topology_GetItem,
+    topology_GetItemType,
+    topology_CompareItem,
+    topology_Compare,
+    topology_GetUINT32,
+    topology_GetUINT64,
+    topology_GetDouble,
+    topology_GetGUID,
+    topology_GetStringLength,
+    topology_GetString,
+    topology_GetAllocatedString,
+    topology_GetBlobSize,
+    topology_GetBlob,
+    topology_GetAllocatedBlob,
+    topology_GetUnknown,
+    topology_SetItem,
+    topology_DeleteItem,
+    topology_DeleteAllItems,
+    topology_SetUINT32,
+    topology_SetUINT64,
+    topology_SetDouble,
+    topology_SetGUID,
+    topology_SetString,
+    topology_SetBlob,
+    topology_SetUnknown,
+    topology_LockStore,
+    topology_UnlockStore,
+    topology_GetCount,
+    topology_GetItemByIndex,
+    topology_CopyAllItems,
+    topology_GetTopologyID,
+    topology_AddNode,
+    topology_RemoveNode,
+    topology_GetNodeCount,
+    topology_GetNode,
+    topology_Clear,
+    topology_CloneFrom,
+    topology_GetNodeByID,
+    topology_GetSourceNodeCollection,
+    topology_GetOutputNodeCollection,
 };
 
 /***********************************************************************
@@ -505,19 +489,26 @@ static const IMFTopologyVtbl mftopologyvtbl =
  */
 HRESULT WINAPI MFCreateTopology(IMFTopology **topology)
 {
-    mftopology *object;
+    struct topology *object;
+    HRESULT hr;
 
     TRACE("(%p)\n", topology);
 
     if (!topology)
         return E_POINTER;
 
-    object = HeapAlloc(GetProcessHeap(), 0, sizeof(*object));
+    object = heap_alloc_zero(sizeof(*object));
     if (!object)
         return E_OUTOFMEMORY;
 
-    object->IMFTopology_iface.lpVtbl = &mftopologyvtbl;
-    object->ref = 1;
+    object->IMFTopology_iface.lpVtbl = &topologyvtbl;
+    object->refcount = 1;
+    hr = MFCreateAttributes(&object->attributes, 0);
+    if (FAILED(hr))
+    {
+        heap_free(object);
+        return hr;
+    }
 
     *topology = &object->IMFTopology_iface;
 
-- 
2.20.1




More information about the wine-devel mailing list