ReactOS 0.4.17-dev-806-gffa4164
private_mciavi.h File Reference
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
#include "winuser.h"
#include "mmddk.h"
#include "digitalv.h"
#include "vfw.h"
#include "wownt32.h"
#include "mciavi.h"
Include dependency graph for private_mciavi.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  MMIOPos
 
struct  WINE_MCIAVI
 

Functions

DWORD MCIAVI_ConvertTimeFormatToFrame (WINE_MCIAVI *wma, DWORD val)
 
DWORD MCIAVI_mciGetDevCaps (UINT wDevID, DWORD dwFlags, LPMCI_GETDEVCAPS_PARMS lpParms)
 
DWORD MCIAVI_mciInfo (UINT wDevID, DWORD dwFlags, LPMCI_DGV_INFO_PARMSW lpParms)
 
DWORD MCIAVI_mciSet (UINT wDevID, DWORD dwFlags, LPMCI_DGV_SET_PARMS lpParms)
 
DWORD MCIAVI_mciStatus (UINT wDevID, DWORD dwFlags, LPMCI_DGV_STATUS_PARMSW lpParms)
 
BOOL MCIAVI_GetInfo (WINE_MCIAVI *wma)
 
DWORD MCIAVI_OpenAudio (WINE_MCIAVI *wma, unsigned *nHdr, LPWAVEHDR *pWaveHdr)
 
BOOL MCIAVI_OpenVideo (WINE_MCIAVI *wma)
 
void MCIAVI_PlayAudioBlocks (WINE_MCIAVI *wma, unsigned nHdr, LPWAVEHDR waveHdr)
 
double MCIAVI_PaintFrame (WINE_MCIAVI *wma, HDC hDC)
 
WINE_MCIAVIMCIAVI_mciGetOpenDev (UINT wDevID)
 
DWORD MCIAVI_mciClose (UINT, DWORD, LPMCI_GENERIC_PARMS)
 
BOOL MCIAVI_RegisterClass (void)
 
BOOL MCIAVI_UnregisterClass (void)
 
BOOL MCIAVI_CreateWindow (WINE_MCIAVI *wma, DWORD dwFlags, LPMCI_DGV_OPEN_PARMSW lpOpenParms)
 
DWORD MCIAVI_mciPut (UINT wDevID, DWORD dwFlags, LPMCI_DGV_PUT_PARMS lpParms)
 
DWORD MCIAVI_mciWhere (UINT wDevID, DWORD dwFlags, LPMCI_DGV_RECT_PARMS lpParms)
 
DWORD MCIAVI_mciWindow (UINT wDevID, DWORD dwFlags, LPMCI_DGV_WINDOW_PARMSW lpParms)
 

Variables

HINSTANCE MCIAVI_hInstance
 

Function Documentation

◆ MCIAVI_ConvertTimeFormatToFrame()

DWORD MCIAVI_ConvertTimeFormatToFrame ( WINE_MCIAVI wma,
DWORD  val 
)

Definition at line 52 of file info.c.

53{
54 DWORD ret = 0;
55
56 switch (wma->dwMciTimeFormat) {
58 ret = (val * 1000) / wma->mah.dwMicroSecPerFrame;
59 break;
61 ret = val;
62 break;
63 default:
64 WARN("Bad time format %lu!\n", wma->dwMciTimeFormat);
65 }
66 TRACE("val=%lu=0x%08lx [tf=%lu] => ret=%lu\n", val, val, wma->dwMciTimeFormat, ret);
67 return ret;
68}
#define WARN(fmt,...)
Definition: precomp.h:61
return ret
Definition: mutex.c:147
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLfloat * val
Definition: glext.h:7180
#define MCI_FORMAT_MILLISECONDS
Definition: mmsystem.h:701
#define MCI_FORMAT_FRAMES
Definition: mmsystem.h:704
#define TRACE(s)
Definition: solgame.cpp:4
DWORD dwMciTimeFormat
MainAVIHeader mah
DWORD dwMicroSecPerFrame
Definition: vfw.h:941

Referenced by MCIAVI_mciPlay(), and MCIAVI_mciSeek().

◆ MCIAVI_CreateWindow()

BOOL MCIAVI_CreateWindow ( WINE_MCIAVI wma,
DWORD  dwFlags,
LPMCI_DGV_OPEN_PARMSW  lpOpenParms 
)

Definition at line 124 of file wnd.c.

125{
126 HWND hParent = 0;
127 DWORD dwStyle = WS_OVERLAPPEDWINDOW;
128 RECT rc;
129
130 /* what should be done ? */
131 if (wma->hWnd) return TRUE;
132
133 if (dwFlags & MCI_DGV_OPEN_PARENT) hParent = lpParms->hWndParent;
134 if (dwFlags & MCI_DGV_OPEN_WS) dwStyle = lpParms->dwStyle;
135
136 if (wma->hic)
137 SetRect(&rc, 0, 0, wma->outbih->biWidth, wma->outbih->biHeight);
138 else
139 SetRect(&rc, 0, 0, wma->inbih->biWidth, wma->inbih->biHeight);
140
141 AdjustWindowRect(&rc, dwStyle, FALSE);
142 if (!(dwStyle & (WS_CHILD|WS_POPUP))) /* overlapped window ? */
143 {
144 rc.right -= rc.left;
145 rc.bottom -= rc.top;
146 rc.left = rc.top = CW_USEDEFAULT;
147 }
148
149 wma->hWnd = CreateWindowW(L"MCIAVI", L"Wine MCI-AVI player", dwStyle, rc.left, rc.top,
150 rc.right, rc.bottom, hParent, 0, MCIAVI_hInstance,
151 ULongToPtr(wma->wDevID));
152 wma->hWndPaint = wma->hWnd;
153
154 TRACE("(%04x, %08lX, %p, style %lx, parent %p, dimensions %ldx%ld, hwnd %p)\n", wma->wDevID,
155 dwFlags, lpParms, dwStyle, hParent, rc.right - rc.left, rc.bottom - rc.top, wma->hWnd);
156 return wma->hWnd != 0;
157}
#define ULongToPtr(ul)
Definition: basetsd.h:86
#define MCI_DGV_OPEN_PARENT
Definition: digitalv.h:212
#define MCI_DGV_OPEN_WS
Definition: digitalv.h:211
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define L(x)
Definition: resources.c:13
HINSTANCE MCIAVI_hInstance
Definition: mciavi.c:52
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define WS_CHILD
Definition: pedump.c:617
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637
#define WS_POPUP
Definition: pedump.c:616
MCIDEVICEID wDevID
LPBITMAPINFOHEADER inbih
LPBITMAPINFOHEADER outbih
LONG right
Definition: windef.h:108
LONG bottom
Definition: windef.h:109
LONG top
Definition: windef.h:107
LONG left
Definition: windef.h:106
BOOL WINAPI AdjustWindowRect(_Inout_ LPRECT, _In_ DWORD, _In_ BOOL)
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
Definition: winuser.h:4470
#define CW_USEDEFAULT
Definition: winuser.h:225
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)

Referenced by MCIAVI_mciOpen().

◆ MCIAVI_GetInfo()

BOOL MCIAVI_GetInfo ( WINE_MCIAVI wma)

Definition at line 240 of file mmoutput.c.

