Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/mfplat/tests/mfplat.c | 206 ++++++++++++++++++++----------------- 1 file changed, 114 insertions(+), 92 deletions(-)
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index cabcc1b06b0..50f4e059205 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -4117,104 +4117,102 @@ static void test_stream_descriptor(void) IMFStreamDescriptor_Release(stream_desc); }
-static void test_MFCalculateImageSize(void) +static const struct image_size_test { - static const struct image_size_test - { - const GUID *subtype; - UINT32 width; - UINT32 height; - UINT32 size; - UINT32 plane_size; /* Matches image size when 0. */ - } - image_size_tests[] = - { - { &MFVideoFormat_RGB8, 3, 5, 20 }, - { &MFVideoFormat_RGB8, 1, 1, 4 }, - { &MFVideoFormat_RGB555, 3, 5, 40 }, - { &MFVideoFormat_RGB555, 1, 1, 4 }, - { &MFVideoFormat_RGB565, 3, 5, 40 }, - { &MFVideoFormat_RGB565, 1, 1, 4 }, - { &MFVideoFormat_RGB24, 3, 5, 60 }, - { &MFVideoFormat_RGB24, 1, 1, 4 }, - { &MFVideoFormat_RGB32, 3, 5, 60 }, - { &MFVideoFormat_RGB32, 1, 1, 4 }, - { &MFVideoFormat_ARGB32, 3, 5, 60 }, - { &MFVideoFormat_ARGB32, 1, 1, 4 }, - { &MFVideoFormat_A2R10G10B10, 3, 5, 60 }, - { &MFVideoFormat_A2R10G10B10, 1, 1, 4 }, - { &MFVideoFormat_A16B16G16R16F, 3, 5, 120 }, - { &MFVideoFormat_A16B16G16R16F, 1, 1, 8 }, + const GUID *subtype; + UINT32 width; + UINT32 height; + UINT32 size; + UINT32 plane_size; /* Matches image size when 0. */ +} +image_size_tests[] = +{ + { &MFVideoFormat_RGB8, 3, 5, 20 }, + { &MFVideoFormat_RGB8, 1, 1, 4 }, + { &MFVideoFormat_RGB555, 3, 5, 40 }, + { &MFVideoFormat_RGB555, 1, 1, 4 }, + { &MFVideoFormat_RGB565, 3, 5, 40 }, + { &MFVideoFormat_RGB565, 1, 1, 4 }, + { &MFVideoFormat_RGB24, 3, 5, 60 }, + { &MFVideoFormat_RGB24, 1, 1, 4 }, + { &MFVideoFormat_RGB32, 3, 5, 60 }, + { &MFVideoFormat_RGB32, 1, 1, 4 }, + { &MFVideoFormat_ARGB32, 3, 5, 60 }, + { &MFVideoFormat_ARGB32, 1, 1, 4 }, + { &MFVideoFormat_A2R10G10B10, 3, 5, 60 }, + { &MFVideoFormat_A2R10G10B10, 1, 1, 4 }, + { &MFVideoFormat_A16B16G16R16F, 3, 5, 120 }, + { &MFVideoFormat_A16B16G16R16F, 1, 1, 8 }, + + /* YUV */ + { &MFVideoFormat_NV12, 1, 3, 9, 4 }, + { &MFVideoFormat_NV12, 1, 2, 6, 3 }, + { &MFVideoFormat_NV12, 2, 2, 6, 6 }, + { &MFVideoFormat_NV12, 3, 2, 12, 9 }, + { &MFVideoFormat_NV12, 4, 2, 12 }, + { &MFVideoFormat_NV12, 320, 240, 115200 }, + { &MFVideoFormat_AYUV, 1, 1, 4 }, + { &MFVideoFormat_AYUV, 2, 1, 8 }, + { &MFVideoFormat_AYUV, 1, 2, 8 }, + { &MFVideoFormat_AYUV, 4, 3, 48 }, + { &MFVideoFormat_AYUV, 320, 240, 307200 }, + { &MFVideoFormat_IMC1, 1, 1, 4 }, + { &MFVideoFormat_IMC1, 2, 1, 4 }, + { &MFVideoFormat_IMC1, 1, 2, 8 }, + { &MFVideoFormat_IMC1, 4, 3, 24 }, + { &MFVideoFormat_IMC1, 320, 240, 153600 }, + { &MFVideoFormat_IMC3, 1, 1, 4 }, + { &MFVideoFormat_IMC3, 2, 1, 4 }, + { &MFVideoFormat_IMC3, 1, 2, 8 }, + { &MFVideoFormat_IMC3, 4, 3, 24 }, + { &MFVideoFormat_IMC3, 320, 240, 153600 }, + { &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 }, + { &MFVideoFormat_IMC2, 320, 240, 115200 }, + { &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 }, + { &MFVideoFormat_IMC4, 320, 240, 115200 }, + { &MFVideoFormat_YV12, 1, 1, 3, 1 }, + { &MFVideoFormat_YV12, 2, 1, 3 }, + { &MFVideoFormat_YV12, 1, 2, 6, 3 }, + { &MFVideoFormat_YV12, 4, 3, 18 }, + { &MFVideoFormat_YV12, 320, 240, 115200 }, + + { &MFVideoFormat_I420, 1, 1, 3, 1 }, + { &MFVideoFormat_I420, 2, 1, 3 }, + { &MFVideoFormat_I420, 1, 2, 6, 3 }, + { &MFVideoFormat_I420, 4, 3, 18 }, + { &MFVideoFormat_I420, 320, 240, 115200 }, + + { &MFVideoFormat_IYUV, 1, 1, 3, 1 }, + { &MFVideoFormat_IYUV, 2, 1, 3 }, + { &MFVideoFormat_IYUV, 1, 2, 6, 3 }, + { &MFVideoFormat_IYUV, 4, 3, 18 }, + { &MFVideoFormat_IYUV, 320, 240, 115200 }, + + { &MFVideoFormat_YUY2, 2, 1, 4 }, + { &MFVideoFormat_YUY2, 4, 3, 24 }, + { &MFVideoFormat_YUY2, 128, 128, 32768 }, + { &MFVideoFormat_YUY2, 320, 240, 153600 }, + + { &MFVideoFormat_UYVY, 2, 1, 4 }, + { &MFVideoFormat_UYVY, 4, 3, 24 }, + { &MFVideoFormat_UYVY, 128, 128, 32768 }, + { &MFVideoFormat_UYVY, 320, 240, 153600 }, +};
- /* YUV */ - { &MFVideoFormat_NV12, 1, 3, 9, 4 }, - { &MFVideoFormat_NV12, 1, 2, 6, 3 }, - { &MFVideoFormat_NV12, 2, 2, 6, 6 }, - { &MFVideoFormat_NV12, 3, 2, 12, 9 }, - { &MFVideoFormat_NV12, 4, 2, 12 }, - { &MFVideoFormat_NV12, 320, 240, 115200 }, - { &MFVideoFormat_AYUV, 1, 1, 4 }, - { &MFVideoFormat_AYUV, 2, 1, 8 }, - { &MFVideoFormat_AYUV, 1, 2, 8 }, - { &MFVideoFormat_AYUV, 4, 3, 48 }, - { &MFVideoFormat_AYUV, 320, 240, 307200 }, - { &MFVideoFormat_IMC1, 1, 1, 4 }, - { &MFVideoFormat_IMC1, 2, 1, 4 }, - { &MFVideoFormat_IMC1, 1, 2, 8 }, - { &MFVideoFormat_IMC1, 4, 3, 24 }, - { &MFVideoFormat_IMC1, 320, 240, 153600 }, - { &MFVideoFormat_IMC3, 1, 1, 4 }, - { &MFVideoFormat_IMC3, 2, 1, 4 }, - { &MFVideoFormat_IMC3, 1, 2, 8 }, - { &MFVideoFormat_IMC3, 4, 3, 24 }, - { &MFVideoFormat_IMC3, 320, 240, 153600 }, - { &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 }, - { &MFVideoFormat_IMC2, 320, 240, 115200 }, - { &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 }, - { &MFVideoFormat_IMC4, 320, 240, 115200 }, - { &MFVideoFormat_YV12, 1, 1, 3, 1 }, - { &MFVideoFormat_YV12, 2, 1, 3 }, - { &MFVideoFormat_YV12, 1, 2, 6, 3 }, - { &MFVideoFormat_YV12, 4, 3, 18 }, - { &MFVideoFormat_YV12, 320, 240, 115200 }, - - { &MFVideoFormat_I420, 1, 1, 3, 1 }, - { &MFVideoFormat_I420, 2, 1, 3 }, - { &MFVideoFormat_I420, 1, 2, 6, 3 }, - { &MFVideoFormat_I420, 4, 3, 18 }, - { &MFVideoFormat_I420, 320, 240, 115200 }, - - { &MFVideoFormat_IYUV, 1, 1, 3, 1 }, - { &MFVideoFormat_IYUV, 2, 1, 3 }, - { &MFVideoFormat_IYUV, 1, 2, 6, 3 }, - { &MFVideoFormat_IYUV, 4, 3, 18 }, - { &MFVideoFormat_IYUV, 320, 240, 115200 }, - - { &MFVideoFormat_YUY2, 2, 1, 4 }, - { &MFVideoFormat_YUY2, 4, 3, 24 }, - { &MFVideoFormat_YUY2, 128, 128, 32768 }, - { &MFVideoFormat_YUY2, 320, 240, 153600 }, - - { &MFVideoFormat_UYVY, 2, 1, 4 }, - { &MFVideoFormat_UYVY, 4, 3, 24 }, - { &MFVideoFormat_UYVY, 128, 128, 32768 }, - { &MFVideoFormat_UYVY, 320, 240, 153600 }, - }; +static void test_MFCalculateImageSize(void) +{ unsigned int i; UINT32 size; HRESULT hr;
- if (!pMFGetPlaneSize) - win_skip("MFGetPlaneSize() is not available.\n"); - size = 1; hr = MFCalculateImageSize(&IID_IUnknown, 1, 1, &size); ok(hr == E_INVALIDARG || broken(hr == S_OK) /* Vista */, "Unexpected hr %#x.\n", hr); @@ -4244,6 +4242,29 @@ static void test_MFCalculateImageSize(void) } }
+static void test_MFGetPlaneSize(void) +{ + unsigned int i; + UINT32 size; + HRESULT hr; + + if (!pMFGetPlaneSize) + { + win_skip("MFGetPlaneSize() is not available.\n"); + return; + } + + for (i = 0; i < ARRAY_SIZE(image_size_tests); ++i) + { + const struct image_size_test *ptr = &image_size_tests[i]; + unsigned int plane_size = ptr->plane_size ? ptr->plane_size : ptr->size; + + hr = pMFGetPlaneSize(ptr->subtype->Data1, ptr->width, ptr->height, &size); + ok(hr == S_OK, "%u: failed to get plane size, hr %#x.\n", i, hr); + ok(size == plane_size, "%u: unexpected plane size %u, expected %u.\n", i, size, plane_size); + } +} + static void test_MFCompareFullToPartialMediaType(void) { IMFMediaType *full_type, *partial_type; @@ -7940,6 +7961,7 @@ START_TEST(mfplat) test_MFInvokeCallback(); test_stream_descriptor(); test_MFCalculateImageSize(); + test_MFGetPlaneSize(); test_MFCompareFullToPartialMediaType(); test_attributes_serialization(); test_wrapped_media_type();
From: Giovanni Mascellani gmascellani@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com ---
Supersedes 226745.
dlls/mfplat/mediatype.c | 8 ++++---- dlls/mfplat/tests/mfplat.c | 5 +++++ 2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/dlls/mfplat/mediatype.c b/dlls/mfplat/mediatype.c index a63ae6eafaf..71d55e2d232 100644 --- a/dlls/mfplat/mediatype.c +++ b/dlls/mfplat/mediatype.c @@ -2755,10 +2755,10 @@ HRESULT WINAPI MFGetPlaneSize(DWORD fourcc, DWORD width, DWORD height, DWORD *si memcpy(&subtype, &MFVideoFormat_Base, sizeof(subtype)); subtype.Data1 = fourcc;
- if (!(format = mf_get_video_format(&subtype))) - return MF_E_INVALIDMEDIATYPE; - - stride = mf_get_stride_for_format(format, width); + if ((format = mf_get_video_format(&subtype))) + stride = mf_get_stride_for_format(format, width); + else + stride = 0;
switch (fourcc) { diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index 50f4e059205..c013b7b5c23 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -4254,6 +4254,11 @@ static void test_MFGetPlaneSize(void) return; }
+ size = 1; + hr = pMFGetPlaneSize(0xdeadbeef, 64, 64, &size); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(size == 0, "Unexpected size %u.\n", size); + for (i = 0; i < ARRAY_SIZE(image_size_tests); ++i) { const struct image_size_test *ptr = &image_size_tests[i];