[PATCH 6/7] mfplat: Add per-method helpers for attributes, use them for media type.

Nikolay Sivov nsivov at codeweavers.com
Mon Apr 1 05:24:06 CDT 2019


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/mfplat/main.c           | 438 ++++++++++++++++++++++++-----------
 dlls/mfplat/mediatype.c      |  67 +++---
 dlls/mfplat/mfplat_private.h |  39 ++++
 3 files changed, 381 insertions(+), 163 deletions(-)

diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c
index e52aeeb458..be3a78d4c3 100644
--- a/dlls/mfplat/main.c
+++ b/dlls/mfplat/main.c
@@ -1028,14 +1028,11 @@ static HRESULT attributes_get_item(struct attributes *attributes, const GUID *ke
     return hr;
 }
 
-static HRESULT WINAPI mfattributes_GetItem(IMFAttributes *iface, REFGUID key, PROPVARIANT *value)
+HRESULT attributes_GetItem(struct attributes *attributes, REFGUID key, PROPVARIANT *value)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     struct attribute *attribute;
     HRESULT hr;
 
-    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), value);
-
     EnterCriticalSection(&attributes->cs);
 
     if ((attribute = attributes_find_item(attributes, key, NULL)))
@@ -1048,14 +1045,11 @@ static HRESULT WINAPI mfattributes_GetItem(IMFAttributes *iface, REFGUID key, PR
     return hr;
 }
 
-static HRESULT WINAPI mfattributes_GetItemType(IMFAttributes *iface, REFGUID key, MF_ATTRIBUTE_TYPE *type)
+HRESULT attributes_GetItemType(struct attributes *attributes, REFGUID key, MF_ATTRIBUTE_TYPE *type)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     struct attribute *attribute;
     HRESULT hr = S_OK;
 
-    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), type);
-
     EnterCriticalSection(&attributes->cs);
 
     if ((attribute = attributes_find_item(attributes, key, NULL)))
@@ -1070,13 +1064,10 @@ static HRESULT WINAPI mfattributes_GetItemType(IMFAttributes *iface, REFGUID key
     return hr;
 }
 
-static HRESULT WINAPI mfattributes_CompareItem(IMFAttributes *iface, REFGUID key, REFPROPVARIANT value, BOOL *result)
+HRESULT attributes_CompareItem(struct attributes *attributes, REFGUID key, REFPROPVARIANT value, BOOL *result)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     struct attribute *attribute;
 
-    TRACE("%p, %s, %p, %p.\n", iface, debugstr_attr(key), value, result);
-
     *result = FALSE;
 
     EnterCriticalSection(&attributes->cs);
@@ -1092,10 +1083,9 @@ static HRESULT WINAPI mfattributes_CompareItem(IMFAttributes *iface, REFGUID key
     return S_OK;
 }
 
-static HRESULT WINAPI mfattributes_Compare(IMFAttributes *iface, IMFAttributes *theirs,
+HRESULT attributes_Compare(struct attributes *attributes, IMFAttributes *theirs,
         MF_ATTRIBUTES_MATCH_TYPE match_type, BOOL *ret)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     IMFAttributes *smaller, *other;
     MF_ATTRIBUTE_TYPE type;
     HRESULT hr = S_OK;
@@ -1103,8 +1093,6 @@ static HRESULT WINAPI mfattributes_Compare(IMFAttributes *iface, IMFAttributes *
     BOOL result;
     size_t i;
 
-    TRACE("%p, %p, %d, %p.\n", iface, theirs, match_type, ret);
-
     if (FAILED(hr = IMFAttributes_GetCount(theirs, &count)))
         return hr;
 
@@ -1125,7 +1113,7 @@ static HRESULT WINAPI mfattributes_Compare(IMFAttributes *iface, IMFAttributes *
             }
             break;
         case MF_ATTRIBUTES_MATCH_THEIR_ITEMS:
-            hr = IMFAttributes_Compare(theirs, iface, MF_ATTRIBUTES_MATCH_OUR_ITEMS, &result);
+            hr = IMFAttributes_Compare(theirs, &attributes->IMFAttributes_iface, MF_ATTRIBUTES_MATCH_OUR_ITEMS, &result);
             break;
         case MF_ATTRIBUTES_MATCH_ALL_ITEMS:
             if (count != attributes->count)
@@ -1157,8 +1145,8 @@ static HRESULT WINAPI mfattributes_Compare(IMFAttributes *iface, IMFAttributes *
             }
             break;
         case MF_ATTRIBUTES_MATCH_SMALLER:
-            smaller = attributes->count > count ? theirs : iface;
-            other = attributes->count > count ? iface : theirs;
+            smaller = attributes->count > count ? theirs : &attributes->IMFAttributes_iface;
+            other = attributes->count > count ? &attributes->IMFAttributes_iface : theirs;
             hr = IMFAttributes_Compare(smaller, other, MF_ATTRIBUTES_MATCH_OUR_ITEMS, &result);
             break;
         default:
@@ -1174,14 +1162,11 @@ static HRESULT WINAPI mfattributes_Compare(IMFAttributes *iface, IMFAttributes *
     return hr;
 }
 
-static HRESULT WINAPI mfattributes_GetUINT32(IMFAttributes *iface, REFGUID key, UINT32 *value)
+HRESULT attributes_GetUINT32(struct attributes *attributes, REFGUID key, UINT32 *value)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     PROPVARIANT attrval;
     HRESULT hr;
 
-    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), value);
-
     PropVariantInit(&attrval);
     attrval.vt = VT_UI4;
     hr = attributes_get_item(attributes, key, &attrval);
@@ -1191,14 +1176,11 @@ static HRESULT WINAPI mfattributes_GetUINT32(IMFAttributes *iface, REFGUID key,
     return hr;
 }
 
-static HRESULT WINAPI mfattributes_GetUINT64(IMFAttributes *iface, REFGUID key, UINT64 *value)
+HRESULT attributes_GetUINT64(struct attributes *attributes, REFGUID key, UINT64 *value)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     PROPVARIANT attrval;
     HRESULT hr;
 
-    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), value);
-
     PropVariantInit(&attrval);
     attrval.vt = VT_UI8;
     hr = attributes_get_item(attributes, key, &attrval);
@@ -1208,14 +1190,11 @@ static HRESULT WINAPI mfattributes_GetUINT64(IMFAttributes *iface, REFGUID key,
     return hr;
 }
 
