2 * Copyright 1998 Marcus Meissner
4 * Modified for use with MPlayer, detailed CVS changelog at
5 * http://www.mplayerhq.hu/cgi-bin/cvsweb.cgi/main/
18 #include "wine/winbase.h"
19 #include "wine/windef.h"
20 #include "wine/winuser.h"
22 #include "wine/winestring.h"
23 #include "wine/driver.h"
24 #include "wine/avifmt.h"
27 #define OpenDriverA DrvOpen
28 #define CloseDriver DrvClose
30 /***********************************************************************
31 * VideoForWindowsVersion [MSVFW.2][MSVIDEO.2]
32 * Returns the version in major.minor form.
33 * In Windows95 this returns 0x040003b6 (4.950)
35 long VFWAPI
VideoForWindowsVersion(void) {
36 return 0x040003B6; /* 4.950 */
39 /* system.ini: [drivers] */
41 /***********************************************************************
43 * Get information about an installable compressor. Return TRUE if there
48 long fccType
, /* [in] type of compressor ('vidc') */
49 long fccHandler
, /* [in] <n>th compressor */
50 ICINFO
*lpicinfo
/* [out] information about compressor */
52 /* does OpenDriver/CloseDriver */
53 lpicinfo
->dwSize
= sizeof(ICINFO
);
54 lpicinfo
->fccType
= fccType
;
55 lpicinfo
->dwFlags
= 0;
59 /***********************************************************************
61 * Opens an installable compressor. Return special handle.
64 //ICOpen(long fccType,long fccHandler,unsigned int wMode) {
65 ICOpen(long filename
,long fccHandler
,unsigned int wMode
) {
70 /* Well, lParam2 is in fact a LPVIDEO_OPEN_PARMS, but it has the
71 * same layout as ICOPEN
73 icopen
.fccType
= 0x63646976; // "vidc" //fccType;
74 icopen
.fccHandler
= fccHandler
;
75 icopen
.dwSize
= sizeof(ICOPEN
);
76 icopen
.dwFlags
= wMode
;
77 icopen
.pV1Reserved
= (void*)filename
;
78 /* FIXME: do we need to fill out the rest too? */
79 hdrv
=OpenDriverA((long)&icopen
);
81 whic
= (WINE_HIC
*)malloc(sizeof(WINE_HIC
));
83 whic
->driverproc
= ((DRVR
*)hdrv
)->DriverProc
;
84 // whic->private = ICSendMessage((HIC)whic,DRV_OPEN,0,(long)&icopen);
85 whic
->driverid
= ((DRVR
*)hdrv
)->dwDriverID
;
89 /***********************************************************************
90 * ICGetInfo [MSVFW.30]
93 ICGetInfo(HIC hic
,ICINFO
*picinfo
,long cb
) {
96 ret
= ICSendMessage(hic
,ICM_GETINFO
,(long)picinfo
,cb
);
101 /***********************************************************************
102 * ICCompress [MSVFW.23]
106 HIC hic
,long dwFlags
,LPBITMAPINFOHEADER lpbiOutput
,void* lpData
,
107 LPBITMAPINFOHEADER lpbiInput
,void* lpBits
,long* lpckid
,
108 long* lpdwFlags
,long lFrameNum
,long dwFrameSize
,long dwQuality
,
109 LPBITMAPINFOHEADER lpbiPrev
,void* lpPrev
113 iccmp
.dwFlags
= dwFlags
;
115 iccmp
.lpbiOutput
= lpbiOutput
;
116 iccmp
.lpOutput
= lpData
;
117 iccmp
.lpbiInput
= lpbiInput
;
118 iccmp
.lpInput
= lpBits
;
120 iccmp
.lpckid
= lpckid
;
121 iccmp
.lpdwFlags
= lpdwFlags
;
122 iccmp
.lFrameNum
= lFrameNum
;
123 iccmp
.dwFrameSize
= dwFrameSize
;
124 iccmp
.dwQuality
= dwQuality
;
125 iccmp
.lpbiPrev
= lpbiPrev
;
126 iccmp
.lpPrev
= lpPrev
;
127 return ICSendMessage(hic
,ICM_COMPRESS
,(long)&iccmp
,sizeof(iccmp
));
130 /***********************************************************************
131 * ICDecompress [MSVFW.26]
134 ICDecompress(HIC hic
,long dwFlags
,LPBITMAPINFOHEADER lpbiFormat
,void* lpData
,LPBITMAPINFOHEADER lpbi
,void* lpBits
) {
137 icd
.dwFlags
= dwFlags
;
138 icd
.lpbiInput
= lpbiFormat
;
139 icd
.lpInput
= lpData
;
141 icd
.lpbiOutput
= lpbi
;
142 icd
.lpOutput
= lpBits
;
144 result
=ICSendMessage(hic
,ICM_DECOMPRESS
,(long)&icd
,sizeof(icd
));
148 /***********************************************************************
149 * ICDecompressEx [MSVFW.26]
152 ICDecompressEx(HIC hic
,long dwFlags
,LPBITMAPINFOHEADER lpbiFormat
,void* lpData
,LPBITMAPINFOHEADER lpbi
,void* lpBits
) {
156 icd
.dwFlags
= dwFlags
;
158 icd
.lpbiSrc
= lpbiFormat
;
165 icd
.dxSrc
=lpbiFormat
->biWidth
;
166 icd
.dySrc
=abs(lpbiFormat
->biHeight
);
169 icd
.dxDst
=lpbi
->biWidth
;
170 icd
.dyDst
=abs(lpbi
->biHeight
);
173 result
=ICSendMessage(hic
,ICM_DECOMPRESSEX
,(long)&icd
,sizeof(icd
));
178 ICUniversalEx(HIC hic
,int command
,LPBITMAPINFOHEADER lpbiFormat
,LPBITMAPINFOHEADER lpbi
) {
184 icd
.lpbiSrc
= lpbiFormat
;
191 icd
.dxSrc
=lpbiFormat
->biWidth
;
192 icd
.dySrc
=abs(lpbiFormat
->biHeight
);
195 icd
.dxDst
=lpbi
->biWidth
;
196 icd
.dyDst
=abs(lpbi
->biHeight
);
199 result
=ICSendMessage(hic
,command
,(long)&icd
,sizeof(icd
));
204 /***********************************************************************
205 * ICSendMessage [MSVFW.40]
208 ICSendMessage(HIC hic
,unsigned int msg
,long lParam1
,long lParam2
) {
209 WINE_HIC
*whic
= (WINE_HIC
*)hic
;
210 return SendDriverMessage(whic
->hdrv
, msg
, lParam1
,lParam2
);
214 /***********************************************************************
217 LRESULT VFWAPI
ICClose(HIC hic
) {
218 WINE_HIC
*whic
= (WINE_HIC
*)hic
;
219 /* FIXME: correct? */
220 // CloseDriver(whic->hdrv,0,0);
221 DrvClose(whic
->hdrv
);
222 //#warning FIXME: DrvClose
227 int VFWAPI
ICDoSomething()