241{
242 MMCKINFO ckMainRIFF;
243 MMCKINFO mmckHead;
244 MMCKINFO mmckList;
245 MMCKINFO mmckInfo;
246 AVIStreamHeader strh;
247 struct AviListBuild alb;
248 DWORD stream_n;
249
250 if (mmioDescend(wma->hFile, &ckMainRIFF, NULL, 0) != 0) {
251 WARN("Can't find 'RIFF' chunk\n");
252 return FALSE;
253 }
254
255 if ((ckMainRIFF.ckid != FOURCC_RIFF) || (ckMainRIFF.fccType != formtypeAVI)) {
256 WARN("Can't find 'AVI ' chunk\n");
257 return FALSE;
258 }
259
260 mmckHead.fccType = listtypeAVIHEADER;
261 if (mmioDescend(wma->hFile, &mmckHead, &ckMainRIFF, MMIO_FINDLIST) != 0) {
262 WARN("Can't find 'hdrl' list\n");
263 return FALSE;
264 }
265
266 mmckInfo.ckid = ckidAVIMAINHDR;
267 if (mmioDescend(wma->hFile, &mmckInfo, &mmckHead, MMIO_FINDCHUNK) != 0) {
268 WARN("Can't find 'avih' chunk\n");
269 return FALSE;
270 }
271
272 mmioRead(wma->hFile, (LPSTR)&wma->mah, sizeof(wma->mah));
273
274 TRACE("mah.dwMicroSecPerFrame=%ld\n", wma->mah.dwMicroSecPerFrame);
275 TRACE("mah.dwMaxBytesPerSec=%ld\n", wma->mah.dwMaxBytesPerSec);
276 TRACE("mah.dwPaddingGranularity=%ld\n", wma->mah.dwPaddingGranularity);
277 TRACE("mah.dwFlags=%ld\n", wma->mah.dwFlags);
278 TRACE("mah.dwTotalFrames=%ld\n", wma->mah.dwTotalFrames);
279 TRACE("mah.dwInitialFrames=%ld\n", wma->mah.dwInitialFrames);
280 TRACE("mah.dwStreams=%ld\n", wma->mah.dwStreams);
281 TRACE("mah.dwSuggestedBufferSize=%ld\n", wma->mah.dwSuggestedBufferSize);
282 TRACE("mah.dwWidth=%ld\n", wma->mah.dwWidth);
283 TRACE("mah.dwHeight=%ld\n", wma->mah.dwHeight);
284
285 mmioAscend(wma->hFile, &mmckInfo, 0);
286
287 TRACE("Start of streams\n");
288 wma->video_stream_n = 0;
289 wma->audio_stream_n = 0;
290
291 for (stream_n = 0; stream_n < wma->mah.dwStreams; stream_n++)
292 {
293 MMCKINFO mmckStream;
294
295 mmckList.fccType = listtypeSTREAMHEADER;
296 if (mmioDescend(wma->hFile, &mmckList, &mmckHead, MMIO_FINDLIST) != 0)
297 break;
298
299 mmckStream.ckid = ckidSTREAMHEADER;
300 if (mmioDescend(wma->hFile, &mmckStream, &mmckList, MMIO_FINDCHUNK) != 0)
301 {
302 WARN("Can't find 'strh' chunk\n");
303 continue;
304 }
305
306 mmioRead(wma->hFile, (LPSTR)&strh, sizeof(strh));
307
308 TRACE("Stream #%ld fccType %4.4s\n", stream_n, (LPSTR)&strh.fccType);
309
310 if (strh.fccType == streamtypeVIDEO)
311 {
312 TRACE("found video stream\n");
313 if (wma->inbih)
314 WARN("ignoring another video stream\n");
315 else
316 {
317 wma->ash_video = strh;
318
319 if (!MCIAVI_GetInfoVideo(wma, &mmckList, &mmckStream))
320 return FALSE;
321 wma->video_stream_n = stream_n;
322 wma->dwSet |= 4;
323 }
324 }
325 else if (strh.fccType == streamtypeAUDIO)
326 {
327 TRACE("found audio stream\n");
328 if (wma->lpWaveFormat)
329 WARN("ignoring another audio stream\n");
330 else
331 {
332 wma->ash_audio = strh;
333
334 if (!MCIAVI_GetInfoAudio(wma, &mmckList, &mmckStream))
335 return FALSE;
336 wma->audio_stream_n = stream_n;
337 wma->dwSet |= 3;
338 }
339 }
340 else
341 TRACE("Unsupported stream type %4.4s\n", (LPSTR)&strh.fccType);
342
343 mmioAscend(wma->hFile, &mmckList, 0);
344 }
345
346 TRACE("End of streams\n");
347
348 mmioAscend(wma->hFile, &mmckHead, 0);
349
350 /* no need to read optional JUNK chunk */
351
352 mmckList.fccType = listtypeAVIMOVIE;
353 if (mmioDescend(wma->hFile, &mmckList, &ckMainRIFF, MMIO_FINDLIST) != 0) {
354 WARN("Can't find 'movi' list\n");
355 return FALSE;
356 }
357
359 wma->lpVideoIndex = calloc(wma->dwPlayableVideoFrames, sizeof(struct MMIOPos));
360 if (!wma->lpVideoIndex) {
361 WARN("Can't alloc video index array\n");
362 return FALSE;
363 }
364 wma->dwPlayableAudioBlocks = 0;
365 wma->lpAudioIndex = NULL;
366
367 alb.numAudioBlocks = alb.numVideoFrames = 0;
368 alb.inVideoSize = alb.inAudioSize = 0;
369 alb.numAudioAllocated = 0;
370
371 while (mmioDescend(wma->hFile, &mmckInfo, &mmckList, 0) == 0) {
372 if (mmckInfo.fccType == listtypeAVIRECORD) {
373 MMCKINFO tmp;
374
375 while (mmioDescend(wma->hFile, &tmp, &mmckInfo, 0) == 0) {
376 MCIAVI_AddFrame(wma, &tmp, &alb);
377 mmioAscend(wma->hFile, &tmp, 0);
378 }
379 } else {
380 MCIAVI_AddFrame(wma, &mmckInfo, &alb);
381 }
382
383 mmioAscend(wma->hFile, &mmckInfo, 0);
384 }
385
386#ifdef __REACTOS__
387 /* Empty file */
388 if (alb.numVideoFrames == 0) {
389 WARN("NumVideoFrames: %u, Empty or possibly corrupt video file");
390 return FALSE;
391 }
392#endif
393
394 if (alb.numVideoFrames != wma->dwPlayableVideoFrames) {
395 WARN("AVI header says %ld frames, we found %ld video frames, reducing playable frames\n",
396 wma->dwPlayableVideoFrames, alb.numVideoFrames);
397 wma->dwPlayableVideoFrames = alb.numVideoFrames;
398 }
399 wma->dwPlayableAudioBlocks = alb.numAudioBlocks;
400
401 if (alb.inVideoSize > wma->ash_video.dwSuggestedBufferSize) {
402 WARN("inVideoSize=%ld suggestedSize=%ld\n", alb.inVideoSize, wma->ash_video.dwSuggestedBufferSize);
403 wma->ash_video.dwSuggestedBufferSize = alb.inVideoSize;
404 }
405 if (alb.inAudioSize > wma->ash_audio.dwSuggestedBufferSize) {
406 WARN("inAudioSize=%ld suggestedSize=%ld\n", alb.inAudioSize, wma->ash_audio.dwSuggestedBufferSize);
407 wma->ash_audio.dwSuggestedBufferSize = alb.inAudioSize;
408 }
409
411 if (!wma->indata) {
412 WARN("Can't alloc input buffer\n");
413 return FALSE;
414 }
415
416 return TRUE;
417}
#define streamtypeAUDIO
Definition: aviriff.h:93
#define streamtypeVIDEO
Definition: aviriff.h:92
#define ckidSTREAMHEADER
Definition: aviriff.h:88
#define malloc
Definition: debug_ros.c:4
#define NULL
Definition: types.h:112
MMRESULT WINAPI mmioAscend(HMMIO hmmio, LPMMCKINFO lpck, UINT uFlags)
Definition: mmio.c:1205
MMRESULT WINAPI mmioDescend(HMMIO hmmio, LPMMCKINFO lpck, const MMCKINFO *lpckParent, UINT uFlags)
Definition: mmio.c:1107
LONG WINAPI mmioRead(HMMIO hmmio, HPSTR pch, LONG cch)
Definition: mmio.c:733
static BOOL MCIAVI_AddFrame(WINE_MCIAVI *wma, LPMMCKINFO mmck, struct AviListBuild *alb)
Definition: mmoutput.c:145
static BOOL MCIAVI_GetInfoAudio(WINE_MCIAVI *wma, const MMCKINFO *mmckList, MMCKINFO *mmckStream)
Definition: mmoutput.c:27
static BOOL MCIAVI_GetInfoVideo(WINE_MCIAVI *wma, const MMCKINFO *mmckList, MMCKINFO *mmckStream)
Definition: mmoutput.c:82
#define FOURCC_RIFF
Definition: mmsystem.h:564
#define MMIO_FINDCHUNK
Definition: mmsystem.h:551
#define MMIO_FINDLIST
Definition: mmsystem.h:553
#define calloc
Definition: rosglue.h:14
FOURCC fccType
Definition: vfw.h:959
DWORD dwSuggestedBufferSize
Definition: vfw.h:969
LPWAVEFORMATEX lpWaveFormat
DWORD audio_stream_n
AVIStreamHeader ash_audio
DWORD video_stream_n
struct MMIOPos * lpVideoIndex
DWORD dwPlayableVideoFrames
struct MMIOPos * lpAudioIndex
DWORD dwPlayableAudioBlocks
AVIStreamHeader ash_video
FOURCC ckid
Definition: mmsystem.h:1509
FOURCC fccType
Definition: mmsystem.h:1511
DWORD dwWidth
Definition: vfw.h:949
DWORD dwSuggestedBufferSize
Definition: vfw.h:948
DWORD dwHeight
Definition: vfw.h:950
DWORD dwPaddingGranularity
Definition: vfw.h:943
DWORD dwStreams
Definition: vfw.h:947
DWORD dwMaxBytesPerSec
Definition: vfw.h:942
DWORD dwInitialFrames
Definition: vfw.h:946
DWORD dwFlags
Definition: vfw.h:944
DWORD dwTotalFrames
Definition: vfw.h:945
char * LPSTR
Definition: typedefs.h:51
#define listtypeAVIMOVIE
Definition: vfw.h:898
#define listtypeSTREAMHEADER
Definition: vfw.h:892
#define listtypeAVIRECORD
Definition: vfw.h:899
#define listtypeAVIHEADER
Definition: vfw.h:890
#define ckidAVIMAINHDR
Definition: vfw.h:891
#define formtypeAVI
Definition: vfw.h:889

