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