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