Mercurial > mplayer.hg
annotate libmpdemux/asf.h @ 9660:c2d23e02522b
improvements to detc filter:
-> use of 8x8 blocks rather than 16x16 to better localize the search
for interlacing. this helps detect interlacing in very small
motions, e.g. mouths in anime.
-> removed some redundant conditions in the logic
-> looser condition for detecting lacing and more forgiving of slight
mismatches between fields from the two telecine frames to make up
for quantization noise in low quality encodes.
this code is still mostly experimental but probably better than the
old version, so maybe it should be backported to 0.90...?
author | rfelker |
---|---|
date | Sun, 23 Mar 2003 03:36:24 +0000 |
parents | 36a5cdca733b |
children | 2545bbd91450 |
rev | line source |
---|---|
1000 | 1 #ifndef __ASF_H |
2 #define __ASF_H | |
833 | 3 |
2555
66837325b929
config.h cleanup, few things added to steram/demuxer headers
arpi
parents:
2489
diff
changeset
|
4 //#include "config.h" /* for WORDS_BIGENDIAN */ |
833 | 5 #include <inttypes.h> |
1342 | 6 #include "bswap.h" |
904 | 7 |
871 | 8 #ifndef MIN |
8957
36a5cdca733b
bunkus: Encapsulated arguments to #define in ( ... ) so that the #defines can be safely used like functions: mydef(flag ? val1 : val2)
mosu
parents:
6676
diff
changeset
|
9 #define MIN(a,b) (((a)<(b))?(a):(b)) |
871 | 10 #endif |
11 | |
833 | 12 /////////////////////// |
13 // MS GUID definition | |
14 /////////////////////// | |
15 #ifndef GUID_DEFINED | |
16 #define GUID_DEFINED | |
17 // Size of GUID is 16 bytes! | |
18 typedef struct __attribute__((packed)) { | |
19 uint32_t Data1; // 4 bytes | |
20 uint16_t Data2; // 2 bytes | |
21 uint16_t Data3; // 2 bytes | |
22 uint8_t Data4[8]; // 8 bytes | |
23 } GUID_t; | |
24 #endif | |
25 | |
26 /////////////////////// | |
27 // ASF Object Header | |
28 /////////////////////// | |
29 typedef struct __attribute__((packed)) { | |
30 uint8_t guid[16]; | |
31 uint64_t size; | |
32 } ASF_obj_header_t; | |
33 | |
34 //////////////// | |
35 // ASF Header | |
36 //////////////// | |
37 typedef struct __attribute__((packed)) { | |
38 ASF_obj_header_t objh; | |
39 uint32_t cno; // number of subchunks | |
40 uint8_t v1; // unknown (0x01) | |
41 uint8_t v2; // unknown (0x02) | |
42 } ASF_header_t; | |
43 | |
44 ///////////////////// | |
45 // ASF File Header | |
46 ///////////////////// | |
4288
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
47 typedef struct __attribute__((packed)) { |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
48 uint8_t stream_id[16]; // stream GUID |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
49 uint64_t file_size; |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
50 uint64_t creation_time; //File creation time FILETIME 8 |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
51 uint64_t num_packets; //Number of packets UINT64 8 |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
52 uint64_t play_duration; //Timestamp of the end position UINT64 8 |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
53 uint64_t send_duration; //Duration of the playback UINT64 8 |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
54 uint64_t preroll; //Time to bufferize before playing UINT32 4 |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
55 uint32_t flags; //Unknown, maybe flags ( usually contains 2 ) UINT32 4 |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
56 uint32_t min_packet_size; //Min size of the packet, in bytes UINT32 4 |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
57 uint32_t max_packet_size; //Max size of the packet UINT32 4 |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
58 uint32_t max_bitrate; //Maximum bitrate of the media (sum of all the stream) |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
59 } ASF_file_header_t; |
833 | 60 |
61 /////////////////////// | |
62 // ASF Stream Header | |
63 /////////////////////// | |
64 typedef struct __attribute__((packed)) { | |
65 uint8_t type[16]; // Stream type (audio/video) GUID 16 | |
66 uint8_t concealment[16]; // Audio error concealment type GUID 16 | |
67 uint64_t unk1; // Unknown, maybe reserved ( usually contains 0 ) UINT64 8 | |
68 uint32_t type_size; //Total size of type-specific data UINT32 4 | |
69 uint32_t stream_size; //Size of stream-specific data UINT32 4 | |
70 uint16_t stream_no; //Stream number UINT16 2 | |
71 uint32_t unk2; //Unknown UINT32 4 | |
72 } ASF_stream_header_t; | |
73 | |
74 /////////////////////////// | |
75 // ASF Content Description | |
76 /////////////////////////// | |
77 typedef struct __attribute__((packed)) { | |
78 uint16_t title_size; | |
79 uint16_t author_size; | |
80 uint16_t copyright_size; | |
81 uint16_t comment_size; | |
82 uint16_t rating_size; | |
83 } ASF_content_description_t; | |
84 | |
85 //////////////////////// | |
86 // ASF Segment Header | |
87 //////////////////////// | |
88 typedef struct __attribute__((packed)) { | |
89 uint8_t streamno; | |
90 uint8_t seq; | |
91 uint32_t x; | |
92 uint8_t flag; | |
93 } ASF_segmhdr_t; | |
94 | |
95 ////////////////////// | |
96 // ASF Stream Chunck | |
97 ////////////////////// | |
98 typedef struct __attribute__((packed)) { | |
99 uint16_t type; | |
871 | 100 uint16_t size; |
833 | 101 uint32_t sequence_number; |
102 uint16_t unknown; | |
871 | 103 uint16_t size_confirm; |
833 | 104 } ASF_stream_chunck_t; |
105 | |
5616
8cfce21c6013
Added big endian macro for asf_chunk_t and added defines for the ASF chunk type.
bertrand
parents:
4310
diff
changeset
|
106 // Definition of the stream type |
8cfce21c6013
Added big endian macro for asf_chunk_t and added defines for the ASF chunk type.
bertrand
parents:
4310
diff
changeset
|
107 #ifdef WORDS_BIGENDIAN |
8cfce21c6013
Added big endian macro for asf_chunk_t and added defines for the ASF chunk type.
bertrand
parents:
4310
diff
changeset
|
108 #define ASF_STREAMING_CLEAR 0x2443 // $C |
8cfce21c6013
Added big endian macro for asf_chunk_t and added defines for the ASF chunk type.
bertrand
parents:
4310
diff
changeset
|
109 #define ASF_STREAMING_DATA 0x2444 // $D |
8cfce21c6013
Added big endian macro for asf_chunk_t and added defines for the ASF chunk type.
bertrand
parents:
4310
diff
changeset
|
110 #define ASF_STREAMING_END_TRANS 0x2445 // $E |
8cfce21c6013
Added big endian macro for asf_chunk_t and added defines for the ASF chunk type.
bertrand
parents:
4310
diff
changeset
|
111 #define ASF_STREAMING_HEADER 0x2448 // $H |
8cfce21c6013
Added big endian macro for asf_chunk_t and added defines for the ASF chunk type.
bertrand
parents:
4310
diff
changeset
|
112 #else |
8cfce21c6013
Added big endian macro for asf_chunk_t and added defines for the ASF chunk type.
bertrand
parents:
4310
diff
changeset
|
113 #define ASF_STREAMING_CLEAR 0x4324 // $C |
8cfce21c6013
Added big endian macro for asf_chunk_t and added defines for the ASF chunk type.
bertrand
parents:
4310
diff
changeset
|
114 #define ASF_STREAMING_DATA 0x4424 // $D |
8cfce21c6013
Added big endian macro for asf_chunk_t and added defines for the ASF chunk type.
bertrand
parents:
4310
diff
changeset
|
115 #define ASF_STREAMING_END_TRANS 0x4524 // $E |
8cfce21c6013
Added big endian macro for asf_chunk_t and added defines for the ASF chunk type.
bertrand
parents:
4310
diff
changeset
|
116 #define ASF_STREAMING_HEADER 0x4824 // $H |
8cfce21c6013
Added big endian macro for asf_chunk_t and added defines for the ASF chunk type.
bertrand
parents:
4310
diff
changeset
|
117 #endif |
833 | 118 |
119 // Definition of the differents type of ASF streaming | |
120 typedef enum { | |
121 ASF_Unknown_e, | |
122 ASF_Live_e, | |
123 ASF_Prerecorded_e, | |
2489
0ecc1b4f7cf8
Added ASF http server streaming (Not mms streaming).
bertrand
parents:
2310
diff
changeset
|
124 ASF_Redirector_e, |
6676 | 125 ASF_PlainText_e, |
126 ASF_Authenticate_e | |
833 | 127 } ASF_StreamType_e; |
128 | |
6644
f3153f8d4fbe
Moved the asf_http_streaming_ctrl_t struct from asf_streaming.c
bertrand
parents:
5616
diff
changeset
|
129 typedef struct { |
f3153f8d4fbe
Moved the asf_http_streaming_ctrl_t struct from asf_streaming.c
bertrand
parents:
5616
diff
changeset
|
130 ASF_StreamType_e streaming_type; |
f3153f8d4fbe
Moved the asf_http_streaming_ctrl_t struct from asf_streaming.c
bertrand
parents:
5616
diff
changeset
|
131 int request; |
f3153f8d4fbe
Moved the asf_http_streaming_ctrl_t struct from asf_streaming.c
bertrand
parents:
5616
diff
changeset
|
132 int packet_size; |
f3153f8d4fbe
Moved the asf_http_streaming_ctrl_t struct from asf_streaming.c
bertrand
parents:
5616
diff
changeset
|
133 int *audio_streams,n_audio,*video_streams,n_video; |
f3153f8d4fbe
Moved the asf_http_streaming_ctrl_t struct from asf_streaming.c
bertrand
parents:
5616
diff
changeset
|
134 int audio_id, video_id; |
f3153f8d4fbe
Moved the asf_http_streaming_ctrl_t struct from asf_streaming.c
bertrand
parents:
5616
diff
changeset
|
135 } asf_http_streaming_ctrl_t; |
f3153f8d4fbe
Moved the asf_http_streaming_ctrl_t struct from asf_streaming.c
bertrand
parents:
5616
diff
changeset
|
136 |
904 | 137 |
1342 | 138 /* |
139 * Some macros to swap little endian structures read from an ASF file | |
140 * into machine endian format | |
141 */ | |
142 #ifdef WORDS_BIGENDIAN | |
143 #define le2me_ASF_obj_header_t(h) { \ | |
144 (h)->size = le2me_64((h)->size); \ | |
145 } | |
146 #define le2me_ASF_header_t(h) { \ | |
147 le2me_ASF_obj_header_t(&(h)->objh); \ | |
148 (h)->cno = le2me_32((h)->cno); \ | |
149 } | |
150 #define le2me_ASF_stream_header_t(h) { \ | |
151 (h)->unk1 = le2me_64((h)->unk1); \ | |
152 (h)->type_size = le2me_32((h)->type_size); \ | |
153 (h)->stream_size = le2me_32((h)->stream_size); \ | |
154 (h)->stream_no = le2me_16((h)->stream_no); \ | |
155 (h)->unk2 = le2me_32((h)->unk2); \ | |
156 } | |
4288
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
157 #define le2me_ASF_file_header_t(h) { \ |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
158 (h)->file_size = le2me_64((h)->file_size); \ |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
159 (h)->creation_time = le2me_64((h)->creation_time); \ |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
160 (h)->num_packets = le2me_64((h)->num_packets); \ |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
161 (h)->play_duration = le2me_64((h)->play_duration); \ |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
162 (h)->send_duration = le2me_64((h)->send_duration); \ |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
163 (h)->preroll = le2me_64((h)->preroll); \ |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
164 (h)->flags = le2me_32((h)->flags); \ |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
165 (h)->min_packet_size = le2me_32((h)->min_packet_size); \ |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
166 (h)->max_packet_size = le2me_32((h)->max_packet_size); \ |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
167 (h)->max_bitrate = le2me_32((h)->max_bitrate); \ |
b84e9861461c
Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents:
3719
diff
changeset
|
168 } |
1342 | 169 #define le2me_ASF_content_description_t(h) { \ |
170 (h)->title_size = le2me_16((h)->title_size); \ | |
171 (h)->author_size = le2me_16((h)->author_size); \ | |
172 (h)->copyright_size = le2me_16((h)->copyright_size); \ | |
173 (h)->comment_size = le2me_16((h)->comment_size); \ | |
174 (h)->rating_size = le2me_16((h)->rating_size); \ | |
175 } | |
1485
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
176 #define le2me_BITMAPINFOHEADER(h) { \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
177 (h)->biSize = le2me_32((h)->biSize); \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
178 (h)->biWidth = le2me_32((h)->biWidth); \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
179 (h)->biHeight = le2me_32((h)->biHeight); \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
180 (h)->biPlanes = le2me_16((h)->biPlanes); \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
181 (h)->biBitCount = le2me_16((h)->biBitCount); \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
182 (h)->biCompression = le2me_32((h)->biCompression); \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
183 (h)->biSizeImage = le2me_32((h)->biSizeImage); \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
184 (h)->biXPelsPerMeter = le2me_32((h)->biXPelsPerMeter); \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
185 (h)->biYPelsPerMeter = le2me_32((h)->biYPelsPerMeter); \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
186 (h)->biClrUsed = le2me_32((h)->biClrUsed); \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
187 (h)->biClrImportant = le2me_32((h)->biClrImportant); \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
188 } |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
189 #define le2me_WAVEFORMATEX(h) { \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
190 (h)->wFormatTag = le2me_16((h)->wFormatTag); \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
191 (h)->nChannels = le2me_16((h)->nChannels); \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
192 (h)->nSamplesPerSec = le2me_32((h)->nSamplesPerSec); \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
193 (h)->nAvgBytesPerSec = le2me_32((h)->nAvgBytesPerSec); \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
194 (h)->nBlockAlign = le2me_16((h)->nBlockAlign); \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
195 (h)->wBitsPerSample = le2me_16((h)->wBitsPerSample); \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
196 (h)->cbSize = le2me_16((h)->cbSize); \ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
197 } |
5616
8cfce21c6013
Added big endian macro for asf_chunk_t and added defines for the ASF chunk type.
bertrand
parents:
4310
diff
changeset
|
198 #define le2me_ASF_stream_chunck_t(h) { \ |
8cfce21c6013
Added big endian macro for asf_chunk_t and added defines for the ASF chunk type.
bertrand
parents:
4310
diff
changeset
|
199 (h)->size = le2me_16((h)->size); \ |
8cfce21c6013
Added big endian macro for asf_chunk_t and added defines for the ASF chunk type.
bertrand
parents:
4310
diff
changeset
|
200 (h)->sequence_number = le2me_32((h)->sequence_number); \ |
8cfce21c6013
Added big endian macro for asf_chunk_t and added defines for the ASF chunk type.
bertrand
parents:
4310
diff
changeset
|
201 (h)->unknown = le2me_16((h)->unknown); \ |
8cfce21c6013
Added big endian macro for asf_chunk_t and added defines for the ASF chunk type.
bertrand
parents:
4310
diff
changeset
|
202 (h)->size_confirm = le2me_16((h)->size_confirm); \ |
8cfce21c6013
Added big endian macro for asf_chunk_t and added defines for the ASF chunk type.
bertrand
parents:
4310
diff
changeset
|
203 } |
1342 | 204 #else |
205 #define le2me_ASF_obj_header_t(h) /**/ | |
206 #define le2me_ASF_header_t(h) /**/ | |
207 #define le2me_ASF_stream_header_t(h) /**/ | |
208 #define le2me_ASF_file_header_t(h) /**/ | |
209 #define le2me_ASF_content_description_t(h) /**/ | |
1485
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
210 #define le2me_BITMAPINFOHEADER(h) /**/ |
b895f95e7657
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents:
1342
diff
changeset
|
211 #define le2me_WAVEFORMATEX(h) /**/ |
5616
8cfce21c6013
Added big endian macro for asf_chunk_t and added defines for the ASF chunk type.
bertrand
parents:
4310
diff
changeset
|
212 #define le2me_ASF_stream_chunck_t(h) /**/ |
1342 | 213 #endif |
214 | |
215 #endif |