Mercurial > mplayer.hg
annotate libmpdemux/aviheader.h @ 25065:54dba785e683
New media format negotiation code:
loop through all available formats trying to
establish connection between pins.
Negotiation stops either when all formats are rejected
(error reported in this case) or when connection is
established (which can happen only when current media
format is accepted by both of the pins).
author | voroshil |
---|---|
date | Sun, 18 Nov 2007 11:13:28 +0000 |
parents | 3f0d00abc073 |
children | 0acd5b6453fb |
rev | line source |
---|---|
23689
3f0d00abc073
Do not use leading underscores in multiple inclusion guards, they are reserved.
diego
parents:
21531
diff
changeset
|
1 #ifndef AVIHEADER_H |
3f0d00abc073
Do not use leading underscores in multiple inclusion guards, they are reserved.
diego
parents:
21531
diff
changeset
|
2 #define AVIHEADER_H |
1343 | 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 */ |
21372 | 5 #include "libavutil/common.h" |
21507
fa99b3d31d13
Hack around libavutil/bswap.h compilation problems due to always_inline undefined.
reimar
parents:
21372
diff
changeset
|
6 #include "mpbswap.h" |
1343 | 7 |
12341
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
8 #ifndef mmioFOURCC |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
9 #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
|
10 ( (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
|
11 ( (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
|
12 #endif |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
13 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
14 /* 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
|
15 #ifndef aviTWOCC |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
16 #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
|
17 #endif |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
18 |
12356
6a61d694f7d3
minimal fix for alex's 1000000000000l compile errors. imo the fix in
rfelker
parents:
12345
diff
changeset
|
19 //typedef uint16_t TWOCC; |
6a61d694f7d3
minimal fix for alex's 1000000000000l compile errors. imo the fix in
rfelker
parents:
12345
diff
changeset
|
20 //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
|
21 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
22 /* 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
|
23 #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
|
24 #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
|
25 #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
|
26 #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
|
27 #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
|
28 #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
|
29 #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
|
30 #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
|
31 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
32 #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
|
33 #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
|
34 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
35 #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
|
36 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
37 /* |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
38 ** 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
|
39 */ |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
40 #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
|
41 #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
|
42 #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
|
43 #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
|
44 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
45 /* Basic chunk types */ |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
46 #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
|
47 #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
|
48 #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
|
49 #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
|
50 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
51 /* 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
|
52 #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
|
53 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
54 /* 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
|
55 #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
|
56 #define AVIF_MUSTUSEINDEX 0x00000020 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
57 #define AVIF_ISINTERLEAVED 0x00000100 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
58 #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
|
59 #define AVIF_WASCAPTUREFILE 0x00010000 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
60 #define AVIF_COPYRIGHTED 0x00020000 |
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 typedef struct |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
63 { |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
64 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
|
65 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
|
66 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
|
67 // size; normally 2K. |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
68 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
|
69 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
|
70 uint32_t dwInitialFrames; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
71 uint32_t dwStreams; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
72 uint32_t dwSuggestedBufferSize; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
73 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
74 uint32_t dwWidth; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
75 uint32_t dwHeight; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
76 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
77 uint32_t dwReserved[4]; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
78 } MainAVIHeader; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
79 |
12345 | 80 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
|
81 short left; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
82 short top; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
83 short right; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
84 short bottom; |
12345 | 85 } rectangle_t; |
12341
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
86 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
87 typedef struct { |
12356
6a61d694f7d3
minimal fix for alex's 1000000000000l compile errors. imo the fix in
rfelker
parents:
12345
diff
changeset
|
88 uint32_t fccType; |
6a61d694f7d3
minimal fix for alex's 1000000000000l compile errors. imo the fix in
rfelker
parents:
12345
diff
changeset
|
89 uint32_t fccHandler; |
12341
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
90 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
|
91 uint16_t wPriority; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
92 uint16_t wLanguage; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
93 uint32_t dwInitialFrames; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
94 uint32_t dwScale; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
95 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
|
96 uint32_t dwStart; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
97 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
|
98 uint32_t dwSuggestedBufferSize; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
99 uint32_t dwQuality; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
100 uint32_t dwSampleSize; |
12345 | 101 rectangle_t rcFrame; |
12341
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
102 } AVIStreamHeader; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
103 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
104 /* Flags for index */ |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
105 #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
|
106 #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
|
107 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
108 #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
|
109 #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
|
110 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
111 #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
|
112 #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
|
113 |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
114 typedef struct |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
115 { |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
116 uint32_t ckid; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
117 uint32_t dwFlags; |
0db4a3a5b01d
removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents:
12046
diff
changeset
|
118 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
|
119 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
|
120 } AVIINDEXENTRY; |
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 |
12036 | 123 typedef struct _avisuperindex_entry { |
124 uint64_t qwOffset; // absolute file offset | |
125 uint32_t dwSize; // size of index chunk at this offset | |
126 uint32_t dwDuration; // time span in stream ticks | |
127 } avisuperindex_entry; | |
128 | |
129 typedef struct _avistdindex_entry { | |
130 uint32_t dwOffset; // qwBaseOffset + this is absolute file offset | |
131 uint32_t dwSize; // bit 31 is set if this is NOT a keyframe | |
132 } avistdindex_entry; | |
133 | |
134 // Standard index | |
15905 | 135 typedef struct __attribute__((packed)) _avistdindex_chunk { |
12036 | 136 char fcc[4]; // ix## |
137 uint32_t dwSize; // size of this chunk | |
138 uint16_t wLongsPerEntry; // must be sizeof(aIndex[0])/sizeof(DWORD) | |
139 uint8_t bIndexSubType; // must be 0 | |
140 uint8_t bIndexType; // must be AVI_INDEX_OF_CHUNKS | |
141 uint32_t nEntriesInUse; // first unused entry | |
142 char dwChunkId[4]; // '##dc' or '##db' or '##wb' etc.. | |
143 uint64_t qwBaseOffset; // all dwOffsets in aIndex array are relative to this | |
144 uint32_t dwReserved3; // must be 0 | |
145 avistdindex_entry *aIndex; // the actual frames | |
146 } avistdindex_chunk; | |
147 | |
148 | |
149 // Base Index Form 'indx' | |
150 typedef struct _avisuperindex_chunk { | |
151 char fcc[4]; | |
152 uint32_t dwSize; // size of this chunk | |
153 uint16_t wLongsPerEntry; // size of each entry in aIndex array (must be 4*4 for us) | |
154 uint8_t bIndexSubType; // future use. must be 0 | |
155 uint8_t bIndexType; // one of AVI_INDEX_* codes | |
156 uint32_t nEntriesInUse; // index of first unused member in aIndex array | |
157 char dwChunkId[4]; // fcc of what is indexed | |
158 uint32_t dwReserved[3]; // meaning differs for each index type/subtype. | |
159 // 0 if unused | |
160 avisuperindex_entry *aIndex; // position of ix## chunks | |
161 avistdindex_chunk *stdidx; // the actual std indices | |
162 } avisuperindex_chunk; | |
163 | |
164 typedef struct { | |
165 uint32_t CompressedBMHeight; | |
166 uint32_t CompressedBMWidth; | |
167 uint32_t ValidBMHeight; | |
168 uint32_t ValidBMWidth; | |
169 uint32_t ValidBMXOffset; | |
170 uint32_t ValidBMYOffset; | |
171 uint32_t VideoXOffsetInT; | |
172 uint32_t VideoYValidStartLine; | |
173 } VIDEO_FIELD_DESC; | |
174 | |
175 typedef struct { | |
176 uint32_t VideoFormatToken; | |
177 uint32_t VideoStandard; | |
178 uint32_t dwVerticalRefreshRate; | |
179 uint32_t dwHTotalInT; | |
180 uint32_t dwVTotalInLines; | |
181 uint32_t dwFrameAspectRatio; | |
182 uint32_t dwFrameWidthInPixels; | |
183 uint32_t dwFrameHeightInLines; | |
184 uint32_t nbFieldPerFrame; | |
185 VIDEO_FIELD_DESC FieldInfo[2]; | |
186 } VideoPropHeader; | |
187 | |
12357 | 188 typedef enum { |
12036 | 189 FORMAT_UNKNOWN, |
190 FORMAT_PAL_SQUARE, | |
191 FORMAT_PAL_CCIR_601, | |
192 FORMAT_NTSC_SQUARE, | |
193 FORMAT_NTSC_CCIR_601, | |
194 } VIDEO_FORMAT; | |
195 | |
12357 | 196 typedef enum { |
12036 | 197 STANDARD_UNKNOWN, |
198 STANDARD_PAL, | |
199 STANDARD_NTSC, | |
200 STANDARD_SECAM | |
201 } VIDEO_STANDARD; | |
202 | |
203 #define MAKE_AVI_ASPECT(a, b) (((a)<<16)|(b)) | |
204 #define GET_AVI_ASPECT(a) ((float)((a)>>16)/(float)((a)&0xffff)) | |
205 | |
1343 | 206 /* |
207 * Some macros to swap little endian structures read from an AVI file | |
208 * into machine endian format | |
209 */ | |
210 #ifdef WORDS_BIGENDIAN | |
211 #define le2me_MainAVIHeader(h) { \ | |
212 (h)->dwMicroSecPerFrame = le2me_32((h)->dwMicroSecPerFrame); \ | |
213 (h)->dwMaxBytesPerSec = le2me_32((h)->dwMaxBytesPerSec); \ | |
214 (h)->dwPaddingGranularity = le2me_32((h)->dwPaddingGranularity); \ | |
215 (h)->dwFlags = le2me_32((h)->dwFlags); \ | |
216 (h)->dwTotalFrames = le2me_32((h)->dwTotalFrames); \ | |
217 (h)->dwInitialFrames = le2me_32((h)->dwInitialFrames); \ | |
218 (h)->dwStreams = le2me_32((h)->dwStreams); \ | |
219 (h)->dwSuggestedBufferSize = le2me_32((h)->dwSuggestedBufferSize); \ | |
220 (h)->dwWidth = le2me_32((h)->dwWidth); \ | |
221 (h)->dwHeight = le2me_32((h)->dwHeight); \ | |
222 } | |
223 | |
224 #define le2me_AVIStreamHeader(h) { \ | |
225 (h)->fccType = le2me_32((h)->fccType); \ | |
226 (h)->fccHandler = le2me_32((h)->fccHandler); \ | |
227 (h)->dwFlags = le2me_32((h)->dwFlags); \ | |
228 (h)->wPriority = le2me_16((h)->wPriority); \ | |
229 (h)->wLanguage = le2me_16((h)->wLanguage); \ | |
230 (h)->dwInitialFrames = le2me_32((h)->dwInitialFrames); \ | |
231 (h)->dwScale = le2me_32((h)->dwScale); \ | |
232 (h)->dwRate = le2me_32((h)->dwRate); \ | |
233 (h)->dwStart = le2me_32((h)->dwStart); \ | |
234 (h)->dwLength = le2me_32((h)->dwLength); \ | |
235 (h)->dwSuggestedBufferSize = le2me_32((h)->dwSuggestedBufferSize); \ | |
236 (h)->dwQuality = le2me_32((h)->dwQuality); \ | |
237 (h)->dwSampleSize = le2me_32((h)->dwSampleSize); \ | |
238 le2me_RECT(&(h)->rcFrame); \ | |
239 } | |
240 #define le2me_RECT(h) { \ | |
241 (h)->left = le2me_16((h)->left); \ | |
242 (h)->top = le2me_16((h)->top); \ | |
243 (h)->right = le2me_16((h)->right); \ | |
244 (h)->bottom = le2me_16((h)->bottom); \ | |
245 } | |
246 #define le2me_BITMAPINFOHEADER(h) { \ | |
247 (h)->biSize = le2me_32((h)->biSize); \ | |
248 (h)->biWidth = le2me_32((h)->biWidth); \ | |
249 (h)->biHeight = le2me_32((h)->biHeight); \ | |
250 (h)->biPlanes = le2me_16((h)->biPlanes); \ | |
251 (h)->biBitCount = le2me_16((h)->biBitCount); \ | |
252 (h)->biCompression = le2me_32((h)->biCompression); \ | |
253 (h)->biSizeImage = le2me_32((h)->biSizeImage); \ | |
254 (h)->biXPelsPerMeter = le2me_32((h)->biXPelsPerMeter); \ | |
255 (h)->biYPelsPerMeter = le2me_32((h)->biYPelsPerMeter); \ | |
256 (h)->biClrUsed = le2me_32((h)->biClrUsed); \ | |
257 (h)->biClrImportant = le2me_32((h)->biClrImportant); \ | |
258 } | |
259 #define le2me_WAVEFORMATEX(h) { \ | |
260 (h)->wFormatTag = le2me_16((h)->wFormatTag); \ | |
261 (h)->nChannels = le2me_16((h)->nChannels); \ | |
262 (h)->nSamplesPerSec = le2me_32((h)->nSamplesPerSec); \ | |
263 (h)->nAvgBytesPerSec = le2me_32((h)->nAvgBytesPerSec); \ | |
264 (h)->nBlockAlign = le2me_16((h)->nBlockAlign); \ | |
265 (h)->wBitsPerSample = le2me_16((h)->wBitsPerSample); \ | |
266 (h)->cbSize = le2me_16((h)->cbSize); \ | |
267 } | |
268 #define le2me_AVIINDEXENTRY(h) { \ | |
269 (h)->ckid = le2me_32((h)->ckid); \ | |
270 (h)->dwFlags = le2me_32((h)->dwFlags); \ | |
271 (h)->dwChunkOffset = le2me_32((h)->dwChunkOffset); \ | |
272 (h)->dwChunkLength = le2me_32((h)->dwChunkLength); \ | |
273 } | |
12036 | 274 #define le2me_AVISTDIDXCHUNK(h) {\ |
275 char c; \ | |
276 c = (h)->fcc[0]; (h)->fcc[0] = (h)->fcc[3]; (h)->fcc[3] = c; \ | |
277 c = (h)->fcc[1]; (h)->fcc[1] = (h)->fcc[2]; (h)->fcc[2] = c; \ | |
278 (h)->dwSize = le2me_32((h)->dwSize); \ | |
279 (h)->wLongsPerEntry = le2me_16((h)->wLongsPerEntry); \ | |
280 (h)->nEntriesInUse = le2me_32((h)->nEntriesInUse); \ | |
281 c = (h)->dwChunkId[0]; (h)->dwChunkId[0] = (h)->dwChunkId[3]; (h)->dwChunkId[3] = c; \ | |
282 c = (h)->dwChunkId[1]; (h)->dwChunkId[1] = (h)->dwChunkId[2]; (h)->dwChunkId[2] = c; \ | |
283 (h)->qwBaseOffset = le2me_64((h)->qwBaseOffset); \ | |
284 (h)->dwReserved3 = le2me_32((h)->dwReserved3); \ | |
285 } | |
286 #define le2me_AVISTDIDXENTRY(h) {\ | |
287 (h)->dwOffset = le2me_32((h)->dwOffset); \ | |
288 (h)->dwSize = le2me_32((h)->dwSize); \ | |
289 } | |
290 #define le2me_VideoPropHeader(h) { \ | |
12046 | 291 (h)->VideoFormatToken = le2me_32((h)->VideoFormatToken); \ |
292 (h)->VideoStandard = le2me_32((h)->VideoStandard); \ | |
293 (h)->dwVerticalRefreshRate = le2me_32((h)->dwVerticalRefreshRate); \ | |
294 (h)->dwHTotalInT = le2me_32((h)->dwHTotalInT); \ | |
295 (h)->dwVTotalInLines = le2me_32((h)->dwVTotalInLines); \ | |
296 (h)->dwFrameAspectRatio = le2me_32((h)->dwFrameAspectRatio); \ | |
297 (h)->dwFrameWidthInPixels = le2me_32((h)->dwFrameWidthInPixels); \ | |
298 (h)->dwFrameHeightInLines = le2me_32((h)->dwFrameHeightInLines); \ | |
299 (h)->nbFieldPerFrame = le2me_32((h)->nbFieldPerFrame); \ | |
12036 | 300 } |
301 #define le2me_VIDEO_FIELD_DESC(h) { \ | |
12046 | 302 (h)->CompressedBMHeight = le2me_32((h)->CompressedBMHeight); \ |
303 (h)->CompressedBMWidth = le2me_32((h)->CompressedBMWidth); \ | |
304 (h)->ValidBMHeight = le2me_32((h)->ValidBMHeight); \ | |
305 (h)->ValidBMWidth = le2me_32((h)->ValidBMWidth); \ | |
306 (h)->ValidBMXOffset = le2me_32((h)->ValidBMXOffset); \ | |
307 (h)->ValidBMYOffset = le2me_32((h)->ValidBMYOffset); \ | |
308 (h)->VideoXOffsetInT = le2me_32((h)->VideoXOffsetInT); \ | |
309 (h)->VideoYValidStartLine = le2me_32((h)->VideoYValidStartLine); \ | |
12036 | 310 } |
311 | |
1343 | 312 #else |
313 #define le2me_MainAVIHeader(h) /**/ | |
314 #define le2me_AVIStreamHeader(h) /**/ | |
315 #define le2me_RECT(h) /**/ | |
316 #define le2me_BITMAPINFOHEADER(h) /**/ | |
317 #define le2me_WAVEFORMATEX(h) /**/ | |
318 #define le2me_AVIINDEXENTRY(h) /**/ | |
12036 | 319 #define le2me_AVISTDIDXCHUNK(h) /**/ |
320 #define le2me_AVISTDIDXENTRY(h) /**/ | |
321 #define le2me_VideoPropHeader(h) /**/ | |
322 #define le2me_VIDEO_FIELD_DESC(h) /**/ | |
1343 | 323 #endif |
324 | |
1485
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
325 typedef struct { |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
326 // index stuff: |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
327 void* idx; |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
328 int idx_size; |
6056
f980563afdbc
big (>2GB) AVI files support - patch by Wolfram Gloger <wg@malloc.de>
arpi
parents:
2330
diff
changeset
|
329 off_t idx_pos; |
f980563afdbc
big (>2GB) AVI files support - patch by Wolfram Gloger <wg@malloc.de>
arpi
parents:
2330
diff
changeset
|
330 off_t idx_pos_a; |
f980563afdbc
big (>2GB) AVI files support - patch by Wolfram Gloger <wg@malloc.de>
arpi
parents:
2330
diff
changeset
|
331 off_t idx_pos_v; |
f980563afdbc
big (>2GB) AVI files support - patch by Wolfram Gloger <wg@malloc.de>
arpi
parents:
2330
diff
changeset
|
332 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
|
333 // bps-based PTS stuff: |
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
6056
diff
changeset
|
334 int video_pack_no; |
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
6056
diff
changeset
|
335 int audio_block_size; |
2b39ff3860b7
cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents:
6056
diff
changeset
|
336 off_t audio_block_no; |
1485
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
337 // interleaved PTS stuff: |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
338 int skip_video_frames; |
2330 | 339 int audio_streams; |
1485
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
340 float avi_audio_pts; |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
341 float avi_video_pts; |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
342 float pts_correction; |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
343 unsigned int pts_corr_bytes; |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
344 unsigned char pts_corrected; |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
345 unsigned char pts_has_video; |
8208
ae5a2ae1c349
demuxer_control(), percent position and time length query implemented in
arpi
parents:
8030
diff
changeset
|
346 unsigned int numberofframes; |
12036 | 347 avisuperindex_chunk *suidx; |
348 int suidx_size; | |
349 int isodml; | |
1485
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
350 } avi_priv_t; |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
351 |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1343
diff
changeset
|
352 #define AVI_PRIV ((avi_priv_t*)(demuxer->priv)) |
12036 | 353 |
354 #define AVI_IDX_OFFSET(x) ((((uint64_t)(x)->dwFlags&0xffff0000)<<16)+(x)->dwChunkOffset) | |
355 | |
356 #endif /* _aviheader_h */ |