Referenced by MCIAVI_mciOpen().

◆ MCIAVI_mciClose()

DWORD MCIAVI_mciClose ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_GENERIC_PARMS  lpParms 
)

Definition at line 305 of file mciavi.c.

306{
307 WINE_MCIAVI *wma;
308 DWORD dwRet = 0;
309
310 TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);
311
312 wma = MCIAVI_mciGetOpenDev(wDevID);
313 if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
314
315 MCIAVI_mciStop(wDevID, MCI_WAIT, NULL);
316
318
319 if (wma->nUseCount == 1) {
320 MCIAVI_CleanUp(wma);
321
322 if ((dwFlags & MCI_NOTIFY) && lpParms) {
324 wDevID,
326 }
328 return dwRet;
329 }
330 wma->nUseCount--;
331
333 return dwRet;
334}
BOOL WINAPI mciDriverNotify(HWND hwndCallback, UINT uDeviceID, UINT uStatus)
Definition: mci.c:2223
static void MCIAVI_CleanUp(WINE_MCIAVI *wma)
Definition: mciavi.c:167
static DWORD MCIAVI_mciStop(UINT, DWORD, LPMCI_GENERIC_PARMS)
Definition: mciavi.c:639
WINE_MCIAVI * MCIAVI_mciGetOpenDev(UINT wDevID)
Definition: mciavi.c:156
#define MCI_NOTIFY
Definition: mmsystem.h:729
#define MCIERR_INVALID_DEVICE_ID
Definition: mmsystem.h:569
#define MCI_WAIT
Definition: mmsystem.h:730
#define MCI_NOTIFY_SUCCESSFUL
Definition: mmsystem.h:725
#define LOWORD(l)
Definition: pedump.c:82
CRITICAL_SECTION cs
DWORD_PTR dwCallback
Definition: mmsystem.h:1519
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
#define HWND_32(h16)
Definition: wownt32.h:29

Referenced by MCIAVI_DriverProc(), MCIAVI_drvClose(), and MCIAVI_WindowProc().

◆ MCIAVI_mciGetDevCaps()

DWORD MCIAVI_mciGetDevCaps ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_GETDEVCAPS_PARMS  lpParms 
)

Definition at line 73 of file info.c.

74{
75 WINE_MCIAVI* wma = MCIAVI_mciGetOpenDev(wDevID);
77
78 TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);
79
80 if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
81 if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
83 if (dwFlags & MCI_TEST) return 0;
84
86
88 switch (lpParms->dwItem) {
90 TRACE("MCI_GETDEVCAPS_DEVICE_TYPE !\n");
93 break;
95 TRACE("MCI_GETDEVCAPS_HAS_AUDIO !\n");
98 break;
100 TRACE("MCI_GETDEVCAPS_HAS_VIDEO !\n");
103 break;
105 TRACE("MCI_GETDEVCAPS_USES_FILES !\n");
108 break;
110 TRACE("MCI_GETDEVCAPS_COMPOUND_DEVICE !\n");
113 break;
115 TRACE("MCI_GETDEVCAPS_CAN_EJECT !\n");
118 break;
120 TRACE("MCI_GETDEVCAPS_CAN_PLAY !\n");
123 break;
125 TRACE("MCI_GETDEVCAPS_CAN_RECORD !\n");
128 break;
130 TRACE("MCI_GETDEVCAPS_CAN_SAVE !\n");
133 break;
135 TRACE("MCI_DGV_GETDEVCAPS_CAN_REVERSE !\n");
136 lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE); /* FIXME */
138 break;
140 TRACE("MCI_DGV_GETDEVCAPS_CAN_STRETCH !\n");
141 lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE); /* FIXME */
143 break;
145 TRACE("MCI_DGV_GETDEVCAPS_CAN_LOCK !\n");
148 break;
150 TRACE("MCI_DGV_GETDEVCAPS_CAN_FREEZE !\n");
153 break;
155 TRACE("MCI_DGV_GETDEVCAPS_CAN_STRETCH_INPUT !\n");
158 break;
160 TRACE("MCI_DGV_GETDEVCAPS_HAS_STILL !\n");
163 break;
165 TRACE("MCI_DGV_GETDEVCAPS_CAN_TEST !\n");
168 break;
170 TRACE("MCI_DGV_GETDEVCAPS_PALETTES !\n");
171 lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE); /* FIXME */
173 break;
174 /* w2k does not know MAX_WINDOWS or MAX/MINIMUM_RATE */
175 default:
176 FIXME("Unknown capability (%08lx) !\n", lpParms->dwItem);
177 break;
178 }
179 }
180
182 return ret;
183}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define MCI_DGV_GETDEVCAPS_HAS_STILL
Definition: digitalv.h:121
#define MCI_DGV_GETDEVCAPS_PALETTES
Definition: digitalv.h:122
#define MCI_DGV_GETDEVCAPS_CAN_STRETCH
Definition: digitalv.h:117
#define MCI_DGV_GETDEVCAPS_CAN_LOCK
Definition: digitalv.h:116
#define MCI_DGV_GETDEVCAPS_CAN_STR_IN
Definition: digitalv.h:123
#define MCI_DGV_GETDEVCAPS_CAN_TEST
Definition: digitalv.h:124
#define MCI_DGV_GETDEVCAPS_CAN_REVERSE
Definition: digitalv.h:120
#define MCI_DGV_GETDEVCAPS_CAN_FREEZE
Definition: digitalv.h:118
#define MCI_TEST
Definition: digitalv.h:32
#define MAKEMCIRESOURCE(wRet, wRes)
Definition: mmddk.h:388
#define MCI_FALSE
Definition: mmddk.h:340
#define MCI_TRUE
Definition: mmddk.h:341
#define MCI_RESOURCE_RETURNED
Definition: mmddk.h:369
#define MCI_GETDEVCAPS_CAN_SAVE
Definition: mmsystem.h:767
#define MCI_GETDEVCAPS_HAS_VIDEO
Definition: mmsystem.h:761
#define MCI_GETDEVCAPS_CAN_RECORD
Definition: mmsystem.h:759
#define MCI_GETDEVCAPS_DEVICE_TYPE
Definition: mmsystem.h:762
#define MCI_GETDEVCAPS_COMPOUND_DEVICE
Definition: mmsystem.h:764
#define MCI_GETDEVCAPS_USES_FILES
Definition: mmsystem.h:763
#define MCI_GETDEVCAPS_CAN_PLAY
Definition: mmsystem.h:766
#define MCI_GETDEVCAPS_CAN_EJECT
Definition: mmsystem.h:765
#define MCIERR_MISSING_PARAMETER
Definition: mmsystem.h:583
#define MCIERR_NULL_PARAMETER_BLOCK
Definition: mmsystem.h:605
#define MCI_DEVTYPE_DIGITAL_VIDEO
Definition: mmsystem.h:687
#define MCI_GETDEVCAPS_ITEM
Definition: mmsystem.h:758
#define MCIERR_UNSUPPORTED_FUNCTION
Definition: mmsystem.h:584
#define MCI_GETDEVCAPS_HAS_AUDIO
Definition: mmsystem.h:760

Referenced by MCIAVI_DriverProc().

◆ MCIAVI_mciGetOpenDev()

◆ MCIAVI_mciInfo()

DWORD MCIAVI_mciInfo ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_DGV_INFO_PARMSW  lpParms 
)

Definition at line 188 of file info.c.

