Started the real implementation of mciavi.
[wine] / dlls / winmm / mciavi / private_mciavi.h
1 /* -*- tab-width: 8; c-basic-offset: 4 -*- */
2
3 /*
4  * Digital video MCI Wine Driver
5  *
6  * Copyright 1999, 2000 Eric POUECH
7  */
8
9 #include "windef.h"
10 #include "winbase.h"
11 #include "wingdi.h"
12 #include "winuser.h"
13 #include "mmddk.h"
14 #include "digitalv.h"
15 #include "vfw.h"
16 #include "mciavi.h"
17
18 struct MMIOPos {
19     DWORD       dwOffset;
20     DWORD       dwSize;
21 };
22
23 typedef struct {
24     UINT                wDevID;
25     int                 nUseCount;              /* Incremented for each shared open          */
26     BOOL16              fShareable;             /* TRUE if first open was shareable          */
27     HANDLE16            hCallback;              /* Callback handle for pending notification  */
28     WORD                wCommandTable;          /* custom MCI command table */
29     volatile DWORD      dwStatus;               /* One of MCI_MODE_XXX                       */
30     MCI_OPEN_PARMSA     openParms;
31     DWORD               dwMciTimeFormat;        /* current time format */
32     DWORD               dwSet;                  /* what's turned on: video & audio l&r */
33     /* information on the loaded AVI file */
34     HMMIO               hFile;                  /* mmio file handle open as Element          */
35     MainAVIHeader       mah;
36     AVIStreamHeader     ash_video;
37     AVIStreamHeader     ash_audio;
38     LPBITMAPINFOHEADER  inbih;
39     struct MMIOPos*     lpVideoIndex;
40     LPWAVEFORMATEX      lpWaveFormat;
41     struct MMIOPos*     lpAudioIndex;
42     /* computed data from the file */
43     DWORD               dwPlayableVideoFrames;  /* max number of frames to be played. Takes care of truncated files and audio skew */
44     DWORD               dwPlayableAudioBlocks;
45     /* data for the AVI decompressor */
46     HIC                 hic;
47     LPBITMAPINFOHEADER  outbih;
48     LPVOID              indata;
49     LPVOID              outdata;   
50     HBITMAP             hbmFrame;
51     /* data for playing the audio part */
52     HANDLE              hWave;
53     HANDLE              hEvent;                 /* for synchronization */
54     DWORD               dwEventCount;           /* for synchronization */
55     /* data for play back */
56     HWND                hWnd;
57     DWORD               dwCurrVideoFrame;       /* video frame to display and current position */
58     DWORD               dwCurrAudioBlock;       /* current audio block being played */
59     /* data for the background mechanism */
60     CRITICAL_SECTION    cs;
61 } WINE_MCIAVI;
62
63 extern HINSTANCE MCIAVI_hInstance;
64
65 /* info.c */
66 DWORD   MCIAVI_ConvertFrameToTimeFormat(WINE_MCIAVI* wma, DWORD val, LPDWORD lpRet);
67 DWORD   MCIAVI_ConvertTimeFormatToFrame(WINE_MCIAVI* wma, DWORD val);
68 DWORD   MCIAVI_mciGetDevCaps(UINT wDevID, DWORD dwFlags,  LPMCI_GETDEVCAPS_PARMS lpParms);
69 DWORD   MCIAVI_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_DGV_INFO_PARMSA lpParms);
70 DWORD   MCIAVI_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_DGV_SET_PARMS lpParms);
71 DWORD   MCIAVI_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_DGV_STATUS_PARMSA lpParms);
72
73 /* mmoutput.c */
74 BOOL    MCIAVI_GetInfo(WINE_MCIAVI* wma);
75 DWORD   MCIAVI_OpenAudio(WINE_MCIAVI* wma, unsigned* nHdr, LPWAVEHDR* pWaveHdr);
76 BOOL    MCIAVI_OpenVideo(WINE_MCIAVI* wma);
77 void    MCIAVI_PlayAudioBlocks(WINE_MCIAVI* wma, unsigned nHdr, LPWAVEHDR waveHdr);
78 LRESULT MCIAVI_DrawFrame(WINE_MCIAVI* wma);
79 LRESULT MCIAVI_PaintFrame(WINE_MCIAVI* wma, HDC hDC);
80
81 /* mciavi.c */
82 WINE_MCIAVI*    MCIAVI_mciGetOpenDev(UINT wDevID);
83
84 /* window.c */
85 BOOL    MCIAVI_CreateWindow(WINE_MCIAVI* wma, DWORD dwFlags, LPMCI_DGV_OPEN_PARMSA lpOpenParms);
86 DWORD   MCIAVI_mciPut(UINT wDevID, DWORD dwFlags, LPMCI_DGV_PUT_PARMS lpParms);
87 DWORD   MCIAVI_mciWhere(UINT wDevID, DWORD dwFlags, LPMCI_DGV_RECT_PARMS lpParms);
88 DWORD   MCIAVI_mciWindow(UINT wDevID, DWORD dwFlags, LPMCI_DGV_WINDOW_PARMSA lpParms);