annotate libmpdemux/aviheader.h @ 35455:c9c79a011f6f

Fix bug with wrong track number after playlist has been cleared. This also fixes issues with other associated information if there is no media opened after playback. Roughly based on a patch by Hans-Dieter Kosch, hdkosch kabelbw de.
author ib
date Sat, 01 Dec 2012 19:18:47 +0000
parents 1c991ec0e6da
children 35404774428d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
29238
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27063
diff changeset
1 /*
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27063
diff changeset
2 * This file is part of MPlayer.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27063
diff changeset
3 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27063
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27063
diff changeset
5 * it under the terms of the GNU General Public License as published by
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27063
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27063
diff changeset
7 * (at your option) any later version.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27063
diff changeset
8 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27063
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27063
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27063
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27063
diff changeset
12 * GNU General Public License for more details.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27063
diff changeset
13 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27063
diff changeset
14 * You should have received a copy of the GNU General Public License along
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27063
diff changeset
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27063
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27063
diff changeset
17 */
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27063
diff changeset
18
26029
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25607
diff changeset
19 #ifndef MPLAYER_AVIHEADER_H
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25607
diff changeset
20 #define MPLAYER_AVIHEADER_H
1343
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
21
27063
290ba4821dda Add missing #includes that are required for things used in the header.
diego
parents: 26029
diff changeset
22 #include <sys/types.h>
290ba4821dda Add missing #includes that are required for things used in the header.
diego
parents: 26029
diff changeset
23 #include <stdint.h>
29401
f01023c524c3 Replace WORDS_BIGENDIAN by HAVE_BIGENDIAN in all internal code.
diego
parents: 29263
diff changeset
24 #include "config.h" /* get correct definition of HAVE_BIGENDIAN */
21372
1767c271d710 Remove bswap.h, use libavutil/bswap.h instead.
diego
parents: 15905
diff changeset
25 #include "libavutil/common.h"
21507
fa99b3d31d13 Hack around libavutil/bswap.h compilation problems due to always_inline undefined.
reimar
parents: 21372
diff changeset
26 #include "mpbswap.h"
30581
fef54a0e6ec2 Add read_avi_header() to aviheader.h; avoids forward declarations.
diego
parents: 29871
diff changeset
27 #include "demuxer.h"
1343
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
28
12341
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
29 #ifndef mmioFOURCC
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
30 #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
31 ( (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
32 ( (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
33 #endif
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 /* 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
36 #ifndef aviTWOCC
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
37 #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
38 #endif
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
39
12356
6a61d694f7d3 minimal fix for alex's 1000000000000l compile errors. imo the fix in
rfelker
parents: 12345
diff changeset
40 //typedef uint16_t TWOCC;
6a61d694f7d3 minimal fix for alex's 1000000000000l compile errors. imo the fix in
rfelker
parents: 12345
diff changeset
41 //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
42
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
43 /* 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
44 #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
45 #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
46 #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
47 #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
48 #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
49 #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
50 #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
51 #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
52
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
53 #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
54 #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
55
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
56 #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
57
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
58 /*
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
59 ** 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
60 */
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
61 #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
62 #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
63 #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
64 #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
65
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
66 /* Basic chunk types */
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
67 #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
68 #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
69 #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
70 #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
71
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
72 /* 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
73 #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
74
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
75 /* 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
76 #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
77 #define AVIF_MUSTUSEINDEX 0x00000020
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
78 #define AVIF_ISINTERLEAVED 0x00000100
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
79 #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
80 #define AVIF_WASCAPTUREFILE 0x00010000
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
81 #define AVIF_COPYRIGHTED 0x00020000
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
82
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
83 typedef struct
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 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
86 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
87 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
88 // size; normally 2K.
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
89 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
90 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
91 uint32_t dwInitialFrames;
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
92 uint32_t dwStreams;
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
93 uint32_t dwSuggestedBufferSize;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
94
12341
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
95 uint32_t dwWidth;
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
96 uint32_t dwHeight;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
97
12341
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
98 uint32_t dwReserved[4];
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
99 } MainAVIHeader;
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
100
12345
886fe66a2b2d dewinify
alex
parents: 12341
diff changeset
101 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
102 short left;
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
103 short top;
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
104 short right;
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
105 short bottom;
12345
886fe66a2b2d dewinify
alex
parents: 12341
diff changeset
106 } rectangle_t;
12341
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 typedef struct {
12356
6a61d694f7d3 minimal fix for alex's 1000000000000l compile errors. imo the fix in
rfelker
parents: 12345
diff changeset
109 uint32_t fccType;
6a61d694f7d3 minimal fix for alex's 1000000000000l compile errors. imo the fix in
rfelker
parents: 12345
diff changeset
110 uint32_t fccHandler;
12341
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
111 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
112 uint16_t wPriority;
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
113 uint16_t wLanguage;
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
114 uint32_t dwInitialFrames;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
115 uint32_t dwScale;
12341
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
116 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
117 uint32_t dwStart;
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
118 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
119 uint32_t dwSuggestedBufferSize;
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
120 uint32_t dwQuality;
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
121 uint32_t dwSampleSize;
12345
886fe66a2b2d dewinify
alex
parents: 12341
diff changeset
122 rectangle_t rcFrame;
12341
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
123 } AVIStreamHeader;
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 /* Flags for index */
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
126 #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
127 #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
128
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
129 #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
130 #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
131
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
132 #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
133 #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
134
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
135 typedef struct
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
136 {
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
137 uint32_t ckid;
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
138 uint32_t dwFlags;
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
139 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
140 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
141 } AVIINDEXENTRY;
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
142
0db4a3a5b01d removed loader/ dependancy, imported some files from g2, also used patches from Dominik Mierzejewski
alex
parents: 12046
diff changeset
143
25607
9d0b189ce1b2 Fix illegal identifiers: Names starting with __ or _ and uppercase are reserved
diego
parents: 25545
diff changeset
144 typedef struct avisuperindex_entry {
12036
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
145 uint64_t qwOffset; // absolute file offset
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
146 uint32_t dwSize; // size of index chunk at this offset
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
147 uint32_t dwDuration; // time span in stream ticks
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
148 } avisuperindex_entry;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
149
25607
9d0b189ce1b2 Fix illegal identifiers: Names starting with __ or _ and uppercase are reserved
diego
parents: 25545
diff changeset
150 typedef struct avistdindex_entry {
12036
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
151 uint32_t dwOffset; // qwBaseOffset + this is absolute file offset
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
152 uint32_t dwSize; // bit 31 is set if this is NOT a keyframe
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
153 } avistdindex_entry;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
154
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
155 // Standard index
25607
9d0b189ce1b2 Fix illegal identifiers: Names starting with __ or _ and uppercase are reserved
diego
parents: 25545
diff changeset
156 typedef struct __attribute__((packed)) avistdindex_chunk {
12036
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
157 char fcc[4]; // ix##
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
158 uint32_t dwSize; // size of this chunk
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
159 uint16_t wLongsPerEntry; // must be sizeof(aIndex[0])/sizeof(DWORD)
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
160 uint8_t bIndexSubType; // must be 0
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
161 uint8_t bIndexType; // must be AVI_INDEX_OF_CHUNKS
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
162 uint32_t nEntriesInUse; // first unused entry
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
163 char dwChunkId[4]; // '##dc' or '##db' or '##wb' etc..
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
164 uint64_t qwBaseOffset; // all dwOffsets in aIndex array are relative to this
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
165 uint32_t dwReserved3; // must be 0
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
166 avistdindex_entry *aIndex; // the actual frames
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
167 } avistdindex_chunk;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
168
12036
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
169
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
170 // Base Index Form 'indx'
25607
9d0b189ce1b2 Fix illegal identifiers: Names starting with __ or _ and uppercase are reserved
diego
parents: 25545
diff changeset
171 typedef struct avisuperindex_chunk {
12036
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
172 char fcc[4];
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
173 uint32_t dwSize; // size of this chunk
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
174 uint16_t wLongsPerEntry; // size of each entry in aIndex array (must be 4*4 for us)
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
175 uint8_t bIndexSubType; // future use. must be 0
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
176 uint8_t bIndexType; // one of AVI_INDEX_* codes
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
177 uint32_t nEntriesInUse; // index of first unused member in aIndex array
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
178 char dwChunkId[4]; // fcc of what is indexed
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
179 uint32_t dwReserved[3]; // meaning differs for each index type/subtype.
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
180 // 0 if unused
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
181 avisuperindex_entry *aIndex; // position of ix## chunks
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
182 avistdindex_chunk *stdidx; // the actual std indices
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
183 } avisuperindex_chunk;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
184
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
185 typedef struct {
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
186 uint32_t CompressedBMHeight;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
187 uint32_t CompressedBMWidth;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
188 uint32_t ValidBMHeight;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
189 uint32_t ValidBMWidth;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
190 uint32_t ValidBMXOffset;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
191 uint32_t ValidBMYOffset;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
192 uint32_t VideoXOffsetInT;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
193 uint32_t VideoYValidStartLine;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
194 } VIDEO_FIELD_DESC;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
195
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
196 typedef struct {
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
197 uint32_t VideoFormatToken;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
198 uint32_t VideoStandard;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
199 uint32_t dwVerticalRefreshRate;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
200 uint32_t dwHTotalInT;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
201 uint32_t dwVTotalInLines;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
202 uint32_t dwFrameAspectRatio;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
203 uint32_t dwFrameWidthInPixels;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
204 uint32_t dwFrameHeightInLines;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
205 uint32_t nbFieldPerFrame;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
206 VIDEO_FIELD_DESC FieldInfo[2];
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
207 } VideoPropHeader;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
208
12357
13e138957b7a more cola, not mine tho
rfelker
parents: 12356
diff changeset
209 typedef enum {
12036
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
210 FORMAT_UNKNOWN,
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
211 FORMAT_PAL_SQUARE,
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
212 FORMAT_PAL_CCIR_601,
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
213 FORMAT_NTSC_SQUARE,
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
214 FORMAT_NTSC_CCIR_601,
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
215 } VIDEO_FORMAT;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
216
12357
13e138957b7a more cola, not mine tho
rfelker
parents: 12356
diff changeset
217 typedef enum {
12036
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
218 STANDARD_UNKNOWN,
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
219 STANDARD_PAL,
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
220 STANDARD_NTSC,
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
221 STANDARD_SECAM
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
222 } VIDEO_STANDARD;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
223
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
224 #define MAKE_AVI_ASPECT(a, b) (((a)<<16)|(b))
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
225 #define GET_AVI_ASPECT(a) ((float)((a)>>16)/(float)((a)&0xffff))
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
226
1343
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
227 /*
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
228 * Some macros to swap little endian structures read from an AVI file
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
229 * into machine endian format
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
230 */
29401
f01023c524c3 Replace WORDS_BIGENDIAN by HAVE_BIGENDIAN in all internal code.
diego
parents: 29263
diff changeset
231 #if HAVE_BIGENDIAN
1343
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
232 #define le2me_MainAVIHeader(h) { \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
233 (h)->dwMicroSecPerFrame = le2me_32((h)->dwMicroSecPerFrame); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
234 (h)->dwMaxBytesPerSec = le2me_32((h)->dwMaxBytesPerSec); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
235 (h)->dwPaddingGranularity = le2me_32((h)->dwPaddingGranularity); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
236 (h)->dwFlags = le2me_32((h)->dwFlags); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
237 (h)->dwTotalFrames = le2me_32((h)->dwTotalFrames); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
238 (h)->dwInitialFrames = le2me_32((h)->dwInitialFrames); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
239 (h)->dwStreams = le2me_32((h)->dwStreams); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
240 (h)->dwSuggestedBufferSize = le2me_32((h)->dwSuggestedBufferSize); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
241 (h)->dwWidth = le2me_32((h)->dwWidth); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
242 (h)->dwHeight = le2me_32((h)->dwHeight); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
243 }
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
244
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
245 #define le2me_AVIStreamHeader(h) { \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
246 (h)->fccType = le2me_32((h)->fccType); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
247 (h)->fccHandler = le2me_32((h)->fccHandler); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
248 (h)->dwFlags = le2me_32((h)->dwFlags); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
249 (h)->wPriority = le2me_16((h)->wPriority); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
250 (h)->wLanguage = le2me_16((h)->wLanguage); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
251 (h)->dwInitialFrames = le2me_32((h)->dwInitialFrames); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
252 (h)->dwScale = le2me_32((h)->dwScale); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
253 (h)->dwRate = le2me_32((h)->dwRate); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
254 (h)->dwStart = le2me_32((h)->dwStart); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
255 (h)->dwLength = le2me_32((h)->dwLength); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
256 (h)->dwSuggestedBufferSize = le2me_32((h)->dwSuggestedBufferSize); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
257 (h)->dwQuality = le2me_32((h)->dwQuality); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
258 (h)->dwSampleSize = le2me_32((h)->dwSampleSize); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
259 le2me_RECT(&(h)->rcFrame); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
260 }
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
261 #define le2me_RECT(h) { \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
262 (h)->left = le2me_16((h)->left); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
263 (h)->top = le2me_16((h)->top); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
264 (h)->right = le2me_16((h)->right); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
265 (h)->bottom = le2me_16((h)->bottom); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
266 }
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
267 #define le2me_BITMAPINFOHEADER(h) { \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
268 (h)->biSize = le2me_32((h)->biSize); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
269 (h)->biWidth = le2me_32((h)->biWidth); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
270 (h)->biHeight = le2me_32((h)->biHeight); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
271 (h)->biPlanes = le2me_16((h)->biPlanes); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
272 (h)->biBitCount = le2me_16((h)->biBitCount); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
273 (h)->biCompression = le2me_32((h)->biCompression); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
274 (h)->biSizeImage = le2me_32((h)->biSizeImage); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
275 (h)->biXPelsPerMeter = le2me_32((h)->biXPelsPerMeter); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
276 (h)->biYPelsPerMeter = le2me_32((h)->biYPelsPerMeter); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
277 (h)->biClrUsed = le2me_32((h)->biClrUsed); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
278 (h)->biClrImportant = le2me_32((h)->biClrImportant); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
279 }
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
280 #define le2me_WAVEFORMATEX(h) { \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
281 (h)->wFormatTag = le2me_16((h)->wFormatTag); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
282 (h)->nChannels = le2me_16((h)->nChannels); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
283 (h)->nSamplesPerSec = le2me_32((h)->nSamplesPerSec); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
284 (h)->nAvgBytesPerSec = le2me_32((h)->nAvgBytesPerSec); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
285 (h)->nBlockAlign = le2me_16((h)->nBlockAlign); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
286 (h)->wBitsPerSample = le2me_16((h)->wBitsPerSample); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
287 (h)->cbSize = le2me_16((h)->cbSize); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
288 }
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
289 #define le2me_AVIINDEXENTRY(h) { \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
290 (h)->ckid = le2me_32((h)->ckid); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
291 (h)->dwFlags = le2me_32((h)->dwFlags); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
292 (h)->dwChunkOffset = le2me_32((h)->dwChunkOffset); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
293 (h)->dwChunkLength = le2me_32((h)->dwChunkLength); \
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
294 }
12036
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
295 #define le2me_AVISTDIDXCHUNK(h) {\
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
296 char c; \
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
297 c = (h)->fcc[0]; (h)->fcc[0] = (h)->fcc[3]; (h)->fcc[3] = c; \
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
298 c = (h)->fcc[1]; (h)->fcc[1] = (h)->fcc[2]; (h)->fcc[2] = c; \
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
299 (h)->dwSize = le2me_32((h)->dwSize); \
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
300 (h)->wLongsPerEntry = le2me_16((h)->wLongsPerEntry); \
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
301 (h)->nEntriesInUse = le2me_32((h)->nEntriesInUse); \
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
302 c = (h)->dwChunkId[0]; (h)->dwChunkId[0] = (h)->dwChunkId[3]; (h)->dwChunkId[3] = c; \
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
303 c = (h)->dwChunkId[1]; (h)->dwChunkId[1] = (h)->dwChunkId[2]; (h)->dwChunkId[2] = c; \
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
304 (h)->qwBaseOffset = le2me_64((h)->qwBaseOffset); \
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
305 (h)->dwReserved3 = le2me_32((h)->dwReserved3); \
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
306 }
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
307 #define le2me_AVISTDIDXENTRY(h) {\
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
308 (h)->dwOffset = le2me_32((h)->dwOffset); \
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
309 (h)->dwSize = le2me_32((h)->dwSize); \
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
310 }
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
311 #define le2me_VideoPropHeader(h) { \
12046
cf68f8b514b0 Bigendian macro 10l
ranma
parents: 12036
diff changeset
312 (h)->VideoFormatToken = le2me_32((h)->VideoFormatToken); \
cf68f8b514b0 Bigendian macro 10l
ranma
parents: 12036
diff changeset
313 (h)->VideoStandard = le2me_32((h)->VideoStandard); \
cf68f8b514b0 Bigendian macro 10l
ranma
parents: 12036
diff changeset
314 (h)->dwVerticalRefreshRate = le2me_32((h)->dwVerticalRefreshRate); \
cf68f8b514b0 Bigendian macro 10l
ranma
parents: 12036
diff changeset
315 (h)->dwHTotalInT = le2me_32((h)->dwHTotalInT); \
cf68f8b514b0 Bigendian macro 10l
ranma
parents: 12036
diff changeset
316 (h)->dwVTotalInLines = le2me_32((h)->dwVTotalInLines); \
cf68f8b514b0 Bigendian macro 10l
ranma
parents: 12036
diff changeset
317 (h)->dwFrameAspectRatio = le2me_32((h)->dwFrameAspectRatio); \
cf68f8b514b0 Bigendian macro 10l
ranma
parents: 12036
diff changeset
318 (h)->dwFrameWidthInPixels = le2me_32((h)->dwFrameWidthInPixels); \
cf68f8b514b0 Bigendian macro 10l
ranma
parents: 12036
diff changeset
319 (h)->dwFrameHeightInLines = le2me_32((h)->dwFrameHeightInLines); \
cf68f8b514b0 Bigendian macro 10l
ranma
parents: 12036
diff changeset
320 (h)->nbFieldPerFrame = le2me_32((h)->nbFieldPerFrame); \
12036
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
321 }
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
322 #define le2me_VIDEO_FIELD_DESC(h) { \
12046
cf68f8b514b0 Bigendian macro 10l
ranma
parents: 12036
diff changeset
323 (h)->CompressedBMHeight = le2me_32((h)->CompressedBMHeight); \
cf68f8b514b0 Bigendian macro 10l
ranma
parents: 12036
diff changeset
324 (h)->CompressedBMWidth = le2me_32((h)->CompressedBMWidth); \
cf68f8b514b0 Bigendian macro 10l
ranma
parents: 12036
diff changeset
325 (h)->ValidBMHeight = le2me_32((h)->ValidBMHeight); \
cf68f8b514b0 Bigendian macro 10l
ranma
parents: 12036
diff changeset
326 (h)->ValidBMWidth = le2me_32((h)->ValidBMWidth); \
cf68f8b514b0 Bigendian macro 10l
ranma
parents: 12036
diff changeset
327 (h)->ValidBMXOffset = le2me_32((h)->ValidBMXOffset); \
cf68f8b514b0 Bigendian macro 10l
ranma
parents: 12036
diff changeset
328 (h)->ValidBMYOffset = le2me_32((h)->ValidBMYOffset); \
cf68f8b514b0 Bigendian macro 10l
ranma
parents: 12036
diff changeset
329 (h)->VideoXOffsetInT = le2me_32((h)->VideoXOffsetInT); \
cf68f8b514b0 Bigendian macro 10l
ranma
parents: 12036
diff changeset
330 (h)->VideoYValidStartLine = le2me_32((h)->VideoYValidStartLine); \
12036
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
331 }
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
332
1343
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
333 #else
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
334 #define le2me_MainAVIHeader(h) /**/
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
335 #define le2me_AVIStreamHeader(h) /**/
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
336 #define le2me_RECT(h) /**/
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
337 #define le2me_BITMAPINFOHEADER(h) /**/
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
338 #define le2me_WAVEFORMATEX(h) /**/
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
339 #define le2me_AVIINDEXENTRY(h) /**/
12036
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
340 #define le2me_AVISTDIDXCHUNK(h) /**/
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
341 #define le2me_AVISTDIDXENTRY(h) /**/
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
342 #define le2me_VideoPropHeader(h) /**/
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
343 #define le2me_VIDEO_FIELD_DESC(h) /**/
1343
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
344 #endif
ecaa8d0f1649 ASF support for non-x86 cpus
jkeil
parents:
diff changeset
345
1485
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1343
diff changeset
346 typedef struct {
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1343
diff changeset
347 // index stuff:
35410
1c991ec0e6da Change declaration to use proper type to avoid a ridiculous
reimar
parents: 35408
diff changeset
348 AVIINDEXENTRY *idx;
1485
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1343
diff changeset
349 int idx_size;
6056
f980563afdbc big (>2GB) AVI files support - patch by Wolfram Gloger <wg@malloc.de>
arpi
parents: 2330
diff changeset
350 off_t idx_pos;
f980563afdbc big (>2GB) AVI files support - patch by Wolfram Gloger <wg@malloc.de>
arpi
parents: 2330
diff changeset
351 off_t idx_pos_a;
f980563afdbc big (>2GB) AVI files support - patch by Wolfram Gloger <wg@malloc.de>
arpi
parents: 2330
diff changeset
352 off_t idx_pos_v;
f980563afdbc big (>2GB) AVI files support - patch by Wolfram Gloger <wg@malloc.de>
arpi
parents: 2330
diff changeset
353 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
354 // bps-based PTS stuff:
2b39ff3860b7 cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents: 6056
diff changeset
355 int video_pack_no;
2b39ff3860b7 cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents: 6056
diff changeset
356 int audio_block_size;
2b39ff3860b7 cleanup of .AVI timestamp calculation (ugly hack from mplayer.c removed,
arpi
parents: 6056
diff changeset
357 off_t audio_block_no;
1485
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1343
diff changeset
358 // interleaved PTS stuff:
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1343
diff changeset
359 int skip_video_frames;
2330
8f0861360325 AVI - no audio stream fix
arpi
parents: 2310
diff changeset
360 int audio_streams;
1485
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1343
diff changeset
361 float avi_audio_pts;
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1343
diff changeset
362 float avi_video_pts;
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1343
diff changeset
363 float pts_correction;
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1343
diff changeset
364 unsigned int pts_corr_bytes;
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1343
diff changeset
365 unsigned char pts_corrected;
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1343
diff changeset
366 unsigned char pts_has_video;
8208
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8030
diff changeset
367 unsigned int numberofframes;
12036
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
368 avisuperindex_chunk *suidx;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
369 int suidx_size;
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
370 int isodml;
29871
a90c7676bf0e Try to detect broken files with unaligned chunks.
reimar
parents: 29401
diff changeset
371 int warned_unaligned;
1485
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1343
diff changeset
372 } avi_priv_t;
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1343
diff changeset
373
12036
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
374 #define AVI_IDX_OFFSET(x) ((((uint64_t)(x)->dwFlags&0xffff0000)<<16)+(x)->dwChunkOffset)
846ed866f86c OpenDML read/write support
ranma
parents: 8208
diff changeset
375
30581
fef54a0e6ec2 Add read_avi_header() to aviheader.h; avoids forward declarations.
diego
parents: 29871
diff changeset
376 void read_avi_header(demuxer_t *demuxer, int index_mode);
fef54a0e6ec2 Add read_avi_header() to aviheader.h; avoids forward declarations.
diego
parents: 29871
diff changeset
377
26029
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25607
diff changeset
378 #endif /* MPLAYER_AVIHEADER_H */