home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / borland / cb / setup / cbuilder / data.z / AVICAP.H < prev    next >
C/C++ Source or Header  |  1997-02-28  |  30KB  |  571 lines

  1. /****************************************************************************
  2.  *
  3.  *   avicap.h
  4.  *
  5.  *   Main include file.
  6.  *
  7.  *   Microsoft Video for Windows Sample Capture Class
  8.  *
  9.  *    You have a royalty-free right to use, modify, reproduce and
  10.  *    distribute the Sample Files (and/or any modified version) in
  11.  *    any way you find useful, provided that you agree that
  12.  *    Microsoft has no warranty obligations or liability for any
  13.  *    Sample Application Files which are modified.
  14.  *
  15.  ***************************************************************************/
  16.  
  17. /*
  18.  *      C/C++ Run Time Library - Version 8.0
  19.  *
  20.  *      Copyright (c) 1994, 1997 by Borland International
  21.  *      All Rights Reserved.
  22.  *
  23.  */
  24.  
  25. #ifndef _INC_AVICAP
  26. #define _INC_AVICAP
  27. #define __AVICAP_H
  28. #pragma option -b
  29.  
  30. #if !defined(RC_INVOKED) && !defined(VFWAPI)
  31. #ifdef _WIN32
  32.     #define VFWAPI  __stdcall
  33.     #define VFWAPIV __stdcall
  34.     #define _LOADDS
  35.     #pragma message("AVICAP.H: Defining VFWAPIV to be __stdcall...................")
  36. #else
  37.     #define VFWAPI  FAR PASCAL
  38.     #define VFWAPIV FAR CDECL
  39. #endif
  40. #endif
  41.  
  42. #ifdef __cplusplus
  43. #define AVICapSM ::SendMessage  /* SendMessage in C++*/
  44. #else
  45. #define AVICapSM SendMessage    /* SendMessage in C */
  46. #endif  /* __cplusplus */
  47.  
  48. #ifdef __cplusplus
  49. extern "C" {            /* Assume C declarations for C++ */
  50. #endif  /* __cplusplus */
  51.  
  52. #ifdef __BORLANDC__
  53. #pragma option -b.
  54.   #include <pshpack1.h>
  55. #pragma option -b
  56. #endif
  57.  
  58. #ifndef RC_INVOKED
  59.  
  60. // ------------------------------------------------------------------
  61. //  Window Messages  WM_CAP... which can be sent to an AVICAP window
  62. // ------------------------------------------------------------------
  63.  
  64.  
  65.  
  66. // UNICODE
  67. //
  68. // The Win32 version of AVICAP supports UNICODE applications:
  69. // for each API or message that takes a char or string parameter, there are
  70. // two versions, ApiNameA and ApiNameW. The default name ApiName is #defined
  71. // to one or other depending on whether UNICODE is defined. Apps can call
  72. // the A and W apis directly, and mix them.
  73. //
  74. // The 32-bit AVICAP uses unicode exclusively internally. ApiNameA() will be
  75. // implemented as a call to ApiNameW() together with translation of strings.
  76.  
  77.  
  78.  
  79.  
  80. // Defines start of the message range
  81. #define WM_CAP_START                    WM_USER
  82.  
  83. // start of unicode messages
  84. #define WM_CAP_UNICODE_START            WM_USER+100
  85.  
  86. #define WM_CAP_GET_CAPSTREAMPTR         (WM_CAP_START+  1)
  87.  
  88. #ifdef _WIN32
  89. #define WM_CAP_SET_CALLBACK_ERRORW     (WM_CAP_UNICODE_START+  2)
  90. #define WM_CAP_SET_CALLBACK_STATUSW    (WM_CAP_UNICODE_START+  3)
  91. #define WM_CAP_SET_CALLBACK_ERRORA     (WM_CAP_START+  2)
  92. #define WM_CAP_SET_CALLBACK_STATUSA    (WM_CAP_START+  3)
  93. #ifdef UNICODE
  94. #define WM_CAP_SET_CALLBACK_ERROR       WM_CAP_SET_CALLBACK_ERRORW
  95. #define WM_CAP_SET_CALLBACK_STATUS      WM_CAP_SET_CALLBACK_STATUSW
  96. #else
  97. #define WM_CAP_SET_CALLBACK_ERROR       WM_CAP_SET_CALLBACK_ERRORA
  98. #define WM_CAP_SET_CALLBACK_STATUS      WM_CAP_SET_CALLBACK_STATUSA
  99. #endif
  100. #else
  101. #define WM_CAP_SET_CALLBACK_ERROR       (WM_CAP_START+  2)
  102. #define WM_CAP_SET_CALLBACK_STATUS      (WM_CAP_START+  3)
  103. #endif
  104.  
  105.  
  106. #define WM_CAP_SET_CALLBACK_YIELD       (WM_CAP_START+  4)
  107. #define WM_CAP_SET_CALLBACK_FRAME       (WM_CAP_START+  5)
  108. #define WM_CAP_SET_CALLBACK_VIDEOSTREAM (WM_CAP_START+  6)
  109. #define WM_CAP_SET_CALLBACK_WAVESTREAM  (WM_CAP_START+  7)
  110. #define WM_CAP_GET_USER_DATA            (WM_CAP_START+  8)
  111. #define WM_CAP_SET_USER_DATA            (WM_CAP_START+  9)
  112.  
  113. #define WM_CAP_DRIVER_CONNECT           (WM_CAP_START+  10)
  114. #define WM_CAP_DRIVER_DISCONNECT        (WM_CAP_START+  11)
  115.  
  116. #ifdef _WIN32
  117. #define WM_CAP_DRIVER_GET_NAMEA        (WM_CAP_START+  12)
  118. #define WM_CAP_DRIVER_GET_VERSIONA     (WM_CAP_START+  13)
  119. #define WM_CAP_DRIVER_GET_NAMEW        (WM_CAP_UNICODE_START+  12)
  120. #define WM_CAP_DRIVER_GET_VERSIONW     (WM_CAP_UNICODE_START+  13)
  121. #ifdef UNICODE
  122. #define WM_CAP_DRIVER_GET_NAME          WM_CAP_DRIVER_GET_NAMEW
  123. #define WM_CAP_DRIVER_GET_VERSION       WM_CAP_DRIVER_GET_VERSIONW
  124. #else
  125. #define WM_CAP_DRIVER_GET_NAME          WM_CAP_DRIVER_GET_NAMEA
  126. #define WM_CAP_DRIVER_GET_VERSION       WM_CAP_DRIVER_GET_VERSIONA
  127. #endif
  128. #else
  129. #define WM_CAP_DRIVER_GET_NAME          (WM_CAP_START+  12)
  130. #define WM_CAP_DRIVER_GET_VERSION       (WM_CAP_START+  13)
  131. #endif
  132.  
  133. #define WM_CAP_DRIVER_GET_CAPS          (WM_CAP_START+  14)
  134.  
  135. #ifdef _WIN32
  136. #define WM_CAP_FILE_SET_CAPTURE_FILEA  (WM_CAP_START+  20)
  137. #define WM_CAP_FILE_GET_CAPTURE_FILEA  (WM_CAP_START+  21)
  138. #define WM_CAP_FILE_SAVEASA            (WM_CAP_START+  23)
  139. #define WM_CAP_FILE_SAVEDIBA           (WM_CAP_START+  25)
  140. #define WM_CAP_FILE_SET_CAPTURE_FILEW  (WM_CAP_UNICODE_START+  20)
  141. #define WM_CAP_FILE_GET_CAPTURE_FILEW  (WM_CAP_UNICODE_START+  21)
  142. #define WM_CAP_FILE_SAVEASW            (WM_CAP_UNICODE_START+  23)
  143. #define WM_CAP_FILE_SAVEDIBW           (WM_CAP_UNICODE_START+  25)
  144. #ifdef UNICODE
  145. #define WM_CAP_FILE_SET_CAPTURE_FILE    WM_CAP_FILE_SET_CAPTURE_FILEW
  146. #define WM_CAP_FILE_GET_CAPTURE_FILE    WM_CAP_FILE_GET_CAPTURE_FILEW
  147. #define WM_CAP_FILE_SAVEAS              WM_CAP_FILE_SAVEASW
  148. #define WM_CAP_FILE_SAVEDIB             WM_CAP_FILE_SAVEDIBW
  149. #else
  150. #define WM_CAP_FILE_SET_CAPTURE_FILE    WM_CAP_FILE_SET_CAPTURE_FILEA
  151. #define WM_CAP_FILE_GET_CAPTURE_FILE    WM_CAP_FILE_GET_CAPTURE_FILEA
  152. #define WM_CAP_FILE_SAVEAS              WM_CAP_FILE_SAVEASA
  153. #define WM_CAP_FILE_SAVEDIB             WM_CAP_FILE_SAVEDIBA
  154. #endif
  155. #else
  156. #define WM_CAP_FILE_SET_CAPTURE_FILE    (WM_CAP_START+  20)
  157. #define WM_CAP_FILE_GET_CAPTURE_FILE    (WM_CAP_START+  21)
  158. #define WM_CAP_FILE_SAVEAS              (WM_CAP_START+  23)
  159. #define WM_CAP_FILE_SAVEDIB             (WM_CAP_START+  25)
  160. #endif
  161.  
  162. // out of order to save on ifdefs
  163. #define WM_CAP_FILE_ALLOCATE            (WM_CAP_START+  22)
  164. #define WM_CAP_FILE_SET_INFOCHUNK       (WM_CAP_START+  24)
  165.  
  166. #define WM_CAP_EDIT_COPY                (WM_CAP_START+  30)
  167.  
  168. #define WM_CAP_SET_AUDIOFORMAT          (WM_CAP_START+  35)
  169. #define WM_CAP_GET_AUDIOFORMAT          (WM_CAP_START+  36)
  170.  
  171. #define WM_CAP_DLG_VIDEOFORMAT          (WM_CAP_START+  41)
  172. #define WM_CAP_DLG_VIDEOSOURCE          (WM_CAP_START+  42)
  173. #define WM_CAP_DLG_VIDEODISPLAY         (WM_CAP_START+  43)
  174. #define WM_CAP_GET_VIDEOFORMAT          (WM_CAP_START+  44)
  175. #define WM_CAP_SET_VIDEOFORMAT          (WM_CAP_START+  45)
  176. #define WM_CAP_DLG_VIDEOCOMPRESSION     (WM_CAP_START+  46)
  177.  
  178. #define WM_CAP_SET_PREVIEW              (WM_CAP_START+  50)
  179. #define WM_CAP_SET_OVERLAY              (WM_CAP_START+  51)
  180. #define WM_CAP_SET_PREVIEWRATE          (WM_CAP_START+  52)
  181. #define WM_CAP_SET_SCALE                (WM_CAP_START+  53)
  182. #define WM_CAP_GET_STATUS               (WM_CAP_START+  54)
  183. #define WM_CAP_SET_SCROLL               (WM_CAP_START+  55)
  184.  
  185. #define WM_CAP_GRAB_FRAME               (WM_CAP_START+  60)
  186. #define WM_CAP_GRAB_FRAME_NOSTOP        (WM_CAP_START+  61)
  187.  
  188. #define WM_CAP_SEQUENCE                 (WM_CAP_START+  62)
  189. #define WM_CAP_SEQUENCE_NOFILE          (WM_CAP_START+  63)
  190. #define WM_CAP_SET_SEQUENCE_SETUP       (WM_CAP_START+  64)
  191. #define WM_CAP_GET_SEQUENCE_SETUP       (WM_CAP_START+  65)
  192.  
  193. #ifdef _WIN32
  194. #define WM_CAP_SET_MCI_DEVICEA         (WM_CAP_START+  66)
  195. #define WM_CAP_GET_MCI_DEVICEA         (WM_CAP_START+  67)
  196. #define WM_CAP_SET_MCI_DEVICEW         (WM_CAP_UNICODE_START+  66)
  197. #define WM_CAP_GET_MCI_DEVICEW         (WM_CAP_UNICODE_START+  67)
  198. #ifdef UNICODE
  199. #define WM_CAP_SET_MCI_DEVICE           WM_CAP_SET_MCI_DEVICEW
  200. #define WM_CAP_GET_MCI_DEVICE           WM_CAP_GET_MCI_DEVICEW
  201. #else
  202. #define WM_CAP_SET_MCI_DEVICE           WM_CAP_SET_MCI_DEVICEA
  203. #define WM_CAP_GET_MCI_DEVICE           WM_CAP_GET_MCI_DEVICEA
  204. #endif
  205. #else
  206. #define WM_CAP_SET_MCI_DEVICE           (WM_CAP_START+  66)
  207. #define WM_CAP_GET_MCI_DEVICE           (WM_CAP_START+  67)
  208. #endif
  209.  
  210.  
  211.  
  212. #define WM_CAP_STOP                     (WM_CAP_START+  68)
  213. #define WM_CAP_ABORT                    (WM_CAP_START+  69)
  214.  
  215. #define WM_CAP_SINGLE_FRAME_OPEN        (WM_CAP_START+  70)
  216. #define WM_CAP_SINGLE_FRAME_CLOSE       (WM_CAP_START+  71)
  217. #define WM_CAP_SINGLE_FRAME             (WM_CAP_START+  72)
  218.  
  219. #ifdef _WIN32
  220. #define WM_CAP_PAL_OPENA               (WM_CAP_START+  80)
  221. #define WM_CAP_PAL_SAVEA               (WM_CAP_START+  81)
  222. #define WM_CAP_PAL_OPENW               (WM_CAP_UNICODE_START+  80)
  223. #define WM_CAP_PAL_SAVEW               (WM_CAP_UNICODE_START+  81)
  224. #ifdef UNICODE
  225. #define WM_CAP_PAL_OPEN                 WM_CAP_PAL_OPENW
  226. #define WM_CAP_PAL_SAVE                 WM_CAP_PAL_SAVEW
  227. #else
  228. #define WM_CAP_PAL_OPEN                 WM_CAP_PAL_OPENA
  229. #define WM_CAP_PAL_SAVE                 WM_CAP_PAL_SAVEA
  230. #endif
  231. #else
  232. #define WM_CAP_PAL_OPEN                 (WM_CAP_START+  80)
  233. #define WM_CAP_PAL_SAVE                 (WM_CAP_START+  81)
  234. #endif
  235.  
  236. #define WM_CAP_PAL_PASTE                (WM_CAP_START+  82)
  237. #define WM_CAP_PAL_AUTOCREATE           (WM_CAP_START+  83)
  238. #define WM_CAP_PAL_MANUALCREATE         (WM_CAP_START+  84)
  239.  
  240. // Following added post VFW 1.1
  241. #define WM_CAP_SET_CALLBACK_CAPCONTROL  (WM_CAP_START+  85)
  242.  
  243.  
  244. // Defines end of the message range
  245. #ifdef _WIN32
  246. #define WM_CAP_UNICODE_END              WM_CAP_PAL_SAVEW
  247. #define WM_CAP_END                      WM_CAP_UNICODE_END
  248. #else
  249. #define WM_CAP_END                      WM_CAP_SET_CALLBACK_CAPCONTROL
  250. #endif
  251.  
  252. // ------------------------------------------------------------------
  253. //  Message crackers for above
  254. // ------------------------------------------------------------------
  255.  
  256. // message wrapper macros are defined for the default messages only. Apps
  257. // that wish to mix Ansi and UNICODE message sending will have to
  258. // reference the _A and _W messages directly
  259.  
  260. #define capSetCallbackOnError(hwnd, fpProc)        ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_ERROR, 0, (LPARAM)(LPVOID)(fpProc)))
  261. #define capSetCallbackOnStatus(hwnd, fpProc)       ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_STATUS, 0, (LPARAM)(LPVOID)(fpProc)))
  262. #define capSetCallbackOnYield(hwnd, fpProc)        ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_YIELD, 0, (LPARAM)(LPVOID)(fpProc)))
  263. #define capSetCallbackOnFrame(hwnd, fpProc)        ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_FRAME, 0, (LPARAM)(LPVOID)(fpProc)))
  264. #define capSetCallbackOnVideoStream(hwnd, fpProc)  ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, (LPARAM)(LPVOID)(fpProc)))
  265. #define capSetCallbackOnWaveStream(hwnd, fpProc)   ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_WAVESTREAM, 0, (LPARAM)(LPVOID)(fpProc)))
  266. #define capSetCallbackOnCapControl(hwnd, fpProc)   ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_CAPCONTROL, 0, (LPARAM)(LPVOID)(fpProc)))
  267.  
  268. #define capSetUserData(hwnd, lUser)        ((BOOL)AVICapSM(hwnd, WM_CAP_SET_USER_DATA, 0, (LPARAM)lUser))
  269. #define capGetUserData(hwnd)               (AVICapSM(hwnd, WM_CAP_GET_USER_DATA, 0, 0))
  270.  
  271. #define capDriverConnect(hwnd, i)                  ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_CONNECT, (WPARAM)(i), 0L))
  272. #define capDriverDisconnect(hwnd)                  ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_DISCONNECT, (WPARAM)0, 0L))
  273. #define capDriverGetName(hwnd, szName, wSize)      ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_GET_NAME, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPTSTR)(szName)))
  274. #define capDriverGetVersion(hwnd, szVer, wSize)    ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_GET_VERSION, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPTSTR)(szVer)))
  275. #define capDriverGetCaps(hwnd, s, wSize)           ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_GET_CAPS, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPCAPDRIVERCAPS)(s)))
  276.  
  277. #define capFileSetCaptureFile(hwnd, szName)        ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_SET_CAPTURE_FILE, 0, (LPARAM)(LPVOID)(LPTSTR)(szName)))
  278. #define capFileGetCaptureFile(hwnd, szName, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_GET_CAPTURE_FILE, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPTSTR)(szName)))
  279. #define capFileAlloc(hwnd, dwSize)                 ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_ALLOCATE, 0, (LPARAM)(DWORD)(dwSize)))
  280. #define capFileSaveAs(hwnd, szName)                ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_SAVEAS, 0, (LPARAM)(LPVOID)(LPTSTR)(szName)))
  281. #define capFileSetInfoChunk(hwnd, lpInfoChunk)     ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_SET_INFOCHUNK, (WPARAM)0, (LPARAM)(LPCAPINFOCHUNK)(lpInfoChunk)))
  282. #define capFileSaveDIB(hwnd, szName)               ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_SAVEDIB, 0, (LPARAM)(LPVOID)(LPTSTR)(szName)))
  283.  
  284. #define capEditCopy(hwnd)                          ((BOOL)AVICapSM(hwnd, WM_CAP_EDIT_COPY, 0, 0L))
  285.  
  286. #define capSetAudioFormat(hwnd, s, wSize)          ((BOOL)AVICapSM(hwnd, WM_CAP_SET_AUDIOFORMAT, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPWAVEFORMATEX)(s)))
  287. #define capGetAudioFormat(hwnd, s, wSize)          ((DWORD)AVICapSM(hwnd, WM_CAP_GET_AUDIOFORMAT, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPWAVEFORMATEX)(s)))
  288. #define capGetAudioFormatSize(hwnd)                ((DWORD)AVICapSM(hwnd, WM_CAP_GET_AUDIOFORMAT, (WPARAM)0, (LPARAM)0L))
  289.  
  290. #define capDlgVideoFormat(hwnd)                    ((BOOL)AVICapSM(hwnd, WM_CAP_DLG_VIDEOFORMAT, 0, 0L))
  291. #define capDlgVideoSource(hwnd)                    ((BOOL)AVICapSM(hwnd, WM_CAP_DLG_VIDEOSOURCE, 0, 0L))
  292. #define capDlgVideoDisplay(hwnd)                   ((BOOL)AVICapSM(hwnd, WM_CAP_DLG_VIDEODISPLAY, 0, 0L))
  293. #define capDlgVideoCompression(hwnd)               ((BOOL)AVICapSM(hwnd, WM_CAP_DLG_VIDEOCOMPRESSION, 0, 0L))
  294.  
  295. #define capGetVideoFormat(hwnd, s, wSize)          ((DWORD)AVICapSM(hwnd, WM_CAP_GET_VIDEOFORMAT, (WPARAM)(wSize), (LPARAM)(LPVOID)(s)))
  296. #define capGetVideoFormatSize(hwnd)            ((DWORD)AVICapSM(hwnd, WM_CAP_GET_VIDEOFORMAT, 0, 0L))
  297. #define capSetVideoFormat(hwnd, s, wSize)          ((BOOL)AVICapSM(hwnd, WM_CAP_SET_VIDEOFORMAT, (WPARAM)(wSize), (LPARAM)(LPVOID)(s)))
  298.  
  299. #define capPreview(hwnd, f)                        ((BOOL)AVICapSM(hwnd, WM_CAP_SET_PREVIEW, (WPARAM)(BOOL)(f), 0L))
  300. #define capPreviewRate(hwnd, wMS)                  ((BOOL)AVICapSM(hwnd, WM_CAP_SET_PREVIEWRATE, (WPARAM)(wMS), 0))
  301. #define capOverlay(hwnd, f)                        ((BOOL)AVICapSM(hwnd, WM_CAP_SET_OVERLAY, (WPARAM)(BOOL)(f), 0L))
  302. #define capPreviewScale(hwnd, f)                   ((BOOL)AVICapSM(hwnd, WM_CAP_SET_SCALE, (WPARAM)(BOOL)f, 0L))
  303. #define capGetStatus(hwnd, s, wSize)               ((BOOL)AVICapSM(hwnd, WM_CAP_GET_STATUS, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPCAPSTATUS)(s)))
  304. #define capSetScrollPos(hwnd, lpP)                 ((BOOL)AVICapSM(hwnd, WM_CAP_SET_SCROLL, (WPARAM)0, (LPARAM)(LPPOINT)(lpP)))
  305.  
  306. #define capGrabFrame(hwnd)                         ((BOOL)AVICapSM(hwnd, WM_CAP_GRAB_FRAME, (WPARAM)0, (LPARAM)0L))
  307. #define capGrabFrameNoStop(hwnd)                   ((BOOL)AVICapSM(hwnd, WM_CAP_GRAB_FRAME_NOSTOP, (WPARAM)0, (LPARAM)0L))
  308.  
  309. #define capCaptureSequence(hwnd)                   ((BOOL)AVICapSM(hwnd, WM_CAP_SEQUENCE, (WPARAM)0, (LPARAM)0L))
  310. #define capCaptureSequenceNoFile(hwnd)             ((BOOL)AVICapSM(hwnd, WM_CAP_SEQUENCE_NOFILE, (WPARAM)0, (LPARAM)0L))
  311. #define capCaptureStop(hwnd)                       ((BOOL)AVICapSM(hwnd, WM_CAP_STOP, (WPARAM)0, (LPARAM)0L))
  312. #define capCaptureAbort(hwnd)                      ((BOOL)AVICapSM(hwnd, WM_CAP_ABORT, (WPARAM)0, (LPARAM)0L))
  313.  
  314. #define capCaptureSingleFrameOpen(hwnd)            ((BOOL)AVICapSM(hwnd, WM_CAP_SINGLE_FRAME_OPEN, (WPARAM)0, (LPARAM)0L))
  315. #define capCaptureSingleFrameClose(hwnd)           ((BOOL)AVICapSM(hwnd, WM_CAP_SINGLE_FRAME_CLOSE, (WPARAM)0, (LPARAM)0L))
  316. #define capCaptureSingleFrame(hwnd)                ((BOOL)AVICapSM(hwnd, WM_CAP_SINGLE_FRAME, (WPARAM)0, (LPARAM)0L))
  317.  
  318. #define capCaptureGetSetup(hwnd, s, wSize)         ((BOOL)AVICapSM(hwnd, WM_CAP_GET_SEQUENCE_SETUP, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPCAPTUREPARMS)(s)))
  319. #define capCaptureSetSetup(hwnd, s, wSize)         ((BOOL)AVICapSM(hwnd, WM_CAP_SET_SEQUENCE_SETUP, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPCAPTUREPARMS)(s)))
  320.  
  321. #define capSetMCIDeviceName(hwnd, szName)          ((BOOL)AVICapSM(hwnd, WM_CAP_SET_MCI_DEVICE, 0, (LPARAM)(LPVOID)(LPTSTR)(szName)))
  322. #define capGetMCIDeviceName(hwnd, szName, wSize)   ((BOOL)AVICapSM(hwnd, WM_CAP_GET_MCI_DEVICE, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPTSTR)(szName)))
  323.  
  324. #define capPaletteOpen(hwnd, szName)               ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_OPEN, 0, (LPARAM)(LPVOID)(LPTSTR)(szName)))
  325. #define capPaletteSave(hwnd, szName)               ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_SAVE, 0, (LPARAM)(LPVOID)(LPTSTR)(szName)))
  326. #define capPalettePaste(hwnd)                      ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_PASTE, (WPARAM) 0, (LPARAM)0L))
  327. #define capPaletteAuto(hwnd, iFrames, iColors)     ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_AUTOCREATE, (WPARAM)(iFrames), (LPARAM)(DWORD)(iColors)))
  328. #define capPaletteManual(hwnd, fGrab, iColors)     ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_MANUALCREATE, (WPARAM)(fGrab), (LPARAM)(DWORD)(iColors)))
  329.  
  330. // ------------------------------------------------------------------
  331. //  Structures
  332. // ------------------------------------------------------------------
  333.  
  334. typedef struct tagCapDriverCaps {
  335.     UINT        wDeviceIndex;               // Driver index in system.ini
  336.     BOOL        fHasOverlay;                // Can device overlay?
  337.     BOOL        fHasDlgVideoSource;         // Has Video source dlg?
  338.     BOOL        fHasDlgVideoFormat;         // Has Format dlg?
  339.     BOOL        fHasDlgVideoDisplay;        // Has External out dlg?
  340.     BOOL        fCaptureInitialized;        // Driver ready to capture?
  341.     BOOL        fDriverSuppliesPalettes;    // Can driver make palettes?
  342.  
  343. // following always NULL on Win32.
  344.     HANDLE      hVideoIn;                   // Driver In channel
  345.     HANDLE      hVideoOut;                  // Driver Out channel
  346.     HANDLE      hVideoExtIn;                // Driver Ext In channel
  347.     HANDLE      hVideoExtOut;               // Driver Ext Out channel
  348. } CAPDRIVERCAPS, *PCAPDRIVERCAPS, FAR *LPCAPDRIVERCAPS;
  349.  
  350. typedef struct tagCapStatus {
  351.     UINT        uiImageWidth;               // Width of the image
  352.     UINT        uiImageHeight;              // Height of the image
  353.     BOOL        fLiveWindow;                // Now Previewing video?
  354.     BOOL        fOverlayWindow;             // Now Overlaying video?
  355.     BOOL        fScale;                     // Scale image to client?
  356.     POINT       ptScroll;                   // Scroll position
  357.     BOOL        fUsingDefaultPalette;       // Using default driver palette?
  358.     BOOL        fAudioHardware;             // Audio hardware present?
  359.     BOOL        fCapFileExists;             // Does capture file exist?
  360.     DWORD       dwCurrentVideoFrame;        // # of video frames cap'td
  361.     DWORD       dwCurrentVideoFramesDropped;// # of video frames dropped
  362.     DWORD       dwCurrentWaveSamples;       // # of wave samples cap'td
  363.     DWORD       dwCurrentTimeElapsedMS;     // Elapsed capture duration
  364.     HPALETTE    hPalCurrent;                // Current palette in use
  365.     BOOL        fCapturingNow;              // Capture in progress?
  366.     DWORD       dwReturn;                   // Error value after any operation
  367.     UINT        wNumVideoAllocated;         // Actual number of video buffers
  368.     UINT        wNumAudioAllocated;         // Actual number of audio buffers
  369. } CAPSTATUS, *PCAPSTATUS, FAR *LPCAPSTATUS;
  370.  
  371.                         // Default values in parenthesis
  372. typedef struct tagCaptureParms {
  373.     DWORD       dwRequestMicroSecPerFrame;  // Requested capture rate
  374.     BOOL        fMakeUserHitOKToCapture;    // Show "Hit OK to cap" dlg?
  375.     UINT        wPercentDropForError;       // Give error msg if > (10%)
  376.     BOOL        fYield;                     // Capture via background task?
  377.     DWORD       dwIndexSize;                // Max index size in frames (32K)
  378.     UINT        wChunkGranularity;          // Junk chunk granularity (2K)
  379.     BOOL        fUsingDOSMemory;            // Use DOS buffers?
  380.     UINT        wNumVideoRequested;         // # video buffers, If 0, autocalc
  381.     BOOL        fCaptureAudio;              // Capture audio?
  382.     UINT        wNumAudioRequested;         // # audio buffers, If 0, autocalc
  383.     UINT        vKeyAbort;                  // Virtual key causing abort
  384.     BOOL        fAbortLeftMouse;            // Abort on left mouse?
  385.     BOOL        fAbortRightMouse;           // Abort on right mouse?
  386.     BOOL        fLimitEnabled;              // Use wTimeLimit?
  387.     UINT        wTimeLimit;                 // Seconds to capture
  388.     BOOL        fMCIControl;                // Use MCI video source?
  389.     BOOL        fStepMCIDevice;             // Step MCI device?
  390.     DWORD       dwMCIStartTime;             // Time to start in MS
  391.     DWORD       dwMCIStopTime;              // Time to stop in MS
  392.     BOOL        fStepCaptureAt2x;           // Perform spatial averaging 2x
  393.     UINT        wStepCaptureAverageFrames;  // Temporal average n Frames
  394.     DWORD       dwAudioBufferSize;          // Size of audio bufs (0 = default)
  395.     BOOL        fDisableWriteCache;         // Attempt to disable write cache
  396. } CAPTUREPARMS, *PCAPTUREPARMS, FAR *LPCAPTUREPARMS;
  397.  
  398. typedef struct tagCapInfoChunk {
  399.     FOURCC      fccInfoID;                  // Chunk ID, "ICOP" for copyright
  400.     LPVOID      lpData;                     // pointer to data
  401.     LONG        cbData;                     // size of lpData
  402. } CAPINFOCHUNK, *PCAPINFOCHUNK, FAR *LPCAPINFOCHUNK;
  403.  
  404.  
  405. // ------------------------------------------------------------------
  406. //  Callback Definitions
  407. // ------------------------------------------------------------------
  408.  
  409. typedef LRESULT (CALLBACK* CAPYIELDCALLBACK)  (HWND hWnd);
  410. #ifdef _WIN32
  411. typedef LRESULT (CALLBACK* CAPSTATUSCALLBACKW) (HWND hWnd, int nID, LPCWSTR lpsz);
  412. typedef LRESULT (CALLBACK* CAPERRORCALLBACKW)  (HWND hWnd, int nID, LPCWSTR lpsz);
  413. typedef LRESULT (CALLBACK* CAPSTATUSCALLBACKA) (HWND hWnd, int nID, LPCSTR lpsz);
  414. typedef LRESULT (CALLBACK* CAPERRORCALLBACKA)  (HWND hWnd, int nID, LPCSTR lpsz);
  415. #ifdef UNICODE
  416. #define CAPSTATUSCALLBACK  CAPSTATUSCALLBACKW
  417. #define CAPERRORCALLBACK   CAPERRORCALLBACKW
  418. #else
  419. #define CAPSTATUSCALLBACK  CAPSTATUSCALLBACKA
  420. #define CAPERRORCALLBACK   CAPERRORCALLBACKA
  421. #endif
  422. #else
  423. typedef LRESULT (CALLBACK* CAPSTATUSCALLBACK) (HWND hWnd, int nID, LPCSTR lpsz);
  424. typedef LRESULT (CALLBACK* CAPERRORCALLBACK)  (HWND hWnd, int nID, LPCSTR lpsz);
  425. #endif
  426. typedef LRESULT (CALLBACK* CAPVIDEOCALLBACK)  (HWND hWnd, LPVIDEOHDR lpVHdr);
  427. typedef LRESULT (CALLBACK* CAPWAVECALLBACK)   (HWND hWnd, LPWAVEHDR lpWHdr);
  428. typedef LRESULT (CALLBACK* CAPCONTROLCALLBACK)(HWND hWnd, int nState);
  429.  
  430. // ------------------------------------------------------------------
  431. //  CapControlCallback states
  432. // ------------------------------------------------------------------
  433. #define CONTROLCALLBACK_PREROLL         1 /* Waiting to start capture */
  434. #define CONTROLCALLBACK_CAPTURING       2 /* Now capturing */
  435.  
  436. // ------------------------------------------------------------------
  437. //  The only exported functions from AVICAP.DLL
  438. // ------------------------------------------------------------------
  439.  
  440. #ifdef _WIN32
  441. HWND VFWAPI capCreateCaptureWindowA (
  442.     LPCSTR lpszWindowName,
  443.     DWORD dwStyle,
  444.     int x, int y, int nWidth, int nHeight,
  445.     HWND hwndParent, int nID);
  446.  
  447. BOOL VFWAPI capGetDriverDescriptionA (UINT wDriverIndex,
  448.     LPSTR lpszName, int cbName,
  449.     LPSTR lpszVer, int cbVer);
  450.  
  451. HWND VFWAPI capCreateCaptureWindowW (
  452.     LPCWSTR lpszWindowName,
  453.     DWORD dwStyle,
  454.     int x, int y, int nWidth, int nHeight,
  455.     HWND hwndParent, int nID);
  456.  
  457. BOOL VFWAPI capGetDriverDescriptionW (UINT wDriverIndex,
  458.     LPWSTR lpszName, int cbName,
  459.     LPWSTR lpszVer, int cbVer);
  460. #ifdef UNICODE
  461. #define capCreateCaptureWindow  capCreateCaptureWindowW
  462. #define capGetDriverDescription capGetDriverDescriptionW
  463. #else
  464. #define capCreateCaptureWindow  capCreateCaptureWindowA
  465. #define capGetDriverDescription capGetDriverDescriptionA
  466. #endif
  467. #else
  468. HWND VFWAPI capCreateCaptureWindow (
  469.     LPCSTR lpszWindowName,
  470.     DWORD dwStyle,
  471.     int x, int y, int nWidth, int nHeight,
  472.     HWND hwndParent, int nID);
  473.  
  474. BOOL VFWAPI capGetDriverDescription (UINT wDriverIndex,
  475.     LPSTR lpszName, int cbName,
  476.     LPSTR lpszVer, int cbVer);
  477. #endif
  478.  
  479. #endif  /* RC_INVOKED */
  480.  
  481. // ------------------------------------------------------------------
  482. // New Information chunk IDs
  483. // ------------------------------------------------------------------
  484. #define infotypeDIGITIZATION_TIME  mmioFOURCC ('I','D','I','T')
  485. #define infotypeSMPTE_TIME         mmioFOURCC ('I','S','M','P')
  486.  
  487. // ------------------------------------------------------------------
  488. // String IDs from status and error callbacks
  489. // ------------------------------------------------------------------
  490.  
  491. #define IDS_CAP_BEGIN               300  /* "Capture Start" */
  492. #define IDS_CAP_END                 301  /* "Capture End" */
  493.  
  494. #define IDS_CAP_INFO                401  /* "%s" */
  495. #define IDS_CAP_OUTOFMEM            402  /* "Out of memory" */
  496. #define IDS_CAP_FILEEXISTS          403  /* "File '%s' exists -- overwrite it?" */
  497. #define IDS_CAP_ERRORPALOPEN        404  /* "Error opening palette '%s'" */
  498. #define IDS_CAP_ERRORPALSAVE        405  /* "Error saving palette '%s'" */
  499. #define IDS_CAP_ERRORDIBSAVE        406  /* "Error saving frame '%s'" */
  500. #define IDS_CAP_DEFAVIEXT           407  /* "avi" */
  501. #define IDS_CAP_DEFPALEXT           408  /* "pal" */
  502. #define IDS_CAP_CANTOPEN            409  /* "Cannot open '%s'" */
  503. #define IDS_CAP_SEQ_MSGSTART        410  /* "Select OK to start capture\nof video sequence\nto %s." */
  504. #define IDS_CAP_SEQ_MSGSTOP         411  /* "Hit ESCAPE or click to end capture" */
  505.  
  506. #define IDS_CAP_VIDEDITERR          412  /* "An error occurred while trying to run VidEdit." */
  507. #define IDS_CAP_READONLYFILE        413  /* "The file '%s' is a read-only file." */
  508. #define IDS_CAP_WRITEERROR          414  /* "Unable to write to file '%s'.\nDisk may be full." */
  509. #define IDS_CAP_NODISKSPACE         415  /* "There is no space to create a capture file on the specified device." */
  510. #define IDS_CAP_SETFILESIZE         416  /* "Set File Size" */
  511. #define IDS_CAP_SAVEASPERCENT       417  /* "SaveAs: %2ld%%  Hit Escape to abort." */
  512.  
  513. #define IDS_CAP_DRIVER_ERROR        418  /* Driver specific error message */
  514.  
  515. #define IDS_CAP_WAVE_OPEN_ERROR     419  /* "Error: Cannot open the wave input device.\nCheck sample size, frequency, and channels." */
  516. #define IDS_CAP_WAVE_ALLOC_ERROR    420  /* "Error: Out of memory for wave buffers." */
  517. #define IDS_CAP_WAVE_PREPARE_ERROR  421  /* "Error: Cannot prepare wave buffers." */
  518. #define IDS_CAP_WAVE_ADD_ERROR      422  /* "Error: Cannot add wave buffers." */
  519. #define IDS_CAP_WAVE_SIZE_ERROR     423  /* "Error: Bad wave size." */
  520.  
  521. #define IDS_CAP_VIDEO_OPEN_ERROR    424  /* "Error: Cannot open the video input device." */
  522. #define IDS_CAP_VIDEO_ALLOC_ERROR   425  /* "Error: Out of memory for video buffers." */
  523. #define IDS_CAP_VIDEO_PREPARE_ERROR 426  /* "Error: Cannot prepare video buffers." */
  524. #define IDS_CAP_VIDEO_ADD_ERROR     427  /* "Error: Cannot add video buffers." */
  525. #define IDS_CAP_VIDEO_SIZE_ERROR    428  /* "Error: Bad video size." */
  526.  
  527. #define IDS_CAP_FILE_OPEN_ERROR     429  /* "Error: Cannot open capture file." */
  528. #define IDS_CAP_FILE_WRITE_ERROR    430  /* "Error: Cannot write to capture file.  Disk may be full." */
  529. #define IDS_CAP_RECORDING_ERROR     431  /* "Error: Cannot write to capture file.  Data rate too high or disk full." */
  530. #define IDS_CAP_RECORDING_ERROR2    432  /* "Error while recording" */
  531. #define IDS_CAP_AVI_INIT_ERROR      433  /* "Error: Unable to initialize for capture." */
  532. #define IDS_CAP_NO_FRAME_CAP_ERROR  434  /* "Warning: No frames captured.\nConfirm that vertical sync interrupts\nare configured and enabled." */
  533. #define IDS_CAP_NO_PALETTE_WARN     435  /* "Warning: Using default palette." */
  534. #define IDS_CAP_MCI_CONTROL_ERROR   436  /* "Error: Unable to access MCI device." */
  535. #define IDS_CAP_MCI_CANT_STEP_ERROR 437  /* "Error: Unable to step MCI device." */
  536. #define IDS_CAP_NO_AUDIO_CAP_ERROR  438  /* "Error: No audio data captured.\nCheck audio card settings." */
  537. #define IDS_CAP_AVI_DRAWDIB_ERROR   439  /* "Error: Unable to draw this data format." */
  538. #define IDS_CAP_COMPRESSOR_ERROR    440  /* "Error: Unable to initialize compressor." */
  539. #define IDS_CAP_AUDIO_DROP_ERROR    441  /* "Error: Audio data was lost during capture, reduce capture rate." */
  540.  
  541. /* status string IDs */
  542. #define IDS_CAP_STAT_LIVE_MODE      500  /* "Live window" */
  543. #define IDS_CAP_STAT_OVERLAY_MODE   501  /* "Overlay window" */
  544. #define IDS_CAP_STAT_CAP_INIT       502  /* "Setting up for capture - Please wait" */
  545. #define IDS_CAP_STAT_CAP_FINI       503  /* "Finished capture, now writing frame %ld" */
  546. #define IDS_CAP_STAT_PALETTE_BUILD  504  /* "Building palette map" */
  547. #define IDS_CAP_STAT_OPTPAL_BUILD   505  /* "Computing optimal palette" */
  548. #define IDS_CAP_STAT_I_FRAMES       506  /* "%d frames" */
  549. #define IDS_CAP_STAT_L_FRAMES       507  /* "%ld frames" */
  550. #define IDS_CAP_STAT_CAP_L_FRAMES   508  /* "Captured %ld frames" */
  551. #define IDS_CAP_STAT_CAP_AUDIO      509  /* "Capturing audio" */
  552. #define IDS_CAP_STAT_VIDEOCURRENT   510  /* "Captured %ld frames (%ld dropped) %d.%03d sec." */
  553. #define IDS_CAP_STAT_VIDEOAUDIO     511  /* "Captured %d.%03d sec.  %ld frames (%ld dropped) (%d.%03d fps).  %ld audio bytes (%d,%03d sps)" */
  554. #define IDS_CAP_STAT_VIDEOONLY      512  /* "Captured %d.%03d sec.  %ld frames (%ld dropped) (%d.%03d fps)" */
  555. #define IDS_CAP_STAT_FRAMESDROPPED  513  /* "Dropped %ld of %ld frames (%d.%02d%%) during capture." */
  556.  
  557. #ifdef __BORLANDC__
  558. #pragma option -b.
  559.   #include <poppack.h>
  560. #pragma option -b
  561. #endif
  562.  
  563. #ifdef __cplusplus
  564. }                       /* End of extern "C" { */
  565. #endif    /* __cplusplus */
  566.  
  567. #pragma option -b.
  568. #endif /* INC_AVICAP */
  569.  
  570.  
  571.