340 lines
8.7 KiB
C
340 lines
8.7 KiB
C
|
/*
|
||
|
* aviriff.h AVI file format
|
||
|
*
|
||
|
* =========================================================================
|
||
|
*
|
||
|
* Open Watcom Project
|
||
|
*
|
||
|
* Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved.
|
||
|
*
|
||
|
* This file is automatically generated. Do not edit directly.
|
||
|
*
|
||
|
* =========================================================================
|
||
|
*/
|
||
|
|
||
|
#ifndef AVIRIFF_H
|
||
|
#define AVIRIFF_H
|
||
|
|
||
|
#ifndef _ENABLE_AUTODEPEND
|
||
|
#pragma read_only_file;
|
||
|
#endif
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
/* Macro to count the elements in an array */
|
||
|
#ifndef NUMELMS
|
||
|
#define NUMELMS( x ) (sizeof( x ) / sizeof( (x)[0] ))
|
||
|
#endif
|
||
|
|
||
|
/* Macro to make chunk identifiers */
|
||
|
#define FCC( x ) \
|
||
|
((((DWORD)(x) & 0x000000FF) << 24) | (((DWORD)(x) & 0x0000FF00) << 8) | \
|
||
|
(((DWORD)(x) & 0x00FF0000) >> 8) | (((DWORD)(x) && 0xFF000000) >> 24))
|
||
|
|
||
|
/* Chunk identifiers */
|
||
|
#define ckidMAINAVIHEADER FCC( 'avih' )
|
||
|
#define ckidODML FCC( 'odml' )
|
||
|
#define ckidAVIEXTHEADER FCC( 'dmlh' )
|
||
|
#define ckidSTREAMLIST FCC( 'strl' )
|
||
|
#ifndef ckidSTREAMHEADER
|
||
|
#define ckidSTREAMHEADER FCC( 'strh' )
|
||
|
#endif
|
||
|
#ifndef ckidSTREAMFORMAT
|
||
|
#define ckidSTREAMFORMAT FCC( 'strf' )
|
||
|
#endif
|
||
|
#define ckidAVIOLDINDEX FCC( 'idx1' )
|
||
|
#define ckidAVISUPERINDEX FCC( 'indx' )
|
||
|
|
||
|
/* AVI main header flags */
|
||
|
#define AVIF_HASINDEX 0x00000010L
|
||
|
#define AVIF_MUSTUSEINDEX 0x00000020L
|
||
|
#define AVIF_ISINTERLEAVED 0x00000100L
|
||
|
#define AVIF_TRUSTCKTYPE 0x00000800L
|
||
|
#define AVIF_WASCAPTUREFILE 0x00010000L
|
||
|
#define AVIF_COPYRIGHTED 0x00020000L
|
||
|
|
||
|
/* Stream types */
|
||
|
#ifndef streamtypeVIDEO
|
||
|
#define streamtypeVIDEO FCC( 'vids' )
|
||
|
#define streamtypeAUDIO FCC( 'auds' )
|
||
|
#define streamtypeMIDI FCC( 'mids' )
|
||
|
#define streamtypeTEXT FCC( 'txts' )
|
||
|
#endif
|
||
|
|
||
|
/* AVI stream header flags */
|
||
|
#define AVISF_DISABLED 0x00000001L
|
||
|
#define AVISF_VIDEO_PALCHANGES 0x00010000L
|
||
|
|
||
|
/* AVI old index flags */
|
||
|
#ifndef AVIIF_LIST
|
||
|
#define AVIIF_LIST 0x00000001L
|
||
|
#define AVIIF_KEYFRAME 0x00000010L
|
||
|
#endif
|
||
|
#define AVIIF_NO_TIME 0x00000100L
|
||
|
#define AVIIF_COMPRESSOR 0x0FFF0000L
|
||
|
|
||
|
/* Time code rate values */
|
||
|
#define TIMECODE_RATE_30DROP 0
|
||
|
|
||
|
/* Time code SMPTE flags */
|
||
|
#define TIMECODE_SMPTE_BINARY_GROUP 0x00000007L
|
||
|
#define TIMECODE_SMPTE_COLOR_FRAME 0x00000008L
|
||
|
|
||
|
/* AVI index types */
|
||
|
#define AVI_INDEX_OF_INDEXES 0x00
|
||
|
#define AVI_INDEX_OF_CHUNKS 0x01
|
||
|
#define AVI_INDEX_OF_TIMED_CHUNKS 0x02
|
||
|
#define AVI_INDEX_OF_SUB_2FIELD 0x03
|
||
|
#define AVI_INDEX_IS_DATA 0x80
|
||
|
|
||
|
/* AVI index subtypes */
|
||
|
#define AVI_INDEX_SUB_DEFAULT 0x00
|
||
|
#define AVI_INDEX_SUB_2FIELD 0x01
|
||
|
|
||
|
/* Standard index size */
|
||
|
#define STDINDEXSIZE 0x4000
|
||
|
|
||
|
/* Macros to manipulate index sizes */
|
||
|
#define NUMINDEX( x ) ((STDINDEXSIZE - 32) / 4 / (x))
|
||
|
#define NUMINDEXFILL( x ) ((STDINDEXSIZE / 4) - NUMINDEX( x ))
|
||
|
|
||
|
/* AVI standard index flags */
|
||
|
#define AVISTDINDEX_DELTAFRAME 0x80000000L
|
||
|
#define AVISTDINDEX_SIZEMASK 0x7FFFFFFFL
|
||
|
|
||
|
/* RIFF chunk */
|
||
|
typedef struct _riffchunk {
|
||
|
FOURCC fcc;
|
||
|
DWORD cb;
|
||
|
} RIFFCHUNK;
|
||
|
typedef RIFFCHUNK *LPRIFFCHUNK;
|
||
|
|
||
|
/* RIFF list */
|
||
|
typedef struct _rifflist {
|
||
|
FOURCC fcc;
|
||
|
DWORD cb;
|
||
|
FOURCC fccListType;
|
||
|
} RIFFLIST;
|
||
|
typedef RIFFLIST *LPRIFFLIST;
|
||
|
|
||
|
/* Macros to manipulate RIFF data */
|
||
|
#define RIFFROUND( x ) ((x) + ((x) & 1))
|
||
|
#define RIFFNEXT( x ) \
|
||
|
(LPRIFFCHUNK)((LPBYTE)(x) + sizeof( RIFFCHUNK ) + RIFFROUND( ((LPRIFFCHUNK)(x)->cb))
|
||
|
|
||
|
/* AVI main header */
|
||
|
typedef struct _avimainheader {
|
||
|
FOURCC fcc;
|
||
|
DWORD cb;
|
||
|
DWORD dwMicroSecPerFrame;
|
||
|
DWORD dwMaxBytesPerSec;
|
||
|
DWORD dwPaddingGranularity;
|
||
|
DWORD dwFlags;
|
||
|
DWORD dwTotalFrames;
|
||
|
DWORD dwInitialFrames;
|
||
|
DWORD dwStreams;
|
||
|
DWORD dwSuggestedBufferSize;
|
||
|
DWORD dwWidth;
|
||
|
DWORD dwHeight;
|
||
|
DWORD dwReserved[4];
|
||
|
} AVIMAINHEADER;
|
||
|
|
||
|
/* AVI extended header */
|
||
|
typedef struct _aviextheader {
|
||
|
FOURCC fcc;
|
||
|
DWORD cb;
|
||
|
DWORD dwGrandFrames;
|
||
|
DWORD dwFuture[61];
|
||
|
} AVIEXTHEADER;
|
||
|
|
||
|
/* AVI stream header */
|
||
|
typedef struct _avistreamheader {
|
||
|
FOURCC fcc;
|
||
|
DWORD cb;
|
||
|
FOURCC fccType;
|
||
|
FOURCC fccHandler;
|
||
|
DWORD dwFlags;
|
||
|
WORD wPriority;
|
||
|
WORD wLanguage;
|
||
|
DWORD dwInitialFrames;
|
||
|
DWORD dwScale;
|
||
|
DWORD dwRate;
|
||
|
DWORD dwStart;
|
||
|
DWORD dwLength;
|
||
|
DWORD dwSuggestedBufferSize;
|
||
|
DWORD dwQuality;
|
||
|
DWORD dwSampleSize;
|
||
|
struct {
|
||
|
short left;
|
||
|
short top;
|
||
|
short right;
|
||
|
short bottom;
|
||
|
} rcFrame;
|
||
|
} AVISTREAMHEADER;
|
||
|
|
||
|
/* AVI old index */
|
||
|
typedef struct _avioldindex {
|
||
|
FOURCC fcc;
|
||
|
DWORD cb;
|
||
|
struct _avioldindex_entry {
|
||
|
DWORD dwChunkId;
|
||
|
DWORD dwFlags;
|
||
|
DWORD dwOffset;
|
||
|
DWORD dwSize;
|
||
|
} aIndex[1];
|
||
|
} AVIOLDINDEX;
|
||
|
|
||
|
/* Time code */
|
||
|
typedef union _timecode {
|
||
|
struct {
|
||
|
WORD wFrameRate;
|
||
|
WORD wFrameFract;
|
||
|
LONG cFrames;
|
||
|
};
|
||
|
DWORDLONG qw;
|
||
|
} TIMECODE;
|
||
|
|
||
|
/* Time code data */
|
||
|
typedef struct _timecodedata {
|
||
|
TIMECODE time;
|
||
|
DWORD dwSMPTEflags;
|
||
|
DWORD dwUser;
|
||
|
} TIMECODEDATA;
|
||
|
|
||
|
/* AVI meta-index */
|
||
|
typedef struct _avimetaindex {
|
||
|
FOURCC fcc;
|
||
|
UINT cb;
|
||
|
WORD wLongsPerEntry;
|
||
|
BYTE bIndexSubType;
|
||
|
BYTE bIndexType;
|
||
|
DWORD nEntriesInUse;
|
||
|
DWORD dwChunkId;
|
||
|
DWORD dwReserved[3];
|
||
|
DWORD adwIndex[1];
|
||
|
} AVIMETAINDEX;
|
||
|
|
||
|
/* AVI super-index */
|
||
|
typedef struct _avisuperindex {
|
||
|
FOURCC fcc;
|
||
|
UINT cb;
|
||
|
WORD wLongsPerEntry;
|
||
|
BYTE bIndexSubType;
|
||
|
BYTE bIndexType;
|
||
|
DWORD nEntriesInUse;
|
||
|
DWORD dwChunkId;
|
||
|
DWORD dwReserved[3];
|
||
|
struct _avisuperindex_entry {
|
||
|
DWORDLONG qwOffset;
|
||
|
DWORD dwSize;
|
||
|
DWORD dwDuration;
|
||
|
} aIndex[NUMINDEX( 4 )];
|
||
|
} AVISUPERINDEX;
|
||
|
#define Valid_SUPERINDEX( x ) \
|
||
|
(*(DWORD *)(&((x)->wLongsPerEntry)) == (4 | AVI_INDEX_OF_INDEXES << 24)))
|
||
|
|
||
|
/* AVI standard index entry */
|
||
|
typedef struct _avistdindex_entry {
|
||
|
DWORD dwOffset;
|
||
|
DWORD dwSize;
|
||
|
} AVISTDINDEX_ENTRY;
|
||
|
|
||
|
/* AVI standard index *
|
||
|
typedef struct _avistdindex {
|
||
|
FOURCC fcc;
|
||
|
UINT cb;
|
||
|
WORD wLongsPerEntry;
|
||
|
BYTE bIndexSubType;
|
||
|
BYTE bIndexType;
|
||
|
DWORD nEntriesInUse;
|
||
|
DWORD dwChunkId;
|
||
|
DWORDLONG qwBaseOffset;
|
||
|
DWORD dwReserved_3;
|
||
|
AVISTDINDEX_ENTRY aIndex[NUMINDEX( 2 )];
|
||
|
} AVISTDINDEX;
|
||
|
|
||
|
/* AVI timed index entry */
|
||
|
typedef struct _avitimedindex_entry {
|
||
|
DWORD dwOffset;
|
||
|
DWORD dwSize;
|
||
|
DWORD dwDuration;
|
||
|
} AVITIMEDINDEX_ENTRY;
|
||
|
|
||
|
/* AVI timed index */
|
||
|
typedef struct _avitimedindex {
|
||
|
FOURCC fcc;
|
||
|
UINT cb;
|
||
|
WORD wLongsPerEntry;
|
||
|
BYTE bIndexSubType;
|
||
|
BYTE bIndexType;
|
||
|
DWORD nEntriesInUse;
|
||
|
DWORD dwChunkId;
|
||
|
DWORDLONG qwBaseOffset;
|
||
|
DWORD dwReserved_3;
|
||
|
AVITIMEDINDEX_ENTRY aIndex[NUMINDEX( 3 )];
|
||
|
DWORD adwTrailingFill[NUMINDEXFILL( 3 )];
|
||
|
} AVITIMEDINDEX;
|
||
|
|
||
|
/* AVI time code index */
|
||
|
typedef struct _avitimecodeindex {
|
||
|
FOURCC fcc;
|
||
|
UINT cb;
|
||
|
WORD wLongsPerEntry;
|
||
|
BYTE bIndexSubType;
|
||
|
BYTE bIndexType;
|
||
|
DWORD nEntriesInUse;
|
||
|
DWORD dwChunkId;
|
||
|
DWORD dwReserved[3];
|
||
|
TIMECODEDATA aIndex[NUMINDEX( sizeof( TIMECODEDATA ) / sizeof( LONG ) )];
|
||
|
} AVITIMECODEINDEX;
|
||
|
|
||
|
/* AVI time code discontinuity list entry */
|
||
|
typedef struct _avitcdlindex_entry {
|
||
|
DWORD dwTick;
|
||
|
TIMECODE time;
|
||
|
DWORD dwSMPTEflags;
|
||
|
DWORD dwUser;
|
||
|
TCHAR szReelId[12];
|
||
|
} AVITCDLINDEX_ENTRY;
|
||
|
|
||
|
/* AVI time code discontinuity list index */
|
||
|
typedef struct _avitcdlindex {
|
||
|
FOURCC fcc;
|
||
|
UINT cb;
|
||
|
WORD wLongsPerEntry;
|
||
|
BYTE bIndexSubType;
|
||
|
BYTE bIndexType;
|
||
|
DWORD nEntriesInUse;
|
||
|
DWORD dwChunkId;
|
||
|
DWORD dwReserved[3];
|
||
|
AVITCDLINDEX_ENTRY aIndex[NUMINDEX( 7 )];
|
||
|
DWORD adwTrailingFill[NUMINDEXFILL( 7 )];
|
||
|
} AVITCDLINDEX;
|
||
|
|
||
|
/* AVI field index chunk */
|
||
|
typedef struct _avifieldindex_chunk {
|
||
|
FOURCC fcc;
|
||
|
DWORD cb;
|
||
|
WORD wLongsPerEntry;
|
||
|
BYTE bIndexSubType;
|
||
|
BYTE bIndexType;
|
||
|
DWORD nEntriesInUse;
|
||
|
DWORD dwChunkId;
|
||
|
DWORDLONG qwBaseOffset;
|
||
|
DWORD dwReserved3;
|
||
|
struct _avifieldindex_entry {
|
||
|
DWORD dwOffset;
|
||
|
DWORD dwSize;
|
||
|
DWORD dwOffsetField2;
|
||
|
} aIndex[1];
|
||
|
} AVIFIELDINDEX;
|
||
|
typedef AVIFIELDINDEX *PAVIFIELDINDEX;
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
} /* extern "C" */
|
||
|
#endif
|
||
|
|
||
|
#endif /* AVIRIFF_H */
|