189{
190 LPCWSTR str = 0;
191 WINE_MCIAVI* wma = MCIAVI_mciGetOpenDev(wDevID);
192 DWORD ret = 0;
193
194 if (lpParms == NULL || lpParms->lpstrReturn == NULL)
196 if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
197 if (dwFlags & MCI_TEST) return 0;
198
199 TRACE("buf=%p, len=%lu\n", lpParms->lpstrReturn, lpParms->dwRetSize);
200
202
204 str = L"Wine's AVI player";
205 else if (dwFlags & MCI_INFO_VERSION)
206 str = L"1.1";
207 else if (dwFlags & MCI_INFO_FILE)
208 str = wma->lpFileName;
209 else {
210 WARN("Don't know this info command (%lu)\n", dwFlags);
212 }
213 if (!ret) {
214 /* Only mciwave, mciseq and mcicda set dwRetSize (since NT). */
215 lstrcpynW(lpParms->lpstrReturn, str ? str : L"", lpParms->dwRetSize);
216 }
218 return ret;
219}
#define MCI_INFO_VERSION
Definition: digitalv.h:169
#define lstrcpynW
Definition: compat.h:738
#define MCI_INFO_PRODUCT
Definition: mmsystem.h:752
#define MCIERR_UNRECOGNIZED_COMMAND
Definition: mmsystem.h:571
#define MCI_INFO_FILE
Definition: mmsystem.h:753
const WCHAR * str
LPWSTR lpFileName
const uint16_t * LPCWSTR
Definition: typedefs.h:57

Referenced by MCIAVI_DriverProc().

◆ MCIAVI_mciPut()

DWORD MCIAVI_mciPut ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_DGV_PUT_PARMS  lpParms 
)

Definition at line 162 of file wnd.c.

163{
164 WINE_MCIAVI* wma = MCIAVI_mciGetOpenDev(wDevID);
165 RECT rc;
166
167 TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);
168
169 if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
170 if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
171 if (dwFlags & MCI_TEST) return 0;
172
174
175 if (dwFlags & MCI_DGV_RECT) {
176 /* In MCI, RECT structure is used differently: rc.right = width & rc.bottom = height
177 * So convert input MCI RECT into a normal RECT */
178 SetRect(&rc, lpParms->rc.left, lpParms->rc.top, lpParms->rc.left + lpParms->rc.right,
179 lpParms->rc.top + lpParms->rc.bottom);
180 } else {
181 GetClientRect(wma->hWndPaint, &rc);
182 }
183
185 FIXME("PUT_CLIENT %s\n", wine_dbgstr_rect(&rc));
188 }
190 TRACE("PUT_DESTINATION %s\n", wine_dbgstr_rect(&rc));
191 wma->dest = rc;
192 }
194 FIXME("PUT_FRAME %s\n", wine_dbgstr_rect(&rc));
197 }
199 TRACE("PUT_SOURCE %s\n", wine_dbgstr_rect(&rc));
200 wma->source = rc;
201 }
203 FIXME("PUT_VIDEO %s\n", wine_dbgstr_rect(&rc));
206 }
208 TRACE("PUT_WINDOW %s\n", wine_dbgstr_rect(&rc));
209 SetWindowPos(wma->hWndPaint, NULL, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_NOZORDER);
210 }
212 return 0;
213}
static const char * wine_dbgstr_rect(const RECT *prc)
Definition: atltest.h:160
#define MCI_DGV_PUT_DESTINATION
Definition: digitalv.h:234
#define MCI_DGV_PUT_SOURCE
Definition: digitalv.h:233
#define MCI_DGV_PUT_WINDOW
Definition: digitalv.h:237
#define MCI_DGV_RECT
Definition: digitalv.h:232
#define MCI_DGV_PUT_CLIENT
Definition: digitalv.h:238
#define MCI_DGV_PUT_VIDEO
Definition: digitalv.h:236
#define MCI_DGV_PUT_FRAME
Definition: digitalv.h:235
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define SWP_NOZORDER
Definition: winuser.h:1258

Referenced by MCIAVI_DriverProc().

◆ MCIAVI_mciSet()

DWORD MCIAVI_mciSet ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_DGV_SET_PARMS  lpParms 
)

Definition at line 224 of file info.c.

225{
226 WINE_MCIAVI* wma = MCIAVI_mciGetOpenDev(wDevID);
227
228 if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
229 if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
230 if (dwFlags & MCI_TEST) return 0;
231
233
235 switch (lpParms->dwTimeFormat) {
237 TRACE("MCI_FORMAT_MILLISECONDS !\n");
239 break;
241 TRACE("MCI_FORMAT_FRAMES !\n");
243 break;
244 default:
245 WARN("Bad time format %lu!\n", lpParms->dwTimeFormat);
248 }
249 }
250
252 TRACE("No support for door open !\n");
255 }
257 TRACE("No support for door close !\n");
260 }
261
262 if (dwFlags & MCI_SET_ON) {
263 const char *szVideo="";
264 const char *szAudio="";
265 const char *szSeek="";
266
267 if (dwFlags & MCI_SET_VIDEO) {
268 szVideo = " video";
269 wma->dwSet |= 4;
270 }
271 if (dwFlags & MCI_SET_AUDIO) {
272 switch (lpParms->dwAudio) {
274 szAudio = " audio all";
275 wma->dwSet |= 3;
276 break;
278 szAudio = " audio left";
279 wma->dwSet |= 1;
280 break;
282 szAudio = " audio right";
283 wma->dwSet |= 2;
284 break;
285 default:
286 szAudio = " audio unknown";
287 WARN("Unknown audio channel %lu\n", lpParms->dwAudio);
288 break;
289 }
290 }
292 szSeek = " seek_exactly";
293 }
294 FIXME("MCI_SET_ON:%s%s%s\n", szVideo, szAudio, szSeek);
295 }
296
297 if (dwFlags & MCI_SET_OFF) {
298 const char *szVideo="";
299 const char *szAudio="";
300 const char *szSeek="";
301
302 if (dwFlags & MCI_SET_VIDEO) {
303 szVideo = " video";
304 wma->dwSet &= ~4;
305 }
306 if (dwFlags & MCI_SET_AUDIO) {
307 switch (lpParms->dwAudio) {
309 szAudio = " audio all";
310 wma->dwSet &= ~3;
311 break;
313 szAudio = " audio left";
314 wma->dwSet &= ~2;
315 break;
317 szAudio = " audio right";
318 wma->dwSet &= ~2;
319 break;
320 default:
321 szAudio = " audio unknown";
322 WARN("Unknown audio channel %lu\n", lpParms->dwAudio);
323 break;
324 }
325 }
327 szSeek = " seek_exactly";
328 }
329 FIXME("MCI_SET_OFF:%s%s%s\n", szVideo, szAudio, szSeek);
330 }
332 LPCSTR str = "save";
334 str = "capture";
335
336 switch (lpParms->dwFileFormat) {
337 case MCI_DGV_FF_AVI: FIXME("Setting file format (%s) to 'AVI'\n", str); break;
338 case MCI_DGV_FF_AVSS: FIXME("Setting file format (%s) to 'AVSS'\n", str); break;
339 case MCI_DGV_FF_DIB: FIXME("Setting file format (%s) to 'DIB'\n", str); break;
340 case MCI_DGV_FF_JFIF: FIXME("Setting file format (%s) to 'JFIF'\n", str); break;
341 case MCI_DGV_FF_JPEG: FIXME("Setting file format (%s) to 'JPEG'\n", str); break;
342 case MCI_DGV_FF_MPEG: FIXME("Setting file format (%s) to 'MPEG'\n", str); break;
343 case MCI_DGV_FF_RDIB: FIXME("Setting file format (%s) to 'RLE DIB'\n", str); break;
344 case MCI_DGV_FF_RJPEG: FIXME("Setting file format (%s) to 'RJPEG'\n", str); break;
345 default: FIXME("Setting unknown file format (%s): %ld\n", str, lpParms->dwFileFormat);
346 }
347 }
348
350 FIXME("Setting speed to %ld\n", lpParms->dwSpeed);
351 }
352
354 return 0;
355}
#define MCI_DGV_FF_JFIF
Definition: digitalv.h:111
#define MCI_DGV_FF_AVSS
Definition: digitalv.h:105
#define MCI_DGV_FF_AVI
Definition: digitalv.h:106
#define MCI_DGV_SET_SEEK_EXACTLY
Definition: digitalv.h:282
#define MCI_DGV_FF_RDIB
Definition: digitalv.h:108
#define MCI_DGV_FF_MPEG
Definition: digitalv.h:112
#define MCI_DGV_SET_FILEFORMAT
Definition: digitalv.h:285
#define MCI_DGV_FF_DIB
Definition: digitalv.h:107
#define MCI_DGV_SET_SPEED
Definition: digitalv.h:283
#define MCI_DGV_FF_RJPEG
Definition: digitalv.h:110
#define MCI_DGV_SET_STILL
Definition: digitalv.h:284
#define MCI_DGV_FF_JPEG
Definition: digitalv.h:109
#define MCI_SET_AUDIO
Definition: mmsystem.h:775
#define MCI_SET_DOOR_OPEN
Definition: mmsystem.h:772
#define MCI_SET_TIME_FORMAT
Definition: mmsystem.h:774
#define MCI_SET_VIDEO
Definition: mmsystem.h:776
#define MCI_SET_AUDIO_RIGHT
Definition: mmsystem.h:781
#define MCI_SET_AUDIO_ALL
Definition: mmsystem.h:779
#define MCI_SET_DOOR_CLOSED
Definition: mmsystem.h:773
#define MCI_SET_AUDIO_LEFT
Definition: mmsystem.h:780
#define MCI_SET_OFF
Definition: mmsystem.h:778
#define MCIERR_BAD_TIME_FORMAT
Definition: mmsystem.h:601
#define MCI_SET_ON
Definition: mmsystem.h:777
DWORD dwTimeFormat
Definition: digitalv.h:733
DWORD dwFileFormat
Definition: digitalv.h:735
const char * LPCSTR
Definition: typedefs.h:52