-static HRESULT WINAPI mfattributes_GetDouble(IMFAttributes *iface, REFGUID key, double *value)
+HRESULT attributes_GetDouble(struct attributes *attributes, REFGUID key, double *value)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     PROPVARIANT attrval;
     HRESULT hr;
 
-    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), value);
-
     PropVariantInit(&attrval);
     attrval.vt = VT_R8;
     hr = attributes_get_item(attributes, key, &attrval);
@@ -1225,14 +1204,11 @@ static HRESULT WINAPI mfattributes_GetDouble(IMFAttributes *iface, REFGUID key,
     return hr;
 }
 
-static HRESULT WINAPI mfattributes_GetGUID(IMFAttributes *iface, REFGUID key, GUID *value)
+HRESULT attributes_GetGUID(struct attributes *attributes, REFGUID key, GUID *value)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     PROPVARIANT attrval;
     HRESULT hr;
 
-    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), value);
-
     PropVariantInit(&attrval);
     attrval.vt = VT_CLSID;
     hr = attributes_get_item(attributes, key, &attrval);
@@ -1242,14 +1218,11 @@ static HRESULT WINAPI mfattributes_GetGUID(IMFAttributes *iface, REFGUID key, GU
     return hr;
 }
 
-static HRESULT WINAPI mfattributes_GetStringLength(IMFAttributes *iface, REFGUID key, UINT32 *length)
+HRESULT attributes_GetStringLength(struct attributes *attributes, REFGUID key, UINT32 *length)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     struct attribute *attribute;
     HRESULT hr = S_OK;
 
-    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), length);
-
     EnterCriticalSection(&attributes->cs);
 
     attribute = attributes_find_item(attributes, key, NULL);
@@ -1268,15 +1241,12 @@ static HRESULT WINAPI mfattributes_GetStringLength(IMFAttributes *iface, REFGUID
     return hr;
 }
 
-static HRESULT WINAPI mfattributes_GetString(IMFAttributes *iface, REFGUID key, WCHAR *value,
+HRESULT attributes_GetString(struct attributes *attributes, REFGUID key, WCHAR *value,
         UINT32 size, UINT32 *length)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     struct attribute *attribute;
     HRESULT hr = S_OK;
 
-    TRACE("%p, %s, %p, %d, %p.\n", iface, debugstr_attr(key), value, size, length);
-
     EnterCriticalSection(&attributes->cs);
 
     attribute = attributes_find_item(attributes, key, NULL);
@@ -1305,14 +1275,11 @@ static HRESULT WINAPI mfattributes_GetString(IMFAttributes *iface, REFGUID key,
     return hr;
 }
 
-static HRESULT WINAPI mfattributes_GetAllocatedString(IMFAttributes *iface, REFGUID key, WCHAR **value, UINT32 *length)
+HRESULT attributes_GetAllocatedString(struct attributes *attributes, REFGUID key, WCHAR **value, UINT32 *length)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     PROPVARIANT attrval;
     HRESULT hr;
 
-    TRACE("%p, %s, %p, %p.\n", iface, debugstr_attr(key), value, length);
-
     PropVariantInit(&attrval);
     attrval.vt = VT_LPWSTR;
     hr = attributes_get_item(attributes, key, &attrval);
@@ -1325,14 +1292,11 @@ static HRESULT WINAPI mfattributes_GetAllocatedString(IMFAttributes *iface, REFG
     return hr;
 }
 
-static HRESULT WINAPI mfattributes_GetBlobSize(IMFAttributes *iface, REFGUID key, UINT32 *size)
+HRESULT attributes_GetBlobSize(struct attributes *attributes, REFGUID key, UINT32 *size)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     struct attribute *attribute;
     HRESULT hr = S_OK;
 
-    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), size);
-
     EnterCriticalSection(&attributes->cs);
 
     attribute = attributes_find_item(attributes, key, NULL);
@@ -1351,15 +1315,11 @@ static HRESULT WINAPI mfattributes_GetBlobSize(IMFAttributes *iface, REFGUID key
     return hr;
 }
 
-static HRESULT WINAPI mfattributes_GetBlob(IMFAttributes *iface, REFGUID key, UINT8 *buf,
-                UINT32 bufsize, UINT32 *blobsize)
+HRESULT attributes_GetBlob(struct attributes *attributes, REFGUID key, UINT8 *buf, UINT32 bufsize, UINT32 *blobsize)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     struct attribute *attribute;
     HRESULT hr;
 
-    TRACE("%p, %s, %p, %d, %p.\n", iface, debugstr_attr(key), buf, bufsize, blobsize);
-
     EnterCriticalSection(&attributes->cs);
 
     attribute = attributes_find_item(attributes, key, NULL);
@@ -1388,14 +1348,11 @@ static HRESULT WINAPI mfattributes_GetBlob(IMFAttributes *iface, REFGUID key, UI
     return hr;
 }
 
-static HRESULT WINAPI mfattributes_GetAllocatedBlob(IMFAttributes *iface, REFGUID key, UINT8 **buf, UINT32 *size)
+HRESULT attributes_GetAllocatedBlob(struct attributes *attributes, REFGUID key, UINT8 **buf, UINT32 *size)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     PROPVARIANT attrval;
     HRESULT hr;
 
-    TRACE("%p, %s, %p, %p.\n", iface, debugstr_attr(key), buf, size);
-
     attrval.vt = VT_VECTOR | VT_UI1;
     hr = attributes_get_item(attributes, key, &attrval);
     if (SUCCEEDED(hr))
@@ -1407,19 +1364,16 @@ static HRESULT WINAPI mfattributes_GetAllocatedBlob(IMFAttributes *iface, REFGUI
     return hr;
 }
 
-static HRESULT WINAPI mfattributes_GetUnknown(IMFAttributes *iface, REFGUID key, REFIID riid, void **ppv)
+HRESULT attributes_GetUnknown(struct attributes *attributes, REFGUID key, REFIID riid, void **out)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     PROPVARIANT attrval;
     HRESULT hr;
 
-    TRACE("%p, %s, %s, %p.\n", iface, debugstr_attr(key), debugstr_guid(riid), ppv);
-
     PropVariantInit(&attrval);
     attrval.vt = VT_UNKNOWN;
     hr = attributes_get_item(attributes, key, &attrval);
     if (SUCCEEDED(hr))
-        hr = IUnknown_QueryInterface(attrval.u.punkVal, riid, ppv);
+        hr = IUnknown_QueryInterface(attrval.u.punkVal, riid, out);
     PropVariantClear(&attrval);
     return hr;
 }
