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
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
,
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)
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
);
175 segData
= MapLS(lpData
);
176 ret
= ICSendMessage16(hic
, msg
, segData
, (DWORD
) cb
);
178 HeapFree(GetProcessHeap(), 0, lpData
);
182 /***********************************************************************
183 * ICGetInfo [MSVIDEO.212]
185 LRESULT VFWAPI
ICGetInfo16(HIC16 hic
, ICINFO16
* picinfo
, DWORD cb
)
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
);
195 /***********************************************************************
196 * ICLocate [MSVIDEO.213]
198 HIC16 VFWAPI
ICLocate16(DWORD fccType
, DWORD fccHandler
,
199 LPBITMAPINFOHEADER lpbiIn
, LPBITMAPINFOHEADER lpbiOut
,
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
,
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
));
244 /***********************************************************************
245 * _ICDecompress [MSVIDEO.230]
247 DWORD VFWAPIV
ICDecompress16(HIC16 hic
, DWORD dwFlags
,
248 LPBITMAPINFOHEADER lpbiFormat
, LPVOID lpData
,
249 LPBITMAPINFOHEADER lpbi
, LPVOID lpBits
)
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
;
264 segptr
= MapLS(&icd
);
265 ret
= ICSendMessage16(hic
, ICM_DECOMPRESS
, segptr
, sizeof(ICDECOMPRESS
));
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] */
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
,
299 icdb
.dwFlags
= dwFlags
;
307 icdb
.lpbi
= lpbi
; /* Keep this as SEGPTR for the mapping code to deal with */
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
));
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
)
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
;
340 seg_icd
= MapLS(&icd
);
341 ret
= ICSendMessage16(hic
, ICM_DRAW
, seg_icd
, sizeof(ICDRAW
));
346 /***********************************************************************
347 * ICGetDisplayFormat [MSVIDEO.239]
349 HIC16 VFWAPI
ICGetDisplayFormat16(HIC16 hic
, LPBITMAPINFOHEADER lpbiIn
,
350 LPBITMAPINFOHEADER lpbiOut
, INT16 depth
,
353 return HIC_16(ICGetDisplayFormat(HIC_32(hic
), lpbiIn
, lpbiOut
, depth
,