Referenced by MCIAVI_DriverProc().

◆ MCIAVI_mciStatus()

DWORD MCIAVI_mciStatus ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_DGV_STATUS_PARMSW  lpParms 
)

Definition at line 360 of file info.c.

361{
362 WINE_MCIAVI* wma = MCIAVI_mciGetOpenDev(wDevID);
363 DWORD ret = 0;
364
365 if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
366 if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
368 if (dwFlags & MCI_TEST) return 0;
369
371
372 if (dwFlags & MCI_STATUS_ITEM) {
373 switch (lpParms->dwItem) {
375 lpParms->dwReturn = 1;
376 TRACE("MCI_STATUS_CURRENT_TRACK => %Iu\n", lpParms->dwReturn);
377 break;
379 if (!wma->hFile) {
380 lpParms->dwReturn = 0;
383 }
384 /* only one track in file is currently handled, so don't take care of MCI_TRACK flag */
386 TRACE("MCI_STATUS_LENGTH => %Iu\n", lpParms->dwReturn);
387 break;
388 case MCI_STATUS_MODE:
389 lpParms->dwReturn = MAKEMCIRESOURCE(wma->dwStatus, wma->dwStatus);
391 TRACE("MCI_STATUS_MODE => 0x%04x\n", LOWORD(lpParms->dwReturn));
392 break;
394 TRACE("MCI_STATUS_MEDIA_PRESENT => TRUE\n");
397 break;
399 lpParms->dwReturn = 1;
400 TRACE("MCI_STATUS_NUMBER_OF_TRACKS => %Iu\n", lpParms->dwReturn);
401 break;
403 if (!wma->hFile) {
404 lpParms->dwReturn = 0;
407 }
408 /* only one track in file is currently handled, so don't take care of MCI_TRACK flag */
411 &ret);
412 TRACE("MCI_STATUS_POSITION %s => %Iu\n",
413 (dwFlags & MCI_STATUS_START) ? "start" : "current", lpParms->dwReturn);
414 break;
415 case MCI_STATUS_READY:
416 lpParms->dwReturn = (wma->dwStatus == MCI_MODE_NOT_READY) ?
419 TRACE("MCI_STATUS_READY = %u\n", LOWORD(lpParms->dwReturn));
420 break;
424 TRACE("MCI_STATUS_TIME_FORMAT => %u\n", LOWORD(lpParms->dwReturn));
426 break;
428 lpParms->dwReturn = (wma->dwSet & 3) ?
431 TRACE("MCI_STATUS_AUDIO = %u\n", LOWORD(lpParms->dwReturn));
432 break;
434 lpParms->dwReturn = (wma->dwSet & 4) ?
437 TRACE("MCI_STATUS_VIDEO = %u\n", LOWORD(lpParms->dwReturn));
438 break;
439
440#if 0
458#endif
460 lpParms->dwReturn = wma->inbih->biBitCount;
461 TRACE("MCI_DGV_STATUS_BITSPERPEL => %Iu\n", lpParms->dwReturn);
462 break;
464 lpParms->dwReturn = 0;
465 TRACE("MCI_DGV_STATUS_HPAL => %Ix\n", lpParms->dwReturn);
466 break;
468 lpParms->dwReturn = (DWORD_PTR)wma->hWndPaint;
469 TRACE("MCI_DGV_STATUS_HWND => %p\n", wma->hWndPaint);
470 break;
472 lpParms->dwReturn = IsWindowVisible(wma->hWndPaint) ?
475 TRACE("MCI_STATUS_WINDOW_VISIBLE = %u\n", LOWORD(lpParms->dwReturn));
476 break;
478 lpParms->dwReturn = IsIconic(wma->hWndPaint) ?
481 TRACE("MCI_STATUS_WINDOW_MINIMIZED = %u\n", LOWORD(lpParms->dwReturn));
482 break;
484 lpParms->dwReturn = IsZoomed(wma->hWndPaint) ?
487 TRACE("MCI_STATUS_WINDOW_MMAXIMIZED = %u\n", LOWORD(lpParms->dwReturn));
488 break;
490 lpParms->dwReturn = 1000;
491 TRACE("MCI_DGV_STATUS_SPEED = %Iu\n", lpParms->dwReturn);
492 break;
494 /* FIXME: 1000 is a settable speed multiplier */
495 lpParms->dwReturn = MulDiv(1000000,1000,wma->mah.dwMicroSecPerFrame);
496 TRACE("MCI_DGV_STATUS_FRAME_RATE = %Iu\n", lpParms->dwReturn);
497 break;
501 TRACE("MCI_DGV_STATUS_FORWARD = %u\n", LOWORD(lpParms->dwReturn));
502 break;
504 if (wma->dwStatus != MCI_MODE_PAUSE) {
507 }
510 TRACE("MCI_STATUS_MODE => 0x%04x\n", LOWORD(lpParms->dwReturn));
511 break;
513 lpParms->dwReturn = wma->audio_stream_n;
514 TRACE("MCI_DGV_STATUS_AUDIO_STREAM => %Iu\n", lpParms->dwReturn);
515 break;
516#if 0
523 case MCI_DGV_STATUS_SAMPLESPERSECOND:
537#endif
538 default:
539 FIXME("Unknown command %08lX !\n", lpParms->dwItem);
540 TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);
543 }
544 }
545
546 if (dwFlags & MCI_NOTIFY) {
547 TRACE("MCI_NOTIFY_SUCCESSFUL %08IX !\n", lpParms->dwCallback);
549 wDevID, MCI_NOTIFY_SUCCESSFUL);
550 }
552 return ret;
553}
#define MCI_DGV_STATUS_BITSPERPEL
Definition: digitalv.h:423
#define MCI_DGV_STATUS_FRAME_RATE
Definition: digitalv.h:394
#define MCI_DGV_STATUS_HPAL
Definition: digitalv.h:385
#define MCI_DGV_STATUS_BLOCKALIGN
Definition: digitalv.h:421
#define MCI_DGV_STATUS_AUDIO_RECORD
Definition: digitalv.h:406
#define MCI_DGV_STATUS_VOLUME
Definition: digitalv.h:405
#define MCI_DGV_MONITOR_INPUT
Definition: digitalv.h:206
#define MCI_DGV_STATUS_AUDIO_SOURCE
Definition: digitalv.h:390
#define MCI_DGV_STATUS_AUDIO_INPUT
Definition: digitalv.h:382
#define MCI_DGV_STATUS_SIZE
Definition: digitalv.h:396
#define MCI_DGV_STATUS_VIDEO_STREAM
Definition: digitalv.h:426
#define MCI_DGV_STATUS_BRIGHTNESS
Definition: digitalv.h:386
#define MCI_DGV_STATUS_FILEFORMAT
Definition: digitalv.h:389
#define MCI_DGV_STATUS_VIDEO_SRC_NUM
Definition: digitalv.h:410
#define MCI_DGV_STATUS_KEY_COLOR
Definition: digitalv.h:417
#define MCI_DGV_STATUS_TINT
Definition: digitalv.h:401
#define MCI_DGV_STATUS_WINDOW_VISIBLE
Definition: digitalv.h:413
#define MCI_DGV_STATUS_HWND
Definition: digitalv.h:383
#define MCI_DGV_STATUS_TREBLE
Definition: digitalv.h:402
#define MCI_DGV_STATUS_STILL_FILEFORMAT
Definition: digitalv.h:409
#define MCI_DGV_STATUS_PAUSE_MODE
Definition: digitalv.h:418
#define MCI_DGV_MONITOR_FILE
Definition: digitalv.h:207
#define MCI_DGV_STATUS_WINDOW_MAXIMIZED
Definition: digitalv.h:415
#define MCI_DGV_STATUS_FILE_COMPLETION
Definition: digitalv.h:412
#define MCI_OFF_S
Definition: digitalv.h:61
#define MCI_DGV_STATUS_AVGBYTESPERSEC
Definition: digitalv.h:420
#define MCI_DGV_STATUS_FILE_MODE
Definition: digitalv.h:411
#define MCI_DGV_STATUS_CONTRAST
Definition: digitalv.h:388
#define MCI_DGV_STATUS_BASS
Definition: digitalv.h:395
#define MCI_DGV_STATUS_SMPTE
Definition: digitalv.h:399
#define MCI_DGV_STATUS_BITSPERSAMPLE
Definition: digitalv.h:422
#define MCI_DGV_STATUS_AUDIO
Definition: digitalv.h:400
#define MCI_DGV_STATUS_SPEED
Definition: digitalv.h:384
#define MCI_ON
Definition: digitalv.h:50
#define MCI_DGV_STATUS_AUDIO_STREAM
Definition: digitalv.h:425
#define MCI_DGV_STATUS_VIDEO_SOURCE
Definition: digitalv.h:407
#define MCI_DGV_STATUS_KEY_INDEX
Definition: digitalv.h:416
#define MCI_DGV_STATUS_SHARPNESS
Definition: digitalv.h:398
#define MCI_DGV_STATUS_MONITOR_METHOD
Definition: digitalv.h:393
#define MCI_DGV_STATUS_FORWARD
Definition: digitalv.h:424
#define MCI_DGV_STATUS_SEEK_EXACTLY
Definition: digitalv.h:397
#define MCI_DGV_STATUS_GAMMA
Definition: digitalv.h:391
#define MCI_DGV_STATUS_VIDEO
Definition: digitalv.h:404
#define MCI_OFF
Definition: digitalv.h:51
#define MCI_ON_S
Definition: digitalv.h:60
#define MCI_DGV_STATUS_UNSAVED
Definition: digitalv.h:403
#define MCI_DGV_STATUS_VIDEO_RECORD
Definition: digitalv.h:408
#define MCI_DGV_STATUS_MONITOR
Definition: digitalv.h:392
#define MCI_DGV_STATUS_WINDOW_MINIMIZED
Definition: digitalv.h:414
#define MCI_DGV_STATUS_COLOR
Definition: digitalv.h:387
static DWORD MCIAVI_ConvertFrameToTimeFormat(WINE_MCIAVI *wma, DWORD val, LPDWORD lpRet)
Definition: info.c:30
#define MCI_FORMAT_RETURN_BASE
Definition: mmddk.h:343
#define MCI_RESOURCE_DRIVER
Definition: mmddk.h:373
#define MCI_AVI_STATUS_AUDIO_BREAKS
Definition: mciavi.h:9
#define MCI_AVI_STATUS_FRAMES_SKIPPED
Definition: mciavi.h:7
#define MCI_AVI_STATUS_LAST_PLAY_SPEED
Definition: mciavi.h:8
#define MCI_STATUS_POSITION
Definition: mmsystem.h:745
#define MCI_MODE_PLAY
Definition: mmsystem.h:696
#define MCI_STATUS_START
Definition: mmsystem.h:743
#define MCI_STATUS_CURRENT_TRACK
Definition: mmsystem.h:751
#define MCI_STATUS_NUMBER_OF_TRACKS
Definition: mmsystem.h:746
#define MCI_STATUS_LENGTH
Definition: mmsystem.h:744
#define MCI_STATUS_MODE
Definition: mmsystem.h:747
#define MCI_MODE_NOT_READY
Definition: mmsystem.h:694
#define MCI_STATUS_MEDIA_PRESENT
Definition: mmsystem.h:748
#define MCI_MODE_PAUSE
Definition: mmsystem.h:699
#define MCIERR_NONAPPLICABLE_FUNCTION
Definition: mmsystem.h:610
#define MCI_STATUS_TIME_FORMAT
Definition: mmsystem.h:749
#define MCI_STATUS_ITEM
Definition: mmsystem.h:742
#define MCI_STATUS_READY
Definition: mmsystem.h:750
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
Definition: muldiv.c:25
DWORD_PTR dwReturn
Definition: digitalv.h:809
DWORD_PTR dwCallback
Definition: digitalv.h:808
DWORD dwCurrVideoFrame
#define DWORD_PTR
Definition: treelist.c:76
BOOL WINAPI IsIconic(_In_ HWND)
BOOL WINAPI IsZoomed(_In_ HWND)
BOOL WINAPI IsWindowVisible(_In_ HWND)