@@ -1452,13 +1406,10 @@ static HRESULT attributes_set_item(struct attributes *attributes, REFGUID key, R
     return S_OK;
 }
 
-static HRESULT WINAPI mfattributes_SetItem(IMFAttributes *iface, REFGUID key, REFPROPVARIANT value)
+HRESULT attributes_SetItem(struct attributes *attributes, REFGUID key, REFPROPVARIANT value)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     PROPVARIANT empty;
 
-    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), value);
-
     switch (value->vt)
     {
         case MF_ATTRIBUTE_UINT32:
@@ -1476,14 +1427,11 @@ static HRESULT WINAPI mfattributes_SetItem(IMFAttributes *iface, REFGUID key, RE
     }
 }
 
-static HRESULT WINAPI mfattributes_DeleteItem(IMFAttributes *iface, REFGUID key)
+HRESULT attributes_DeleteItem(struct attributes *attributes, REFGUID key)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     struct attribute *attribute;
     size_t index = 0;
 
-    TRACE("%p, %s.\n", iface, debugstr_attr(key));
-
     EnterCriticalSection(&attributes->cs);
 
     if ((attribute = attributes_find_item(attributes, key, &index)))
@@ -1503,12 +1451,8 @@ static HRESULT WINAPI mfattributes_DeleteItem(IMFAttributes *iface, REFGUID key)
     return S_OK;
 }
 
-static HRESULT WINAPI mfattributes_DeleteAllItems(IMFAttributes *iface)
+HRESULT attributes_DeleteAllItems(struct attributes *attributes)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
-
-    TRACE("%p.\n", iface);
-
     EnterCriticalSection(&attributes->cs);
 
     while (attributes->count)
@@ -1524,132 +1468,96 @@ static HRESULT WINAPI mfattributes_DeleteAllItems(IMFAttributes *iface)
     return S_OK;
 }
 
-static HRESULT WINAPI mfattributes_SetUINT32(IMFAttributes *iface, REFGUID key, UINT32 value)
+HRESULT attributes_SetUINT32(struct attributes *attributes, REFGUID key, UINT32 value)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     PROPVARIANT attrval;
 
-    TRACE("%p, %s, %d.\n", iface, debugstr_attr(key), value);
-
     attrval.vt = VT_UI4;
     attrval.u.ulVal = value;
     return attributes_set_item(attributes, key, &attrval);
 }
 
-static HRESULT WINAPI mfattributes_SetUINT64(IMFAttributes *iface, REFGUID key, UINT64 value)
+HRESULT attributes_SetUINT64(struct attributes *attributes, REFGUID key, UINT64 value)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     PROPVARIANT attrval;
 
-    TRACE("%p, %s, %s.\n", iface, debugstr_attr(key), wine_dbgstr_longlong(value));
-
     attrval.vt = VT_UI8;
     attrval.u.uhVal.QuadPart = value;
     return attributes_set_item(attributes, key, &attrval);
 }
 
-static HRESULT WINAPI mfattributes_SetDouble(IMFAttributes *iface, REFGUID key, double value)
+HRESULT attributes_SetDouble(struct attributes *attributes, REFGUID key, double value)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     PROPVARIANT attrval;
 
-    TRACE("%p, %s, %f.\n", iface, debugstr_attr(key), value);
-
     attrval.vt = VT_R8;
     attrval.u.dblVal = value;
     return attributes_set_item(attributes, key, &attrval);
 }
 
-static HRESULT WINAPI mfattributes_SetGUID(IMFAttributes *iface, REFGUID key, REFGUID value)
+HRESULT attributes_SetGUID(struct attributes *attributes, REFGUID key, REFGUID value)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     PROPVARIANT attrval;
 
-    TRACE("%p, %s, %s.\n", iface, debugstr_attr(key), debugstr_mf_guid(value));
-
     InitPropVariantFromCLSID(value, &attrval);
     return attributes_set_item(attributes, key, &attrval);
 }
 
-static HRESULT WINAPI mfattributes_SetString(IMFAttributes *iface, REFGUID key, const WCHAR *value)
+HRESULT attributes_SetString(struct attributes *attributes, REFGUID key, const WCHAR *value)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     PROPVARIANT attrval;
 
-    TRACE("%p, %s, %s.\n", iface, debugstr_attr(key), debugstr_w(value));
-
     attrval.vt = VT_LPWSTR;
     attrval.u.pwszVal = (WCHAR *)value;
     return attributes_set_item(attributes, key, &attrval);
 }
 
-static HRESULT WINAPI mfattributes_SetBlob(IMFAttributes *iface, REFGUID key, const UINT8 *buf, UINT32 size)
+HRESULT attributes_SetBlob(struct attributes *attributes, REFGUID key, const UINT8 *buf, UINT32 size)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     PROPVARIANT attrval;
 
-    TRACE("%p, %s, %p, %u.\n", iface, debugstr_attr(key), buf, size);
-
     attrval.vt = VT_VECTOR | VT_UI1;
     attrval.u.caub.cElems = size;
     attrval.u.caub.pElems = (UINT8 *)buf;
     return attributes_set_item(attributes, key, &attrval);
 }
 
-static HRESULT WINAPI mfattributes_SetUnknown(IMFAttributes *iface, REFGUID key, IUnknown *unknown)
+HRESULT attributes_SetUnknown(struct attributes *attributes, REFGUID key, IUnknown *unknown)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     PROPVARIANT attrval;
 
-    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), unknown);
-
     attrval.vt = VT_UNKNOWN;
     attrval.u.punkVal = unknown;
     return attributes_set_item(attributes, key, &attrval);
 }
 
-static HRESULT WINAPI mfattributes_LockStore(IMFAttributes *iface)
+HRESULT attributes_LockStore(struct attributes *attributes)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
-
-    TRACE("%p.\n", iface);
-
     EnterCriticalSection(&attributes->cs);
 
     return S_OK;
 }
 
-static HRESULT WINAPI mfattributes_UnlockStore(IMFAttributes *iface)
+HRESULT attributes_UnlockStore(struct attributes *attributes)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
-
-    TRACE("%p.\n", iface);
-
     LeaveCriticalSection(&attributes->cs);
 
     return S_OK;
 }
 
-static HRESULT WINAPI mfattributes_GetCount(IMFAttributes *iface, UINT32 *items)
+HRESULT attributes_GetCount(struct attributes *attributes, UINT32 *count)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
-
-    TRACE("%p, %p.\n", iface, items);
-
     EnterCriticalSection(&attributes->cs);
