wine/dlls/msvideo/msrle32: Some minor bugfixes.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hallo.

The following patch prevents some segfaults in the msrle32.

It adds also the necessary line to the sample system.ini for using
this video codec.

diff -durN wine-20021007/documentation/samples/system.ini wine-20021007.new/documentation/samples/system.ini
--- wine-20021007/documentation/samples/system.ini      Mon Oct  7 20:21:45 2002+++ wine-20021007.new/documentation/samples/system.ini  Tue Oct  8 23:32:14 2002@@ -10,3 +10,4 @@
 [drivers32]
 MSACM.imaadpcm=imaadp32.acm
 MSACM.msadpcm=msadp32.acm
+VIDC.MRLE=msrle32.dll
diff -dur wine-20021007/dlls/msvideo/msrle32/msrle32.c wine-20021007.new/dlls/msvideo/msrle32/msrle32.c
--- wine-20021007/dlls/msvideo/msrle32/msrle32.c	Tue Oct  8 02:40:06 2002
+++ wine-20021007.new/dlls/msvideo/msrle32/msrle32.c	Tue Oct  8 21:47:50 2002
@@ -223,15 +223,15 @@
 
     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 @@
       /* 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 @@
     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 @@
      * 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) {


  Michael Günnewig

[Index of Archives]     [Gimp for Windows]     [Red Hat]     [Samba]     [Yosemite Camping]     [Graphics Cards]     [Wine Home]

  Powered by Linux