Mercurial > mplayer.hg
annotate libmpdemux/aviheader.h @ 13283:858b7e04718c
This patch moves the directory creation code to a separate function. I have
tried to re-use as much code as possible, to reduce the size of the patch.
All duplicate code is removed, resulting in my first patch that actually
decreases the size of the binary by about 700 bytes :-)
author | ivo |
---|---|
date | Wed, 08 Sep 2004 01:11:16 +0000 |
parents | d4e22e1f39f8 |
children | a5a37cb6858a |
rev | line source |
---|---|
1343 | 1 #ifndef _aviheader_h |
2 #define _aviheader_h | |
3 | |
1485
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
4 //#include "config.h" /* get correct definition WORDS_BIGENDIAN */ |
1343 | 5 #include "bswap.h" |
6 | |
12341
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
7 #ifndef MIN |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
8 #define MIN(a,b) (((a)<(b))?(a):(b)) |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
9 #endif |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
10 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
11 #ifndef min |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
12 #define min(a,b) (((a)<(b))?(a):(b)) |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
13 #endif |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
14 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
15 #ifndef max |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
16 #define max(a,b) (((a)>(b))?(a):(b)) |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
17 #endif |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
18 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
19 #ifndef mmioFOURCC |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
20 #define mmioFOURCC( ch0, ch1, ch2, ch3 ) \ |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
21 ( (uint32_t)(uint8_t)(ch0) | ( (uint32_t)(uint8_t)(ch1) << 8 ) | \ |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
22 ( (uint32_t)(uint8_t)(ch2) << 16 ) | ( (uint32_t)(uint8_t)(ch3) << 24 ) ) |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
23 #endif |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
24 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
25 /* Macro to make a TWOCC out of two characters */ |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
26 #ifndef aviTWOCC |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
27 #define aviTWOCC(ch0, ch1) ((uint16_t)(uint8_t)(ch0) | ((uint16_t)(uint8_t)(ch1) << 8)) |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
28 #endif |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
29 |
12356
6a61d694f7d3
minimal fix for alex's 1000000000000l compile errors. imo the fix in
rfelker
parents:
12345
diff
changeset
|
30 //typedef uint16_t TWOCC; |
6a61d694f7d3
minimal fix for alex's 1000000000000l compile errors. imo the fix in
rfelker
parents:
12345
diff
changeset
|
31 //typedef uint32_t FOURCC; |
12341
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
32 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
33 /* form types, list types, and chunk types */ |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
34 #define formtypeAVI mmioFOURCC('A', 'V', 'I', ' ') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
35 #define listtypeAVIHEADER mmioFOURCC('h', 'd', 'r', 'l') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
36 #define ckidAVIMAINHDR mmioFOURCC('a', 'v', 'i', 'h') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
37 #define listtypeSTREAMHEADER mmioFOURCC('s', 't', 'r', 'l') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
38 #define ckidSTREAMHEADER mmioFOURCC('s', 't', 'r', 'h') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
39 #define ckidSTREAMFORMAT mmioFOURCC('s', 't', 'r', 'f') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
40 #define ckidSTREAMHANDLERDATA mmioFOURCC('s', 't', 'r', 'd') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
41 #define ckidSTREAMNAME mmioFOURCC('s', 't', 'r', 'n') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
42 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
43 #define listtypeAVIMOVIE mmioFOURCC('m', 'o', 'v', 'i') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
44 #define listtypeAVIRECORD mmioFOURCC('r', 'e', 'c', ' ') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
45 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
46 #define ckidAVINEWINDEX mmioFOURCC('i', 'd', 'x', '1') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
47 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
48 /* |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
49 ** Stream types for the <fccType> field of the stream header. |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
50 */ |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
51 #define streamtypeVIDEO mmioFOURCC('v', 'i', 'd', 's') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
52 #define streamtypeAUDIO mmioFOURCC('a', 'u', 'd', 's') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
53 #define streamtypeMIDI mmioFOURCC('m', 'i', 'd', 's') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
54 #define streamtypeTEXT mmioFOURCC('t', 'x', 't', 's') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
55 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
56 /* Basic chunk types */ |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
57 #define cktypeDIBbits aviTWOCC('d', 'b') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
58 #define cktypeDIBcompressed aviTWOCC('d', 'c') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
59 #define cktypePALchange aviTWOCC('p', 'c') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
60 #define cktypeWAVEbytes aviTWOCC('w', 'b') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
61 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
62 /* Chunk id to use for extra chunks for padding. */ |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
63 #define ckidAVIPADDING mmioFOURCC('J', 'U', 'N', 'K') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
64 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
65 /* flags for use in <dwFlags> in AVIFileHdr */ |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
66 #define AVIF_HASINDEX 0x00000010 // Index at end of file? |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
67 #define AVIF_MUSTUSEINDEX 0x00000020 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
68 #define AVIF_ISINTERLEAVED 0x00000100 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
69 #define AVIF_TRUSTCKTYPE 0x00000800 // Use CKType to find key frames? |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
70 #define AVIF_WASCAPTUREFILE 0x00010000 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
71 #define AVIF_COPYRIGHTED 0x00020000 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
72 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
73 typedef struct |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
74 { |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
75 uint32_t dwMicroSecPerFrame; // frame display rate (or 0L) |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
76 uint32_t dwMaxBytesPerSec; // max. transfer rate |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
77 uint32_t dwPaddingGranularity; // pad to multiples of this |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
78 // size; normally 2K. |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
79 uint32_t dwFlags; // the ever-present flags |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
80 uint32_t dwTotalFrames; // # frames in file |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
81 uint32_t dwInitialFrames; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
82 uint32_t dwStreams; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
83 uint32_t dwSuggestedBufferSize; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
84 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
85 uint32_t dwWidth; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
86 uint32_t dwHeight; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
87 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
88 uint32_t dwReserved[4]; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
89 } MainAVIHeader; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
90 |
12345 | 91 typedef struct rectangle_t { |
12341
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
92 short left; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
93 short top; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
94 short right; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
95 short bottom; |
12345 | 96 } rectangle_t; |
12341
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
97 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
98 typedef struct { |
12356
6a61d694f7d3
minimal fix for alex's 1000000000000l compile errors. imo the fix in
rfelker
parents:
12345
diff
changeset
|
99 uint32_t fccType; |
6a61d694f7d3
minimal fix for alex's 1000000000000l compile errors. imo the fix in
rfelker
parents:
12345
diff
changeset
|
100 uint32_t fccHandler; |
12341
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
101 uint32_t dwFlags; /* Contains AVITF_* flags */ |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
102 uint16_t wPriority; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
103 uint16_t wLanguage; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
104 uint32_t dwInitialFrames; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
105 uint32_t dwScale; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
106 uint32_t dwRate; /* dwRate / dwScale == samples/second */ |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
107 uint32_t dwStart; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
108 uint32_t dwLength; /* In units above... */ |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
109 uint32_t dwSuggestedBufferSize; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
110 uint32_t dwQuality; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
111 uint32_t dwSampleSize; |
12345 | 112 rectangle_t rcFrame; |
12341
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
113 } AVIStreamHeader; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
114 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
115 /* Flags for index */ |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
116 #define AVIIF_LIST 0x00000001L // chunk is a 'LIST' |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
117 #define AVIIF_KEYFRAME 0x00000010L // this frame is a key frame. |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
118 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
119 #define AVIIF_NOTIME 0x00000100L // this frame doesn't take any time |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
120 #define AVIIF_COMPUSE 0x0FFF0000L // these bits are for compressor use |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
121 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
122 #define FOURCC_RIFF mmioFOURCC('R', 'I', 'F', 'F') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
123 #define FOURCC_LIST mmioFOURCC('L', 'I', 'S', 'T') |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
124 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
125 typedef struct |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
126 { |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
127 uint32_t ckid; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
128 uint32_t dwFlags; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
129 uint32_t dwChunkOffset; // Position of chunk |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
130 uint32_t dwChunkLength; // Length of chunk |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
131 } AVIINDEXENTRY; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
132 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
133 |
12036 | 134 typedef struct _avisuperindex_entry { |
135 uint64_t qwOffset; // absolute file offset | |
136 uint32_t dwSize; // size of index chunk at this offset | |
137 uint32_t dwDuration; // time span in stream ticks | |
138 } avisuperindex_entry; | |
139 | |
140 typedef struct _avistdindex_entry { | |
141 uint32_t dwOffset; // qwBaseOffset + this is absolute file offset | |
142 uint32_t dwSize; // bit 31 is set if this is NOT a keyframe | |
143 } avistdindex_entry; | |
144 | |
145 // Standard index | |
12800 | 146 typedef struct __attribute((packed)) _avistdindex_chunk { |
12036 | 147 char fcc[4]; // ix## |
148 uint32_t dwSize; // size of this chunk | |
149 uint16_t wLongsPerEntry; // must be sizeof(aIndex[0])/sizeof(DWORD) | |
150 uint8_t bIndexSubType; // must be 0 | |
151 uint8_t bIndexType; // must be AVI_INDEX_OF_CHUNKS | |
152 uint32_t nEntriesInUse; // first unused entry | |
153 char dwChunkId[4]; // '##dc' or '##db' or '##wb' etc.. | |
154 uint64_t qwBaseOffset; // all dwOffsets in aIndex array are relative to this | |
155 uint32_t dwReserved3; // must be 0 | |
156 avistdindex_entry *aIndex; // the actual frames | |
157 } avistdindex_chunk; | |
158 | |
159 | |
160 // Base Index Form 'indx' | |
161 typedef struct _avisuperindex_chunk { | |
162 char fcc[4]; | |
163 uint32_t dwSize; // size of this chunk | |
164 uint16_t wLongsPerEntry; // size of each entry in aIndex array (must be 4*4 for us) | |
165 uint8_t bIndexSubType; // future use. must be 0 | |
166 uint8_t bIndexType; // one of AVI_INDEX_* codes | |
167 uint32_t nEntriesInUse; // index of first unused member in aIndex array | |
168 char dwChunkId[4]; // fcc of what is indexed | |
169 uint32_t dwReserved[3]; // meaning differs for each index type/subtype. | |
170 // 0 if unused | |
171 avisuperindex_entry *aIndex; // position of ix## chunks | |
172 avistdindex_chunk *stdidx; // the actual std indices | |
173 } avisuperindex_chunk; | |
174 | |
175 typedef struct { | |
176 uint32_t CompressedBMHeight; | |
177 uint32_t CompressedBMWidth; | |
178 uint32_t ValidBMHeight; | |
179 uint32_t ValidBMWidth; | |
180 uint32_t ValidBMXOffset; | |
181 uint32_t ValidBMYOffset; | |
182 uint32_t VideoXOffsetInT; | |
183 uint32_t VideoYValidStartLine; | |
184 } VIDEO_FIELD_DESC; | |
185 | |
186 typedef struct { | |
187 uint32_t VideoFormatToken; | |
188 uint32_t VideoStandard; | |
189 uint32_t dwVerticalRefreshRate; | |
190 uint32_t dwHTotalInT; | |
191 uint32_t dwVTotalInLines; | |
192 uint32_t dwFrameAspectRatio; | |
193 uint32_t dwFrameWidthInPixels; | |
194 uint32_t dwFrameHeightInLines; | |
195 uint32_t nbFieldPerFrame; | |
196 VIDEO_FIELD_DESC FieldInfo[2]; | |
197 } VideoPropHeader; | |
198 | |
12357 | 199 typedef enum { |
12036 | 200 FORMAT_UNKNOWN, |
201 FORMAT_PAL_SQUARE, | |
202 FORMAT_PAL_CCIR_601, | |
203 FORMAT_NTSC_SQUARE, | |
204 FORMAT_NTSC_CCIR_601, | |
205 } VIDEO_FORMAT; | |
206 | |
12357 | 207 typedef enum { |
12036 | 208 STANDARD_UNKNOWN, |
209 STANDARD_PAL, | |
210 STANDARD_NTSC, | |
211 STANDARD_SECAM | |
212 } VIDEO_STANDARD; | |
213 | |
214 #define MAKE_AVI_ASPECT(a, b) (((a)<<16)|(b)) | |
215 #define GET_AVI_ASPECT(a) ((float)((a)>>16)/(float)((a)&0xffff)) | |
216 | |
1343 | 217 /* |
218 * Some macros to swap little endian structures read from an AVI file | |
219 * into machine endian format | |
220 */ | |
221 #ifdef WORDS_BIGENDIAN | |
222 #define le2me_MainAVIHeader(h) { \ | |
223 (h)->dwMicroSecPerFrame = le2me_32((h)->dwMicroSecPerFrame); \ | |
224 (h)->dwMaxBytesPerSec = le2me_32((h)->dwMaxBytesPerSec); \ | |
225 (h)->dwPaddingGranularity = le2me_32((h)->dwPaddingGranularity); \ | |
226 (h)->dwFlags = le2me_32((h)->dwFlags); \ | |
227 (h)->dwTotalFrames = le2me_32((h)->dwTotalFrames); \ | |
228 (h)->dwInitialFrames = le2me_32((h)->dwInitialFrames); \ | |
229 (h)->dwStreams = le2me_32((h)->dwStreams); \ | |
230 (h)->dwSuggestedBufferSize = le2me_32((h)->dwSuggestedBufferSize); \ | |
231 (h)->dwWidth = le2me_32((h)->dwWidth); \ | |
232 (h)->dwHeight = le2me_32((h)->dwHeight); \ | |
233 } | |
234 | |
235 #define le2me_AVIStreamHeader(h) { \ | |
236 (h)->fccType = le2me_32((h)->fccType); \ | |
237 (h)->fccHandler = le2me_32((h)->fccHandler); \ | |
238 (h)->dwFlags = le2me_32((h)->dwFlags); \ | |
239 (h)->wPriority = le2me_16((h)->wPriority); \ | |
240 (h)->wLanguage = le2me_16((h)->wLanguage); \ | |
241 (h)->dwInitialFrames = le2me_32((h)->dwInitialFrames); \ | |
242 (h)->dwScale = le2me_32((h)->dwScale); \ | |
243 (h)->dwRate = le2me_32((h)->dwRate); \ | |
244 (h)->dwStart = le2me_32((h)->dwStart); \ | |
245 (h)->dwLength = le2me_32((h)->dwLength); \ | |
246 (h)->dwSuggestedBufferSize = le2me_32((h)->dwSuggestedBufferSize); \ | |
247 (h)->dwQuality = le2me_32((h)->dwQuality); \ | |
248 (h)->dwSampleSize = le2me_32((h)->dwSampleSize); \ | |
249 le2me_RECT(&(h)->rcFrame); \ | |
250 } | |
251 #define le2me_RECT(h) { \ | |
252 (h)->left = le2me_16((h)->left); \ | |
253 (h)->top = le2me_16((h)->top); \ | |
254 (h)->right = le2me_16((h)->right); \ | |
255 (h)->bottom = le2me_16((h)->bottom); \ | |
256 } | |
257 #define le2me_BITMAPINFOHEADER(h) { \ | |
258 (h)->biSize = le2me_32((h)->biSize); \ | |
259 (h)->biWidth = le2me_32((h)->biWidth); \ | |
260 (h)->biHeight = le2me_32((h)->biHeight); \ | |
261 (h)->biPlanes = le2me_16((h)->biPlanes); \ | |
262 (h)->biBitCount = le2me_16((h)->biBitCount); \ | |
263 (h)->biCompression = le2me_32((h)->biCompression); \ | |
264 (h)->biSizeImage = le2me_32((h)->biSizeImage); \ | |
265 (h)->biXPelsPerMeter = le2me_32((h)->biXPelsPerMeter); \ | |
266 (h)->biYPelsPerMeter = le2me_32((h)->biYPelsPerMeter); \ | |
267 (h)->biClrUsed = le2me_32((h)->biClrUsed); \ | |
268 (h)->biClrImportant = le2me_32((h)->biClrImportant); \ | |
269 } | |
270 #define le2me_WAVEFORMATEX(h) { \ | |
271 (h)->wFormatTag = le2me_16((h)->wFormatTag); \ | |
272 (h)->nChannels = le2me_16((h)->nChannels); \ | |
273 (h)->nSamplesPerSec = le2me_32((h)->nSamplesPerSec); \ | |
274 (h)->nAvgBytesPerSec = le2me_32((h)->nAvgBytesPerSec); \ | |
275 (h)->nBlockAlign = le2me_16((h)->nBlockAlign); \ | |
276 (h)->wBitsPerSample = le2me_16((h)->wBitsPerSample); \ | |
277 (h)->cbSize = le2me_16((h)->cbSize); \ | |
278 } | |
279 #define le2me_AVIINDEXENTRY(h) { \ | |
280 (h)->ckid = le2me_32((h)->ckid); \ | |
281 (h)->dwFlags = le2me_32((h)->dwFlags); \ | |
282 (h)->dwChunkOffset = le2me_32((h)->dwChunkOffset); \ | |
283 (h)->dwChunkLength = le2me_32((h)->dwChunkLength); \ | |
284 } | |
12036 | 285 #define le2me_AVISTDIDXCHUNK(h) {\ |
286 char c; \ | |
287 c = (h)->fcc[0]; (h)->fcc[0] = (h)->fcc[3]; (h)->fcc[3] = c; \ | |
288 c = (h)->fcc[1]; (h)->fcc[1] = (h)->fcc[2]; (h)->fcc[2] = c; \ | |
289 (h)->dwSize = le2me_32((h)->dwSize); \ | |
290 (h)->wLongsPerEntry = le2me_16((h)->wLongsPerEntry); \ | |
291 (h)->nEntriesInUse = le2me_32((h)->nEntriesInUse); \ | |
292 c = (h)->dwChunkId[0]; (h)->dwChunkId[0] = (h)->dwChunkId[3]; (h)->dwChunkId[3] = c; \ | |
293 c = (h)->dwChunkId[1]; (h)->dwChunkId[1] = (h)->dwChunkId[2]; (h)->dwChunkId[2] = c; \ | |
294 (h)->qwBaseOffset = le2me_64((h)->qwBaseOffset); \ | |
295 (h)->dwReserved3 = le2me_32((h)->dwReserved3); \ | |
296 } | |
297 #define le2me_AVISTDIDXENTRY(h) {\ | |
298 (h)->dwOffset = le2me_32((h)->dwOffset); \ | |
299 (h)->dwSize = le2me_32((h)->dwSize); \ | |
300 } | |
301 #define le2me_VideoPropHeader(h) { \ | |
12046 | 302 (h)->VideoFormatToken = le2me_32((h)->VideoFormatToken); \ |
303 (h)->VideoStandard = le2me_32((h)->VideoStandard); \ | |
304 (h)->dwVerticalRefreshRate = le2me_32((h)->dwVerticalRefreshRate); \ | |
305 (h)->dwHTotalInT = le2me_32((h)->dwHTotalInT); \ | |
306 (h)->dwVTotalInLines = le2me_32((h)->dwVTotalInLines); \ | |
307 (h)->dwFrameAspectRatio = le2me_32((h)->dwFrameAspectRatio); \ | |
308 (h)->dwFrameWidthInPixels = le2me_32((h)->dwFrameWidthInPixels); \ | |
309 (h)->dwFrameHeightInLines = le2me_32((h)->dwFrameHeightInLines); \ | |
310 (h)->nbFieldPerFrame = le2me_32((h)->nbFieldPerFrame); \ | |
12036 | 311 } |
312 #define le2me_VIDEO_FIELD_DESC(h) { \ | |
12046 | 313 (h)->CompressedBMHeight = le2me_32((h)->CompressedBMHeight); \ |
314 (h)->CompressedBMWidth = le2me_32((h)->CompressedBMWidth); \ | |
315 (h)->ValidBMHeight = le2me_32((h)->ValidBMHeight); \ | |
316 (h)->ValidBMWidth = le2me_32((h)->ValidBMWidth); \ | |
317 (h)->ValidBMXOffset = le2me_32((h)->ValidBMXOffset); \ | |
318 (h)->ValidBMYOffset = le2me_32((h)->ValidBMYOffset); \ | |
319 (h)->VideoXOffsetInT = le2me_32((h)->VideoXOffsetInT); \ | |
320 (h)->VideoYValidStartLine = le2me_32((h)->VideoYValidStartLine); \ | |
12036 | 321 } |
322 | |
1343 | 323 #else |
324 #define le2me_MainAVIHeader(h) /**/ | |
325 #define le2me_AVIStreamHeader(h) /**/ | |
326 #define le2me_RECT(h) /**/ | |
327 #define le2me_BITMAPINFOHEADER(h) /**/ | |
328 #define le2me_WAVEFORMATEX(h) /**/ | |
329 #define le2me_AVIINDEXENTRY(h) /**/ | |
12036 | 330 #define le2me_AVISTDIDXCHUNK(h) /**/ |
331 #define le2me_AVISTDIDXENTRY(h) /**/ | |
332 #define le2me_VideoPropHeader(h) /**/ | |
333 #define le2me_VIDEO_FIELD_DESC(h) /**/ | |
1343 | 334 #endif |
335 | |
1485
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
336 typedef struct { |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
337 // index stuff: |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
338 void* idx; |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
339 int idx_size; |
6056
f980563afdbc
big (>2GB) AVI files support - patch by Wolfram Gloger <wg@malloc.de>
arpi
parents:
2330
diff
changeset
|
340 off_t idx_pos; |
f980563afdbc
big (>2GB) AVI files support - patch by Wolfram Gloger <wg@malloc.de>
arpi
parents:
2330
diff
changeset
|
341 off_t idx_pos_a; |
f980563afdbc
big (>2GB) AVI files support - patch by Wolfram Gloger <wg@malloc.de>
arpi
parents:
2330
diff
changeset
|
342 off_t idx_pos_v; |
f980563afdbc
big (>2GB) AVI files support - patch by Wolfram Gloger <wg@malloc.de>
arpi
parents:
2330
diff
changeset
|
343 off_t idx_offset; // ennyit kell hozzaadni az index offset ertekekhez |
8030
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
6056
diff
changeset
|
344 // bps-based PTS stuff: |
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
6056
diff
changeset
|
345 int video_pack_no; |
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
6056
diff
changeset
|
346 int audio_block_size; |
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
6056
diff
changeset
|
347 off_t audio_block_no; |
1485
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
348 // interleaved PTS stuff: |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
349 int skip_video_frames; |
2330 | 350 int audio_streams; |
1485
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
351 float avi_audio_pts; |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
352 float avi_video_pts; |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
353 float pts_correction; |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
354 unsigned int pts_corr_bytes; |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
355 unsigned char pts_corrected; |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
356 unsigned char pts_has_video; |
8208
ae5a2ae1c349
demuxer_control(), percent position and time length query implemented in
arpi
parents:
8030
diff
changeset
|
357 unsigned int numberofframes; |
12036 | 358 avisuperindex_chunk *suidx; |
359 int suidx_size; | |
360 int isodml; | |
1485
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
361 } avi_priv_t; |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
362 |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
363 #define AVI_PRIV ((avi_priv_t*)(demuxer->priv)) |
12036 | 364 |
365 #define AVI_IDX_OFFSET(x) ((((uint64_t)(x)->dwFlags&0xffff0000)<<16)+(x)->dwChunkOffset) | |
366 | |
367 #endif /* _aviheader_h */ |