-    *items = attributes->count;
+    *count = attributes->count;
     LeaveCriticalSection(&attributes->cs);
 
     return S_OK;
 }
 
-static HRESULT WINAPI mfattributes_GetItemByIndex(IMFAttributes *iface, UINT32 index, GUID *key, PROPVARIANT *value)
+HRESULT attributes_GetItemByIndex(struct attributes *attributes, UINT32 index, GUID *key, PROPVARIANT *value)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     HRESULT hr = S_OK;
 
-    TRACE("%p, %u, %p, %p.\n", iface, index, key, value);
-
     EnterCriticalSection(&attributes->cs);
 
     if (index < attributes->count)
@@ -1666,14 +1574,11 @@ static HRESULT WINAPI mfattributes_GetItemByIndex(IMFAttributes *iface, UINT32 i
     return hr;
 }
 
-static HRESULT WINAPI mfattributes_CopyAllItems(IMFAttributes *iface, IMFAttributes *dest)
+HRESULT attributes_CopyAllItems(struct attributes *attributes, IMFAttributes *dest)
 {
-    struct attributes *attributes = impl_from_IMFAttributes(iface);
     HRESULT hr = S_OK;
     size_t i;
 
-    TRACE("%p, %p.\n", iface, dest);
-
     EnterCriticalSection(&attributes->cs);
 
     IMFAttributes_LockStore(dest);
@@ -1694,6 +1599,279 @@ static HRESULT WINAPI mfattributes_CopyAllItems(IMFAttributes *iface, IMFAttribu
     return hr;
 }
 
+static HRESULT WINAPI mfattributes_GetItem(IMFAttributes *iface, REFGUID key, PROPVARIANT *value)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), value);
+
+    return attributes_GetItem(attributes, key, value);
+}
+
+static HRESULT WINAPI mfattributes_GetItemType(IMFAttributes *iface, REFGUID key, MF_ATTRIBUTE_TYPE *type)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), type);
+
+    return attributes_GetItemType(attributes, key, type);
+}
+
+static HRESULT WINAPI mfattributes_CompareItem(IMFAttributes *iface, REFGUID key, REFPROPVARIANT value, BOOL *result)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %p, %p.\n", iface, debugstr_attr(key), value, result);
+
+    return attributes_CompareItem(attributes, key, value, result);
+}
+
+static HRESULT WINAPI mfattributes_Compare(IMFAttributes *iface, IMFAttributes *theirs,
+        MF_ATTRIBUTES_MATCH_TYPE match_type, BOOL *ret)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %p, %d, %p.\n", iface, theirs, match_type, ret);
+
+    return attributes_Compare(attributes, theirs, match_type, ret);
+}
+
+static HRESULT WINAPI mfattributes_GetUINT32(IMFAttributes *iface, REFGUID key, UINT32 *value)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), value);
+
+    return attributes_GetUINT32(attributes, key, value);
+}
+
+static HRESULT WINAPI mfattributes_GetUINT64(IMFAttributes *iface, REFGUID key, UINT64 *value)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), value);
+
+    return attributes_GetUINT64(attributes, key, value);
+}
+
+static HRESULT WINAPI mfattributes_GetDouble(IMFAttributes *iface, REFGUID key, double *value)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), value);
+
+    return attributes_GetDouble(attributes, key, value);
+}
+
+static HRESULT WINAPI mfattributes_GetGUID(IMFAttributes *iface, REFGUID key, GUID *value)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), value);
+
+    return attributes_GetGUID(attributes, key, value);
+}
+
+static HRESULT WINAPI mfattributes_GetStringLength(IMFAttributes *iface, REFGUID key, UINT32 *length)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), length);
+
+    return attributes_GetStringLength(attributes, key, length);
+}
+
+static HRESULT WINAPI mfattributes_GetString(IMFAttributes *iface, REFGUID key, WCHAR *value,
+        UINT32 size, UINT32 *length)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %p, %d, %p.\n", iface, debugstr_attr(key), value, size, length);
+
+    return attributes_GetString(attributes, key, value, size, length);
+}
+
+static HRESULT WINAPI mfattributes_GetAllocatedString(IMFAttributes *iface, REFGUID key, WCHAR **value, UINT32 *length)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %p, %p.\n", iface, debugstr_attr(key), value, length);
+
+    return attributes_GetAllocatedString(attributes, key, value, length);
+}
+
+static HRESULT WINAPI mfattributes_GetBlobSize(IMFAttributes *iface, REFGUID key, UINT32 *size)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), size);
+
+    return attributes_GetBlobSize(attributes, key, size);
+}
+
+static HRESULT WINAPI mfattributes_GetBlob(IMFAttributes *iface, REFGUID key, UINT8 *buf,
+                UINT32 bufsize, UINT32 *blobsize)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %p, %d, %p.\n", iface, debugstr_attr(key), buf, bufsize, blobsize);
+
+    return attributes_GetBlob(attributes, key, buf, bufsize, blobsize);
+}
+
+static HRESULT WINAPI mfattributes_GetAllocatedBlob(IMFAttributes *iface, REFGUID key, UINT8 **buf, UINT32 *size)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %p, %p.\n", iface, debugstr_attr(key), buf, size);
+
+    return attributes_GetAllocatedBlob(attributes, key, buf, size);
+}
+
+static HRESULT WINAPI mfattributes_GetUnknown(IMFAttributes *iface, REFGUID key, REFIID riid, void **out)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %s, %p.\n", iface, debugstr_attr(key), debugstr_guid(riid), out);
+
+    return attributes_GetUnknown(attributes, key, riid, out);
+}
+
+static HRESULT WINAPI mfattributes_SetItem(IMFAttributes *iface, REFGUID key, REFPROPVARIANT value)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), value);
+
+    return attributes_SetItem(attributes, key, value);
+}
+
+static HRESULT WINAPI mfattributes_DeleteItem(IMFAttributes *iface, REFGUID key)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s.\n", iface, debugstr_attr(key));
+
+    return attributes_DeleteItem(attributes, key);
+}
+
+static HRESULT WINAPI mfattributes_DeleteAllItems(IMFAttributes *iface)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p.\n", iface);
+
+    return attributes_DeleteAllItems(attributes);
+}
+
+static HRESULT WINAPI mfattributes_SetUINT32(IMFAttributes *iface, REFGUID key, UINT32 value)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %u.\n", iface, debugstr_attr(key), value);
+
+    return attributes_SetUINT32(attributes, key, value);
+}
+
+static HRESULT WINAPI mfattributes_SetUINT64(IMFAttributes *iface, REFGUID key, UINT64 value)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %s.\n", iface, debugstr_attr(key), wine_dbgstr_longlong(value));
+
+    return attributes_SetUINT64(attributes, key, value);
+}
+
+static HRESULT WINAPI mfattributes_SetDouble(IMFAttributes *iface, REFGUID key, double value)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %f.\n", iface, debugstr_attr(key), value);
+
+    return attributes_SetDouble(attributes, key, value);
+}
+
+static HRESULT WINAPI mfattributes_SetGUID(IMFAttributes *iface, REFGUID key, REFGUID value)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %s.\n", iface, debugstr_attr(key), debugstr_mf_guid(value));
+
+    return attributes_SetGUID(attributes, key, value);
+}
+
+static HRESULT WINAPI mfattributes_SetString(IMFAttributes *iface, REFGUID key, const WCHAR *value)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %s.\n", iface, debugstr_attr(key), debugstr_w(value));
+
+    return attributes_SetString(attributes, key, value);
+}
+
+static HRESULT WINAPI mfattributes_SetBlob(IMFAttributes *iface, REFGUID key, const UINT8 *buf, UINT32 size)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %p, %u.\n", iface, debugstr_attr(key), buf, size);
+
+    return attributes_SetBlob(attributes, key, buf, size);
+}
+
+static HRESULT WINAPI mfattributes_SetUnknown(IMFAttributes *iface, REFGUID key, IUnknown *unknown)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), unknown);
+
+    return attributes_SetUnknown(attributes, key, unknown);
+}
+
+static HRESULT WINAPI mfattributes_LockStore(IMFAttributes *iface)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p.\n", iface);
+
+    return attributes_LockStore(attributes);
+}
+
+static HRESULT WINAPI mfattributes_UnlockStore(IMFAttributes *iface)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p.\n", iface);
+
+    return attributes_UnlockStore(attributes);
+}
+
+static HRESULT WINAPI mfattributes_GetCount(IMFAttributes *iface, UINT32 *count)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %p.\n", iface, count);
+
+    return attributes_GetCount(attributes, count);
+}
+
+static HRESULT WINAPI mfattributes_GetItemByIndex(IMFAttributes *iface, UINT32 index, GUID *key, PROPVARIANT *value)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %u, %p, %p.\n", iface, index, key, value);
+
+    return attributes_GetItemByIndex(attributes, index, key, value);
+}
+
+static HRESULT WINAPI mfattributes_CopyAllItems(IMFAttributes *iface, IMFAttributes *dest)
+{
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+
+    TRACE("%p, %p.\n", iface, dest);
+
+    return attributes_CopyAllItems(attributes, dest);
+}
+
 static const IMFAttributesVtbl mfattributes_vtbl =
 {
     mfattributes_QueryInterface,
diff --git a/dlls/mfplat/mediatype.c b/dlls/mfplat/mediatype.c
index 6a8bd97557..8ef6da9cf8 100644
--- a/dlls/mfplat/mediatype.c
+++ b/dlls/mfplat/mediatype.c
@@ -133,7 +133,7 @@ static HRESULT WINAPI mediatype_GetItem(IMFMediaType *iface, REFGUID key, PROPVA
 
     TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), value);
 
