dbaf30f50d0720b37f7736cfd1ad3b97160d5484
[reactos.git] / dll / win32 / mciavi32 / private_mciavi.h
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
26 #define WIN32_NO_STATUS
27 #define _INC_WINDOWS
28 #define COM_NO_WINDOWS_H
29
30 #include <windef.h>
31 #include <wingdi.h>
32 #include <mmddk.h>
33 #include <digitalv.h>
34 #include <vfw.h>
35 #include <wownt32.h>
36
37 #include <wine/debug.h>
38 WINE_DEFAULT_DEBUG_CHANNEL(mciavi);
39
40 struct MMIOPos {
41 DWORD dwOffset;
42 DWORD dwSize;
43 };
44
45 typedef struct {
46 MCIDEVICEID wDevID;
47 int nUseCount; /* Incremented for each shared open */
48 BOOL fShareable; /* TRUE if first open was shareable */
49 WORD wCommandTable; /* custom MCI command table */
50 DWORD dwStatus; /* One of MCI_MODE_XXX */
51 LPWSTR lpFileName;
52 DWORD dwMciTimeFormat; /* current time format */
53 DWORD dwSet; /* what's turned on: video & audio l&r */
54 /* information on the loaded AVI file */
55 HMMIO hFile; /* mmio file handle open as Element */
56 DWORD video_stream_n, audio_stream_n; /* stream #s */
57 MainAVIHeader mah;
58 AVIStreamHeader ash_video;
59 AVIStreamHeader ash_audio;
60 LPBITMAPINFOHEADER inbih;
61 struct MMIOPos* lpVideoIndex;
62 LPWAVEFORMATEX lpWaveFormat;
63 struct MMIOPos* lpAudioIndex;
64 /* computed data from the file */
65 DWORD dwPlayableVideoFrames; /* max number of frames to be played. Takes care of truncated files and audio skew */
66 DWORD dwPlayableAudioBlocks;
67 /* data for the AVI decompressor */
68 HIC hic;
69 LPBITMAPINFOHEADER outbih;
70 LPVOID indata;
71 LPVOID outdata;
72 HBITMAP hbmFrame;
73 /* data for playing the audio part */
74 HANDLE hWave;
75 HANDLE hEvent; /* for synchronization */
76 LONG dwEventCount; /* for synchronization */
77 /* data for play back */
78 HWND hWnd, hWndPaint;
79 DWORD dwCachedFrame; /* buffered frame */
80 DWORD dwCurrVideoFrame; /* video frame to display and current position */
81 DWORD dwToVideoFrame; /* play to */
82 DWORD dwCurrAudioBlock; /* current audio block being played */
83 RECT source, dest;
84 struct
85 {
86 DWORD flags;
87 MCI_BREAK_PARMS parms;
88 } mci_break;
89 /* data for the background mechanism */
90 CRITICAL_SECTION cs;
91 HANDLE hStopEvent;
92 } WINE_MCIAVI;
93
94 extern HINSTANCE MCIAVI_hInstance DECLSPEC_HIDDEN;
95
96 /* info.c */
97 DWORD MCIAVI_ConvertTimeFormatToFrame(WINE_MCIAVI* wma, DWORD val) DECLSPEC_HIDDEN;
98 DWORD MCIAVI_mciGetDevCaps(UINT wDevID, DWORD dwFlags, LPMCI_GETDEVCAPS_PARMS lpParms) DECLSPEC_HIDDEN;
99 DWORD MCIAVI_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_DGV_INFO_PARMSW lpParms) DECLSPEC_HIDDEN;
100 DWORD MCIAVI_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_DGV_SET_PARMS lpParms) DECLSPEC_HIDDEN;
101 DWORD MCIAVI_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_DGV_STATUS_PARMSW lpParms) DECLSPEC_HIDDEN;
102
103 /* mmoutput.c */
104 BOOL MCIAVI_GetInfo(WINE_MCIAVI* wma) DECLSPEC_HIDDEN;
105 DWORD MCIAVI_OpenAudio(WINE_MCIAVI* wma, unsigned* nHdr, LPWAVEHDR* pWaveHdr) DECLSPEC_HIDDEN;
106 BOOL MCIAVI_OpenVideo(WINE_MCIAVI* wma) DECLSPEC_HIDDEN;
107 void MCIAVI_PlayAudioBlocks(WINE_MCIAVI* wma, unsigned nHdr, LPWAVEHDR waveHdr) DECLSPEC_HIDDEN;
108 double MCIAVI_PaintFrame(WINE_MCIAVI* wma, HDC hDC) DECLSPEC_HIDDEN;
109
110 /* mciavi.c */
111 WINE_MCIAVI* MCIAVI_mciGetOpenDev(UINT wDevID) DECLSPEC_HIDDEN;
112 DWORD MCIAVI_mciClose(UINT, DWORD, LPMCI_GENERIC_PARMS) DECLSPEC_HIDDEN;
113
114 /* wnd.c */
115 BOOL MCIAVI_RegisterClass(void) DECLSPEC_HIDDEN;
116 BOOL MCIAVI_UnregisterClass(void) DECLSPEC_HIDDEN;
117 BOOL MCIAVI_CreateWindow(WINE_MCIAVI* wma, DWORD dwFlags, LPMCI_DGV_OPEN_PARMSW lpOpenParms) DECLSPEC_HIDDEN;
118 DWORD MCIAVI_mciPut(UINT wDevID, DWORD dwFlags, LPMCI_DGV_PUT_PARMS lpParms) DECLSPEC_HIDDEN;
119 DWORD MCIAVI_mciWhere(UINT wDevID, DWORD dwFlags, LPMCI_DGV_RECT_PARMS lpParms) DECLSPEC_HIDDEN;
120 DWORD MCIAVI_mciWindow(UINT wDevID, DWORD dwFlags, LPMCI_DGV_WINDOW_PARMSW lpParms) DECLSPEC_HIDDEN;
121
122 #endif /* __WINE_PRIVATE_MCIAVI_H */