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