-    return IMFAttributes_GetItem(&media_type->attributes.IMFAttributes_iface, key, value);
+    return attributes_GetItem(&media_type->attributes, key, value);
 }
 
 static HRESULT WINAPI mediatype_GetItemType(IMFMediaType *iface, REFGUID key, MF_ATTRIBUTE_TYPE *type)
@@ -142,7 +142,7 @@ static HRESULT WINAPI mediatype_GetItemType(IMFMediaType *iface, REFGUID key, MF
 
     TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), type);
 
-    return IMFAttributes_GetItemType(&media_type->attributes.IMFAttributes_iface, key, type);
+    return attributes_GetItemType(&media_type->attributes, key, type);
 }
 
 static HRESULT WINAPI mediatype_CompareItem(IMFMediaType *iface, REFGUID key, REFPROPVARIANT value, BOOL *result)
@@ -151,7 +151,7 @@ static HRESULT WINAPI mediatype_CompareItem(IMFMediaType *iface, REFGUID key, RE
 
     TRACE("%p, %s, %p, %p.\n", iface, debugstr_attr(key), value, result);
 
-    return IMFAttributes_CompareItem(&media_type->attributes.IMFAttributes_iface, key, value, result);
+    return attributes_CompareItem(&media_type->attributes, key, value, result);
 }
 
 static HRESULT WINAPI mediatype_Compare(IMFMediaType *iface, IMFAttributes *attrs, MF_ATTRIBUTES_MATCH_TYPE type,
@@ -161,7 +161,7 @@ static HRESULT WINAPI mediatype_Compare(IMFMediaType *iface, IMFAttributes *attr
 
     TRACE("%p, %p, %d, %p.\n", iface, attrs, type, result);
 
-    return IMFAttributes_Compare(&media_type->attributes.IMFAttributes_iface, attrs, type, result);
+    return attributes_Compare(&media_type->attributes, attrs, type, result);
 }
 
 static HRESULT WINAPI mediatype_GetUINT32(IMFMediaType *iface, REFGUID key, UINT32 *value)
@@ -170,7 +170,7 @@ static HRESULT WINAPI mediatype_GetUINT32(IMFMediaType *iface, REFGUID key, UINT
 
     TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), value);
 
-    return IMFAttributes_GetUINT32(&media_type->attributes.IMFAttributes_iface, key, value);
+    return attributes_GetUINT32(&media_type->attributes, key, value);
 }
 
 static HRESULT WINAPI mediatype_GetUINT64(IMFMediaType *iface, REFGUID key, UINT64 *value)
@@ -179,7 +179,7 @@ static HRESULT WINAPI mediatype_GetUINT64(IMFMediaType *iface, REFGUID key, UINT
 
     TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), value);
 
-    return IMFAttributes_GetUINT64(&media_type->attributes.IMFAttributes_iface, key, value);
+    return attributes_GetUINT64(&media_type->attributes, key, value);
 }
 
 static HRESULT WINAPI mediatype_GetDouble(IMFMediaType *iface, REFGUID key, double *value)
