ICCVID: implement ICM_DECOMPRESSEX, fix some bugs

Mike McCormack mike at codeweavers.com
Tue Jan 20 09:38:34 CST 2004


This patch makes the ICCVID codec work in a well known media player :)

Mike


ChangeLog:
* implement ICM_DECOMPRESSEX, fix some bugs
-------------- next part --------------
Index: dlls/iccvid/iccvid.c
===================================================================
RCS file: /cvstrees/crossover/office/wine/dlls/iccvid/iccvid.c,v
retrieving revision 1.5
diff -u -r1.5 iccvid.c
--- dlls/iccvid/iccvid.c	13 Nov 2003 15:49:36 -0000	1.5
+++ dlls/iccvid/iccvid.c	20 Jan 2004 15:08:13 -0000
@@ -757,7 +757,16 @@
     }
 
     if( out )
-        return ICERR_UNSUPPORTED;
+    {
+        if( in->bmiHeader.biPlanes != out->bmiHeader.biPlanes )
+            return ICERR_UNSUPPORTED;
+        if( in->bmiHeader.biBitCount != out->bmiHeader.biBitCount )
+            return ICERR_UNSUPPORTED;
+        if( in->bmiHeader.biHeight != out->bmiHeader.biHeight )
+            return ICERR_UNSUPPORTED;
+        if( in->bmiHeader.biWidth != out->bmiHeader.biWidth )
+            return ICERR_UNSUPPORTED;
+    }
 
     return ICERR_OK;
 }
@@ -814,6 +823,28 @@
     return ICERR_OK;
 }
 
+LRESULT ICCVID_DecompressEx( ICCVID_Info *info, ICDECOMPRESSEX *icd, DWORD size )
+{
+    LONG width, height;
+    WORD bit_per_pixel;
+
+    TRACE("ICM_DECOMPRESSEX %p %p %ld\n", info, icd, size);
+
+    if( (info==NULL) || (info->dwMagic!=ICCVID_MAGIC) )
+        return ICERR_BADPARAM;
+
+    /* FIXME: flags are ignored */
+
+    width  = icd->lpbiSrc->biWidth;
+    height = icd->lpbiSrc->biHeight;
+    bit_per_pixel = icd->lpbiSrc->biBitCount;
+
+    decode_cinepak(info->cvinfo, icd->lpSrc, icd->lpbiSrc->biSizeImage,
+                   icd->lpDst, width, height, bit_per_pixel);
+
+    return ICERR_OK;
+}
+
 LRESULT ICCVID_Close( ICCVID_Info *info )
 {
     if( (info==NULL) || (info->dwMagic!=ICCVID_MAGIC) )
@@ -838,6 +869,10 @@
         return 1;
     case DRV_ENABLE:
         return 0;
+    case DRV_DISABLE:
+        return 0;
+    case DRV_FREE:
+        return 0;
 
     case DRV_OPEN:
         TRACE("Opened\n");
@@ -861,11 +896,15 @@
     case ICM_DECOMPRESS:
         return ICCVID_Decompress( info, (ICDECOMPRESS*) lParam1, 
                                   (DWORD) lParam2 );
+    case ICM_DECOMPRESSEX:
+        return ICCVID_DecompressEx( info, (ICDECOMPRESSEX*) lParam1, 
+                                  (DWORD) lParam2 );
+
     case DRV_CLOSE:
         return ICCVID_Close( info );
 
     default:
-        FIXME("Unknown message: %d %ld %ld\n", msg, lParam1, lParam2);
+        FIXME("Unknown message: %04x %ld %ld\n", msg, lParam1, lParam2);
     }
     return 0;
 }


More information about the wine-patches mailing list