Convert HPALETTE to a void*.
[wine/dcerpc.git] / dlls / msvideo / msvideo16.c
blobfc735704eb3fb039888efc5b1e9dc5a3f97de81a
1 /*
2 * msvideo 16-bit functions
4 * Copyright 1998 Marcus Meissner
5 * Copyright 2000 Bradley Baetz
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #include "winbase.h"
23 #include "windef.h"
24 #include "vfw.h"
25 #include "vfw16.h"
26 #include "stackframe.h"
27 #include "wine/debug.h"
29 WINE_DEFAULT_DEBUG_CHANNEL(msvideo);
31 /* handle16 --> handle conversions */
32 #define HDC_32(h16) ((HDC)(ULONG_PTR)(h16))
33 #define HDRAWDIB_32(h16) ((HDRAWDIB)(ULONG_PTR)(h16))
34 #define HIC_32(h16) ((HIC)(ULONG_PTR)(h16))
36 /* handle --> handle16 conversions */
37 #define HDC_16(h32) (LOWORD(h32))
38 #define HDRAWDIB_16(h32) (LOWORD(h32))
39 #define HIC_16(h32) (LOWORD(h32))
42 /***********************************************************************
43 * DrawDibOpen [MSVIDEO.102]
45 HDRAWDIB16 VFWAPI DrawDibOpen16(void)
47 return HDRAWDIB_16(DrawDibOpen());
50 /***********************************************************************
51 * DrawDibClose [MSVIDEO.103]
53 BOOL16 VFWAPI DrawDibClose16(HDRAWDIB16 hdd)
55 return DrawDibClose(HDRAWDIB_32(hdd));
58 /************************************************************************
59 * DrawDibBegin [MSVIDEO.104]
61 BOOL16 VFWAPI DrawDibBegin16(HDRAWDIB16 hdd, HDC16 hdc, INT16 dxDst,
62 INT16 dyDst, LPBITMAPINFOHEADER lpbi, INT16 dxSrc,
63 INT16 dySrc, UINT16 wFlags)
65 return DrawDibBegin(HDRAWDIB_32(hdd), HDC_32(hdc), dxDst, dyDst, lpbi,
66 dxSrc, dySrc, wFlags);
69 /***********************************************************************
70 * DrawDibEnd [MSVIDEO.105]
72 BOOL16 VFWAPI DrawDibEnd16(HDRAWDIB16 hdd)
74 return DrawDibEnd(HDRAWDIB_32(hdd));
77 /**********************************************************************
78 * DrawDibDraw [MSVIDEO.106]
80 BOOL16 VFWAPI DrawDibDraw16(HDRAWDIB16 hdd, HDC16 hdc, INT16 xDst, INT16 yDst,
81 INT16 dxDst, INT16 dyDst, LPBITMAPINFOHEADER lpbi,
82 LPVOID lpBits, INT16 xSrc, INT16 ySrc, INT16 dxSrc,
83 INT16 dySrc, UINT16 wFlags)
85 return DrawDibDraw(HDRAWDIB_32(hdd), HDC_32(hdc), xDst, yDst, dxDst,
86 dyDst, lpbi, lpBits, xSrc, ySrc, dxSrc, dySrc, wFlags);
89 /***********************************************************************
90 * DrawDibGetPalette [MSVIDEO.108]
92 HPALETTE16 VFWAPI DrawDibGetPalette16(HDRAWDIB16 hdd)
94 return HPALETTE_16(DrawDibGetPalette(HDRAWDIB_32(hdd)));
97 /***********************************************************************
98 * DrawDibSetPalette [MSVIDEO.110]
100 BOOL16 VFWAPI DrawDibSetPalette16(HDRAWDIB16 hdd, HPALETTE16 hpal)
102 return DrawDibSetPalette(HDRAWDIB_32(hdd), HPALETTE_32(hpal));
105 /***********************************************************************
106 * DrawDibRealize [MSVIDEO.112]
108 UINT16 VFWAPI DrawDibRealize16(HDRAWDIB16 hdd, HDC16 hdc,
109 BOOL16 fBackground)
111 return (UINT16) DrawDibRealize(HDRAWDIB_32(hdd), HDC_32(hdc), fBackground);
114 /*************************************************************************
115 * DrawDibStart [MSVIDEO.118]
117 BOOL16 VFWAPI DrawDibStart16(HDRAWDIB16 hdd, DWORD rate)
119 return DrawDibStart(HDRAWDIB_32(hdd), rate);
122 /*************************************************************************
123 * DrawDibStop [MSVIDEO.119]
125 BOOL16 DrawDibStop16(HDRAWDIB16 hdd)
127 return DrawDibStop(HDRAWDIB_32(hdd));
130 /***********************************************************************
131 * ICOpen [MSVIDEO.203]
133 HIC16 VFWAPI ICOpen16(DWORD fccType, DWORD fccHandler, UINT16 wMode)
135 return HIC_16(ICOpen(fccType, fccHandler, wMode));
138 /***********************************************************************
139 * ICClose [MSVIDEO.204]
141 LRESULT WINAPI ICClose16(HIC16 hic)
143 return ICClose(HIC_32(hic));
146 /***********************************************************************
147 * _ICMessage [MSVIDEO.207]
149 LRESULT VFWAPIV ICMessage16(void)
151 HIC16 hic;
152 UINT16 msg;
153 UINT16 cb;
154 LPWORD lpData;
155 SEGPTR segData;
156 LRESULT ret;
157 UINT16 i;
159 VA_LIST16 valist;
161 VA_START16(valist);
162 hic = VA_ARG16(valist, HIC16);
163 msg = VA_ARG16(valist, UINT16);
164 cb = VA_ARG16(valist, UINT16);
166 lpData = HeapAlloc(GetProcessHeap(), 0, cb);
168 TRACE("0x%08lx, %u, %u, ...)\n", (DWORD) hic, msg, cb);
170 for (i = 0; i < cb / sizeof(WORD); i++) {
171 lpData[i] = VA_ARG16(valist, WORD);
174 VA_END16(valist);
175 segData = MapLS(lpData);
176 ret = ICSendMessage16(hic, msg, segData, (DWORD) cb);
177 UnMapLS(segData);
178 HeapFree(GetProcessHeap(), 0, lpData);
179 return ret;
182 /***********************************************************************
183 * ICGetInfo [MSVIDEO.212]
185 LRESULT VFWAPI ICGetInfo16(HIC16 hic, ICINFO16 * picinfo, DWORD cb)
187 LRESULT ret;
189 TRACE("(0x%08lx,%p,%ld)\n", (DWORD) hic, picinfo, cb);
190 ret = ICSendMessage16(hic, ICM_GETINFO, (DWORD) picinfo, cb);
191 TRACE(" -> 0x%08lx\n", ret);
192 return ret;
195 /***********************************************************************
196 * ICLocate [MSVIDEO.213]
198 HIC16 VFWAPI ICLocate16(DWORD fccType, DWORD fccHandler,
199 LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut,
200 WORD wFlags)
202 return HIC_16(ICLocate(fccType, fccHandler, lpbiIn, lpbiOut, wFlags));
205 /***********************************************************************
206 * _ICCompress [MSVIDEO.224]
208 DWORD VFWAPIV ICCompress16(HIC16 hic, DWORD dwFlags,
209 LPBITMAPINFOHEADER lpbiOutput, LPVOID lpData,
210 LPBITMAPINFOHEADER lpbiInput, LPVOID lpBits,
211 LPDWORD lpckid, LPDWORD lpdwFlags,
212 LONG lFrameNum, DWORD dwFrameSize,
213 DWORD dwQuality, LPBITMAPINFOHEADER lpbiPrev,
214 LPVOID lpPrev)
217 DWORD ret;
218 ICCOMPRESS iccmp;
219 SEGPTR seg_iccmp;
221 TRACE("(0x%08lx,%ld,%p,%p,%p,%p,...)\n", (DWORD) hic, dwFlags,
222 lpbiOutput, lpData, lpbiInput, lpBits);
224 iccmp.dwFlags = dwFlags;
226 iccmp.lpbiOutput = lpbiOutput;
227 iccmp.lpOutput = lpData;
228 iccmp.lpbiInput = lpbiInput;
229 iccmp.lpInput = lpBits;
231 iccmp.lpckid = lpckid;
232 iccmp.lpdwFlags = lpdwFlags;
233 iccmp.lFrameNum = lFrameNum;
234 iccmp.dwFrameSize = dwFrameSize;
235 iccmp.dwQuality = dwQuality;
236 iccmp.lpbiPrev = lpbiPrev;
237 iccmp.lpPrev = lpPrev;
238 seg_iccmp = MapLS(&iccmp);
239 ret = ICSendMessage16(hic, ICM_COMPRESS, seg_iccmp, sizeof(ICCOMPRESS));
240 UnMapLS(seg_iccmp);
241 return ret;
244 /***********************************************************************
245 * _ICDecompress [MSVIDEO.230]
247 DWORD VFWAPIV ICDecompress16(HIC16 hic, DWORD dwFlags,
248 LPBITMAPINFOHEADER lpbiFormat, LPVOID lpData,
249 LPBITMAPINFOHEADER lpbi, LPVOID lpBits)
251 ICDECOMPRESS icd;
252 SEGPTR segptr;
253 DWORD ret;
255 TRACE("(0x%08lx,%ld,%p,%p,%p,%p)\n", (DWORD) hic, dwFlags, lpbiFormat,
256 lpData, lpbi, lpBits);
258 icd.dwFlags = dwFlags;
259 icd.lpbiInput = lpbiFormat;
260 icd.lpInput = lpData;
261 icd.lpbiOutput = lpbi;
262 icd.lpOutput = lpBits;
263 icd.ckid = 0;
264 segptr = MapLS(&icd);
265 ret = ICSendMessage16(hic, ICM_DECOMPRESS, segptr, sizeof(ICDECOMPRESS));
266 UnMapLS(segptr);
267 return ret;
270 /***********************************************************************
271 * _ICDrawBegin [MSVIDEO.232]
273 DWORD VFWAPIV ICDrawBegin16(HIC16 hic, /* [in] */
274 DWORD dwFlags, /* [in] flags */
275 HPALETTE16 hpal, /* [in] palette to draw with */
276 HWND16 hwnd, /* [in] window to draw to */
277 HDC16 hdc, /* [in] HDC to draw to */
278 INT16 xDst, /* [in] destination rectangle */
279 INT16 yDst, /* [in] */
280 INT16 dxDst, /* [in] */
281 INT16 dyDst, /* [in] */
282 LPBITMAPINFOHEADER lpbi, /* [in] format of frame to draw NOTE: SEGPTR */
283 INT16 xSrc, /* [in] source rectangle */
284 INT16 ySrc, /* [in] */
285 INT16 dxSrc, /* [in] */
286 INT16 dySrc, /* [in] */
287 DWORD dwRate, /* [in] frames/second = (dwRate/dwScale) */
288 DWORD dwScale) /* [in] */
290 DWORD ret;
291 ICDRAWBEGIN16 icdb;
292 SEGPTR seg_icdb;
294 TRACE ("(0x%08lx,%ld,0x%08lx,0x%08lx,0x%08lx,%u,%u,%u,%u,%p,%u,%u,%u,%u,%ld,%ld)\n",
295 (DWORD) hic, dwFlags, (DWORD) hpal, (DWORD) hwnd, (DWORD) hdc,
296 xDst, yDst, dxDst, dyDst, lpbi, xSrc, ySrc, dxSrc, dySrc, dwRate,
297 dwScale);
299 icdb.dwFlags = dwFlags;
300 icdb.hpal = hpal;
301 icdb.hwnd = hwnd;
302 icdb.hdc = hdc;
303 icdb.xDst = xDst;
304 icdb.yDst = yDst;
305 icdb.dxDst = dxDst;
306 icdb.dyDst = dyDst;
307 icdb.lpbi = lpbi; /* Keep this as SEGPTR for the mapping code to deal with */
308 icdb.xSrc = xSrc;
309 icdb.ySrc = ySrc;
310 icdb.dxSrc = dxSrc;
311 icdb.dySrc = dySrc;
312 icdb.dwRate = dwRate;
313 icdb.dwScale = dwScale;
314 seg_icdb = MapLS(&icdb);
315 ret = (DWORD) ICSendMessage16(hic, ICM_DRAW_BEGIN, seg_icdb,
316 sizeof(ICDRAWBEGIN16));
317 UnMapLS(seg_icdb);
318 return ret;
321 /***********************************************************************
322 * _ICDraw [MSVIDEO.234]
324 DWORD VFWAPIV ICDraw16(HIC16 hic, DWORD dwFlags,
325 LPVOID lpFormat, /* [???] NOTE: SEGPTR */
326 LPVOID lpData, /* [???] NOTE: SEGPTR */
327 DWORD cbData, LONG lTime)
329 DWORD ret;
330 ICDRAW icd;
331 SEGPTR seg_icd;
333 TRACE("(0x%08lx,0x%08lx,%p,%p,%ld,%ld)\n", (DWORD) hic, dwFlags,
334 lpFormat, lpData, cbData, lTime);
335 icd.dwFlags = dwFlags;
336 icd.lpFormat = lpFormat;
337 icd.lpData = lpData;
338 icd.cbData = cbData;
339 icd.lTime = lTime;
340 seg_icd = MapLS(&icd);
341 ret = ICSendMessage16(hic, ICM_DRAW, seg_icd, sizeof(ICDRAW));
342 UnMapLS(seg_icd);
343 return ret;
346 /***********************************************************************
347 * ICGetDisplayFormat [MSVIDEO.239]
349 HIC16 VFWAPI ICGetDisplayFormat16(HIC16 hic, LPBITMAPINFOHEADER lpbiIn,
350 LPBITMAPINFOHEADER lpbiOut, INT16 depth,
351 INT16 dx, INT16 dy)
353 return HIC_16(ICGetDisplayFormat(HIC_32(hic), lpbiIn, lpbiOut, depth,
354 dx, dy));