[v2 PATCH 6/8] mfplat: Add support for GUID attributes.

Nikolay Sivov nsivov at codeweavers.com
Fri Mar 15 05:56:47 CDT 2019


From: Jactry Zeng <jzeng at codeweavers.com>

Signed-off-by: Jactry Zeng <jzeng at codeweavers.com>
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/mfplat/main.c         | 22 ++++++++++++++++++----
 dlls/mfplat/tests/mfplat.c | 14 ++++----------
 2 files changed, 22 insertions(+), 14 deletions(-)

diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c
index 7c3bad3e1f..30bb808f6a 100644
--- a/dlls/mfplat/main.c
+++ b/dlls/mfplat/main.c
@@ -796,9 +796,19 @@ static HRESULT WINAPI mfattributes_GetDouble(IMFAttributes *iface, REFGUID key,
 
 static HRESULT WINAPI mfattributes_GetGUID(IMFAttributes *iface, REFGUID key, GUID *value)
 {
-    FIXME("%p, %s, %p.\n", iface, debugstr_attr(key), value);
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+    PROPVARIANT attrval;
+    HRESULT hr;
 
-    return E_NOTIMPL;
+    TRACE("%p, %s, %p.\n", iface, debugstr_attr(key), value);
+
+    PropVariantInit(&attrval);
+    attrval.vt = VT_CLSID;
+    hr = attributes_get_item(attributes, key, &attrval);
+    if (SUCCEEDED(hr))
+        hr = PropVariantToGUID(&attrval, value);
+
+    return hr;
 }
 
 static HRESULT WINAPI mfattributes_GetStringLength(IMFAttributes *iface, REFGUID key, UINT32 *length)
@@ -1037,9 +1047,13 @@ static HRESULT WINAPI mfattributes_SetDouble(IMFAttributes *iface, REFGUID key,
 
 static HRESULT WINAPI mfattributes_SetGUID(IMFAttributes *iface, REFGUID key, REFGUID value)
 {
-    FIXME("%p, %s, %s.\n", iface, debugstr_attr(key), debugstr_guid(value));
+    struct attributes *attributes = impl_from_IMFAttributes(iface);
+    PROPVARIANT attrval;
 
-    return E_NOTIMPL;
+    TRACE("%p, %s, %s.\n", iface, debugstr_attr(key), debugstr_guid(value));
+
+    InitPropVariantFromCLSID(value, &attrval);
+    return attributes_set_item(attributes, key, &attrval);
 }
 
 static HRESULT WINAPI mfattributes_SetString(IMFAttributes *iface, REFGUID key, const WCHAR *value)
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c
index 613c2aa264..73367b67ad 100644
--- a/dlls/mfplat/tests/mfplat.c
+++ b/dlls/mfplat/tests/mfplat.c
@@ -350,7 +350,6 @@ if(0)
     ok(hr == S_OK, "got 0x%08x\n", hr);
 
     hr = IMFMediaType_GetMajorType(mediatype, &guid);
-todo_wine
     ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#x.\n", hr);
 
     compressed = FALSE;
@@ -376,13 +375,12 @@ todo_wine
     ok(!compressed, "Unexpected value %d.\n", compressed);
 
     hr = IMFMediaType_SetGUID(mediatype, &MF_MT_MAJOR_TYPE, &MFMediaType_Video);
-    todo_wine ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(hr == S_OK, "Failed to set GUID value, hr %#x.\n", hr);
 
     hr = IMFMediaType_GetMajorType(mediatype, &guid);
-todo_wine {
     ok(hr == S_OK, "Failed to get major type, hr %#x.\n", hr);
     ok(IsEqualGUID(&guid, &MFMediaType_Video), "Unexpected major type.\n");
-}
+
     /* IsEqual() */
     hr = MFCreateMediaType(&mediatype2);
     ok(hr == S_OK, "Failed to create media type, hr %#x.\n", hr);
@@ -394,19 +392,16 @@ todo_wine {
 
     /* Different major types. */
     hr = IMFMediaType_SetGUID(mediatype2, &MF_MT_MAJOR_TYPE, &MFMediaType_Audio);
-todo_wine
     ok(hr == S_OK, "Failed to set major type, hr %#x.\n", hr);
 
     flags = 0;
     hr = IMFMediaType_IsEqual(mediatype, mediatype2, &flags);
-todo_wine {
     ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr);
     ok(flags == (MF_MEDIATYPE_EQUAL_FORMAT_TYPES | MF_MEDIATYPE_EQUAL_FORMAT_USER_DATA),
             "Unexpected flags %#x.\n", flags);
-}
+
     /* Same major types, different subtypes. */
     hr = IMFMediaType_SetGUID(mediatype2, &MF_MT_MAJOR_TYPE, &MFMediaType_Video);
-todo_wine
     ok(hr == S_OK, "Failed to set major type, hr %#x.\n", hr);
 
     flags = 0;
@@ -417,13 +412,12 @@ todo_wine {
             | MF_MEDIATYPE_EQUAL_FORMAT_USER_DATA), "Unexpected flags %#x.\n", flags);
 }
     hr = IMFMediaType_SetGUID(mediatype, &MF_MT_SUBTYPE, &MFVideoFormat_RGB32);
-todo_wine
     ok(hr == S_OK, "Failed to set subtype, hr %#x.\n", hr);
 
     flags = 0;
     hr = IMFMediaType_IsEqual(mediatype, mediatype2, &flags);
-todo_wine {
     ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr);
+todo_wine {
     ok(flags == (MF_MEDIATYPE_EQUAL_MAJOR_TYPES | MF_MEDIATYPE_EQUAL_FORMAT_DATA | MF_MEDIATYPE_EQUAL_FORMAT_USER_DATA),
             "Unexpected flags %#x.\n", flags);
 }
-- 
2.20.1




More information about the wine-devel mailing list