Nikolay Sivov : mfplat: Implement MFCompareFullToPartialMediaType().

Alexandre Julliard julliard at winehq.org
Thu Mar 21 17:21:19 CDT 2019


Module: wine
Branch: master
Commit: f3a72d4e91381ff2dc57804dee668f489e8af81e
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=f3a72d4e91381ff2dc57804dee668f489e8af81e

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Thu Mar 21 10:42:56 2019 +0300

mfplat: Implement MFCompareFullToPartialMediaType().

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mfplat/mediatype.c    | 19 +++++++++++++++++++
 dlls/mfplat/mfplat.spec    |  2 +-
 dlls/mfplat/tests/mfplat.c | 41 +++++++++++++++++++++++++++++++++++++++++
 include/mfapi.h            |  1 +
 4 files changed, 62 insertions(+), 1 deletion(-)

diff --git a/dlls/mfplat/mediatype.c b/dlls/mfplat/mediatype.c
index 4e6fa80..a2e3a96 100644
--- a/dlls/mfplat/mediatype.c
+++ b/dlls/mfplat/mediatype.c
@@ -1496,3 +1496,22 @@ HRESULT WINAPI MFCalculateImageSize(REFGUID subtype, UINT32 width, UINT32 height
 
     return format ? S_OK : E_INVALIDARG;
 }
+
+/***********************************************************************
+ *      MFCompareFullToPartialMediaType (mfplat.@)
+ */
+BOOL WINAPI MFCompareFullToPartialMediaType(IMFMediaType *full_type, IMFMediaType *partial_type)
+{
+    BOOL result;
+    GUID major;
+
+    TRACE("%p, %p.\n", full_type, partial_type);
+
+    if (FAILED(IMFMediaType_GetMajorType(partial_type, &major)))
+        return FALSE;
+
+    if (FAILED(IMFMediaType_Compare(partial_type, (IMFAttributes *)full_type, MF_ATTRIBUTES_MATCH_OUR_ITEMS, &result)))
+        return FALSE;
+
+    return result;
+}
diff --git a/dlls/mfplat/mfplat.spec b/dlls/mfplat/mfplat.spec
index d8ed5f9..8b340a2 100644
--- a/dlls/mfplat/mfplat.spec
+++ b/dlls/mfplat/mfplat.spec
@@ -29,7 +29,7 @@
 @ stdcall MFCalculateImageSize(ptr long long ptr)
 @ stub MFCancelCreateFile
 @ stdcall MFCancelWorkItem(int64)
-@ stub MFCompareFullToPartialMediaType
+@ stdcall MFCompareFullToPartialMediaType(ptr ptr)
 @ stub MFCompareSockaddrAddresses
 @ stub MFConvertColorInfoFromDXVA
 @ stub MFConvertColorInfoToDXVA
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c
index b420513..2f8b1aa 100644
--- a/dlls/mfplat/tests/mfplat.c
+++ b/dlls/mfplat/tests/mfplat.c
@@ -2480,6 +2480,46 @@ static void test_MFCalculateImageSize(void)
     }
 }
 
+static void test_MFCompareFullToPartialMediaType(void)
+{
+    IMFMediaType *full_type, *partial_type;
+    HRESULT hr;
+    BOOL ret;
+
+    hr = MFCreateMediaType(&full_type);
+    ok(hr == S_OK, "Failed to create media type, hr %#x.\n", hr);
+
+    hr = MFCreateMediaType(&partial_type);
+    ok(hr == S_OK, "Failed to create media type, hr %#x.\n", hr);
+
+    ret = MFCompareFullToPartialMediaType(full_type, partial_type);
+    ok(!ret, "Unexpected result %d.\n", ret);
+
+    hr = IMFMediaType_SetGUID(full_type, &MF_MT_MAJOR_TYPE, &MFMediaType_Audio);
+    ok(hr == S_OK, "Failed to set major type, hr %#x.\n", hr);
+
+    hr = IMFMediaType_SetGUID(partial_type, &MF_MT_MAJOR_TYPE, &MFMediaType_Audio);
+    ok(hr == S_OK, "Failed to set major type, hr %#x.\n", hr);
+
+    ret = MFCompareFullToPartialMediaType(full_type, partial_type);
+    ok(ret, "Unexpected result %d.\n", ret);
+
+    hr = IMFMediaType_SetGUID(full_type, &MF_MT_SUBTYPE, &MFMediaType_Audio);
+    ok(hr == S_OK, "Failed to set major type, hr %#x.\n", hr);
+
+    ret = MFCompareFullToPartialMediaType(full_type, partial_type);
+    ok(ret, "Unexpected result %d.\n", ret);
+
+    hr = IMFMediaType_SetGUID(partial_type, &MF_MT_SUBTYPE, &MFMediaType_Video);
+    ok(hr == S_OK, "Failed to set major type, hr %#x.\n", hr);
+
+    ret = MFCompareFullToPartialMediaType(full_type, partial_type);
+    ok(!ret, "Unexpected result %d.\n", ret);
+
+    IMFMediaType_Release(full_type);
+    IMFMediaType_Release(partial_type);
+}
+
 START_TEST(mfplat)
 {
     CoInitialize(NULL);
@@ -2510,6 +2550,7 @@ START_TEST(mfplat)
     test_MFInvokeCallback();
     test_stream_descriptor();
     test_MFCalculateImageSize();
+    test_MFCompareFullToPartialMediaType();
 
     CoUninitialize();
 }
diff --git a/include/mfapi.h b/include/mfapi.h
index 1b8eafa..d8738d5 100644
--- a/include/mfapi.h
+++ b/include/mfapi.h
@@ -188,6 +188,7 @@ HRESULT WINAPI MFAllocateWorkQueue(DWORD *queue);
 HRESULT WINAPI MFAllocateWorkQueueEx(MFASYNC_WORKQUEUE_TYPE queue_type, DWORD *queue);
 HRESULT WINAPI MFCalculateImageSize(REFGUID subtype, UINT32 width, UINT32 height, UINT32 *size);
 HRESULT WINAPI MFCancelWorkItem(MFWORKITEM_KEY key);
+BOOL    WINAPI MFCompareFullToPartialMediaType(IMFMediaType *full_type, IMFMediaType *partial_type);
 HRESULT WINAPI MFCopyImage(BYTE *dest, LONG deststride, const BYTE *src, LONG srcstride, DWORD width, DWORD lines);
 HRESULT WINAPI MFCreateAlignedMemoryBuffer(DWORD max_length, DWORD alignment, IMFMediaBuffer **buffer);
 HRESULT WINAPI MFCreateAttributes(IMFAttributes **attributes, UINT32 size);




More information about the wine-cvs mailing list