4 typedef struct videohdr_tag {
5 LPBYTE lpData; /* pointer to locked data buffer */
6 DWORD dwBufferLength; /* Length of data buffer */
7 DWORD dwBytesUsed; /* Bytes actually used */
8 DWORD dwTimeCaptured; /* Milliseconds from start of stream */
9 DWORD_PTR dwUser; /* for client's use */
10 DWORD dwFlags; /* assorted flags (see defines) */
11 DWORD_PTR dwReserved[4]; /* reserved for driver */
12 } VIDEOHDR, NEAR *PVIDEOHDR, FAR * LPVIDEOHDR;
14 typedef struct tagCaptureParms {
15 DWORD dwRequestMicroSecPerFrame; // Requested capture rate
16 BOOL fMakeUserHitOKToCapture; // Show "Hit OK to cap" dlg?
17 UINT wPercentDropForError; // Give error msg if > (10%)
18 BOOL fYield; // Capture via background task?
19 DWORD dwIndexSize; // Max index size in frames (32K)
20 UINT wChunkGranularity; // Junk chunk granularity (2K)
21 BOOL fUsingDOSMemory; // Use DOS buffers?
22 UINT wNumVideoRequested; // # video buffers, If 0, autocalc
23 BOOL fCaptureAudio; // Capture audio?
24 UINT wNumAudioRequested; // # audio buffers, If 0, autocalc
25 UINT vKeyAbort; // Virtual key causing abort
26 BOOL fAbortLeftMouse; // Abort on left mouse?
27 BOOL fAbortRightMouse; // Abort on right mouse?
28 BOOL fLimitEnabled; // Use wTimeLimit?
29 UINT wTimeLimit; // Seconds to capture
30 BOOL fMCIControl; // Use MCI video source?
31 BOOL fStepMCIDevice; // Step MCI device?
32 DWORD dwMCIStartTime; // Time to start in MS
33 DWORD dwMCIStopTime; // Time to stop in MS
34 BOOL fStepCaptureAt2x; // Perform spatial averaging 2x
35 UINT wStepCaptureAverageFrames; // Temporal average n Frames
36 DWORD dwAudioBufferSize; // Size of audio bufs (0 = default)
37 BOOL fDisableWriteCache; // Attempt to disable write cache
38 UINT AVStreamMaster; // Which stream controls length?
39 } CAPTUREPARMS, *PCAPTUREPARMS, FAR *LPCAPTUREPARMS;
48 BOOL fUsingDefaultPalette;
51 DWORD dwCurrentVideoFrame;
52 DWORD dwCurrentVideoFramesDropped;
53 DWORD dwCurrentWaveSamples;
54 DWORD dwCurrentTimeElapsedMS;
58 UINT wNumVideoAllocated;
59 UINT wNumAudioAllocated;
60 } CAPSTATUS, *PCAPSTATUS, FAR *LPCAPSTATUS;
64 /* SendMessage in C++*/
65 #define AVICapSM(hwnd,m,w,l) ( (::IsWindow(hwnd)) ? ::SendMessage(hwnd,m,w,l) : 0)
67 /* SendMessage in C */
68 #define AVICapSM(hwnd,m,w,l) ( (IsWindow(hwnd)) ? SendMessage(hwnd,m,w,l) : 0)
69 #endif /* __cplusplus */
71 #define WM_CAP_START WM_USER
73 // start of unicode messages
74 #define WM_CAP_UNICODE_START WM_USER+100
76 #define WM_CAP_GET_CAPSTREAMPTR (WM_CAP_START+ 1)
78 #define WM_CAP_SET_CALLBACK_ERRORW (WM_CAP_UNICODE_START+ 2)
79 #define WM_CAP_SET_CALLBACK_STATUSW (WM_CAP_UNICODE_START+ 3)
80 #define WM_CAP_SET_CALLBACK_ERRORA (WM_CAP_START+ 2)
81 #define WM_CAP_SET_CALLBACK_STATUSA (WM_CAP_START+ 3)
83 #define WM_CAP_SET_CALLBACK_ERROR WM_CAP_SET_CALLBACK_ERRORW
84 #define WM_CAP_SET_CALLBACK_STATUS WM_CAP_SET_CALLBACK_STATUSW
86 #define WM_CAP_SET_CALLBACK_ERROR WM_CAP_SET_CALLBACK_ERRORA
87 #define WM_CAP_SET_CALLBACK_STATUS WM_CAP_SET_CALLBACK_STATUSA
91 #define WM_CAP_SET_CALLBACK_YIELD (WM_CAP_START+ 4)
92 #define WM_CAP_SET_CALLBACK_FRAME (WM_CAP_START+ 5)
93 #define WM_CAP_SET_CALLBACK_VIDEOSTREAM (WM_CAP_START+ 6)
94 #define WM_CAP_SET_CALLBACK_WAVESTREAM (WM_CAP_START+ 7)
95 #define WM_CAP_GET_USER_DATA (WM_CAP_START+ 8)
96 #define WM_CAP_SET_USER_DATA (WM_CAP_START+ 9)
98 #define WM_CAP_DRIVER_CONNECT (WM_CAP_START+ 10)
99 #define WM_CAP_DRIVER_DISCONNECT (WM_CAP_START+ 11)
101 #define WM_CAP_DRIVER_GET_NAMEA (WM_CAP_START+ 12)
102 #define WM_CAP_DRIVER_GET_VERSIONA (WM_CAP_START+ 13)
103 #define WM_CAP_DRIVER_GET_NAMEW (WM_CAP_UNICODE_START+ 12)
104 #define WM_CAP_DRIVER_GET_VERSIONW (WM_CAP_UNICODE_START+ 13)
106 #define WM_CAP_DRIVER_GET_NAME WM_CAP_DRIVER_GET_NAMEW
107 #define WM_CAP_DRIVER_GET_VERSION WM_CAP_DRIVER_GET_VERSIONW
109 #define WM_CAP_DRIVER_GET_NAME WM_CAP_DRIVER_GET_NAMEA
110 #define WM_CAP_DRIVER_GET_VERSION WM_CAP_DRIVER_GET_VERSIONA
113 #define WM_CAP_DRIVER_GET_CAPS (WM_CAP_START+ 14)
115 #define WM_CAP_FILE_SET_CAPTURE_FILEA (WM_CAP_START+ 20)
116 #define WM_CAP_FILE_GET_CAPTURE_FILEA (WM_CAP_START+ 21)
117 #define WM_CAP_FILE_SAVEASA (WM_CAP_START+ 23)
118 #define WM_CAP_FILE_SAVEDIBA (WM_CAP_START+ 25)
119 #define WM_CAP_FILE_SET_CAPTURE_FILEW (WM_CAP_UNICODE_START+ 20)
120 #define WM_CAP_FILE_GET_CAPTURE_FILEW (WM_CAP_UNICODE_START+ 21)
121 #define WM_CAP_FILE_SAVEASW (WM_CAP_UNICODE_START+ 23)
122 #define WM_CAP_FILE_SAVEDIBW (WM_CAP_UNICODE_START+ 25)
124 #define WM_CAP_FILE_SET_CAPTURE_FILE WM_CAP_FILE_SET_CAPTURE_FILEW
125 #define WM_CAP_FILE_GET_CAPTURE_FILE WM_CAP_FILE_GET_CAPTURE_FILEW
126 #define WM_CAP_FILE_SAVEAS WM_CAP_FILE_SAVEASW
127 #define WM_CAP_FILE_SAVEDIB WM_CAP_FILE_SAVEDIBW
129 #define WM_CAP_FILE_SET_CAPTURE_FILE WM_CAP_FILE_SET_CAPTURE_FILEA
130 #define WM_CAP_FILE_GET_CAPTURE_FILE WM_CAP_FILE_GET_CAPTURE_FILEA
131 #define WM_CAP_FILE_SAVEAS WM_CAP_FILE_SAVEASA
132 #define WM_CAP_FILE_SAVEDIB WM_CAP_FILE_SAVEDIBA
135 // out of order to save on ifdefs
136 #define WM_CAP_FILE_ALLOCATE (WM_CAP_START+ 22)
137 #define WM_CAP_FILE_SET_INFOCHUNK (WM_CAP_START+ 24)
139 #define WM_CAP_EDIT_COPY (WM_CAP_START+ 30)
141 #define WM_CAP_SET_AUDIOFORMAT (WM_CAP_START+ 35)
142 #define WM_CAP_GET_AUDIOFORMAT (WM_CAP_START+ 36)
144 #define WM_CAP_DLG_VIDEOFORMAT (WM_CAP_START+ 41)
145 #define WM_CAP_DLG_VIDEOSOURCE (WM_CAP_START+ 42)
146 #define WM_CAP_DLG_VIDEODISPLAY (WM_CAP_START+ 43)
147 #define WM_CAP_GET_VIDEOFORMAT (WM_CAP_START+ 44)
148 #define WM_CAP_SET_VIDEOFORMAT (WM_CAP_START+ 45)
149 #define WM_CAP_DLG_VIDEOCOMPRESSION (WM_CAP_START+ 46)
151 #define WM_CAP_SET_PREVIEW (WM_CAP_START+ 50)
152 #define WM_CAP_SET_OVERLAY (WM_CAP_START+ 51)
153 #define WM_CAP_SET_PREVIEWRATE (WM_CAP_START+ 52)
154 #define WM_CAP_SET_SCALE (WM_CAP_START+ 53)
155 #define WM_CAP_GET_STATUS (WM_CAP_START+ 54)
156 #define WM_CAP_SET_SCROLL (WM_CAP_START+ 55)
158 #define WM_CAP_GRAB_FRAME (WM_CAP_START+ 60)
159 #define WM_CAP_GRAB_FRAME_NOSTOP (WM_CAP_START+ 61)
161 #define WM_CAP_SEQUENCE (WM_CAP_START+ 62)
162 #define WM_CAP_SEQUENCE_NOFILE (WM_CAP_START+ 63)
163 #define WM_CAP_SET_SEQUENCE_SETUP (WM_CAP_START+ 64)
164 #define WM_CAP_GET_SEQUENCE_SETUP (WM_CAP_START+ 65)
166 #define WM_CAP_SET_MCI_DEVICEA (WM_CAP_START+ 66)
167 #define WM_CAP_GET_MCI_DEVICEA (WM_CAP_START+ 67)
168 #define WM_CAP_SET_MCI_DEVICEW (WM_CAP_UNICODE_START+ 66)
169 #define WM_CAP_GET_MCI_DEVICEW (WM_CAP_UNICODE_START+ 67)
171 #define WM_CAP_SET_MCI_DEVICE WM_CAP_SET_MCI_DEVICEW
172 #define WM_CAP_GET_MCI_DEVICE WM_CAP_GET_MCI_DEVICEW
174 #define WM_CAP_SET_MCI_DEVICE WM_CAP_SET_MCI_DEVICEA
175 #define WM_CAP_GET_MCI_DEVICE WM_CAP_GET_MCI_DEVICEA
180 #define WM_CAP_STOP (WM_CAP_START+ 68)
181 #define WM_CAP_ABORT (WM_CAP_START+ 69)
183 #define WM_CAP_SINGLE_FRAME_OPEN (WM_CAP_START+ 70)
184 #define WM_CAP_SINGLE_FRAME_CLOSE (WM_CAP_START+ 71)
185 #define WM_CAP_SINGLE_FRAME (WM_CAP_START+ 72)
187 #define WM_CAP_PAL_OPENA (WM_CAP_START+ 80)
188 #define WM_CAP_PAL_SAVEA (WM_CAP_START+ 81)
189 #define WM_CAP_PAL_OPENW (WM_CAP_UNICODE_START+ 80)
190 #define WM_CAP_PAL_SAVEW (WM_CAP_UNICODE_START+ 81)
192 #define WM_CAP_PAL_OPEN WM_CAP_PAL_OPENW
193 #define WM_CAP_PAL_SAVE WM_CAP_PAL_SAVEW
195 #define WM_CAP_PAL_OPEN WM_CAP_PAL_OPENA
196 #define WM_CAP_PAL_SAVE WM_CAP_PAL_SAVEA
199 #define WM_CAP_PAL_PASTE (WM_CAP_START+ 82)
200 #define WM_CAP_PAL_AUTOCREATE (WM_CAP_START+ 83)
201 #define WM_CAP_PAL_MANUALCREATE (WM_CAP_START+ 84)
203 // Following added post VFW 1.1
204 #define WM_CAP_SET_CALLBACK_CAPCONTROL (WM_CAP_START+ 85)
207 // Defines end of the message range
208 #define WM_CAP_UNICODE_END WM_CAP_PAL_SAVEW
209 #define WM_CAP_END WM_CAP_UNICODE_END
211 #define capSetCallbackOnError(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_ERROR, 0, (LPARAM)(LPVOID)(fpProc)))
212 #define capSetCallbackOnStatus(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_STATUS, 0, (LPARAM)(LPVOID)(fpProc)))
213 #define capSetCallbackOnYield(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_YIELD, 0, (LPARAM)(LPVOID)(fpProc)))
214 #define capSetCallbackOnFrame(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_FRAME, 0, (LPARAM)(LPVOID)(fpProc)))
215 #define capSetCallbackOnVideoStream(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, (LPARAM)(LPVOID)(fpProc)))
216 #define capSetCallbackOnWaveStream(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_WAVESTREAM, 0, (LPARAM)(LPVOID)(fpProc)))
217 #define capSetCallbackOnCapControl(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_CAPCONTROL, 0, (LPARAM)(LPVOID)(fpProc)))
219 #define capSetUserData(hwnd, lUser) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_USER_DATA, 0, (LPARAM)lUser))
220 #define capGetUserData(hwnd) (AVICapSM(hwnd, WM_CAP_GET_USER_DATA, 0, 0))
222 #define capDriverConnect(hwnd, i) ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_CONNECT, (WPARAM)(i), 0L))
223 #define capDriverDisconnect(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_DISCONNECT, (WPARAM)0, 0L))
224 #define capDriverGetName(hwnd, szName, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_GET_NAME, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPTSTR)(szName)))
225 #define capDriverGetVersion(hwnd, szVer, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_GET_VERSION, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPTSTR)(szVer)))
226 #define capDriverGetCaps(hwnd, s, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_GET_CAPS, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPCAPDRIVERCAPS)(s)))
228 #define capFileSetCaptureFile(hwnd, szName) ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_SET_CAPTURE_FILE, 0, (LPARAM)(LPVOID)(LPTSTR)(szName)))
229 #define capFileGetCaptureFile(hwnd, szName, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_GET_CAPTURE_FILE, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPTSTR)(szName)))
230 #define capFileAlloc(hwnd, dwSize) ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_ALLOCATE, 0, (LPARAM)(DWORD)(dwSize)))
231 #define capFileSaveAs(hwnd, szName) ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_SAVEAS, 0, (LPARAM)(LPVOID)(LPTSTR)(szName)))
232 #define capFileSetInfoChunk(hwnd, lpInfoChunk) ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_SET_INFOCHUNK, (WPARAM)0, (LPARAM)(LPCAPINFOCHUNK)(lpInfoChunk)))
233 #define capFileSaveDIB(hwnd, szName) ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_SAVEDIB, 0, (LPARAM)(LPVOID)(LPTSTR)(szName)))
235 #define capEditCopy(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_EDIT_COPY, 0, 0L))
237 #define capSetAudioFormat(hwnd, s, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_AUDIOFORMAT, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPWAVEFORMATEX)(s)))
238 #define capGetAudioFormat(hwnd, s, wSize) ((DWORD)AVICapSM(hwnd, WM_CAP_GET_AUDIOFORMAT, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPWAVEFORMATEX)(s)))
239 #define capGetAudioFormatSize(hwnd) ((DWORD)AVICapSM(hwnd, WM_CAP_GET_AUDIOFORMAT, (WPARAM)0, (LPARAM)0L))
241 #define capDlgVideoFormat(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_DLG_VIDEOFORMAT, 0, 0L))
242 #define capDlgVideoSource(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_DLG_VIDEOSOURCE, 0, 0L))
243 #define capDlgVideoDisplay(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_DLG_VIDEODISPLAY, 0, 0L))
244 #define capDlgVideoCompression(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_DLG_VIDEOCOMPRESSION, 0, 0L))
246 #define capGetVideoFormat(hwnd, s, wSize) ((DWORD)AVICapSM(hwnd, WM_CAP_GET_VIDEOFORMAT, (WPARAM)(wSize), (LPARAM)(LPVOID)(s)))
247 #define capGetVideoFormatSize(hwnd) ((DWORD)AVICapSM(hwnd, WM_CAP_GET_VIDEOFORMAT, 0, 0L))
248 #define capSetVideoFormat(hwnd, s, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_VIDEOFORMAT, (WPARAM)(wSize), (LPARAM)(LPVOID)(s)))
250 #define capPreview(hwnd, f) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_PREVIEW, (WPARAM)(BOOL)(f), 0L))
251 #define capPreviewRate(hwnd, wMS) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_PREVIEWRATE, (WPARAM)(wMS), 0))
252 #define capOverlay(hwnd, f) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_OVERLAY, (WPARAM)(BOOL)(f), 0L))
253 #define capPreviewScale(hwnd, f) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_SCALE, (WPARAM)(BOOL)f, 0L))
254 #define capGetStatus(hwnd, s, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_GET_STATUS, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPCAPSTATUS)(s)))
255 #define capSetScrollPos(hwnd, lpP) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_SCROLL, (WPARAM)0, (LPARAM)(LPPOINT)(lpP)))
257 #define capGrabFrame(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_GRAB_FRAME, (WPARAM)0, (LPARAM)0L))
258 #define capGrabFrameNoStop(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_GRAB_FRAME_NOSTOP, (WPARAM)0, (LPARAM)0L))
260 #define capCaptureSequence(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_SEQUENCE, (WPARAM)0, (LPARAM)0L))
261 #define capCaptureSequenceNoFile(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_SEQUENCE_NOFILE, (WPARAM)0, (LPARAM)0L))
262 #define capCaptureStop(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_STOP, (WPARAM)0, (LPARAM)0L))
263 #define capCaptureAbort(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_ABORT, (WPARAM)0, (LPARAM)0L))
265 #define capCaptureSingleFrameOpen(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_SINGLE_FRAME_OPEN, (WPARAM)0, (LPARAM)0L))
266 #define capCaptureSingleFrameClose(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_SINGLE_FRAME_CLOSE, (WPARAM)0, (LPARAM)0L))
267 #define capCaptureSingleFrame(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_SINGLE_FRAME, (WPARAM)0, (LPARAM)0L))
269 #define capCaptureGetSetup(hwnd, s, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_GET_SEQUENCE_SETUP, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPCAPTUREPARMS)(s)))
270 #define capCaptureSetSetup(hwnd, s, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_SEQUENCE_SETUP, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPCAPTUREPARMS)(s)))
272 #define capSetMCIDeviceName(hwnd, szName) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_MCI_DEVICE, 0, (LPARAM)(LPVOID)(LPTSTR)(szName)))
273 #define capGetMCIDeviceName(hwnd, szName, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_GET_MCI_DEVICE, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPTSTR)(szName)))
275 #define capPaletteOpen(hwnd, szName) ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_OPEN, 0, (LPARAM)(LPVOID)(LPTSTR)(szName)))
276 #define capPaletteSave(hwnd, szName) ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_SAVE, 0, (LPARAM)(LPVOID)(LPTSTR)(szName)))
277 #define capPalettePaste(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_PASTE, (WPARAM) 0, (LPARAM)0L))
278 #define capPaletteAuto(hwnd, iFrames, iColors) ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_AUTOCREATE, (WPARAM)(iFrames), (LPARAM)(DWORD)(iColors)))
279 #define capPaletteManual(hwnd, fGrab, iColors) ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_MANUALCREATE, (WPARAM)(fGrab), (LPARAM)(DWORD)(iColors)))
281 #define AVSTREAMMASTER_AUDIO 0 /* Audio master (VFW 1.0, 1.1) */
282 #define AVSTREAMMASTER_NONE 1 /* No master */