diff --git a/patches/comctl32_animate_avi/0001-comctl32-Animate-support-AVI-msvc-codex.patch b/patches/comctl32_animate_avi/0001-comctl32-Animate-support-AVI-msvc-codex.patch new file mode 100644 index 00000000..85e4c883 --- /dev/null +++ b/patches/comctl32_animate_avi/0001-comctl32-Animate-support-AVI-msvc-codex.patch @@ -0,0 +1,24 @@ +From 8a9c55d23750ca2650eba518e46549d8b5d94b43 Mon Sep 17 00:00:00 2001 +From: Alistair Leslie-Hughes +Date: Fri, 11 Jul 2025 14:11:36 +1000 +Subject: [PATCH] comctl32: Animate support AVI msvc codex + +--- + dlls/comctl32/animate.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/dlls/comctl32/animate.c b/dlls/comctl32/animate.c +index 46e1e37b72d..717422c784f 100644 +--- a/dlls/comctl32/animate.c ++++ b/dlls/comctl32/animate.c +@@ -644,6 +644,7 @@ static BOOL ANIMATE_GetAviCodec(ANIMATE_INFO *infoPtr) + /* check uncompressed AVI */ + if ((infoPtr->ash.fccHandler == mmioFOURCC('D', 'I', 'B', ' ')) || + (infoPtr->ash.fccHandler == mmioFOURCC('R', 'L', 'E', ' ')) || ++ (infoPtr->ash.fccHandler == mmioFOURCC('m', 's', 'v', 'c')) || + (infoPtr->ash.fccHandler == mmioFOURCC(0, 0, 0, 0))) + { + infoPtr->hic = 0; +-- +2.47.2 + diff --git a/patches/comctl32_animate_avi/0002-comctl32-Animate-to-support-RLE8-codex.patch b/patches/comctl32_animate_avi/0002-comctl32-Animate-to-support-RLE8-codex.patch new file mode 100644 index 00000000..c79734a8 --- /dev/null +++ b/patches/comctl32_animate_avi/0002-comctl32-Animate-to-support-RLE8-codex.patch @@ -0,0 +1,24 @@ +From b8cce6663a956f8fb8f07700672e378b44b1af1c Mon Sep 17 00:00:00 2001 +From: Alistair Leslie-Hughes +Date: Fri, 11 Jul 2025 15:21:07 +1000 +Subject: [PATCH] comctl32: Animate to support RLE8 codex + +--- + dlls/comctl32/animate.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/dlls/comctl32/animate.c b/dlls/comctl32/animate.c +index 717422c784f..ca4fae85a11 100644 +--- a/dlls/comctl32/animate.c ++++ b/dlls/comctl32/animate.c +@@ -645,6 +645,7 @@ static BOOL ANIMATE_GetAviCodec(ANIMATE_INFO *infoPtr) + if ((infoPtr->ash.fccHandler == mmioFOURCC('D', 'I', 'B', ' ')) || + (infoPtr->ash.fccHandler == mmioFOURCC('R', 'L', 'E', ' ')) || + (infoPtr->ash.fccHandler == mmioFOURCC('m', 's', 'v', 'c')) || ++ (infoPtr->ash.fccHandler == mmioFOURCC('m', 'r', 'l', 'e')) || + (infoPtr->ash.fccHandler == mmioFOURCC(0, 0, 0, 0))) + { + infoPtr->hic = 0; +-- +2.47.2 + diff --git a/patches/comctl32_animate_avi/0003-comctl32-Animate-control-doesn-t-support-compressed-.patch b/patches/comctl32_animate_avi/0003-comctl32-Animate-control-doesn-t-support-compressed-.patch new file mode 100644 index 00000000..67420875 --- /dev/null +++ b/patches/comctl32_animate_avi/0003-comctl32-Animate-control-doesn-t-support-compressed-.patch @@ -0,0 +1,119 @@ +From 2ef9715ae9fffa0a6d7cdf0dc04e8de7eb245ce4 Mon Sep 17 00:00:00 2001 +From: Alistair Leslie-Hughes +Date: Fri, 11 Jul 2025 18:07:39 +1000 +Subject: [PATCH] comctl32: Animate control doesn't support compressed AVI + +The Animate control only supporst uncompress AVI with the excpetion of RLE8. +--- + dlls/comctl32/animate.c | 64 ++--------------------------------------- + 1 file changed, 3 insertions(+), 61 deletions(-) + +diff --git a/dlls/comctl32/animate.c b/dlls/comctl32/animate.c +index ca4fae85a11..74516db81f5 100644 +--- a/dlls/comctl32/animate.c ++++ b/dlls/comctl32/animate.c +@@ -39,14 +39,6 @@ + + WINE_DEFAULT_DEBUG_CHANNEL(animate); + +-static struct { +- HMODULE hModule; +- HIC (WINAPI *fnICOpen)(DWORD, DWORD, UINT); +- LRESULT (WINAPI *fnICClose)(HIC); +- LRESULT (WINAPI *fnICSendMessage)(HIC, UINT, DWORD_PTR, DWORD_PTR); +- DWORD (WINAPIV *fnICDecompress)(HIC,DWORD,LPBITMAPINFOHEADER,LPVOID,LPBITMAPINFOHEADER,LPVOID); +-} fnIC; +- + typedef struct + { + /* reference to input stream (file or resource) */ +@@ -189,11 +181,6 @@ static void ANIMATE_Free(ANIMATE_INFO *infoPtr) + } + Free (infoPtr->lpIndex); + infoPtr->lpIndex = NULL; +- if (infoPtr->hic) +- { +- fnIC.fnICClose(infoPtr->hic); +- infoPtr->hic = 0; +- } + Free (infoPtr->inbih); + infoPtr->inbih = NULL; + Free (infoPtr->outbih); +@@ -342,13 +329,6 @@ static BOOL ANIMATE_DrawFrame(ANIMATE_INFO *infoPtr, HDC hDC) + mmioSeek(infoPtr->hMMio, infoPtr->lpIndex[infoPtr->currFrame], SEEK_SET); + mmioRead(infoPtr->hMMio, infoPtr->indata, infoPtr->ash.dwSuggestedBufferSize); + +- if (infoPtr->hic && +- fnIC.fnICDecompress(infoPtr->hic, 0, infoPtr->inbih, infoPtr->indata, +- infoPtr->outbih, infoPtr->outdata) != ICERR_OK) { +- WARN("Decompression error\n"); +- return FALSE; +- } +- + ANIMATE_PaintFrame(infoPtr, hDC); + + if (infoPtr->currFrame++ >= infoPtr->nToFrame) { +@@ -649,39 +629,12 @@ static BOOL ANIMATE_GetAviCodec(ANIMATE_INFO *infoPtr) + (infoPtr->ash.fccHandler == mmioFOURCC(0, 0, 0, 0))) + { + infoPtr->hic = 0; +- return TRUE; +- } +- +- /* try to get a decompressor for that type */ +- infoPtr->hic = fnIC.fnICOpen(ICTYPE_VIDEO, infoPtr->ash.fccHandler, ICMODE_DECOMPRESS); +- if (!infoPtr->hic) { +- WARN("Can't load codec for the file\n"); +- return FALSE; +- } +- +- outSize = fnIC.fnICSendMessage(infoPtr->hic, ICM_DECOMPRESS_GET_FORMAT, +- (DWORD_PTR)infoPtr->inbih, 0L); +- +- if (!(infoPtr->outbih = Alloc(outSize))) +- return FALSE; +- +- if (fnIC.fnICSendMessage(infoPtr->hic, ICM_DECOMPRESS_GET_FORMAT, +- (DWORD_PTR)infoPtr->inbih, (DWORD_PTR)infoPtr->outbih) != ICERR_OK) +- { +- WARN("Can't get output BIH\n"); +- return FALSE; ++ return TRUE; + } + +- if (!(infoPtr->outdata = Alloc(infoPtr->outbih->biSizeImage))) +- return FALSE; ++ FIXME("Unsupported %s\n", debugstr_fourcc(infoPtr->ash.fccHandler)); + +- if (fnIC.fnICSendMessage(infoPtr->hic, ICM_DECOMPRESS_BEGIN, +- (DWORD_PTR)infoPtr->inbih, (DWORD_PTR)infoPtr->outbih) != ICERR_OK) { +- WARN("Can't begin decompression\n"); +- return FALSE; +- } +- +- return TRUE; ++ return FALSE; + } + + +@@ -790,17 +743,6 @@ static BOOL ANIMATE_Create(HWND hWnd, const CREATESTRUCTW *lpcs) + { + ANIMATE_INFO *infoPtr; + +- if (!fnIC.hModule) +- { +- fnIC.hModule = LoadLibraryW(L"msvfw32.dll"); +- if (!fnIC.hModule) return FALSE; +- +- fnIC.fnICOpen = (void*)GetProcAddress(fnIC.hModule, "ICOpen"); +- fnIC.fnICClose = (void*)GetProcAddress(fnIC.hModule, "ICClose"); +- fnIC.fnICSendMessage = (void*)GetProcAddress(fnIC.hModule, "ICSendMessage"); +- fnIC.fnICDecompress = (void*)GetProcAddress(fnIC.hModule, "ICDecompress"); +- } +- + /* allocate memory for info structure */ + infoPtr = Alloc(sizeof(*infoPtr)); + if (!infoPtr) return FALSE; +-- +2.47.2 + diff --git a/patches/comctl32_animate_avi/definition b/patches/comctl32_animate_avi/definition new file mode 100644 index 00000000..a15062cb --- /dev/null +++ b/patches/comctl32_animate_avi/definition @@ -0,0 +1,2 @@ +Fixes: [52278] comctl32: Animate support AVI msvc codex. +