@@ -188,7 +188,7 @@ static HRESULT WINAPI mediatype_GetDouble(IMFMediaType *iface, REFGUID key, doub
 
     TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), value);
 
-    return IMFAttributes_GetDouble(&media_type->attributes.IMFAttributes_iface, key, value);
+    return attributes_GetDouble(&media_type->attributes, key, value);
 }
 
 static HRESULT WINAPI mediatype_GetGUID(IMFMediaType *iface, REFGUID key, GUID *value)
@@ -197,7 +197,7 @@ static HRESULT WINAPI mediatype_GetGUID(IMFMediaType *iface, REFGUID key, GUID *
 
     TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), value);
 
-    return IMFAttributes_GetGUID(&media_type->attributes.IMFAttributes_iface, key, value);
+    return attributes_GetGUID(&media_type->attributes, key, value);
 }
 
 static HRESULT WINAPI mediatype_GetStringLength(IMFMediaType *iface, REFGUID key, UINT32 *length)
@@ -206,7 +206,7 @@ static HRESULT WINAPI mediatype_GetStringLength(IMFMediaType *iface, REFGUID key
 
     TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), length);
 
-    return IMFAttributes_GetStringLength(&media_type->attributes.IMFAttributes_iface, key, length);
+    return attributes_GetStringLength(&media_type->attributes, key, length);
 }
 
 static HRESULT WINAPI mediatype_GetString(IMFMediaType *iface, REFGUID key, WCHAR *value,
@@ -216,7 +216,7 @@ static HRESULT WINAPI mediatype_GetString(IMFMediaType *iface, REFGUID key, WCHA
 
     TRACE("%p, %s, %p, %u, %p.\n", iface, debugstr_attr(key), value, size, length);
 
-    return IMFAttributes_GetString(&media_type->attributes.IMFAttributes_iface, key, value, size, length);
+    return attributes_GetString(&media_type->attributes, key, value, size, length);
 }
 
 static HRESULT WINAPI mediatype_GetAllocatedString(IMFMediaType *iface, REFGUID key,
@@ -226,7 +226,7 @@ static HRESULT WINAPI mediatype_GetAllocatedString(IMFMediaType *iface, REFGUID
 
     TRACE("%p, %s, %p, %p.\n", iface, debugstr_attr(key), value, length);
 
-    return IMFAttributes_GetAllocatedString(&media_type->attributes.IMFAttributes_iface, key, value, length);
+    return attributes_GetAllocatedString(&media_type->attributes, key, value, length);
 }
 
 static HRESULT WINAPI mediatype_GetBlobSize(IMFMediaType *iface, REFGUID key, UINT32 *size)
@@ -235,7 +235,7 @@ static HRESULT WINAPI mediatype_GetBlobSize(IMFMediaType *iface, REFGUID key, UI
 
     TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), size);
 
-    return IMFAttributes_GetBlobSize(&media_type->attributes.IMFAttributes_iface, key, size);
+    return attributes_GetBlobSize(&media_type->attributes, key, size);
 }
 
 static HRESULT WINAPI mediatype_GetBlob(IMFMediaType *iface, REFGUID key, UINT8 *buf,
@@ -245,7 +245,7 @@ static HRESULT WINAPI mediatype_GetBlob(IMFMediaType *iface, REFGUID key, UINT8
 
     TRACE("%p, %s, %p, %u, %p.\n", iface, debugstr_attr(key), buf, bufsize, blobsize);
 
-    return IMFAttributes_GetBlob(&media_type->attributes.IMFAttributes_iface, key, buf, bufsize, blobsize);
+    return attributes_GetBlob(&media_type->attributes, key, buf, bufsize, blobsize);
 }
 
 static HRESULT WINAPI mediatype_GetAllocatedBlob(IMFMediaType *iface, REFGUID key, UINT8 **buf, UINT32 *size)
@@ -254,7 +254,7 @@ static HRESULT WINAPI mediatype_GetAllocatedBlob(IMFMediaType *iface, REFGUID ke
 
     TRACE("%p, %s, %p, %p.\n", iface, debugstr_attr(key), buf, size);
 
-    return IMFAttributes_GetAllocatedBlob(&media_type->attributes.IMFAttributes_iface, key, buf, size);
+    return attributes_GetAllocatedBlob(&media_type->attributes, key, buf, size);
 }
 
 static HRESULT WINAPI mediatype_GetUnknown(IMFMediaType *iface, REFGUID key, REFIID riid, void **obj)
@@ -263,7 +263,7 @@ static HRESULT WINAPI mediatype_GetUnknown(IMFMediaType *iface, REFGUID key, REF
 
     TRACE("%p, %s, %s, %p.\n", iface, debugstr_attr(key), debugstr_guid(riid), obj);
 
-    return IMFAttributes_GetUnknown(&media_type->attributes.IMFAttributes_iface, key, riid, obj);
+    return attributes_GetUnknown(&media_type->attributes, key, riid, obj);
 }
 
 static HRESULT WINAPI mediatype_SetItem(IMFMediaType *iface, REFGUID key, REFPROPVARIANT value)
@@ -272,7 +272,7 @@ static HRESULT WINAPI mediatype_SetItem(IMFMediaType *iface, REFGUID key, REFPRO
 
     TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), value);
 
-    return IMFAttributes_SetItem(&media_type->attributes.IMFAttributes_iface, key, value);
+    return attributes_SetItem(&media_type->attributes, key, value);
 }
 
 static HRESULT WINAPI mediatype_DeleteItem(IMFMediaType *iface, REFGUID key)
@@ -281,7 +281,7 @@ static HRESULT WINAPI mediatype_DeleteItem(IMFMediaType *iface, REFGUID key)
 
     TRACE("%p, %s.\n", iface, debugstr_attr(key));
 
-    return IMFAttributes_DeleteItem(&media_type->attributes.IMFAttributes_iface, key);
+    return attributes_DeleteItem(&media_type->attributes, key);
 }
 
 static HRESULT WINAPI mediatype_DeleteAllItems(IMFMediaType *iface)
@@ -290,7 +290,7 @@ static HRESULT WINAPI mediatype_DeleteAllItems(IMFMediaType *iface)
 
     TRACE("%p.\n", iface);
 
-    return IMFAttributes_DeleteAllItems(&media_type->attributes.IMFAttributes_iface);
+    return attributes_DeleteAllItems(&media_type->attributes);
 }
 
 static HRESULT WINAPI mediatype_SetUINT32(IMFMediaType *iface, REFGUID key, UINT32 value)
