[PATCH 2/5] mfplat: Add some more YUV formats data.

Nikolay Sivov nsivov at codeweavers.com
Mon Mar 16 04:17:05 CDT 2020


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/mfplat/mediatype.c    | 17 +++++++++++++
 dlls/mfplat/tests/mfplat.c | 49 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 66 insertions(+)

diff --git a/dlls/mfplat/mediatype.c b/dlls/mfplat/mediatype.c
index 6958421826..d764baf0b9 100644
--- a/dlls/mfplat/mediatype.c
+++ b/dlls/mfplat/mediatype.c
@@ -29,6 +29,11 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(mfplat);
 
+DEFINE_MEDIATYPE_GUID(MFVideoFormat_IMC1, MAKEFOURCC('I','M','C','1'));
+DEFINE_MEDIATYPE_GUID(MFVideoFormat_IMC2, MAKEFOURCC('I','M','C','2'));
+DEFINE_MEDIATYPE_GUID(MFVideoFormat_IMC3, MAKEFOURCC('I','M','C','3'));
+DEFINE_MEDIATYPE_GUID(MFVideoFormat_IMC4, MAKEFOURCC('I','M','C','4'));
+
 struct media_type
 {
     struct attributes attributes;
@@ -1785,9 +1790,15 @@ static const struct uncompressed_video_format video_formats[] =
     { &MFVideoFormat_A2R10G10B10,   4, 3, 1 },
     { &MFVideoFormat_RGB8,          1, 3, 1 },
     { &MFVideoFormat_L8,            1, 3, 1 },
+    { &MFVideoFormat_AYUV,          4, 3, 0 },
+    { &MFVideoFormat_IMC1,          2, 3, 0 },
+    { &MFVideoFormat_IMC2,          1, 0, 0 },
+    { &MFVideoFormat_IMC3,          2, 3, 0 },
+    { &MFVideoFormat_IMC4,          1, 0, 0 },
     { &MFVideoFormat_NV12,          1, 0, 0 },
     { &MFVideoFormat_D16,           2, 3, 0 },
     { &MFVideoFormat_L16,           2, 3, 0 },
+    { &MFVideoFormat_YV12,          1, 0, 0 },
     { &MFVideoFormat_A16B16G16R16F, 8, 3, 1 },
 };
 
