Jactry Zeng : mfplat: Add support for GUID attributes.
Alexandre Julliard
julliard at winehq.org
Fri Mar 15 15:20:01 CDT 2019
Module: wine
Branch: master
Commit: 2035055a5ae3a9f9d84c2ebecaf166c86fba9d72
URL: https://source.winehq.org/git/wine.git/?a=commit;h=2035055a5ae3a9f9d84c2ebecaf166c86fba9d72
Author: Jactry Zeng <jzeng at codeweavers.com>
Date: Fri Mar 15 13:56:47 2019 +0300
mfplat: Add support for GUID attributes.
Signed-off-by: Jactry Zeng <jzeng at codeweavers.com>
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
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 7c3bad3..30bb808 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 613c2aa..73367b6 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);
}
More information about the wine-cvs
mailing list