@@ -299,7 +299,7 @@ static HRESULT WINAPI mediatype_SetUINT32(IMFMediaType *iface, REFGUID key, UINT
 
     TRACE("%p, %s, %u.\n", iface, debugstr_attr(key), value);
 
-    return IMFAttributes_SetUINT32(&media_type->attributes.IMFAttributes_iface, key, value);
+    return attributes_SetUINT32(&media_type->attributes, key, value);
 }
 
 static HRESULT WINAPI mediatype_SetUINT64(IMFMediaType *iface, REFGUID key, UINT64 value)
@@ -308,7 +308,7 @@ static HRESULT WINAPI mediatype_SetUINT64(IMFMediaType *iface, REFGUID key, UINT
 
     TRACE("%p, %s, %s.\n", iface, debugstr_attr(key), wine_dbgstr_longlong(value));
 
-    return IMFAttributes_SetUINT64(&media_type->attributes.IMFAttributes_iface, key, value);
+    return attributes_SetUINT64(&media_type->attributes, key, value);
 }
 
 static HRESULT WINAPI mediatype_SetDouble(IMFMediaType *iface, REFGUID key, double value)
@@ -317,7 +317,7 @@ static HRESULT WINAPI mediatype_SetDouble(IMFMediaType *iface, REFGUID key, doub
 
     TRACE("%p, %s, %f.\n", iface, debugstr_attr(key), value);
 
-    return IMFAttributes_SetDouble(&media_type->attributes.IMFAttributes_iface, key, value);
+    return attributes_SetDouble(&media_type->attributes, key, value);
 }
 
 static HRESULT WINAPI mediatype_SetGUID(IMFMediaType *iface, REFGUID key, REFGUID value)
@@ -326,7 +326,7 @@ static HRESULT WINAPI mediatype_SetGUID(IMFMediaType *iface, REFGUID key, REFGUI
 
     TRACE("%p, %s, %s.\n", iface, debugstr_attr(key), debugstr_guid(value));
 
-    return IMFAttributes_SetGUID(&media_type->attributes.IMFAttributes_iface, key, value);
+    return attributes_SetGUID(&media_type->attributes, key, value);
 }
 
 static HRESULT WINAPI mediatype_SetString(IMFMediaType *iface, REFGUID key, const WCHAR *value)
@@ -335,7 +335,7 @@ static HRESULT WINAPI mediatype_SetString(IMFMediaType *iface, REFGUID key, cons
 
     TRACE("%p, %s, %s.\n", iface, debugstr_attr(key), debugstr_w(value));
 
-    return IMFAttributes_SetString(&media_type->attributes.IMFAttributes_iface, key, value);
+    return attributes_SetString(&media_type->attributes, key, value);
 }
 
 static HRESULT WINAPI mediatype_SetBlob(IMFMediaType *iface, REFGUID key, const UINT8 *buf, UINT32 size)
@@ -344,7 +344,7 @@ static HRESULT WINAPI mediatype_SetBlob(IMFMediaType *iface, REFGUID key, const
 
     TRACE("%p, %s, %p, %u.\n", iface, debugstr_attr(key), buf, size);
 
-    return IMFAttributes_SetBlob(&media_type->attributes.IMFAttributes_iface, key, buf, size);
+    return attributes_SetBlob(&media_type->attributes, key, buf, size);
 }
 
 static HRESULT WINAPI mediatype_SetUnknown(IMFMediaType *iface, REFGUID key, IUnknown *unknown)
@@ -353,7 +353,7 @@ static HRESULT WINAPI mediatype_SetUnknown(IMFMediaType *iface, REFGUID key, IUn
 
     TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), unknown);
 
-    return IMFAttributes_SetUnknown(&media_type->attributes.IMFAttributes_iface, key, unknown);
+    return attributes_SetUnknown(&media_type->attributes, key, unknown);
 }
 
 static HRESULT WINAPI mediatype_LockStore(IMFMediaType *iface)
@@ -362,7 +362,7 @@ static HRESULT WINAPI mediatype_LockStore(IMFMediaType *iface)
 
     TRACE("%p.\n", iface);
 
-    return IMFAttributes_LockStore(&media_type->attributes.IMFAttributes_iface);
+    return attributes_LockStore(&media_type->attributes);
 }
 
 static HRESULT WINAPI mediatype_UnlockStore(IMFMediaType *iface)
@@ -371,7 +371,7 @@ static HRESULT WINAPI mediatype_UnlockStore(IMFMediaType *iface)
 
     TRACE("%p.\n", iface);
 
-    return IMFAttributes_UnlockStore(&media_type->attributes.IMFAttributes_iface);
+    return attributes_UnlockStore(&media_type->attributes);
 }
 
 static HRESULT WINAPI mediatype_GetCount(IMFMediaType *iface, UINT32 *count)
@@ -380,7 +380,7 @@ static HRESULT WINAPI mediatype_GetCount(IMFMediaType *iface, UINT32 *count)
 
     TRACE("%p, %p.\n", iface, count);
 
-    return IMFAttributes_GetCount(&media_type->attributes.IMFAttributes_iface, count);
+    return attributes_GetCount(&media_type->attributes, count);
 }
 
 static HRESULT WINAPI mediatype_GetItemByIndex(IMFMediaType *iface, UINT32 index, GUID *key, PROPVARIANT *value)
@@ -389,7 +389,7 @@ static HRESULT WINAPI mediatype_GetItemByIndex(IMFMediaType *iface, UINT32 index
 
     TRACE("%p, %u, %p, %p.\n", iface, index, key, value);
 
-    return IMFAttributes_GetItemByIndex(&media_type->attributes.IMFAttributes_iface, index, key, value);
+    return attributes_GetItemByIndex(&media_type->attributes, index, key, value);
 }
 
 static HRESULT WINAPI mediatype_CopyAllItems(IMFMediaType *iface, IMFAttributes *dest)
@@ -398,14 +398,16 @@ static HRESULT WINAPI mediatype_CopyAllItems(IMFMediaType *iface, IMFAttributes
 
     TRACE("%p, %p.\n", iface, dest);
 
-    return IMFAttributes_CopyAllItems(&media_type->attributes.IMFAttributes_iface, dest);
+    return attributes_CopyAllItems(&media_type->attributes, dest);
 }
 
 static HRESULT WINAPI mediatype_GetMajorType(IMFMediaType *iface, GUID *guid)
 {
     struct media_type *media_type = impl_from_IMFMediaType(iface);
+
     TRACE("%p, %p.\n", iface, guid);
-    return IMFAttributes_GetGUID(&media_type->attributes.IMFAttributes_iface, &MF_MT_MAJOR_TYPE, guid);
+
+    return attributes_GetGUID(&media_type->attributes, &MF_MT_MAJOR_TYPE, guid);
 }
 
 static HRESULT WINAPI mediatype_IsCompressedFormat(IMFMediaType *iface, BOOL *compressed)
