Dialog window should not be destroyed in DefDlgProc; this break
[wine.git] / multimedia / msvideo.c
blob38aea13b91bf22616c33c59697b0e3d2188e3cf0
1 /*
2 * Copyright 1998 Marcus Meissner
3 */
4 #include <stdio.h>
5 #include <strings.h>
7 #include "windows.h"
8 #include "driver.h"
9 #include "mmsystem.h"
10 #include "ole2.h"
11 #include "vfw.h"
12 #include "debug.h"
14 /****************************************************************************
15 * VideoForWindowsVersion [MSVFW32.2][MSVIDEO.2]
16 * Returns the version in major.minor form.
17 * In Windows95 this returns 0x040003b6 (4.950)
19 DWORD WINAPI
20 VideoForWindowsVersion(void) {
21 return 0x040003B6; /* 4.950 */
24 /* system.ini: [drivers32] */
26 /**************************************************************************
27 * ICInfo [MSVFW32.33]
28 * Get information about an installable compressor. Return TRUE if there
29 * is one.
31 BOOL32 WINAPI
32 ICInfo32(
33 DWORD fccType, /* [in] type of compressor ('vidc') */
34 DWORD fccHandler, /* [in] <n>th compressor */
35 ICINFO32 *lpicinfo /* [out] information about compressor */
36 ) {
37 char type[5],buf[2000];
39 memcpy(type,&fccType,4);type[4]=0;
40 TRACE(msvideo,"(%s,%ld,%p).\n",type,fccHandler,lpicinfo);
41 /* does OpenDriver/CloseDriver */
42 lpicinfo->dwSize = sizeof(ICINFO32);
43 lpicinfo->fccType = fccType;
44 lpicinfo->dwFlags = 0;
45 if (GetPrivateProfileString32A("drivers32",NULL,NULL,buf,2000,"system.ini")) {
46 char *s = buf;
47 while (*s) {
48 if (!lstrncmpi32A(type,s,4)) {
49 if(!fccHandler--) {
50 lpicinfo->fccHandler = mmioStringToFOURCC32A(s+5,0);
51 return TRUE;
54 s=s+lstrlen32A(s)+1; /* either next char or \0 */
57 return FALSE;
60 /**************************************************************************
61 * ICOpen [MSVFW32.37]
62 * Opens an installable compressor. Return special handle.
64 HIC32 WINAPI
65 ICOpen32(DWORD fccType,DWORD fccHandler,UINT32 wMode) {
66 char type[5],handler[5],codecname[20];
67 ICOPEN icopen;
68 HDRVR32 hdrv;
69 WINE_HIC *whic;
71 memcpy(type,&fccType,4);type[4]=0;
72 memcpy(handler,&fccHandler,4);handler[4]=0;
73 TRACE(msvideo,"(%s,%s,0x%08lx)\n",type,handler,(DWORD)wMode);
74 /* FIXME: When do we use 'vids' , when 'vidc'? Unclear */
75 if (!strcasecmp(type,"vids")) {
76 sprintf(codecname,"vidc.%s",handler);
77 fccType = mmioFOURCC('v','i','d','c');
78 } else
79 sprintf(codecname,"%s.%s",type,handler);
80 hdrv=OpenDriver32A(codecname,"drivers32",0);
81 if (!hdrv)
82 return 0;
83 whic = HeapAlloc(GetProcessHeap(),0,sizeof(WINE_HIC));
84 whic->hdrv = hdrv;
85 whic->driverproc= GetProcAddress32(GetDriverModuleHandle32(hdrv),"DriverProc");
86 /* Well, lParam2 is in fact a LPVIDEO_OPEN_PARMS, but it has the
87 * same layout as ICOPEN
89 icopen.fccType = fccType;
90 icopen.fccHandler = fccHandler;
91 icopen.dwSize = sizeof(ICOPEN);
92 icopen.dwFlags = wMode;
93 /* FIXME: do we need to fill out the rest too? */
94 whic->private = whic->driverproc(0,hdrv,DRV_OPEN,0,&icopen);
95 return (HIC32)whic;
98 LRESULT WINAPI
99 ICGetInfo32(HIC32 hic,ICINFO32 *picinfo,DWORD cb) {
100 LRESULT ret;
102 TRACE(msvideo,"(0x%08lx,%p,%ld)\n",(DWORD)hic,picinfo,cb);
103 ret = ICSendMessage32(hic,ICM_GETINFO,(DWORD)picinfo,cb);
104 TRACE(msvideo," -> 0x%08lx\n",ret);
105 return ret;
108 DWORD VFWAPIV
109 ICCompress32(
110 HIC32 hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiOutput,LPVOID lpData,
111 LPBITMAPINFOHEADER lpbiInput,LPVOID lpBits,LPDWORD lpckid,
112 LPDWORD lpdwFlags,LONG lFrameNum,DWORD dwFrameSize,DWORD dwQuality,
113 LPBITMAPINFOHEADER lpbiPrev,LPVOID lpPrev
115 ICCOMPRESS iccmp;
117 iccmp.dwFlags = dwFlags;
119 iccmp.lpbiOutput = lpbiOutput;
120 iccmp.lpOutput = lpData;
121 iccmp.lpbiInput = lpbiInput;
122 iccmp.lpInput = lpBits;
124 iccmp.lpckid = lpckid;
125 iccmp.lpdwFlags = lpdwFlags;
126 iccmp.lFrameNum = lFrameNum;
127 iccmp.dwFrameSize = dwFrameSize;
128 iccmp.dwQuality = dwQuality;
129 iccmp.lpbiPrev = lpbiPrev;
130 iccmp.lpPrev = lpPrev;
131 return ICSendMessage32(hic,ICM_COMPRESS,(LPARAM)&iccmp,sizeof(iccmp));
134 DWORD VFWAPIV
135 ICDecompress32(HIC32 hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiFormat,LPVOID lpData,LPBITMAPINFOHEADER lpbi,LPVOID lpBits) {
136 ICDECOMPRESS icd;
138 icd.dwFlags = dwFlags;
139 icd.lpbiInput = lpbiFormat;
140 icd.lpInput = lpData;
142 icd.lpbiOutput = lpbi;
143 icd.lpOutput = lpBits;
145 icd.ckid = ??? ckid from AVI file? how do we get it? ;
147 return ICSendMessage32(hic,ICM_DECOMPRESS,(LPARAM)&icd,sizeof(icd));
150 HIC32 WINAPI
151 ICLocate(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn,
152 LPBITMAPINFOHEADER lpbiOut, WORD wFlags
154 FIXME(msvideo,"stub!\n");
155 return 0;
158 LRESULT VFWAPI
159 ICSendMessage32(HIC32 hic,UINT32 msg,DWORD lParam1,DWORD lParam2) {
160 LRESULT ret;
161 WINE_HIC *whic = (WINE_HIC*)hic;
163 #define XX(x) case x: TRACE(msvideo,"(0x%08lx,"#x",0x%08lx,0x%08lx)\n",(DWORD)hic,lParam1,lParam2);break;
165 switch (msg) {
166 XX(ICM_ABOUT)
167 XX(ICM_GETINFO)
168 XX(ICM_COMPRESS_FRAMES_INFO)
169 XX(ICM_COMPRESS_GET_FORMAT)
170 XX(ICM_COMPRESS_GET_SIZE)
171 XX(ICM_COMPRESS_QUERY)
172 XX(ICM_COMPRESS_BEGIN)
173 XX(ICM_COMPRESS)
174 XX(ICM_COMPRESS_END)
175 XX(ICM_DECOMPRESS_GET_FORMAT)
176 XX(ICM_DECOMPRESS_QUERY)
177 XX(ICM_DECOMPRESS_BEGIN)
178 XX(ICM_DECOMPRESS)
179 XX(ICM_DECOMPRESS_END)
180 XX(ICM_DECOMPRESS_SET_PALETTE)
181 XX(ICM_DECOMPRESS_GET_PALETTE)
182 XX(ICM_DRAW_QUERY)
183 XX(ICM_DRAW_BEGIN)
184 XX(ICM_DRAW_GET_PALETTE)
185 XX(ICM_DRAW_START)
186 XX(ICM_DRAW_STOP)
187 XX(ICM_DRAW_END)
188 XX(ICM_DRAW_GETTIME)
189 XX(ICM_DRAW)
190 XX(ICM_DRAW_WINDOW)
191 XX(ICM_DRAW_SETTIME)
192 XX(ICM_DRAW_REALIZE)
193 XX(ICM_DRAW_FLUSH)
194 XX(ICM_DRAW_RENDERBUFFER)
195 XX(ICM_DRAW_START_PLAY)
196 XX(ICM_DRAW_STOP_PLAY)
197 XX(ICM_DRAW_SUGGESTFORMAT)
198 XX(ICM_DRAW_CHANGEPALETTE)
199 XX(ICM_GETBUFFERSWANTED)
200 XX(ICM_GETDEFAULTKEYFRAMERATE)
201 XX(ICM_DECOMPRESSEX_BEGIN)
202 XX(ICM_DECOMPRESSEX_QUERY)
203 XX(ICM_DECOMPRESSEX)
204 XX(ICM_DECOMPRESSEX_END)
205 XX(ICM_SET_STATUS_PROC)
206 default:
207 FIXME(msvideo,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx)\n",(DWORD)hic,(DWORD)msg,lParam1,lParam2);
209 ret = whic->driverproc(whic->private,whic->hdrv,msg,lParam1,lParam2);
210 TRACE(msvideo," -> 0x%08lx\n",ret);
211 return ret;
214 DWORD VFWAPIV ICDrawBegin32(
215 HIC32 hic,
216 DWORD dwFlags,/* flags */
217 HPALETTE32 hpal, /* palette to draw with */
218 HWND32 hwnd, /* window to draw to */
219 HDC32 hdc, /* HDC to draw to */
220 INT32 xDst, /* destination rectangle */
221 INT32 yDst,
222 INT32 dxDst,
223 INT32 dyDst,
224 LPBITMAPINFOHEADER lpbi, /* format of frame to draw */
225 INT32 xSrc, /* source rectangle */
226 INT32 ySrc,
227 INT32 dxSrc,
228 INT32 dySrc,
229 DWORD dwRate, /* frames/second = (dwRate/dwScale) */
230 DWORD dwScale) {
231 return 0;
234 LRESULT WINAPI ICClose32(HIC32 hic) {
235 FIXME(msvideo,"(%d),stub!\n",hic);
236 return 0;
239 HANDLE32 /* HDRAWDIB */ WINAPI
240 DrawDibOpen32( void ) {
241 FIXME(msvideo,"stub!\n");
242 return 0;
244 HWND32 VFWAPIV MCIWndCreate32 (HWND32 hwndParent, HINSTANCE32 hInstance,
245 DWORD dwStyle,LPVOID szFile)
246 { FIXME(msvideo,"%x %x %lx %p\n",hwndParent, hInstance, dwStyle, szFile);
247 return 0;
249 HWND32 VFWAPIV MCIWndCreate32A(HWND32 hwndParent, HINSTANCE32 hInstance,
250 DWORD dwStyle,LPCSTR szFile)
251 { FIXME(msvideo,"%x %x %lx %s\n",hwndParent, hInstance, dwStyle, szFile);
252 return 0;
254 HWND32 VFWAPIV MCIWndCreate32W(HWND32 hwndParent, HINSTANCE32 hInstance,
255 DWORD dwStyle,LPCWSTR szFile)
256 { FIXME(msvideo,"%x %x %lx %s\n",hwndParent, hInstance, dwStyle, debugstr_w(szFile));
257 return 0;