Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

785 lines
25 KiB

  1. /****************************************************************************
  2. *
  3. * AVIFILE.H
  4. *
  5. * routines for reading Standard AVI files
  6. *
  7. * Copyright (c) 1992 - 1995 Microsoft Corporation. All Rights Reserved.
  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. #if !defined( _AVIFILE_H_ )
  17. #define _AVIFILE_H_
  18. #ifdef __cplusplus
  19. extern "C" { /* Assume C declarations for C++ */
  20. #endif /* __cplusplus */
  21. // begin_vfw32
  22. /*
  23. * Ansi - Unicode thunking.
  24. *
  25. * Unicode or Ansi-only apps can call the avifile APIs.
  26. * any Win32 app who wants to use
  27. * any of the AVI COM interfaces must be UNICODE - the AVISTREAMINFO and
  28. * AVIFILEINFO structures used in the Info methods of these interfaces are
  29. * the unicode variants, and no thunking to or from ansi takes place
  30. * except in the AVIFILE api entrypoints.
  31. *
  32. * For Ansi/Unicode thunking: for each entrypoint or structure that
  33. * uses chars or strings, two versions are declared in the Win32 version,
  34. * ApiNameW and ApiNameA. The default name ApiName is #defined to one or
  35. * other of these depending on whether UNICODE is defined (during
  36. * compilation of the app that is including this header). The source will
  37. * contain ApiName and ApiNameA (with ApiName being the Win16 implementation,
  38. * and also #defined to ApiNameW, and ApiNameA being the thunk entrypoint).
  39. *
  40. */
  41. #ifndef mmioFOURCC
  42. #define mmioFOURCC( ch0, ch1, ch2, ch3 ) \
  43. ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) | \
  44. ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
  45. #endif
  46. #ifndef streamtypeVIDEO
  47. #define streamtypeVIDEO mmioFOURCC('v', 'i', 'd', 's')
  48. #define streamtypeAUDIO mmioFOURCC('a', 'u', 'd', 's')
  49. #define streamtypeMIDI mmioFOURCC('m', 'i', 'd', 's')
  50. #define streamtypeTEXT mmioFOURCC('t', 'x', 't', 's')
  51. #endif
  52. #ifndef AVIIF_KEYFRAME
  53. #define AVIIF_KEYFRAME 0x00000010L // this frame is a key frame.
  54. #endif
  55. // For GetFrame::SetFormat - use the best format for the display
  56. #define AVIGETFRAMEF_BESTDISPLAYFMT 1
  57. //
  58. // Structures used by AVIStreamInfo & AVIFileInfo.
  59. //
  60. // These are related to, but not identical to, the header chunks
  61. // in an AVI file.
  62. //
  63. /*
  64. *
  65. * --- AVISTREAMINFO ------------------------------------------------
  66. *
  67. * for Unicode/Ansi thunking we need to declare three versions of this!
  68. */
  69. // end_vfw32
  70. #ifdef _WIN32
  71. // begin_vfw32
  72. typedef struct _AVISTREAMINFOW {
  73. DWORD fccType;
  74. DWORD fccHandler;
  75. DWORD dwFlags; /* Contains AVITF_* flags */
  76. DWORD dwCaps;
  77. WORD wPriority;
  78. WORD wLanguage;
  79. DWORD dwScale;
  80. DWORD dwRate; /* dwRate / dwScale == samples/second */
  81. DWORD dwStart;
  82. DWORD dwLength; /* In units above... */
  83. DWORD dwInitialFrames;
  84. DWORD dwSuggestedBufferSize;
  85. DWORD dwQuality;
  86. DWORD dwSampleSize;
  87. RECT rcFrame;
  88. DWORD dwEditCount;
  89. DWORD dwFormatChangeCount;
  90. WCHAR szName[64];
  91. } AVISTREAMINFOW, FAR * LPAVISTREAMINFOW;
  92. typedef struct _AVISTREAMINFOA {
  93. DWORD fccType;
  94. DWORD fccHandler;
  95. DWORD dwFlags; /* Contains AVITF_* flags */
  96. DWORD dwCaps;
  97. WORD wPriority;
  98. WORD wLanguage;
  99. DWORD dwScale;
  100. DWORD dwRate; /* dwRate / dwScale == samples/second */
  101. DWORD dwStart;
  102. DWORD dwLength; /* In units above... */
  103. DWORD dwInitialFrames;
  104. DWORD dwSuggestedBufferSize;
  105. DWORD dwQuality;
  106. DWORD dwSampleSize;
  107. RECT rcFrame;
  108. DWORD dwEditCount;
  109. DWORD dwFormatChangeCount;
  110. char szName[64];
  111. } AVISTREAMINFOA, FAR * LPAVISTREAMINFOA;
  112. #ifdef UNICODE
  113. #define AVISTREAMINFO AVISTREAMINFOW
  114. #define LPAVISTREAMINFO LPAVISTREAMINFOW
  115. #else
  116. #define AVISTREAMINFO AVISTREAMINFOA
  117. #define LPAVISTREAMINFO LPAVISTREAMINFOA
  118. #endif
  119. // end_vfw32
  120. #else //win16 variant
  121. #define AVISTREAMINFOW AVISTREAMINFO
  122. typedef struct _AVISTREAMINFO {
  123. DWORD fccType;
  124. DWORD fccHandler;
  125. DWORD dwFlags; /* Contains AVITF_* flags */
  126. DWORD dwCaps;
  127. WORD wPriority;
  128. WORD wLanguage;
  129. DWORD dwScale;
  130. DWORD dwRate; /* dwRate / dwScale == samples/second */
  131. DWORD dwStart;
  132. DWORD dwLength; /* In units above... */
  133. DWORD dwInitialFrames;
  134. DWORD dwSuggestedBufferSize;
  135. DWORD dwQuality;
  136. DWORD dwSampleSize;
  137. RECT rcFrame;
  138. DWORD dwEditCount;
  139. DWORD dwFormatChangeCount;
  140. char szName[64];
  141. } AVISTREAMINFO, FAR * LPAVISTREAMINFO;
  142. #endif
  143. // begin_vfw32
  144. #define AVISTREAMINFO_DISABLED 0x00000001
  145. #define AVISTREAMINFO_FORMATCHANGES 0x00010000
  146. /*
  147. * --- AVIFILEINFO ----------------------------------------------------
  148. *
  149. */
  150. // end_vfw32
  151. #ifdef _WIN32
  152. // begin_vfw32
  153. typedef struct _AVIFILEINFOW {
  154. DWORD dwMaxBytesPerSec; // max. transfer rate
  155. DWORD dwFlags; // the ever-present flags
  156. DWORD dwCaps;
  157. DWORD dwStreams;
  158. DWORD dwSuggestedBufferSize;
  159. DWORD dwWidth;
  160. DWORD dwHeight;
  161. DWORD dwScale;
  162. DWORD dwRate; /* dwRate / dwScale == samples/second */
  163. DWORD dwLength;
  164. DWORD dwEditCount;
  165. WCHAR szFileType[64]; // descriptive string for file type?
  166. } AVIFILEINFOW, FAR * LPAVIFILEINFOW;
  167. typedef struct _AVIFILEINFOA {
  168. DWORD dwMaxBytesPerSec; // max. transfer rate
  169. DWORD dwFlags; // the ever-present flags
  170. DWORD dwCaps;
  171. DWORD dwStreams;
  172. DWORD dwSuggestedBufferSize;
  173. DWORD dwWidth;
  174. DWORD dwHeight;
  175. DWORD dwScale;
  176. DWORD dwRate; /* dwRate / dwScale == samples/second */
  177. DWORD dwLength;
  178. DWORD dwEditCount;
  179. char szFileType[64]; // descriptive string for file type?
  180. } AVIFILEINFOA, FAR * LPAVIFILEINFOA;
  181. #ifdef UNICODE
  182. #define AVIFILEINFO AVIFILEINFOW
  183. #define LPAVIFILEINFO LPAVIFILEINFOW
  184. #else
  185. #define AVIFILEINFO AVIFILEINFOA
  186. #define LPAVIFILEINFO LPAVIFILEINFOA
  187. #endif
  188. // end_vfw32
  189. #else // win16 variant
  190. #define AVIFILEINFOW AVIFILEINFO
  191. typedef struct _AVIFILEINFO {
  192. DWORD dwMaxBytesPerSec; // max. transfer rate
  193. DWORD dwFlags; // the ever-present flags
  194. DWORD dwCaps;
  195. DWORD dwStreams;
  196. DWORD dwSuggestedBufferSize;
  197. DWORD dwWidth;
  198. DWORD dwHeight;
  199. DWORD dwScale;
  200. DWORD dwRate; /* dwRate / dwScale == samples/second */
  201. DWORD dwLength;
  202. DWORD dwEditCount;
  203. char szFileType[64]; // descriptive string for file type?
  204. } AVIFILEINFO, FAR * LPAVIFILEINFO;
  205. #endif
  206. // begin_vfw32
  207. // Flags for dwFlags
  208. #define AVIFILEINFO_HASINDEX 0x00000010
  209. #define AVIFILEINFO_MUSTUSEINDEX 0x00000020
  210. #define AVIFILEINFO_ISINTERLEAVED 0x00000100
  211. #define AVIFILEINFO_WASCAPTUREFILE 0x00010000
  212. #define AVIFILEINFO_COPYRIGHTED 0x00020000
  213. // Flags for dwCaps
  214. #define AVIFILECAPS_CANREAD 0x00000001
  215. #define AVIFILECAPS_CANWRITE 0x00000002
  216. #define AVIFILECAPS_ALLKEYFRAMES 0x00000010
  217. #define AVIFILECAPS_NOCOMPRESSION 0x00000020
  218. typedef BOOL (FAR PASCAL * AVISAVECALLBACK)(int);
  219. /************************************************************************/
  220. /* Declaration for the AVICOMPRESSOPTIONS structure. Make sure it */
  221. /* matches the AutoDoc in avisave.c !!! */
  222. /************************************************************************/
  223. typedef struct {
  224. DWORD fccType; /* stream type, for consistency */
  225. DWORD fccHandler; /* compressor */
  226. DWORD dwKeyFrameEvery; /* keyframe rate */
  227. DWORD dwQuality; /* compress quality 0-10,000 */
  228. DWORD dwBytesPerSecond; /* bytes per second */
  229. DWORD dwFlags; /* flags... see below */
  230. LPVOID lpFormat; /* save format */
  231. DWORD cbFormat;
  232. LPVOID lpParms; /* compressor options */
  233. DWORD cbParms;
  234. DWORD dwInterleaveEvery; /* for non-video streams only */
  235. } AVICOMPRESSOPTIONS, FAR *LPAVICOMPRESSOPTIONS;
  236. //
  237. // Defines for the dwFlags field of the AVICOMPRESSOPTIONS struct
  238. // Each of these flags determines if the appropriate field in the structure
  239. // (dwInterleaveEvery, dwBytesPerSecond, and dwKeyFrameEvery) is payed
  240. // attention to. See the autodoc in avisave.c for details.
  241. //
  242. #define AVICOMPRESSF_INTERLEAVE 0x00000001 // interleave
  243. #define AVICOMPRESSF_DATARATE 0x00000002 // use a data rate
  244. #define AVICOMPRESSF_KEYFRAMES 0x00000004 // use keyframes
  245. #define AVICOMPRESSF_VALID 0x00000008 // has valid data?
  246. // end_vfw32
  247. #ifdef __cplusplus
  248. } /* End of extern "C" { */
  249. #endif /* __cplusplus */
  250. #include <vfw.h>
  251. #ifdef __cplusplus
  252. extern "C" { /* Assume C declarations for C++ */
  253. #endif /* __cplusplus */
  254. // begin2_vfw32
  255. //
  256. // functions
  257. //
  258. STDAPI_(void) AVIFileInit(void); // Call this first!
  259. STDAPI_(void) AVIFileExit(void);
  260. STDAPI_(ULONG) AVIFileAddRef (PAVIFILE pfile);
  261. STDAPI_(ULONG) AVIFileRelease (PAVIFILE pfile);
  262. #ifdef _WIN32
  263. STDAPI AVIFileOpenA (PAVIFILE FAR * ppfile, LPCSTR szFile,
  264. UINT uMode, LPCLSID lpHandler);
  265. STDAPI AVIFileOpenW (PAVIFILE FAR * ppfile, LPCWSTR szFile,
  266. UINT uMode, LPCLSID lpHandler);
  267. #ifdef UNICODE
  268. #define AVIFileOpen AVIFileOpenW
  269. #else
  270. #define AVIFileOpen AVIFileOpenA
  271. #endif
  272. #else // win16
  273. STDAPI AVIFileOpen (PAVIFILE FAR * ppfile, LPCSTR szFile,
  274. UINT uMode, LPCLSID lpHandler);
  275. #define AVIFileOpenW AVIFileOpen /* ;Internal */
  276. #endif
  277. #ifdef _WIN32
  278. STDAPI AVIFileInfoW (PAVIFILE pfile, LPAVIFILEINFOW pfi, LONG lSize);
  279. STDAPI AVIFileInfoA (PAVIFILE pfile, LPAVIFILEINFOA pfi, LONG lSize);
  280. #ifdef UNICODE
  281. #define AVIFileInfo AVIFileInfoW
  282. #else
  283. #define AVIFileInfo AVIFileInfoA
  284. #endif
  285. #else //win16 version
  286. STDAPI AVIFileInfo (PAVIFILE pfile, LPAVIFILEINFO pfi, LONG lSize);
  287. #define AVIFileInfoW AVIFileInfo /* ;Internal */
  288. #endif
  289. STDAPI AVIFileGetStream (PAVIFILE pfile, PAVISTREAM FAR * ppavi, DWORD fccType, LONG lParam);
  290. #ifdef _WIN32
  291. STDAPI AVIFileCreateStreamW (PAVIFILE pfile, PAVISTREAM FAR *ppavi, AVISTREAMINFOW FAR * psi);
  292. STDAPI AVIFileCreateStreamA (PAVIFILE pfile, PAVISTREAM FAR *ppavi, AVISTREAMINFOA FAR * psi);
  293. #ifdef UNICODE
  294. #define AVIFileCreateStream AVIFileCreateStreamW
  295. #else
  296. #define AVIFileCreateStream AVIFileCreateStreamA
  297. #endif
  298. #else //win16 version
  299. STDAPI AVIFileCreateStream(PAVIFILE pfile, PAVISTREAM FAR *ppavi, AVISTREAMINFO FAR * psi);
  300. #define AVIFileCreateStreamW AVIFileCreateStream /* ;Internal */
  301. #endif
  302. STDAPI AVIFileWriteData (PAVIFILE pfile,
  303. DWORD ckid,
  304. LPVOID lpData,
  305. LONG cbData);
  306. STDAPI AVIFileReadData (PAVIFILE pfile,
  307. DWORD ckid,
  308. LPVOID lpData,
  309. LONG FAR *lpcbData);
  310. STDAPI AVIFileEndRecord (PAVIFILE pfile);
  311. STDAPI_(ULONG) AVIStreamAddRef (PAVISTREAM pavi);
  312. STDAPI_(ULONG) AVIStreamRelease (PAVISTREAM pavi);
  313. // end2_vfw32
  314. #ifdef _WIN32
  315. // begin2_vfw32
  316. STDAPI AVIStreamInfoW (PAVISTREAM pavi, LPAVISTREAMINFOW psi, LONG lSize);
  317. STDAPI AVIStreamInfoA (PAVISTREAM pavi, LPAVISTREAMINFOA psi, LONG lSize);
  318. #ifdef UNICODE
  319. #define AVIStreamInfo AVIStreamInfoW
  320. #else
  321. #define AVIStreamInfo AVIStreamInfoA
  322. #endif
  323. // end2_vfw32
  324. #else // win16
  325. STDAPI AVIStreamInfo (PAVISTREAM pavi, LPAVISTREAMINFO psi, LONG lSize);
  326. #define AVIStreamInfoW AVIStreamInfo /* ;Internal */
  327. #endif
  328. // begin2_vfw32
  329. STDAPI_(LONG) AVIStreamFindSample(PAVISTREAM pavi, LONG lPos, LONG lFlags);
  330. STDAPI AVIStreamReadFormat (PAVISTREAM pavi, LONG lPos,LPVOID lpFormat,LONG FAR *lpcbFormat);
  331. STDAPI AVIStreamSetFormat (PAVISTREAM pavi, LONG lPos,LPVOID lpFormat,LONG cbFormat);
  332. STDAPI AVIStreamReadData (PAVISTREAM pavi, DWORD fcc, LPVOID lp, LONG FAR *lpcb);
  333. STDAPI AVIStreamWriteData (PAVISTREAM pavi, DWORD fcc, LPVOID lp, LONG cb);
  334. STDAPI AVIStreamRead (PAVISTREAM pavi,
  335. LONG lStart,
  336. LONG lSamples,
  337. LPVOID lpBuffer,
  338. LONG cbBuffer,
  339. LONG FAR * plBytes,
  340. LONG FAR * plSamples);
  341. #define AVISTREAMREAD_CONVENIENT (-1L)
  342. STDAPI AVIStreamWrite (PAVISTREAM pavi,
  343. LONG lStart, LONG lSamples,
  344. LPVOID lpBuffer, LONG cbBuffer, DWORD dwFlags,
  345. LONG FAR *plSampWritten,
  346. LONG FAR *plBytesWritten);
  347. // Right now, these just use AVIStreamInfo() to get information, then
  348. // return some of it. Can they be more efficient?
  349. STDAPI_(LONG) AVIStreamStart (PAVISTREAM pavi);
  350. STDAPI_(LONG) AVIStreamLength (PAVISTREAM pavi);
  351. STDAPI_(LONG) AVIStreamTimeToSample (PAVISTREAM pavi, LONG lTime);
  352. STDAPI_(LONG) AVIStreamSampleToTime (PAVISTREAM pavi, LONG lSample);
  353. STDAPI AVIStreamBeginStreaming(PAVISTREAM pavi, LONG lStart, LONG lEnd, LONG lRate);
  354. STDAPI AVIStreamEndStreaming(PAVISTREAM pavi);
  355. //
  356. // helper functions for using IGetFrame
  357. //
  358. STDAPI_(PGETFRAME) AVIStreamGetFrameOpen(PAVISTREAM pavi,
  359. LPBITMAPINFOHEADER lpbiWanted);
  360. STDAPI_(LPVOID) AVIStreamGetFrame(PGETFRAME pg, LONG lPos);
  361. STDAPI AVIStreamGetFrameClose(PGETFRAME pg);
  362. // !!! We need some way to place an advise on a stream....
  363. // STDAPI AVIStreamHasChanged (PAVISTREAM pavi);
  364. // Shortcut function
  365. // end2_vfw32
  366. #ifdef _WIN32
  367. // begin2_vfw32
  368. STDAPI AVIStreamOpenFromFileA(PAVISTREAM FAR *ppavi, LPCSTR szFile,
  369. DWORD fccType, LONG lParam,
  370. UINT mode, CLSID FAR *pclsidHandler);
  371. STDAPI AVIStreamOpenFromFileW(PAVISTREAM FAR *ppavi, LPCWSTR szFile,
  372. DWORD fccType, LONG lParam,
  373. UINT mode, CLSID FAR *pclsidHandler);
  374. #ifdef UNICODE
  375. #define AVIStreamOpenFromFile AVIStreamOpenFromFileW
  376. #else
  377. #define AVIStreamOpenFromFile AVIStreamOpenFromFileA
  378. #endif
  379. // end2_vfw32
  380. #else // win16
  381. STDAPI AVIStreamOpenFromFile(PAVISTREAM FAR *ppavi, LPCSTR szFile,
  382. DWORD fccType, LONG lParam,
  383. UINT mode, CLSID FAR *pclsidHandler);
  384. #define AVIStreamOpenFromFileW AVIStreamOpenFromFile /* ;Internal */
  385. #endif
  386. // begin2_vfw32
  387. // Use to create disembodied streams
  388. STDAPI AVIStreamCreate(PAVISTREAM FAR *ppavi, LONG lParam1, LONG lParam2,
  389. CLSID FAR *pclsidHandler);
  390. // PHANDLER AVIAPI AVIGetHandler (PAVISTREAM pavi, PAVISTREAMHANDLER psh);
  391. // PAVISTREAM AVIAPI AVIGetStream (PHANDLER p);
  392. //
  393. // flags for AVIStreamFindSample
  394. //
  395. #define FIND_DIR 0x0000000FL // direction
  396. #define FIND_NEXT 0x00000001L // go forward
  397. #define FIND_PREV 0x00000004L // go backward
  398. #define FIND_FROM_START 0x00000008L // start at the logical beginning
  399. #define FIND_TYPE 0x000000F0L // type mask
  400. #define FIND_KEY 0x00000010L // find key frame.
  401. #define FIND_ANY 0x00000020L // find any (non-empty) sample
  402. #define FIND_FORMAT 0x00000040L // find format change
  403. #define FIND_RET 0x0000F000L // return mask
  404. #define FIND_POS 0x00000000L // return logical position
  405. #define FIND_LENGTH 0x00001000L // return logical size
  406. #define FIND_OFFSET 0x00002000L // return physical position
  407. #define FIND_SIZE 0x00003000L // return physical size
  408. #define FIND_INDEX 0x00004000L // return physical index position
  409. //
  410. // stuff to support backward compat.
  411. //
  412. #define AVIStreamFindKeyFrame AVIStreamFindSample
  413. #define FindKeyFrame FindSample
  414. #define AVIStreamClose AVIStreamRelease
  415. #define AVIFileClose AVIFileRelease
  416. #define AVIStreamInit AVIFileInit
  417. #define AVIStreamExit AVIFileExit
  418. #define SEARCH_NEAREST FIND_PREV
  419. #define SEARCH_BACKWARD FIND_PREV
  420. #define SEARCH_FORWARD FIND_NEXT
  421. #define SEARCH_KEY FIND_KEY
  422. #define SEARCH_ANY FIND_ANY
  423. //
  424. // helper macros.
  425. //
  426. #define AVIStreamSampleToSample(pavi1, pavi2, l) \
  427. AVIStreamTimeToSample(pavi1,AVIStreamSampleToTime(pavi2, l))
  428. #define AVIStreamNextSample(pavi, l) \
  429. AVIStreamFindSample(pavi,l+1,FIND_NEXT|FIND_ANY)
  430. #define AVIStreamPrevSample(pavi, l) \
  431. AVIStreamFindSample(pavi,l-1,FIND_PREV|FIND_ANY)
  432. #define AVIStreamNearestSample(pavi, l) \
  433. AVIStreamFindSample(pavi,l,FIND_PREV|FIND_ANY)
  434. #define AVIStreamNextKeyFrame(pavi,l) \
  435. AVIStreamFindSample(pavi,l+1,FIND_NEXT|FIND_KEY)
  436. #define AVIStreamPrevKeyFrame(pavi, l) \
  437. AVIStreamFindSample(pavi,l-1,FIND_PREV|FIND_KEY)
  438. #define AVIStreamNearestKeyFrame(pavi, l) \
  439. AVIStreamFindSample(pavi,l,FIND_PREV|FIND_KEY)
  440. #define AVIStreamIsKeyFrame(pavi, l) \
  441. (AVIStreamNearestKeyFrame(pavi,l) == l)
  442. #define AVIStreamPrevSampleTime(pavi, t) \
  443. AVIStreamSampleToTime(pavi, AVIStreamPrevSample(pavi,AVIStreamTimeToSample(pavi,t)))
  444. #define AVIStreamNextSampleTime(pavi, t) \
  445. AVIStreamSampleToTime(pavi, AVIStreamNextSample(pavi,AVIStreamTimeToSample(pavi,t)))
  446. #define AVIStreamNearestSampleTime(pavi, t) \
  447. AVIStreamSampleToTime(pavi, AVIStreamNearestSample(pavi,AVIStreamTimeToSample(pavi,t)))
  448. #define AVIStreamNextKeyFrameTime(pavi, t) \
  449. AVIStreamSampleToTime(pavi, AVIStreamNextKeyFrame(pavi,AVIStreamTimeToSample(pavi, t)))
  450. #define AVIStreamPrevKeyFrameTime(pavi, t) \
  451. AVIStreamSampleToTime(pavi, AVIStreamPrevKeyFrame(pavi,AVIStreamTimeToSample(pavi, t)))
  452. #define AVIStreamNearestKeyFrameTime(pavi, t) \
  453. AVIStreamSampleToTime(pavi, AVIStreamNearestKeyFrame(pavi,AVIStreamTimeToSample(pavi, t)))
  454. #define AVIStreamStartTime(pavi) \
  455. AVIStreamSampleToTime(pavi, AVIStreamStart(pavi))
  456. #define AVIStreamLengthTime(pavi) \
  457. AVIStreamSampleToTime(pavi, AVIStreamLength(pavi))
  458. #define AVIStreamEnd(pavi) \
  459. (AVIStreamStart(pavi) + AVIStreamLength(pavi))
  460. #define AVIStreamEndTime(pavi) \
  461. AVIStreamSampleToTime(pavi, AVIStreamEnd(pavi))
  462. #define AVIStreamSampleSize(pavi, lPos, plSize) \
  463. AVIStreamRead(pavi,lPos,1,NULL,0,plSize,NULL)
  464. #define AVIStreamFormatSize(pavi, lPos, plSize) \
  465. AVIStreamReadFormat(pavi,lPos,NULL,plSize)
  466. #define AVIStreamDataSize(pavi, fcc, plSize) \
  467. AVIStreamReadData(pavi,fcc,NULL,plSize)
  468. /****************************************************************************
  469. *
  470. * AVISave routines and structures
  471. *
  472. ***************************************************************************/
  473. #ifndef comptypeDIB
  474. #define comptypeDIB mmioFOURCC('D', 'I', 'B', ' ')
  475. #endif
  476. STDAPI AVIMakeCompressedStream(
  477. PAVISTREAM FAR * ppsCompressed,
  478. PAVISTREAM ppsSource,
  479. AVICOMPRESSOPTIONS FAR * lpOptions,
  480. CLSID FAR *pclsidHandler);
  481. // end2_vfw32
  482. #ifdef _WIN32
  483. // begin2_vfw32
  484. EXTERN_C HRESULT CDECL AVISaveA (LPCSTR szFile,
  485. CLSID FAR *pclsidHandler,
  486. AVISAVECALLBACK lpfnCallback,
  487. int nStreams,
  488. PAVISTREAM pfile,
  489. LPAVICOMPRESSOPTIONS lpOptions,
  490. ...);
  491. STDAPI AVISaveVA(LPCSTR szFile,
  492. CLSID FAR *pclsidHandler,
  493. AVISAVECALLBACK lpfnCallback,
  494. int nStreams,
  495. PAVISTREAM FAR * ppavi,
  496. LPAVICOMPRESSOPTIONS FAR *plpOptions);
  497. EXTERN_C HRESULT CDECL AVISaveW (LPCWSTR szFile,
  498. CLSID FAR *pclsidHandler,
  499. AVISAVECALLBACK lpfnCallback,
  500. int nStreams,
  501. PAVISTREAM pfile,
  502. LPAVICOMPRESSOPTIONS lpOptions,
  503. ...);
  504. STDAPI AVISaveVW(LPCWSTR szFile,
  505. CLSID FAR *pclsidHandler,
  506. AVISAVECALLBACK lpfnCallback,
  507. int nStreams,
  508. PAVISTREAM FAR * ppavi,
  509. LPAVICOMPRESSOPTIONS FAR *plpOptions);
  510. #ifdef UNICODE
  511. #define AVISave AVISaveW
  512. #define AVISaveV AVISaveVW
  513. #else
  514. #define AVISave AVISaveA
  515. #define AVISaveV AVISaveVA
  516. #endif
  517. // end2_vfw32
  518. #else // Win16
  519. EXTERN_C HRESULT CDECL AVISave (LPCSTR szFile,
  520. CLSID FAR *pclsidHandler,
  521. AVISAVECALLBACK lpfnCallback,
  522. int nStreams,
  523. PAVISTREAM pfile,
  524. LPAVICOMPRESSOPTIONS lpOptions,
  525. ...);
  526. STDAPI AVISaveV(LPCSTR szFile,
  527. CLSID FAR *pclsidHandler,
  528. AVISAVECALLBACK lpfnCallback,
  529. int nStreams,
  530. PAVISTREAM FAR * ppavi,
  531. LPAVICOMPRESSOPTIONS FAR *plpOptions);
  532. #endif
  533. // begin2_vfw32
  534. STDAPI_(INT_PTR) AVISaveOptions(HWND hwnd,
  535. UINT uiFlags,
  536. int nStreams,
  537. PAVISTREAM FAR *ppavi,
  538. LPAVICOMPRESSOPTIONS FAR *plpOptions);
  539. STDAPI AVISaveOptionsFree(int nStreams,
  540. LPAVICOMPRESSOPTIONS FAR *plpOptions);
  541. // FLAGS FOR uiFlags:
  542. //
  543. // Same as the flags for ICCompressorChoose (see compman.h)
  544. // These determine what the compression options dialog for video streams
  545. // will look like.
  546. // end2_vfw32
  547. #ifdef _WIN32
  548. // begin2_vfw32
  549. STDAPI AVIBuildFilterW(LPWSTR lpszFilter, LONG cbFilter, BOOL fSaving);
  550. STDAPI AVIBuildFilterA(LPSTR lpszFilter, LONG cbFilter, BOOL fSaving);
  551. #ifdef UNICODE
  552. #define AVIBuildFilter AVIBuildFilterW
  553. #else
  554. #define AVIBuildFilter AVIBuildFilterA
  555. #endif
  556. // end2_vfw32
  557. #else //win16
  558. STDAPI AVIBuildFilter(LPSTR lpszFilter, LONG cbFilter, BOOL fSaving);
  559. #endif
  560. // begin2_vfw32
  561. STDAPI AVIMakeFileFromStreams(PAVIFILE FAR * ppfile,
  562. int nStreams,
  563. PAVISTREAM FAR * papStreams);
  564. STDAPI AVIMakeStreamFromClipboard(UINT cfFormat, HANDLE hGlobal, PAVISTREAM FAR *ppstream);
  565. /****************************************************************************
  566. *
  567. * Clipboard routines
  568. *
  569. ***************************************************************************/
  570. STDAPI AVIPutFileOnClipboard(PAVIFILE pf);
  571. STDAPI AVIGetFromClipboard(PAVIFILE FAR * lppf);
  572. STDAPI AVIClearClipboard(void);
  573. /****************************************************************************
  574. *
  575. * Editing routines
  576. *
  577. ***************************************************************************/
  578. STDAPI CreateEditableStream(
  579. PAVISTREAM FAR * ppsEditable,
  580. PAVISTREAM psSource);
  581. STDAPI EditStreamCut(PAVISTREAM pavi, LONG FAR *plStart, LONG FAR *plLength, PAVISTREAM FAR * ppResult);
  582. STDAPI EditStreamCopy(PAVISTREAM pavi, LONG FAR *plStart, LONG FAR *plLength, PAVISTREAM FAR * ppResult);
  583. STDAPI EditStreamPaste(PAVISTREAM pavi, LONG FAR *plPos, LONG FAR *plLength, PAVISTREAM pstream, LONG lStart, LONG lEnd);
  584. STDAPI EditStreamClone(PAVISTREAM pavi, PAVISTREAM FAR *ppResult);
  585. // end2_vfw32
  586. #ifdef _WIN32
  587. // begin2_vfw32
  588. STDAPI EditStreamSetNameA(PAVISTREAM pavi, LPCSTR lpszName);
  589. STDAPI EditStreamSetNameW(PAVISTREAM pavi, LPCWSTR lpszName);
  590. STDAPI EditStreamSetInfoW(PAVISTREAM pavi, LPAVISTREAMINFOW lpInfo, LONG cbInfo);
  591. STDAPI EditStreamSetInfoA(PAVISTREAM pavi, LPAVISTREAMINFOA lpInfo, LONG cbInfo);
  592. #ifdef UNICODE
  593. #define EditStreamSetInfo EditStreamSetInfoW
  594. #define EditStreamSetName EditStreamSetNameW
  595. #else
  596. #define EditStreamSetInfo EditStreamSetInfoA
  597. #define EditStreamSetName EditStreamSetNameA
  598. #endif
  599. // end2_vfw32
  600. #else // win16
  601. STDAPI EditStreamSetInfo(PAVISTREAM pavi, LPAVISTREAMINFO lpInfo, LONG cbInfo);
  602. #define EditStreamSetInfoW EditStreamSetInfo /* ;Internal */
  603. STDAPI EditStreamSetName(PAVISTREAM pavi, LPCSTR lpszName);
  604. #define EditStreamSetNameW EditStreamSetName /* ;Internal */
  605. #endif
  606. #ifdef __cplusplus
  607. } /* End of extern "C" { */
  608. #endif /* __cplusplus */
  609. #endif
  610. // begin2_vfw32
  611. /* - - - - - - - - */
  612. #ifndef AVIERR_OK
  613. #define AVIERR_OK 0L
  614. #define MAKE_AVIERR(error) MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x4000 + error)
  615. // !!! Questions to be answered:
  616. // How can you get a string form of these errors?
  617. // Which of these errors should be replaced by errors in SCODE.H?
  618. #define AVIERR_UNSUPPORTED MAKE_AVIERR(101)
  619. #define AVIERR_BADFORMAT MAKE_AVIERR(102)
  620. #define AVIERR_MEMORY MAKE_AVIERR(103)
  621. #define AVIERR_INTERNAL MAKE_AVIERR(104)
  622. #define AVIERR_BADFLAGS MAKE_AVIERR(105)
  623. #define AVIERR_BADPARAM MAKE_AVIERR(106)
  624. #define AVIERR_BADSIZE MAKE_AVIERR(107)
  625. #define AVIERR_BADHANDLE MAKE_AVIERR(108)
  626. #define AVIERR_FILEREAD MAKE_AVIERR(109)
  627. #define AVIERR_FILEWRITE MAKE_AVIERR(110)
  628. #define AVIERR_FILEOPEN MAKE_AVIERR(111)
  629. #define AVIERR_COMPRESSOR MAKE_AVIERR(112)
  630. #define AVIERR_NOCOMPRESSOR MAKE_AVIERR(113)
  631. #define AVIERR_READONLY MAKE_AVIERR(114)
  632. #define AVIERR_NODATA MAKE_AVIERR(115)
  633. #define AVIERR_BUFFERTOOSMALL MAKE_AVIERR(116)
  634. #define AVIERR_CANTCOMPRESS MAKE_AVIERR(117)
  635. #define AVIERR_USERABORT MAKE_AVIERR(198)
  636. #define AVIERR_ERROR MAKE_AVIERR(199)
  637. #endif
  638. // end2_vfw32