@@ -415,8 +417,7 @@ static HRESULT WINAPI mediatype_IsCompressedFormat(IMFMediaType *iface, BOOL *co
 
     TRACE("%p, %p.\n", iface, compressed);
 
-    if (FAILED(IMFAttributes_GetUINT32(&media_type->attributes.IMFAttributes_iface,
-            &MF_MT_ALL_SAMPLES_INDEPENDENT, &value)))
+    if (FAILED(attributes_GetUINT32(&media_type->attributes, &MF_MT_ALL_SAMPLES_INDEPENDENT, &value)))
     {
         value = 0;
     }
diff --git a/dlls/mfplat/mfplat_private.h b/dlls/mfplat/mfplat_private.h
index 18c9cc0157..5b183d41ee 100644
--- a/dlls/mfplat/mfplat_private.h
+++ b/dlls/mfplat/mfplat_private.h
@@ -44,6 +44,45 @@ extern HRESULT init_attributes_object(struct attributes *object, UINT32 size) DE
 extern void clear_attributes_object(struct attributes *object) DECLSPEC_HIDDEN;
 extern const char *debugstr_attr(const GUID *guid) DECLSPEC_HIDDEN;
 
+extern HRESULT attributes_GetItem(struct attributes *object, REFGUID key, PROPVARIANT *value) DECLSPEC_HIDDEN;
+extern HRESULT attributes_GetItemType(struct attributes *object, REFGUID key, MF_ATTRIBUTE_TYPE *type) DECLSPEC_HIDDEN;
+extern HRESULT attributes_CompareItem(struct attributes *object, REFGUID key, REFPROPVARIANT value,
+        BOOL *result) DECLSPEC_HIDDEN;
+extern HRESULT attributes_Compare(struct attributes *object, IMFAttributes *theirs,
+        MF_ATTRIBUTES_MATCH_TYPE match_type, BOOL *ret) DECLSPEC_HIDDEN;
+extern HRESULT attributes_GetUINT32(struct attributes *object, REFGUID key, UINT32 *value) DECLSPEC_HIDDEN;
+extern HRESULT attributes_GetUINT64(struct attributes *object, REFGUID key, UINT64 *value) DECLSPEC_HIDDEN;
+extern HRESULT attributes_GetDouble(struct attributes *object, REFGUID key, double *value) DECLSPEC_HIDDEN;
+extern HRESULT attributes_GetGUID(struct attributes *object, REFGUID key, GUID *value) DECLSPEC_HIDDEN;
+extern HRESULT attributes_GetStringLength(struct attributes *object, REFGUID key, UINT32 *length) DECLSPEC_HIDDEN;
+extern HRESULT attributes_GetString(struct attributes *object, REFGUID key, WCHAR *value, UINT32 size,
+        UINT32 *length) DECLSPEC_HIDDEN;
+extern HRESULT attributes_GetAllocatedString(struct attributes *object, REFGUID key, WCHAR **value,
+        UINT32 *length) DECLSPEC_HIDDEN;
+extern HRESULT attributes_GetBlobSize(struct attributes *object, REFGUID key, UINT32 *size) DECLSPEC_HIDDEN;
+extern HRESULT attributes_GetBlob(struct attributes *object, REFGUID key, UINT8 *buf, UINT32 bufsize,
+        UINT32 *blobsize) DECLSPEC_HIDDEN;
+extern HRESULT attributes_GetAllocatedBlob(struct attributes *object, REFGUID key, UINT8 **buf,
+        UINT32 *size) DECLSPEC_HIDDEN;
+extern HRESULT attributes_GetUnknown(struct attributes *object, REFGUID key, REFIID riid, void **out) DECLSPEC_HIDDEN;
+extern HRESULT attributes_SetItem(struct attributes *object, REFGUID key, REFPROPVARIANT value) DECLSPEC_HIDDEN;
+extern HRESULT attributes_DeleteItem(struct attributes *object, REFGUID key) DECLSPEC_HIDDEN;
+extern HRESULT attributes_DeleteAllItems(struct attributes *object) DECLSPEC_HIDDEN;
+extern HRESULT attributes_SetUINT32(struct attributes *object, REFGUID key, UINT32 value) DECLSPEC_HIDDEN;
+extern HRESULT attributes_SetUINT64(struct attributes *object, REFGUID key, UINT64 value) DECLSPEC_HIDDEN;
+extern HRESULT attributes_SetDouble(struct attributes *object, REFGUID key, double value) DECLSPEC_HIDDEN;
+extern HRESULT attributes_SetGUID(struct attributes *object, REFGUID key, REFGUID value) DECLSPEC_HIDDEN;
+extern HRESULT attributes_SetString(struct attributes *object, REFGUID key, const WCHAR *value) DECLSPEC_HIDDEN;
+extern HRESULT attributes_SetBlob(struct attributes *object, REFGUID key, const UINT8 *buf,
+        UINT32 size) DECLSPEC_HIDDEN;
+extern HRESULT attributes_SetUnknown(struct attributes *object, REFGUID key, IUnknown *unknown) DECLSPEC_HIDDEN;
+extern HRESULT attributes_LockStore(struct attributes *object) DECLSPEC_HIDDEN;
+extern HRESULT attributes_UnlockStore(struct attributes *object) DECLSPEC_HIDDEN;
+extern HRESULT attributes_GetCount(struct attributes *object, UINT32 *items) DECLSPEC_HIDDEN;
+extern HRESULT attributes_GetItemByIndex(struct attributes *object, UINT32 index, GUID *key,
+        PROPVARIANT *value) DECLSPEC_HIDDEN;
+extern HRESULT attributes_CopyAllItems(struct attributes *object, IMFAttributes *dest) DECLSPEC_HIDDEN;
+
 extern void init_system_queues(void) DECLSPEC_HIDDEN;
 extern void shutdown_system_queues(void) DECLSPEC_HIDDEN;
 extern BOOL is_platform_locked(void) DECLSPEC_HIDDEN;
-- 
2.20.1




More information about the wine-devel mailing list