Referenced by MCIAVI_DriverProc().

◆ MCIAVI_mciWhere()

DWORD MCIAVI_mciWhere ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_DGV_RECT_PARMS  lpParms 
)

Definition at line 218 of file wnd.c.

219{
220 WINE_MCIAVI* wma = MCIAVI_mciGetOpenDev(wDevID);
221 RECT rc;
222
223 TRACE("(%04x, %08lx, %p)\n", wDevID, dwFlags, lpParms);
224
225 if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
226 if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
227 /* Ignore MCI_TEST flag. */
228
230
233 GetClientRect(wma->hWndPaint, &rc);
234 TRACE("WHERE_DESTINATION_MAX %s\n", wine_dbgstr_rect(&rc));
235 } else {
236 TRACE("WHERE_DESTINATION %s\n", wine_dbgstr_rect(&wma->dest));
237 rc = wma->dest;
238 }
239 }
242 FIXME("MCI_DGV_WHERE_FRAME_MAX\n");
243 else
244 FIXME("MCI_DGV_WHERE_FRAME\n");
247 }
250 SetRect(&rc, 0, 0, wma->inbih->biWidth, wma->inbih->biHeight);
251 TRACE("WHERE_SOURCE_MAX %s\n", wine_dbgstr_rect(&rc));
252 } else {
253 TRACE("WHERE_SOURCE %s\n", wine_dbgstr_rect(&wma->source));
254 rc = wma->source;
255 }
256 }
259 FIXME("WHERE_VIDEO_MAX\n");
260 else
261 FIXME("WHERE_VIDEO\n");
264 }
268 TRACE("WHERE_WINDOW_MAX %s\n", wine_dbgstr_rect(&rc));
269 } else {
270 GetWindowRect(wma->hWndPaint, &rc);
271 TRACE("WHERE_WINDOW %s\n", wine_dbgstr_rect(&rc));
272 }
273 }
274
275 /* In MCI, RECT structure is used differently: rc.right = width & rc.bottom = height
276 * So convert the normal RECT into a MCI RECT before returning */
277 SetRect(&lpParms->rc, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top);
278
280 return 0;
281}
#define MCI_DGV_WHERE_WINDOW
Definition: digitalv.h:448
#define MCI_DGV_WHERE_FRAME
Definition: digitalv.h:446
#define MCI_DGV_WHERE_VIDEO
Definition: digitalv.h:447
#define MCI_DGV_WHERE_SOURCE
Definition: digitalv.h:444
#define MCI_DGV_WHERE_MAX
Definition: digitalv.h:449
#define MCI_DGV_WHERE_DESTINATION
Definition: digitalv.h:445
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
HWND WINAPI GetDesktopWindow(void)
Definition: window.c:628

Referenced by MCIAVI_DriverProc().

◆ MCIAVI_mciWindow()

DWORD MCIAVI_mciWindow ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_DGV_WINDOW_PARMSW  lpParms 
)

Definition at line 286 of file wnd.c.

287{
288 WINE_MCIAVI* wma = MCIAVI_mciGetOpenDev(wDevID);
289
290 TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);
291
292 if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
293 if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
294 if (dwFlags & MCI_TEST) return 0;
295
297
299 if (IsWindow(lpParms->hWnd))
300 {
301 TRACE("Setting hWnd to %p\n", lpParms->hWnd);
302 if (wma->hWnd) ShowWindow(wma->hWnd, SW_HIDE);
303 wma->hWndPaint = (lpParms->hWnd == MCI_DGV_WINDOW_DEFAULT) ? wma->hWnd : lpParms->hWnd;
304 }
305 }
307 TRACE("Setting nCmdShow to %d\n", lpParms->nCmdShow);
308 ShowWindow(wma->hWndPaint, lpParms->nCmdShow);
309 }
311 TRACE("Setting caption to %s\n", debugstr_w(lpParms->lpstrText));
312 SetWindowTextW(wma->hWndPaint, lpParms->lpstrText);
313 }
314
316 return 0;
317}
#define MCI_DGV_WINDOW_STATE
Definition: digitalv.h:454
#define MCI_DGV_WINDOW_DEFAULT
Definition: digitalv.h:459
#define MCI_DGV_WINDOW_TEXT
Definition: digitalv.h:455
#define MCI_DGV_WINDOW_HWND
Definition: digitalv.h:453
#define debugstr_w
Definition: kernel32.h:32
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define SW_HIDE
Definition: winuser.h:779
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)

