Signed-off-by: Nikolay Sivov nsivov@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;