xref: /reactos/dll/win32/mciavi32/private_mciavi.h (revision cc439606)
1 /*
2  * Digital video MCI Wine Driver
3  *
4  * Copyright 1999, 2000 Eric POUECH
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20 
21 #ifndef __WINE_PRIVATE_MCIAVI_H
22 #define __WINE_PRIVATE_MCIAVI_H
23 
24 #include <stdarg.h>
25 #include "windef.h"
26 #include "winbase.h"
27 #include "wingdi.h"
28 #include "winuser.h"
29 #include "mmddk.h"
30 #include "digitalv.h"
31 #include "vfw.h"
32 #include "wownt32.h"
33 #include "mciavi.h"
34 
35 struct MMIOPos {
36     DWORD	dwOffset;
37     DWORD	dwSize;
38 };
39 
40 typedef struct {
41     MCIDEVICEID         wDevID;
42     int			nUseCount;          	/* Incremented for each shared open          */
43     BOOL  		fShareable;         	/* TRUE if first open was shareable 	     */
44     WORD		wCommandTable;		/* custom MCI command table */
45     DWORD               dwStatus;               /* One of MCI_MODE_XXX                       */
46     LPWSTR              lpFileName;
47     DWORD		dwMciTimeFormat;	/* current time format */
48     DWORD		dwSet;			/* what's turned on: video & audio l&r */
49     /* information on the loaded AVI file */
50     HMMIO		hFile;	            	/* mmio file handle open as Element          */
51     DWORD               video_stream_n, audio_stream_n; /* stream #s */
52     MainAVIHeader	mah;
53     AVIStreamHeader	ash_video;
54     AVIStreamHeader	ash_audio;
55     LPBITMAPINFOHEADER	inbih;
56     struct MMIOPos*	lpVideoIndex;
57     LPWAVEFORMATEX	lpWaveFormat;
58     struct MMIOPos*	lpAudioIndex;
59     /* computed data from the file */
60     DWORD		dwPlayableVideoFrames;	/* max number of frames to be played. Takes care of truncated files and audio skew */
61     DWORD		dwPlayableAudioBlocks;
62     /* data for the AVI decompressor */
63     HIC			hic;
64     LPBITMAPINFOHEADER	outbih;
65     LPVOID		indata;
66     LPVOID		outdata;
67     HBITMAP  	    	hbmFrame;
68     /* data for playing the audio part */
69     HANDLE		hWave;
70     HANDLE		hEvent;			/* for synchronization */
71     LONG		dwEventCount;		/* for synchronization */
72     /* data for play back */
73     HWND               hWnd, hWndPaint;
74     DWORD               dwCachedFrame; /* buffered frame */
75     DWORD		dwCurrVideoFrame;	/* video frame to display and current position */
76     DWORD               dwToVideoFrame; /* play to */
77     DWORD		dwCurrAudioBlock;	/* current audio block being played */
78     RECT                source, dest;
79     struct
80     {
81         DWORD flags;
82         MCI_BREAK_PARMS parms;
83     } mci_break;
84     /* data for the background mechanism */
85     CRITICAL_SECTION	cs;
86     HANDLE              hStopEvent;
87 } WINE_MCIAVI;
88 
89 extern HINSTANCE MCIAVI_hInstance DECLSPEC_HIDDEN;
90 
91 /* info.c */
92 DWORD 	MCIAVI_ConvertTimeFormatToFrame(WINE_MCIAVI* wma, DWORD val) DECLSPEC_HIDDEN;
93 DWORD	MCIAVI_mciGetDevCaps(UINT wDevID, DWORD dwFlags,  LPMCI_GETDEVCAPS_PARMS lpParms) DECLSPEC_HIDDEN;
94 DWORD	MCIAVI_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_DGV_INFO_PARMSW lpParms) DECLSPEC_HIDDEN;
95 DWORD	MCIAVI_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_DGV_SET_PARMS lpParms) DECLSPEC_HIDDEN;
96 DWORD	MCIAVI_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_DGV_STATUS_PARMSW lpParms) DECLSPEC_HIDDEN;
97 
98 /* mmoutput.c */
99 BOOL	MCIAVI_GetInfo(WINE_MCIAVI* wma) DECLSPEC_HIDDEN;
100 DWORD	MCIAVI_OpenAudio(WINE_MCIAVI* wma, unsigned* nHdr, LPWAVEHDR* pWaveHdr) DECLSPEC_HIDDEN;
101 BOOL	MCIAVI_OpenVideo(WINE_MCIAVI* wma) DECLSPEC_HIDDEN;
102 void	MCIAVI_PlayAudioBlocks(WINE_MCIAVI* wma, unsigned nHdr, LPWAVEHDR waveHdr) DECLSPEC_HIDDEN;
103 double	MCIAVI_PaintFrame(WINE_MCIAVI* wma, HDC hDC) DECLSPEC_HIDDEN;
104 
105 /* mciavi.c */
106 WINE_MCIAVI*	MCIAVI_mciGetOpenDev(UINT wDevID) DECLSPEC_HIDDEN;
107 DWORD MCIAVI_mciClose(UINT, DWORD, LPMCI_GENERIC_PARMS) DECLSPEC_HIDDEN;
108 
109 /* wnd.c */
110 BOOL    MCIAVI_RegisterClass(void) DECLSPEC_HIDDEN;
111 BOOL    MCIAVI_UnregisterClass(void) DECLSPEC_HIDDEN;
112 BOOL    MCIAVI_CreateWindow(WINE_MCIAVI* wma, DWORD dwFlags, LPMCI_DGV_OPEN_PARMSW lpOpenParms) DECLSPEC_HIDDEN;
113 DWORD	MCIAVI_mciPut(UINT wDevID, DWORD dwFlags, LPMCI_DGV_PUT_PARMS lpParms) DECLSPEC_HIDDEN;
114 DWORD	MCIAVI_mciWhere(UINT wDevID, DWORD dwFlags, LPMCI_DGV_RECT_PARMS lpParms) DECLSPEC_HIDDEN;
115 DWORD	MCIAVI_mciWindow(UINT wDevID, DWORD dwFlags, LPMCI_DGV_WINDOW_PARMSW lpParms) DECLSPEC_HIDDEN;
116 
117 #endif  /* __WINE_PRIVATE_MCIAVI_H */
118