Module: wine Branch: master Commit: b1d7c03514b7f7a5a490c9208a80fdc9c7a38d3d URL: https://gitlab.winehq.org/wine/wine/-/commit/b1d7c03514b7f7a5a490c9208a80fdc...
Author: Rémi Bernon rbernon@codeweavers.com Date: Tue Mar 12 19:40:24 2024 +0100
mfplat/mediatype: Append user data in MFCreateMFVideoFormatFromMFMediaType.
---
dlls/mfplat/mediatype.c | 16 ++++++++++++---- dlls/mfplat/tests/mfplat.c | 4 ++-- 2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/dlls/mfplat/mediatype.c b/dlls/mfplat/mediatype.c index 35fce38652b..b550649022f 100644 --- a/dlls/mfplat/mediatype.c +++ b/dlls/mfplat/mediatype.c @@ -3247,17 +3247,20 @@ static UINT32 media_type_get_uint32(IMFMediaType *media_type, REFGUID guid) */ HRESULT WINAPI MFCreateMFVideoFormatFromMFMediaType(IMFMediaType *media_type, MFVIDEOFORMAT **video_format, UINT32 *size) { - UINT32 palette_size = 0; + UINT32 palette_size = 0, user_data_size = 0; MFVIDEOFORMAT *format; INT32 stride; GUID guid;
TRACE("%p, %p, %p.\n", media_type, video_format, size);
- *size = sizeof(*format); - if (SUCCEEDED(IMFMediaType_GetBlobSize(media_type, &MF_MT_PALETTE, &palette_size))) - *size += palette_size; + *size = offsetof(MFVIDEOFORMAT, surfaceInfo.Palette[palette_size / sizeof(MFPaletteEntry) + 1]); + else + *size = sizeof(*format); + + if (SUCCEEDED(IMFMediaType_GetBlobSize(media_type, &MF_MT_USER_DATA, &user_data_size))) + *size += user_data_size;
if (!(format = CoTaskMemAlloc(*size))) return E_OUTOFMEMORY; @@ -3316,6 +3319,11 @@ HRESULT WINAPI MFCreateMFVideoFormatFromMFMediaType(IMFMediaType *media_type, MF IMFMediaType_GetBlob(media_type, &MF_MT_PALETTE, (UINT8 *)format->surfaceInfo.Palette, palette_size, NULL); }
+ if (user_data_size) + { + IMFMediaType_GetBlob(media_type, &MF_MT_USER_DATA, (UINT8 *)format + *size - user_data_size, user_data_size, NULL); + } + return S_OK; }
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index 860a7424170..4e580d5d2b9 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -7144,7 +7144,7 @@ static void test_MFCreateMFVideoFormatFromMFMediaType(void) hr = MFCreateMFVideoFormatFromMFMediaType(media_type, &video_format, &size); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(!!video_format, "Unexpected format.\n"); - todo_wine ok(size == expect_size, "Unexpected size %u.\n", size); + ok(size == expect_size, "Unexpected size %u.\n", size); ok(video_format->dwSize == size, "Unexpected size %u.\n", size); CoTaskMemFree(video_format);
@@ -7155,7 +7155,7 @@ static void test_MFCreateMFVideoFormatFromMFMediaType(void) hr = MFCreateMFVideoFormatFromMFMediaType(media_type, &video_format, &size); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(!!video_format, "Unexpected format.\n"); - todo_wine ok(size == expect_size, "Unexpected size %u.\n", size); + ok(size == expect_size, "Unexpected size %u.\n", size); ok(video_format->dwSize == size, "Unexpected size %u.\n", size); CoTaskMemFree(video_format);