@@ -1852,7 +1863,10 @@ HRESULT WINAPI MFCalculateImageSize(REFGUID subtype, UINT32 width, UINT32 height
 
     switch (subtype->Data1)
     {
+        case MAKEFOURCC('I','M','C','2'):
+        case MAKEFOURCC('I','M','C','4'):
         case MAKEFOURCC('N','V','1','2'):
+        case MAKEFOURCC('Y','V','1','2'):
             /* 2 x 2 block, interleaving UV for half the height */
             *size = ((width + 1) & ~1) * height * 3 / 2;
             break;
@@ -1890,7 +1904,10 @@ HRESULT WINAPI MFGetPlaneSize(DWORD fourcc, DWORD width, DWORD height, DWORD *si
 
     switch (fourcc)
     {
+        case MAKEFOURCC('I','M','C','2'):
+        case MAKEFOURCC('I','M','C','4'):
         case MAKEFOURCC('N','V','1','2'):
+        case MAKEFOURCC('Y','V','1','2'):
             *size = stride * height * 3 / 2;
             break;
         default:
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c
index 65e9b66447..621b5b4393 100644
--- a/dlls/mfplat/tests/mfplat.c
+++ b/dlls/mfplat/tests/mfplat.c
@@ -48,6 +48,11 @@ DEFINE_GUID(DUMMY_GUID2, 0x12345678,0x1234,0x1234,0x22,0x22,0x22,0x22,0x22,0x22,
 DEFINE_GUID(DUMMY_GUID3, 0x12345678,0x1234,0x1234,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23);
 DEFINE_GUID(CLSID_FileSchemeHandler, 0x477ec299, 0x1421, 0x4bdd, 0x97, 0x1f, 0x7c, 0xcb, 0x93, 0x3f, 0x21, 0xad);
 
+DEFINE_MEDIATYPE_GUID(MFVideoFormat_IMC1, MAKEFOURCC('I','M','C','1'));
+DEFINE_MEDIATYPE_GUID(MFVideoFormat_IMC2, MAKEFOURCC('I','M','C','2'));
+DEFINE_MEDIATYPE_GUID(MFVideoFormat_IMC3, MAKEFOURCC('I','M','C','3'));
+DEFINE_MEDIATYPE_GUID(MFVideoFormat_IMC4, MAKEFOURCC('I','M','C','4'));
+
 static BOOL is_win8_plus;
 
 #define EXPECT_REF(obj,ref) _expect_ref((IUnknown*)obj, ref, __LINE__)
@@ -3414,6 +3419,32 @@ static void test_MFCalculateImageSize(void)
         { &MFVideoFormat_NV12, 2, 2, 6, 6 },
         { &MFVideoFormat_NV12, 3, 2, 12, 9 },
         { &MFVideoFormat_NV12, 4, 2, 12, 12 },
+        { &MFVideoFormat_AYUV, 1, 1, 4 },
+        { &MFVideoFormat_AYUV, 2, 1, 8 },
+        { &MFVideoFormat_AYUV, 1, 2, 8 },
+        { &MFVideoFormat_AYUV, 4, 3, 48 },
+        { &MFVideoFormat_IMC1, 1, 1, 4 },
+        { &MFVideoFormat_IMC1, 2, 1, 4 },
+        { &MFVideoFormat_IMC1, 1, 2, 8 },
+        { &MFVideoFormat_IMC1, 4, 3, 24 },
+        { &MFVideoFormat_IMC3, 1, 1, 4 },
+        { &MFVideoFormat_IMC3, 2, 1, 4 },
+        { &MFVideoFormat_IMC3, 1, 2, 8 },
+        { &MFVideoFormat_IMC3, 4, 3, 24 },
+        { &MFVideoFormat_IMC2, 1, 3, 9, 4 },
+        { &MFVideoFormat_IMC2, 1, 2, 6, 3 },
+        { &MFVideoFormat_IMC2, 2, 2, 6, 6 },
+        { &MFVideoFormat_IMC2, 3, 2, 12, 9 },
+        { &MFVideoFormat_IMC2, 4, 2, 12, 12 },
+        { &MFVideoFormat_IMC4, 1, 3, 9, 4 },
+        { &MFVideoFormat_IMC4, 1, 2, 6, 3 },
+        { &MFVideoFormat_IMC4, 2, 2, 6, 6 },
+        { &MFVideoFormat_IMC4, 3, 2, 12, 9 },
+        { &MFVideoFormat_IMC4, 4, 2, 12, 12 },
+        { &MFVideoFormat_YV12, 1, 1, 3, 1 },
+        { &MFVideoFormat_YV12, 2, 1, 3 },
+        { &MFVideoFormat_YV12, 1, 2, 6, 3 },
+        { &MFVideoFormat_YV12, 4, 3, 18 },
     };
     unsigned int i;
     UINT32 size;
@@ -4525,6 +4556,24 @@ static void test_MFGetStrideForBitmapInfoHeader(void)
         { &MFVideoFormat_NV12, 1, 1 },
         { &MFVideoFormat_NV12, 2, 2 },
         { &MFVideoFormat_NV12, 3, 3 },
+        { &MFVideoFormat_AYUV, 1, 4 },
+        { &MFVideoFormat_AYUV, 4, 16 },
+        { &MFVideoFormat_AYUV, 5, 20 },
+        { &MFVideoFormat_IMC1, 1, 4 },
+        { &MFVideoFormat_IMC1, 2, 4 },
+        { &MFVideoFormat_IMC1, 3, 8 },
+        { &MFVideoFormat_IMC3, 1, 4 },
+        { &MFVideoFormat_IMC3, 2, 4 },
+        { &MFVideoFormat_IMC3, 3, 8 },
+        { &MFVideoFormat_IMC2, 1, 1 },
+        { &MFVideoFormat_IMC2, 2, 2 },
+        { &MFVideoFormat_IMC2, 3, 3 },
+        { &MFVideoFormat_IMC4, 1, 1 },
+        { &MFVideoFormat_IMC4, 2, 2 },
+        { &MFVideoFormat_IMC4, 3, 3 },
+        { &MFVideoFormat_YV12, 1, 1 },
+        { &MFVideoFormat_YV12, 2, 2 },
+        { &MFVideoFormat_YV12, 3, 3 },
     };
     unsigned int i;
     LONG stride;
-- 
2.25.1




More information about the wine-devel mailing list