From a821a8f419b1e71ae27a0be7d71a844769a4844c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=BCnnewig?= Date: Thu, 10 Oct 2002 03:42:28 +0000 Subject: [PATCH] Prevent some segfaults in msrle32. Add the necessary line to the sample system.ini for using this video codec. --- dlls/msvideo/msrle32/msrle32.c | 19 +++++++++---------- documentation/samples/system.ini | 1 + 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/dlls/msvideo/msrle32/msrle32.c b/dlls/msvideo/msrle32/msrle32.c index 039f7cf7676..036786e81fc 100644 --- a/dlls/msvideo/msrle32/msrle32.c +++ b/dlls/msvideo/msrle32/msrle32.c @@ -223,15 +223,15 @@ void computeInternalFrame(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, LPBYTE lpIn switch (lpbiIn->biBitCount) { case 1: - for (x = 0; x < lpbiIn->biWidth; x += 8) { + for (x = 0; x < lpbiIn->biWidth / 8; x++) { for (i = 0; i < 7; i++) - lpOut[x + i] = wIntensityTbl[(lpIn[x] >> (7 - i)) & 1]; + lpOut[8 * x + i] = wIntensityTbl[(lpIn[x] >> (7 - i)) & 1]; } break; case 4: - for (x = 0; x < lpbiIn->biWidth; x += 2) { - lpOut[x + 0] = wIntensityTbl[(lpIn[x] >> 4)]; - lpOut[x + 1] = wIntensityTbl[(lpIn[x] & 0x0F)]; + for (x = 0; x < lpbiIn->biWidth / 2; x++) { + lpOut[2 * x + 0] = wIntensityTbl[(lpIn[x] >> 4)]; + lpOut[2 * x + 1] = wIntensityTbl[(lpIn[x] & 0x0F)]; } break; case 8: @@ -299,13 +299,13 @@ static INT countDiffRLE4(LPWORD lpP, LPWORD lpA, LPWORD lpB, INT pos, LONG lDist /* FIXME */ return count; - } else if (lpP && ColorCmp(lpP[pos], lpB[pos]) <= lDist) { + } else if (lpP != NULL && ColorCmp(lpP[pos], lpB[pos]) <= lDist) { /* 'compare' with previous frame for end of diff */ INT count2 = 0; /* FIXME */ - if (count2 >= 4) + if (count2 >= 8) return count; pos -= count2; @@ -388,9 +388,9 @@ static INT MSRLE32_CompressRLE4Line(CodecInfo *pi, LPWORD lpP, LPWORD lpC, LPCBI while (count > 2) { INT i; INT size = min(count, 254); - BOOL extra_byte = size % 2; + BOOL extra_byte = (size/2) % 2; - *lpSizeImage += 2 + size + extra_byte; + *lpSizeImage += 2 + size/2 + extra_byte; count -= size; *lpOut++ = 0; *lpOut++ = size; @@ -1413,7 +1413,6 @@ static LRESULT Compress(CodecInfo *pi, ICCOMPRESS* lpic, DWORD dwSize) * No need to recompute internal framedata, because we only swapped buffers */ LPWORD pTmp = pi->pPrevFrame; - FIXME(": prev=%ld cur=%ld swap\n",pi->nPrevFrame,lpic->lFrameNum); pi->pPrevFrame = pi->pCurFrame; pi->pCurFrame = pTmp; } else if ((lpic->dwFlags & ICCOMPRESS_KEYFRAME) == 0) { diff --git a/documentation/samples/system.ini b/documentation/samples/system.ini index 45ec2bdc17b..d942f39518b 100644 --- a/documentation/samples/system.ini +++ b/documentation/samples/system.ini @@ -10,3 +10,4 @@ MPEGVideo=mciqtz.drv [drivers32] MSACM.imaadpcm=imaadp32.acm MSACM.msadpcm=msadp32.acm +VIDC.MRLD=msrle32.dll