Prevent some segfaults in msrle32.
Add the necessary line to the sample system.ini for using this video codec.
This commit is contained in:
parent
05b4a09357
commit
a821a8f419
@ -223,15 +223,15 @@ void computeInternalFrame(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, LPBYTE lpIn
|
|||||||
|
|
||||||
switch (lpbiIn->biBitCount) {
|
switch (lpbiIn->biBitCount) {
|
||||||
case 1:
|
case 1:
|
||||||
for (x = 0; x < lpbiIn->biWidth; x += 8) {
|
for (x = 0; x < lpbiIn->biWidth / 8; x++) {
|
||||||
for (i = 0; i < 7; i++)
|
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;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
for (x = 0; x < lpbiIn->biWidth; x += 2) {
|
for (x = 0; x < lpbiIn->biWidth / 2; x++) {
|
||||||
lpOut[x + 0] = wIntensityTbl[(lpIn[x] >> 4)];
|
lpOut[2 * x + 0] = wIntensityTbl[(lpIn[x] >> 4)];
|
||||||
lpOut[x + 1] = wIntensityTbl[(lpIn[x] & 0x0F)];
|
lpOut[2 * x + 1] = wIntensityTbl[(lpIn[x] & 0x0F)];
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
@ -299,13 +299,13 @@ static INT countDiffRLE4(LPWORD lpP, LPWORD lpA, LPWORD lpB, INT pos, LONG lDist
|
|||||||
/* FIXME */
|
/* FIXME */
|
||||||
|
|
||||||
return count;
|
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 */
|
/* 'compare' with previous frame for end of diff */
|
||||||
INT count2 = 0;
|
INT count2 = 0;
|
||||||
|
|
||||||
/* FIXME */
|
/* FIXME */
|
||||||
|
|
||||||
if (count2 >= 4)
|
if (count2 >= 8)
|
||||||
return count;
|
return count;
|
||||||
|
|
||||||
pos -= count2;
|
pos -= count2;
|
||||||
@ -388,9 +388,9 @@ static INT MSRLE32_CompressRLE4Line(CodecInfo *pi, LPWORD lpP, LPWORD lpC, LPCBI
|
|||||||
while (count > 2) {
|
while (count > 2) {
|
||||||
INT i;
|
INT i;
|
||||||
INT size = min(count, 254);
|
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;
|
count -= size;
|
||||||
*lpOut++ = 0;
|
*lpOut++ = 0;
|
||||||
*lpOut++ = size;
|
*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 */
|
* No need to recompute internal framedata, because we only swapped buffers */
|
||||||
LPWORD pTmp = pi->pPrevFrame;
|
LPWORD pTmp = pi->pPrevFrame;
|
||||||
|
|
||||||
FIXME(": prev=%ld cur=%ld swap\n",pi->nPrevFrame,lpic->lFrameNum);
|
|
||||||
pi->pPrevFrame = pi->pCurFrame;
|
pi->pPrevFrame = pi->pCurFrame;
|
||||||
pi->pCurFrame = pTmp;
|
pi->pCurFrame = pTmp;
|
||||||
} else if ((lpic->dwFlags & ICCOMPRESS_KEYFRAME) == 0) {
|
} else if ((lpic->dwFlags & ICCOMPRESS_KEYFRAME) == 0) {
|
||||||
|
@ -10,3 +10,4 @@ MPEGVideo=mciqtz.drv
|
|||||||
[drivers32]
|
[drivers32]
|
||||||
MSACM.imaadpcm=imaadp32.acm
|
MSACM.imaadpcm=imaadp32.acm
|
||||||
MSACM.msadpcm=msadp32.acm
|
MSACM.msadpcm=msadp32.acm
|
||||||
|
VIDC.MRLD=msrle32.dll
|
||||||
|
Loading…
x
Reference in New Issue
Block a user