Referenced by MCIAVI_DriverProc().

◆ MCIAVI_OpenAudio()

DWORD MCIAVI_OpenAudio ( WINE_MCIAVI wma,
unsigned nHdr,
LPWAVEHDR pWaveHdr 
)

Definition at line 526 of file mmoutput.c.

527{
528 DWORD dwRet;
529 LPWAVEHDR waveHdr;
530 unsigned i;
531
532 dwRet = waveOutOpen((HWAVEOUT *)&wma->hWave, WAVE_MAPPER, wma->lpWaveFormat,
534 if (dwRet != 0) {
535 TRACE("Can't open low level audio device %ld\n", dwRet);
536 dwRet = MCIERR_DEVICE_OPEN;
537 wma->hWave = 0;
538 goto cleanUp;
539 }
540
541 /* FIXME: should set up a heuristic to compute the number of wave headers
542 * to be used...
543 */
544 *nHdr = 7;
545 waveHdr = calloc(*nHdr, sizeof(WAVEHDR) + wma->ash_audio.dwSuggestedBufferSize);
546 if (!waveHdr) {
547 TRACE("Can't alloc wave headers\n");
548 dwRet = MCIERR_DEVICE_OPEN;
549 goto cleanUp;
550 }
551
552 for (i = 0; i < *nHdr; i++) {
553 /* other fields are zero:ed on allocation */
554 waveHdr[i].lpData = (char*)waveHdr +
555 *nHdr * sizeof(WAVEHDR) + i * wma->ash_audio.dwSuggestedBufferSize;
557 if (waveOutPrepareHeader(wma->hWave, &waveHdr[i], sizeof(WAVEHDR))) {
558 dwRet = MCIERR_INTERNAL;
559 goto cleanUp;
560 }
561 }
562
563 if (wma->dwCurrVideoFrame != 0 && wma->lpWaveFormat) {
564 FIXME("Should recompute dwCurrAudioBlock, except unsynchronized sound & video\n");
565 }
566 wma->dwCurrAudioBlock = 0;
567
569 wma->dwEventCount = *nHdr - 1;
570 *pWaveHdr = waveHdr;
571 cleanUp:
572 return dwRet;
573}
void cleanUp()
Definition: main.cpp:469
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static void CALLBACK MCIAVI_waveCallback(HWAVEOUT hwo, UINT uMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
Definition: mmoutput.c:501
#define WAVE_MAPPER
Definition: mmsystem.h:187
#define MCIERR_DEVICE_OPEN
Definition: mmsystem.h:575
#define MCIERR_INTERNAL
Definition: mmsystem.h:587
#define CALLBACK_FUNCTION
Definition: mmsystem.h:150
DWORD dwCurrAudioBlock
DWORD dwBufferLength
Definition: mmsystem.h:1017
LPSTR lpData
Definition: mmsystem.h:1016
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
Definition: synch.c:587
uint32_t DWORD_PTR
Definition: typedefs.h:65
MMRESULT WINAPI waveOutOpen(LPHWAVEOUT lphWaveOut, UINT uDeviceID, LPCWAVEFORMATEX lpFormat, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD dwFlags)
Definition: winmm.c:2246
UINT WINAPI waveOutPrepareHeader(HWAVEOUT hWaveOut, WAVEHDR *lpWaveOutHdr, UINT uSize)
Definition: winmm.c:2277

Referenced by MCIAVI_player().

◆ MCIAVI_OpenVideo()

BOOL MCIAVI_OpenVideo ( WINE_MCIAVI wma)

Definition at line 419 of file mmoutput.c.

420{
421 HDC hDC;
422 DWORD outSize;
423 FOURCC fcc = wma->ash_video.fccHandler;
424
425 TRACE("fcc %4.4s\n", (LPSTR)&fcc);
426
427 wma->dwCachedFrame = -1;
428
429 /* get the right handle */
430 if (fcc == mmioFOURCC('C','R','A','M')) fcc = mmioFOURCC('M','S','V','C');
431
432 /* try to get a decompressor for that type */
434 if (!wma->hic) {
435 /* check for builtin DIB compressions */
436 fcc = wma->inbih->biCompression;
437 if ((fcc == mmioFOURCC('D','I','B',' ')) ||
438 (fcc == mmioFOURCC('R','L','E',' ')) ||
439 (fcc == BI_RGB) || (fcc == BI_RLE8) ||
440 (fcc == BI_RLE4) || (fcc == BI_BITFIELDS))
441 goto paint_frame;
442
443 WARN("Can't locate codec for the file\n");
444 return FALSE;
445 }
446
447 outSize = sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD);
448
449 wma->outbih = malloc(outSize);
450 if (!wma->outbih) {
451 WARN("Can't alloc output BIH\n");
452 return FALSE;
453 }
454 if (!ICGetDisplayFormat(wma->hic, wma->inbih, wma->outbih, 0, 0, 0)) {
455 WARN("Can't open decompressor\n");
456 return FALSE;
457 }
458
459 TRACE("bih.biSize=%ld\n", wma->outbih->biSize);
460 TRACE("bih.biWidth=%ld\n", wma->outbih->biWidth);
461 TRACE("bih.biHeight=%ld\n", wma->outbih->biHeight);
462 TRACE("bih.biPlanes=%d\n", wma->outbih->biPlanes);
463 TRACE("bih.biBitCount=%d\n", wma->outbih->biBitCount);
464 TRACE("bih.biCompression=%lx\n", wma->outbih->biCompression);
465 TRACE("bih.biSizeImage=%ld\n", wma->outbih->biSizeImage);
466 TRACE("bih.biXPelsPerMeter=%ld\n", wma->outbih->biXPelsPerMeter);
467 TRACE("bih.biYPelsPerMeter=%ld\n", wma->outbih->biYPelsPerMeter);
468 TRACE("bih.biClrUsed=%ld\n", wma->outbih->biClrUsed);
469 TRACE("bih.biClrImportant=%ld\n", wma->outbih->biClrImportant);
470
471 wma->outdata = malloc(wma->outbih->biSizeImage);
472 if (!wma->outdata) {
473 WARN("Can't alloc output buffer\n");
474 return FALSE;
475 }
476
478 (DWORD_PTR)wma->inbih, (DWORD_PTR)wma->outbih) != ICERR_OK) {
479 WARN("Can't begin decompression\n");
480 return FALSE;
481 }
482
483paint_frame:
484 if (!(wma->hdd = DrawDibOpen()))
485 {
486 ERR("DrawDibOpen() failed.\n");
487 free(wma->outdata);
488 wma->outdata = NULL;
489 return FALSE;
490 }
491
492 hDC = wma->hWndPaint ? GetDC(wma->hWndPaint) : 0;
493 if (hDC)
494 {
496 ReleaseDC(wma->hWndPaint, hDC);
497 }
498 return TRUE;
499}
static HDC hDC
Definition: 3dtext.c:33
#define ERR(fmt,...)
Definition: precomp.h:57
#define free
Definition: debug_ros.c:5
HDRAWDIB VFWAPI DrawDibOpen(void)
Definition: drawdib.c:80
DWORD FOURCC
Definition: dmdls.h:25
#define BI_RLE4
Definition: precomp.h:45
ULONG RGBQUAD
Definition: precomp.h:47
double MCIAVI_PaintFrame(WINE_MCIAVI *wma, HDC hDC)
Definition: mmoutput.c:604
#define BI_BITFIELDS
Definition: mmreg.h:507
#define ICTYPE_VIDEO
Definition: mmreg.h:531
#define mmioFOURCC(c0, c1, c2, c3)
Definition: mmsystem.h:38
static HDC
Definition: imagelist.c:88
LRESULT VFWAPI ICSendMessage(HIC hic, UINT msg, DWORD_PTR lParam1, DWORD_PTR lParam2)
HIC VFWAPI ICLocate(DWORD type, DWORD handler, BITMAPINFOHEADER *in, BITMAPINFOHEADER *out, WORD mode)
Definition: msvideo_main.c:633
HIC VFWAPI ICGetDisplayFormat(HIC hic, BITMAPINFOHEADER *in, BITMAPINFOHEADER *out, int depth, int width, int height)
Definition: msvideo_main.c:699
FOURCC fccHandler
Definition: vfw.h:960
LONG biYPelsPerMeter
Definition: amvideo.idl:38
DWORD biCompression
Definition: amvideo.idl:35
DWORD biClrImportant
Definition: amvideo.idl:40
LONG biXPelsPerMeter
Definition: amvideo.idl:37
DWORD biSizeImage
Definition: amvideo.idl:36
DWORD dwCachedFrame
LPVOID outdata
HDRAWDIB hdd
#define BI_RGB
Definition: uefivid.c:46
#define ICMODE_DECOMPRESS
Definition: vfw.h:269
#define ICERR_OK
Definition: vfw.h:50
#define ICM_DECOMPRESS_BEGIN
Definition: vfw.h:108
#define BI_RLE8
Definition: wingdi.h:35
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
HDC WINAPI GetDC(_In_opt_ HWND)

