Module: wine Branch: master Commit: e6a6e6545b718de9f04536629b3e58fae0073c68 URL: https://gitlab.winehq.org/wine/wine/-/commit/e6a6e6545b718de9f04536629b3e58f...
Author: Anton Baskanov baskanov@gmail.com Date: Thu May 16 14:14:48 2024 +0700
quartz: Use the correct stride when calculating image size in AVIDec.
---
dlls/quartz/avidec.c | 4 ++-- dlls/quartz/tests/avidec.c | 23 +++++++++++------------ 2 files changed, 13 insertions(+), 14 deletions(-)
diff --git a/dlls/quartz/avidec.c b/dlls/quartz/avidec.c index f020d618fdb..d7f97e0380c 100644 --- a/dlls/quartz/avidec.c +++ b/dlls/quartz/avidec.c @@ -361,8 +361,8 @@ static HRESULT avi_decompressor_source_get_media_type(struct strmbase_pin *iface format->bmiHeader.biPlanes = sink_format->bmiHeader.biPlanes; format->bmiHeader.biBitCount = formats[index].bpp; format->bmiHeader.biCompression = formats[index].compression; - format->bmiHeader.biSizeImage = format->bmiHeader.biWidth - * format->bmiHeader.biHeight * formats[index].bpp / 8; + format->bmiHeader.biSizeImage = format->bmiHeader.biHeight * (((format->bmiHeader.biWidth + * formats[index].bpp + 31) / 8) & ~3);
if (IsEqualGUID(formats[index].subtype, &MEDIASUBTYPE_RGB565)) { diff --git a/dlls/quartz/tests/avidec.c b/dlls/quartz/tests/avidec.c index 6cb67563bcb..ac3a9abf2b1 100644 --- a/dlls/quartz/tests/avidec.c +++ b/dlls/quartz/tests/avidec.c @@ -1313,19 +1313,18 @@ static void test_connect_pin(void) const GUID *subtype; DWORD compression; WORD bpp; - BOOL todo; } expect[9] = { - {&MEDIASUBTYPE_CLJR, mmioFOURCC('C','L','J','R'), 8, TRUE}, - {&MEDIASUBTYPE_UYVY, mmioFOURCC('U','Y','V','Y'), 16, TRUE}, - {&MEDIASUBTYPE_YUY2, mmioFOURCC('Y','U','Y','2'), 16, TRUE}, - {&MEDIASUBTYPE_RGB32, BI_RGB, 32, FALSE}, - {&MEDIASUBTYPE_RGB24, BI_RGB, 24, TRUE}, - {&MEDIASUBTYPE_RGB565, BI_BITFIELDS, 16, TRUE}, - {&MEDIASUBTYPE_RGB555, BI_RGB, 16, TRUE}, - {&MEDIASUBTYPE_RGB8, BI_RGB, 8, TRUE}, - {&MEDIASUBTYPE_I420, mmioFOURCC('I','4','2','0'), 12, FALSE}, + {&MEDIASUBTYPE_CLJR, mmioFOURCC('C','L','J','R'), 8}, + {&MEDIASUBTYPE_UYVY, mmioFOURCC('U','Y','V','Y'), 16}, + {&MEDIASUBTYPE_YUY2, mmioFOURCC('Y','U','Y','2'), 16}, + {&MEDIASUBTYPE_RGB32, BI_RGB, 32}, + {&MEDIASUBTYPE_RGB24, BI_RGB, 24}, + {&MEDIASUBTYPE_RGB565, BI_BITFIELDS, 16}, + {&MEDIASUBTYPE_RGB555, BI_RGB, 16}, + {&MEDIASUBTYPE_RGB8, BI_RGB, 8}, + {&MEDIASUBTYPE_I420, mmioFOURCC('I','4','2','0'), 12}, };
VIDEOINFOHEADER expect_format = @@ -1351,9 +1350,9 @@ static void test_connect_pin(void)
hr = IEnumMediaTypes_Next(enummt, 1, &pmt, NULL); ok(hr == S_OK, "Got hr %#lx.\n", hr); - todo_wine_if(expect[i].todo) ok(!memcmp(pmt, &expect_mt, offsetof(AM_MEDIA_TYPE, cbFormat)), + ok(!memcmp(pmt, &expect_mt, offsetof(AM_MEDIA_TYPE, cbFormat)), "%u: Media types didn't match.\n", i); - todo_wine_if(expect[i].todo) ok(!memcmp(pmt->pbFormat, &expect_format, sizeof(VIDEOINFOHEADER)), + ok(!memcmp(pmt->pbFormat, &expect_format, sizeof(VIDEOINFOHEADER)), "%u: Format blocks didn't match.\n", i); if (i == 5) {