[PATCH v5 2/7] mfplat/tests: Use a more unique pattern when testing image formats.

Giovanni Mascellani gmascellani at codeweavers.com
Fri Jun 24 02:48:04 CDT 2022


Signed-off-by: Giovanni Mascellani <gmascellani at codeweavers.com>
---
v4:
* Added
v5:
* Fixed "todo_if()" to "todo_wine_if()"
---
 dlls/mfplat/tests/mfplat.c | 82 +++++++++++++++++++++++++++++---------
 1 file changed, 64 insertions(+), 18 deletions(-)

diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c
index 6ad667a7404..f09ae368ccc 100644
--- a/dlls/mfplat/tests/mfplat.c
+++ b/dlls/mfplat/tests/mfplat.c
@@ -5994,7 +5994,48 @@ static void test_MFCreate2DMediaBuffer(void)
         ok(length2 == ptr->contiguous_length, "%d: unexpected linear buffer length %lu for %u x %u, format %s.\n",
                 i, length2, ptr->width, ptr->height, wine_dbgstr_an((char *)&ptr->fourcc, 4));
 
-        memset(data, 0xff, length2);
+        hr = pMFGetStrideForBitmapInfoHeader(ptr->fourcc, ptr->width, &stride);
+        ok(hr == S_OK, "Failed to get stride, hr %#lx.\n", hr);
+        stride = abs(stride);
+
+        /* primary plane */
+        ok(ptr->height * stride <= length2, "Insufficient buffer space: expected at least %lu bytes, got only %lu\n",
+                ptr->height * stride, length2);
+        for (j = 0; j < ptr->height; j++)
+            for (k = 0; k < stride; k++)
+                data[j * stride + k] = ((j % 16) << 4) + (k % 16);
+
+        data += ptr->height * stride;
+
+        /* secondary planes */
+        switch (ptr->fourcc)
+        {
+            case MAKEFOURCC('I','M','C','1'):
+            case MAKEFOURCC('I','M','C','3'):
+                ok(2 * ptr->height * stride <= length2, "Insufficient buffer space: expected at least %lu bytes, got only %lu\n",
+                        2 * ptr->height * stride, length2);
+                for (j = 0; j < ptr->height; j++)
+                    for (k = 0; k < stride / 2; k++)
+                        data[j * stride + k] = (((j + ptr->height) % 16) << 4) + (k % 16);
+                break;
+
+            case MAKEFOURCC('I','M','C','2'):
+            case MAKEFOURCC('I','M','C','4'):
+                ok(stride * 3 / 2 * ptr->height <= length2, "Insufficient buffer space: expected at least %lu bytes, got only %lu\n",
+                        stride * 3 / 2 * ptr->height, length2);
+                for (j = 0; j < ptr->height; j++)
+                    for (k = 0; k < stride / 2; k++)
+                        data[j * (stride / 2) + k] = (((j + ptr->height) % 16) << 4) + (k % 16);
+                break;
+
+            case MAKEFOURCC('N','V','1','2'):
+                ok(stride * ptr->height * 3 / 2 <= length2, "Insufficient buffer space: expected at least %lu bytes, got only %lu\n",
+                        stride * ptr->height * 3 / 2, length2);
+                for (j = 0; j < ptr->height / 2; j++)
+                    for (k = 0; k < stride; k++)
+                        data[j * stride + k] = (((j + ptr->height) % 16) << 4) + (k % 16);
+                break;
+        }
 
         hr = IMFMediaBuffer_Unlock(buffer);
         ok(hr == S_OK, "Failed to unlock buffer, hr %#lx.\n", hr);
@@ -6008,37 +6049,42 @@ static void test_MFCreate2DMediaBuffer(void)
         ok(pitch == pitch2, "Unexpected pitch.\n");
 
         /* primary plane */
-        for(j = 0; j < ptr->height; j++)
-            for (k = 0; k < ptr->width; k++)
-                ok(data[j * pitch + k] == 0xff, "Unexpected byte %02x at test %d row %d column %d.\n", data[j * pitch + k], i, j, k);
+        for (j = 0; j < ptr->height; j++)
+            for (k = 0; k < stride; k++)
+                ok(data[j * pitch + k] == ((j % 16) << 4) + (k % 16),
+                        "Unexpected byte %02x instead of %02x at test %d row %d column %d.\n",
+                        data[j * pitch + k], ((j % 16) << 4) + (k % 16), i, j, k);
 
-        hr = pMFGetStrideForBitmapInfoHeader(ptr->fourcc, ptr->width, &stride);
-        ok(hr == S_OK, "Failed to get stride, hr %#lx.\n", hr);
+        data += ptr->height * pitch;
 
         /* secondary planes */
         switch (ptr->fourcc)
         {
             case MAKEFOURCC('I','M','C','1'):
             case MAKEFOURCC('I','M','C','3'):
-                for (j = ptr->height; j < length2 / stride; j++)
-                    for (k = 0; k < ptr->width / 2; k++)
-                        ok(data[j * pitch + k] == 0xff, "Unexpected byte %02x at test %d row %d column %d.\n", data[j * pitch + k], i, j, k);
+                for (j = 0; j < ptr->height; j++)
+                    for (k = 0; k < stride / 2; k++)
+                        ok(data[j * pitch + k] == (((j + ptr->height) % 16) << 4) + (k % 16),
+                                "Unexpected byte %02x instead of %02x at test %d row %d column %d.\n",
+                                data[j * pitch + k], (((j + ptr->height) % 16) << 4) + (k % 16), i, j + ptr->height, k);
                 break;
 
             case MAKEFOURCC('I','M','C','2'):
             case MAKEFOURCC('I','M','C','4'):
-                for (j = ptr->height; j < length2 / stride; j++)
-                    for (k = 0; k < ptr->width / 2; k++)
-                        ok(data[j * pitch + k] == 0xff, "Unexpected byte %02x at test %d row %d column %d.\n", data[j * pitch + k], i, j, k);
-                for (j = ptr->height; j < length2 / stride; j++)
-                    for (k = pitch / 2; k < pitch / 2 + ptr->width / 2; k++)
-                        ok(data[j * pitch + k] == 0xff, "Unexpected byte %02x at test %d row %d column %d.\n", data[j * pitch + k], i, j, k);
+                for (j = 0; j < ptr->height; j++)
+                    for (k = 0; k < stride / 2; k++)
+                        todo_wine_if(ptr->height % 2 == 1 && j >= 2)
+                        ok(data[j * (pitch / 2) + k] == (((j + ptr->height) % 16) << 4) + (k % 16),
+                                "Unexpected byte %02x instead of %02x at test %d row %d column %d.\n",
+                                data[j * (pitch / 2) + k], (((j + ptr->height) % 16) << 4) + (k % 16), i, j + ptr->height, k);
                 break;
 
             case MAKEFOURCC('N','V','1','2'):
-                for (j = ptr->height; j < length2 / stride; j++)
-                    for (k = 0; k < ptr->width; k++)
-                        ok(data[j * pitch + k] == 0xff, "Unexpected byte %02x at test %d row %d column %d.\n", data[j * pitch + k], i, j, k);
+                for (j = 0; j < ptr->height / 2; j++)
+                    for (k = 0; k < stride; k++)
+                        ok(data[j * pitch + k] == (((j + ptr->height) % 16) << 4) + (k % 16),
+                                "Unexpected byte %02x instead of %02x at test %d row %d column %d.\n",
+                                data[j * pitch + k], (((j + ptr->height) % 16) << 4) + (k % 16), i, j + ptr->height, k);
                 break;
 
             default:
-- 
2.36.1




More information about the wine-devel mailing list