Referenced by MCIAVI_mciOpen().

◆ MCIAVI_PaintFrame()

double MCIAVI_PaintFrame ( WINE_MCIAVI wma,
HDC  hDC 
)

Definition at line 604 of file mmoutput.c.

605{
606 void* pBitmapData;
607 LPBITMAPINFO pBitmapInfo;
608 DWORD frame;
609
610 if (!hDC || !wma->inbih)
611 return 0;
612
614 frame = wma->dwPlayableVideoFrames - 1;
615 else
616 frame = wma->dwCurrVideoFrame;
617
618 TRACE("Painting frame %lu (cached %lu)\n", frame, wma->dwCachedFrame);
619
620 if (frame != wma->dwCachedFrame)
621 {
622#ifdef __REACTOS__
623 if (wma->dwCurrVideoFrame >= wma->dwPlayableVideoFrames) {
624 ERR("Invalid frame requested. Current : %u Total Playable %u\n", wma->dwCurrVideoFrame, wma->dwPlayableVideoFrames);
625 return 0;
626 }
627#endif
628 if (!wma->lpVideoIndex[frame].dwOffset)
629 return 0;
630
631 if (wma->lpVideoIndex[frame].dwSize)
632 {
633 mmioSeek(wma->hFile, wma->lpVideoIndex[frame].dwOffset, SEEK_SET);
634 mmioRead(wma->hFile, wma->indata, wma->lpVideoIndex[frame].dwSize);
635
636 wma->inbih->biSizeImage = wma->lpVideoIndex[frame].dwSize;
637
638 if (wma->hic && ICDecompress(wma->hic, 0, wma->inbih, wma->indata,
639 wma->outbih, wma->outdata) != ICERR_OK)
640 {
641 WARN("Decompression error\n");
642 return 0;
643 }
644 }
645
646 wma->dwCachedFrame = frame;
647 }
648
649 if (wma->hic) {
650 pBitmapData = wma->outdata;
651 pBitmapInfo = (LPBITMAPINFO)wma->outbih;
652 } else {
653 pBitmapData = wma->indata;
654 pBitmapInfo = (LPBITMAPINFO)wma->inbih;
655 }
656
657 DrawDibDraw(wma->hdd, hDC, wma->dest.left, wma->dest.top, wma->dest.right - wma->dest.left, wma->dest.bottom - wma->dest.top,
658 &pBitmapInfo->bmiHeader, pBitmapData,
659 wma->source.left, wma->source.top, wma->source.right - wma->source.left, wma->source.bottom - wma->source.top, 0);
660
661 return (wma->ash_video.dwScale / (double)wma->ash_video.dwRate) * 1000000;
662}
BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc, INT xDst, INT yDst, INT dxDst, INT dyDst, LPBITMAPINFOHEADER lpbi, LPVOID lpBits, INT xSrc, INT ySrc, INT dxSrc, INT dySrc, UINT wFlags)
Definition: drawdib.c:308
LONG WINAPI mmioSeek(HMMIO hmmio, LONG lOffset, INT iOrigin)
Definition: mmio.c:836
#define SEEK_SET
Definition: jmemansi.c:26
DWORD VFWAPIV ICDecompress(HIC hic, DWORD dwFlags, LPBITMAPINFOHEADER lpbiFormat, LPVOID lpData, LPBITMAPINFOHEADER lpbi, LPVOID lpBits)
Definition: msvideo_main.c:827
DWORD dwScale
Definition: vfw.h:965
DWORD dwRate
Definition: vfw.h:966
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1922
struct tagBITMAPINFO * LPBITMAPINFO

Referenced by MCIAVI_mciUpdate(), MCIAVI_OpenVideo(), MCIAVI_player(), and MCIAVI_WindowProc().

◆ MCIAVI_PlayAudioBlocks()

void MCIAVI_PlayAudioBlocks ( WINE_MCIAVI wma,
unsigned  nHdr,
LPWAVEHDR  waveHdr 
)

Definition at line 575 of file mmoutput.c.

576{
577 if (!wma->lpAudioIndex)
578 return;
579 TRACE("%ld (ec=%lu)\n", wma->lpAudioIndex[wma->dwCurrAudioBlock].dwOffset, wma->dwEventCount);
580
581 /* push as many blocks as possible => audio gets priority */
582 while (wma->dwStatus != MCI_MODE_STOP && wma->dwStatus != MCI_MODE_NOT_READY &&
584 unsigned whidx = wma->dwCurrAudioBlock % nHdr;
585
586 ResetEvent(wma->hEvent);
587 if (InterlockedDecrement(&wma->dwEventCount) < 0 ||
588 !wma->lpAudioIndex[wma->dwCurrAudioBlock].dwOffset)
589 {
591 break;
592 }
593
594 mmioSeek(wma->hFile, wma->lpAudioIndex[wma->dwCurrAudioBlock].dwOffset, SEEK_SET);
595 mmioRead(wma->hFile, waveHdr[whidx].lpData, wma->lpAudioIndex[wma->dwCurrAudioBlock].dwSize);
596
597 waveHdr[whidx].dwFlags &= ~WHDR_DONE;
598 waveHdr[whidx].dwBufferLength = wma->lpAudioIndex[wma->dwCurrAudioBlock].dwSize;
599 waveOutWrite(wma->hWave, &waveHdr[whidx], sizeof(WAVEHDR));
600 wma->dwCurrAudioBlock++;
601 }
602}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define MCI_MODE_STOP
Definition: mmsystem.h:695
DWORD dwFlags
Definition: mmsystem.h:1020
BOOL WINAPI DECLSPEC_HOTPATCH ResetEvent(IN HANDLE hEvent)
Definition: synch.c:650
UINT WINAPI waveOutWrite(HWAVEOUT hWaveOut, LPWAVEHDR lpWaveOutHdr, UINT uSize)
Definition: winmm.c:2341

Referenced by MCIAVI_player().

◆ MCIAVI_RegisterClass()

BOOL MCIAVI_RegisterClass ( void  )

Definition at line 105 of file wnd.c.

106{
107 WNDCLASSW wndClass;
108
109 ZeroMemory(&wndClass, sizeof(WNDCLASSW));
110 wndClass.style = CS_DBLCLKS;
112 wndClass.cbWndExtra = sizeof(MCIDEVICEID);
113 wndClass.hInstance = MCIAVI_hInstance;
114 wndClass.hCursor = LoadCursorW(0, (LPCWSTR)IDC_ARROW);
115 wndClass.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1);
116 wndClass.lpszClassName = L"MCIAVI";
117
118 if (RegisterClassW(&wndClass)) return TRUE;
120
121 return FALSE;
122}
#define ZeroMemory
Definition: minwinbase.h:31
UINT MCIDEVICEID
Definition: mmsystem.h:961
LPCWSTR lpszClassName
Definition: winuser.h:3293
HBRUSH hbrBackground
Definition: winuser.h:3291
HINSTANCE hInstance
Definition: winuser.h:3288
UINT style
Definition: winuser.h:3284
WNDPROC lpfnWndProc
Definition: winuser.h:3285
int cbWndExtra
Definition: winuser.h:3287
HCURSOR hCursor
Definition: winuser.h:3290
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define ERROR_CLASS_ALREADY_EXISTS
Definition: winerror.h:1236
ATOM WINAPI RegisterClassW(_In_ CONST WNDCLASSW *)
#define IDC_ARROW
Definition: winuser.h:695
#define CS_DBLCLKS
Definition: winuser.h:659
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2474
#define COLOR_3DFACE
Definition: winuser.h:940
static LRESULT WINAPI MCIAVI_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: wnd.c:28

Referenced by MCIAVI_drvOpen().

◆ MCIAVI_UnregisterClass()

BOOL MCIAVI_UnregisterClass ( void  )

Definition at line 100 of file wnd.c.

101{
102 return UnregisterClassW(L"MCIAVI", MCIAVI_hInstance);
103}
BOOL WINAPI UnregisterClassW(_In_ LPCWSTR, HINSTANCE)

Referenced by MCIAVI_drvClose().

Variable Documentation

◆ MCIAVI_hInstance

HINSTANCE MCIAVI_hInstance
extern