aviriff.h 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. /**
  2. * This file is part of the mingw-w64 runtime package.
  3. * No warranty is given; refer to the file DISCLAIMER within this package.
  4. */
  5. #include <winapifamily.h>
  6. #ifndef AVIRIFF_H
  7. #define AVIRIFF_H
  8. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
  9. #ifndef NUMELMS
  10. #define NUMELMS (aa) (sizeof (aa) / sizeof ((aa)[0]))
  11. #endif
  12. #define FCC(ch4) ((((DWORD)(ch4) & 0xff) << 24) | (((DWORD)(ch4) & 0xff00) << 8) | (((DWORD)(ch4) & 0xff0000) >> 8) | (((DWORD)(ch4) & 0xff000000) >> 24))
  13. #include <pshpack2.h>
  14. typedef struct _riffchunk {
  15. FOURCC fcc;
  16. DWORD cb;
  17. } RIFFCHUNK,*LPRIFFCHUNK;
  18. typedef struct _rifflist {
  19. FOURCC fcc;
  20. DWORD cb;
  21. FOURCC fccListType;
  22. } RIFFLIST,*LPRIFFLIST;
  23. #define RIFFROUND(cb) ((cb) + ((cb) & 1))
  24. #define RIFFNEXT(pChunk) (LPRIFFCHUNK) ((LPBYTE) (pChunk) + sizeof (RIFFCHUNK) + RIFFROUND (((LPRIFFCHUNK)pChunk)->cb))
  25. #define ckidMAINAVIHEADER FCC('avih')
  26. #define ckidAVIEXTHEADER FCC('dmlh')
  27. #define ckidAVIOLDINDEX FCC('idx1')
  28. #define ckidAVISUPERINDEX FCC('indx')
  29. #define ckidODML FCC('odml')
  30. #ifndef ckidSTREAMFORMAT
  31. #define ckidSTREAMFORMAT FCC('strf')
  32. #endif
  33. #ifndef ckidSTREAMHEADER
  34. #define ckidSTREAMHEADER FCC('strh')
  35. #endif
  36. #define ckidSTREAMLIST FCC('strl')
  37. #ifndef streamtypeVIDEO
  38. #define streamtypeAUDIO FCC('auds')
  39. #define streamtypeMIDI FCC('mids')
  40. #define streamtypeTEXT FCC('txts')
  41. #define streamtypeVIDEO FCC('vids')
  42. #endif
  43. #define AVIF_HASINDEX 0x00000010
  44. #define AVIF_MUSTUSEINDEX 0x00000020
  45. #define AVIF_ISINTERLEAVED 0x00000100
  46. #define AVIF_TRUSTCKTYPE 0x00000800
  47. #define AVIF_WASCAPTUREFILE 0x00010000
  48. #define AVIF_COPYRIGHTED 0x00020000
  49. #ifndef AVIIF_LIST
  50. #define AVIIF_LIST 0x1
  51. #define AVIIF_KEYFRAME 0x10
  52. #endif
  53. #define AVIIF_NO_TIME 0x100
  54. #define AVIIF_COMPRESSOR 0xfff0000
  55. #define AVISF_DISABLED 0x00000001
  56. #define AVISF_VIDEO_PALCHANGES 0x00010000
  57. #define TIMECODE_RATE_30DROP 0
  58. #define TIMECODE_SMPTE_BINARY_GROUP 0x7
  59. #define TIMECODE_SMPTE_COLOR_FRAME 0x8
  60. #define AVI_INDEX_OF_INDEXES 0x0
  61. #define AVI_INDEX_OF_CHUNKS 0x1
  62. #define AVI_INDEX_OF_TIMED_CHUNKS 0x2
  63. #define AVI_INDEX_OF_SUB_2FIELD 0x3
  64. #define AVI_INDEX_IS_DATA 0x80
  65. #define AVI_INDEX_SUB_DEFAULT 0x0
  66. #define AVI_INDEX_SUB_2FIELD 0x1
  67. #define STDINDEXSIZE 0x4000
  68. #define NUMINDEX(wLongsPerEntry) ((STDINDEXSIZE - 32) / 4 / (wLongsPerEntry))
  69. #define NUMINDEXFILL(wLongsPerEntry) ((STDINDEXSIZE / 4) - NUMINDEX (wLongsPerEntry))
  70. #define Valid_SUPERINDEX(pi) (*(DWORD *) (&((pi)->wLongsPerEntry)) == 4)
  71. typedef struct _avimainheader {
  72. FOURCC fcc;
  73. DWORD cb;
  74. DWORD dwMicroSecPerFrame;
  75. DWORD dwMaxBytesPerSec;
  76. DWORD dwPaddingGranularity;
  77. DWORD dwFlags;
  78. DWORD dwTotalFrames;
  79. DWORD dwInitialFrames;
  80. DWORD dwStreams;
  81. DWORD dwSuggestedBufferSize;
  82. DWORD dwWidth;
  83. DWORD dwHeight;
  84. DWORD dwReserved[4];
  85. } AVIMAINHEADER;
  86. typedef struct _aviextheader {
  87. FOURCC fcc;
  88. DWORD cb;
  89. DWORD dwGrandFrames;
  90. DWORD dwFuture[61];
  91. } AVIEXTHEADER;
  92. typedef struct _avistreamheader {
  93. FOURCC fcc;
  94. DWORD cb;
  95. FOURCC fccType;
  96. FOURCC fccHandler;
  97. DWORD dwFlags;
  98. WORD wPriority;
  99. WORD wLanguage;
  100. DWORD dwInitialFrames;
  101. DWORD dwScale;
  102. DWORD dwRate;
  103. DWORD dwStart;
  104. DWORD dwLength;
  105. DWORD dwSuggestedBufferSize;
  106. DWORD dwQuality;
  107. DWORD dwSampleSize;
  108. struct {
  109. short int left;
  110. short int top;
  111. short int right;
  112. short int bottom;
  113. } rcFrame;
  114. } AVISTREAMHEADER;
  115. typedef struct _avioldindex {
  116. FOURCC fcc;
  117. DWORD cb;
  118. struct _avioldindex_entry {
  119. DWORD dwChunkId;
  120. DWORD dwFlags;
  121. DWORD dwOffset;
  122. DWORD dwSize;
  123. } aIndex[];
  124. } AVIOLDINDEX;
  125. #ifndef TIMECODE_DEFINED
  126. #define TIMECODE_DEFINED
  127. typedef union _timecode {
  128. __C89_NAMELESS struct {
  129. WORD wFrameRate;
  130. WORD wFrameFract;
  131. LONG cFrames;
  132. };
  133. DWORDLONG qw;
  134. } TIMECODE;
  135. #endif
  136. typedef struct _timecodedata {
  137. TIMECODE time;
  138. DWORD dwSMPTEflags;
  139. DWORD dwUser;
  140. } TIMECODEDATA;
  141. typedef struct _avimetaindex {
  142. FOURCC fcc;
  143. UINT cb;
  144. WORD wLongsPerEntry;
  145. BYTE bIndexSubType;
  146. BYTE bIndexType;
  147. DWORD nEntriesInUse;
  148. DWORD dwChunkId;
  149. DWORD dwReserved[3];
  150. DWORD adwIndex[];
  151. } AVIMETAINDEX;
  152. typedef struct _avisuperindex {
  153. FOURCC fcc;
  154. UINT cb;
  155. WORD wLongsPerEntry;
  156. BYTE bIndexSubType;
  157. BYTE bIndexType;
  158. DWORD nEntriesInUse;
  159. DWORD dwChunkId;
  160. DWORD dwReserved[3];
  161. struct _avisuperindex_entry {
  162. DWORDLONG qwOffset;
  163. DWORD dwSize;
  164. DWORD dwDuration;
  165. } aIndex[NUMINDEX (4)];
  166. } AVISUPERINDEX;
  167. typedef struct _avistdindex_entry {
  168. DWORD dwOffset;
  169. DWORD dwSize;
  170. } AVISTDINDEX_ENTRY;
  171. #define AVISTDINDEX_DELTAFRAME (0x80000000)
  172. #define AVISTDINDEX_SIZEMASK (~0x80000000)
  173. typedef struct _avistdindex {
  174. FOURCC fcc;
  175. UINT cb;
  176. WORD wLongsPerEntry;
  177. BYTE bIndexSubType;
  178. BYTE bIndexType;
  179. DWORD nEntriesInUse;
  180. DWORD dwChunkId;
  181. DWORDLONG qwBaseOffset;
  182. DWORD dwReserved_3;
  183. AVISTDINDEX_ENTRY aIndex[NUMINDEX (2)];
  184. } AVISTDINDEX;
  185. typedef struct _avitimedindex_entry {
  186. DWORD dwOffset;
  187. DWORD dwSize;
  188. DWORD dwDuration;
  189. } AVITIMEDINDEX_ENTRY;
  190. typedef struct _avitimedindex {
  191. FOURCC fcc;
  192. UINT cb;
  193. WORD wLongsPerEntry;
  194. BYTE bIndexSubType;
  195. BYTE bIndexType;
  196. DWORD nEntriesInUse;
  197. DWORD dwChunkId;
  198. DWORDLONG qwBaseOffset;
  199. DWORD dwReserved_3;
  200. AVITIMEDINDEX_ENTRY aIndex[NUMINDEX (3)];
  201. DWORD adwTrailingFill[NUMINDEXFILL (3)];
  202. } AVITIMEDINDEX;
  203. typedef struct _avitimecodeindex {
  204. FOURCC fcc;
  205. UINT cb;
  206. WORD wLongsPerEntry;
  207. BYTE bIndexSubType;
  208. BYTE bIndexType;
  209. DWORD nEntriesInUse;
  210. DWORD dwChunkId;
  211. DWORD dwReserved[3];
  212. TIMECODEDATA aIndex[NUMINDEX (sizeof (TIMECODEDATA)/sizeof (LONG))];
  213. } AVITIMECODEINDEX;
  214. typedef struct _avitcdlindex_entry {
  215. DWORD dwTick;
  216. TIMECODE time;
  217. DWORD dwSMPTEflags;
  218. DWORD dwUser;
  219. TCHAR szReelId[12];
  220. } AVITCDLINDEX_ENTRY;
  221. typedef struct _avitcdlindex {
  222. FOURCC fcc;
  223. UINT cb;
  224. WORD wLongsPerEntry;
  225. BYTE bIndexSubType;
  226. BYTE bIndexType;
  227. DWORD nEntriesInUse;
  228. DWORD dwChunkId;
  229. DWORD dwReserved[3];
  230. AVITCDLINDEX_ENTRY aIndex[NUMINDEX (7)];
  231. DWORD adwTrailingFill[NUMINDEXFILL (7)];
  232. } AVITCDLINDEX;
  233. typedef struct _avifieldindex_chunk {
  234. FOURCC fcc;
  235. DWORD cb;
  236. WORD wLongsPerEntry;
  237. BYTE bIndexSubType;
  238. BYTE bIndexType;
  239. DWORD nEntriesInUse;
  240. DWORD dwChunkId;
  241. DWORDLONG qwBaseOffset;
  242. DWORD dwReserved3;
  243. struct _avifieldindex_entry {
  244. DWORD dwOffset;
  245. DWORD dwSize;
  246. DWORD dwOffsetField2;
  247. } aIndex[];
  248. } AVIFIELDINDEX,*PAVIFIELDINDEX;
  249. #include <poppack.h>
  250. #endif
  251. #endif