Nikolay Sivov : mfplat/buffer: Fix maximum length for YV12 format.

Alexandre Julliard julliard at winehq.org
Tue Jun 8 16:34:26 CDT 2021


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Tue Jun  8 17:41:24 2021 +0300

mfplat/buffer: Fix maximum length for YV12 format.

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

---

 dlls/mfplat/buffer.c       |  1 +
 dlls/mfplat/tests/mfplat.c | 30 +++++++++++++++++++-----------
 2 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/dlls/mfplat/buffer.c b/dlls/mfplat/buffer.c
index adb53c7dfe7..c1829043e1b 100644
--- a/dlls/mfplat/buffer.c
+++ b/dlls/mfplat/buffer.c
@@ -1357,6 +1357,7 @@ static HRESULT create_2d_buffer(DWORD width, DWORD height, DWORD fourcc, BOOL bo
             plane_size *= 2;
             break;
         case MAKEFOURCC('N','V','1','2'):
+        case MAKEFOURCC('Y','V','1','2'):
         case MAKEFOURCC('I','M','C','2'):
         case MAKEFOURCC('I','M','C','4'):
             max_length = pitch * height * 3 / 2;
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c
index 89f6a945c8a..ff24c2c0ec0 100644
--- a/dlls/mfplat/tests/mfplat.c
+++ b/dlls/mfplat/tests/mfplat.c
@@ -5450,14 +5450,16 @@ static void test_MFCreate2DMediaBuffer(void)
         unsigned int contiguous_length;
         int pitch;
         unsigned int plane_multiplier;
+        unsigned int max_length;
     } _2d_buffer_tests[] =
     {
-        { 2, 2, MAKEFOURCC('N','V','1','2'), 6, 64 },
-        { 4, 2, MAKEFOURCC('N','V','1','2'), 12, 64 },
-        { 2, 4, MAKEFOURCC('N','V','1','2'), 12, 64 },
-        { 1, 3, MAKEFOURCC('N','V','1','2'), 4, 64 },
+        { 2,  2, MAKEFOURCC('N','V','1','2'), 6, 64, 0, 192 },
+        { 4,  2, MAKEFOURCC('N','V','1','2'), 12, 64 },
+        { 2,  4, MAKEFOURCC('N','V','1','2'), 12, 64 },
+        { 1,  3, MAKEFOURCC('N','V','1','2'), 4, 64 },
+        { 4, 16, MAKEFOURCC('N','V','1','2'), 96, 64, 0, 1536 },
 
-        { 2, 2, MAKEFOURCC('I','M','C','2'), 6, 128 },
+        { 2, 2, MAKEFOURCC('I','M','C','2'), 6, 128, 0, 384 },
         { 4, 2, MAKEFOURCC('I','M','C','2'), 12, 128 },
         { 2, 4, MAKEFOURCC('I','M','C','2'), 12, 128 },
         { 2, 2, MAKEFOURCC('I','M','C','4'), 6, 128 },
@@ -5466,29 +5468,29 @@ static void test_MFCreate2DMediaBuffer(void)
 
         { 4,  2, MAKEFOURCC('I','M','C','1'),  32, 128, 2 },
         { 4,  4, MAKEFOURCC('I','M','C','1'),  64, 128, 2 },
-        { 4, 16, MAKEFOURCC('I','M','C','1'), 256, 128, 2 },
+        { 4, 16, MAKEFOURCC('I','M','C','1'), 256, 128, 2, 4096 },
         { 4, 20, MAKEFOURCC('I','M','C','1'), 320, 128, 2 },
 
         { 4,  2, MAKEFOURCC('I','M','C','3'),  32, 128, 2 },
         { 4,  4, MAKEFOURCC('I','M','C','3'),  64, 128, 2 },
-        { 4, 16, MAKEFOURCC('I','M','C','3'), 256, 128, 2 },
+        { 4, 16, MAKEFOURCC('I','M','C','3'), 256, 128, 2, 4096 },
         { 4, 20, MAKEFOURCC('I','M','C','3'), 320, 128, 2 },
 
         { 4,  2, MAKEFOURCC('Y','V','1','2'),  12, 128 },
         { 4,  4, MAKEFOURCC('Y','V','1','2'),  24, 128 },
-        { 4, 16, MAKEFOURCC('Y','V','1','2'),  96, 128 },
+        { 4, 16, MAKEFOURCC('Y','V','1','2'),  96, 128, 0, 3072 },
 
         { 4,  2, MAKEFOURCC('A','Y','U','V'),  32, 64 },
         { 4,  4, MAKEFOURCC('A','Y','U','V'),  64, 64 },
-        { 4, 16, MAKEFOURCC('A','Y','U','V'), 256, 64 },
+        { 4, 16, MAKEFOURCC('A','Y','U','V'), 256, 64, 0, 1024 },
 
         { 4,  2, MAKEFOURCC('Y','U','Y','2'),  16, 64 },
         { 4,  4, MAKEFOURCC('Y','U','Y','2'),  32, 64 },
-        { 4, 16, MAKEFOURCC('Y','U','Y','2'), 128, 64 },
+        { 4, 16, MAKEFOURCC('Y','U','Y','2'), 128, 64, 0, 1024 },
 
         { 4,  2, MAKEFOURCC('U','Y','V','Y'),  16, 64 },
         { 4,  4, MAKEFOURCC('U','Y','V','Y'),  32, 64 },
-        { 4, 16, MAKEFOURCC('U','Y','V','Y'), 128, 64 },
+        { 4, 16, MAKEFOURCC('U','Y','V','Y'), 128, 64, 0, 1024 },
 
         { 2, 4, D3DFMT_A8R8G8B8, 32, 64 },
         { 1, 4, D3DFMT_A8R8G8B8, 16, 64 },
@@ -5681,6 +5683,12 @@ static void test_MFCreate2DMediaBuffer(void)
         hr = pMFCreate2DMediaBuffer(ptr->width, ptr->height, ptr->fourcc, FALSE, &buffer);
         ok(hr == S_OK, "Failed to create a buffer, hr %#x.\n", hr);
 
+        hr = IMFMediaBuffer_GetMaxLength(buffer, &length);
+        ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+        if (ptr->max_length)
+            ok(length == ptr->max_length, "%u: unexpected maximum length %u for %u x %u, format %s.\n",
+                    i, length, ptr->width, ptr->height, wine_dbgstr_an((char *)&ptr->fourcc, 4));
+
         hr = IMFMediaBuffer_QueryInterface(buffer, &IID_IMF2DBuffer, (void **)&_2dbuffer);
         ok(hr == S_OK, "Failed to get interface, hr %#x.\n", hr);
 




More information about the wine-cvs mailing list