annotate DOCS/tech/mpcf.txt @ 9421:4baee69b8e39

subpacket_base_size isnt needed for fixed sized subpackets
author michael
date Fri, 14 Feb 2003 11:37:38 +0000
parents 8a1a8f5e9c91
children 5e990417accf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9347
97888c25ae60 changing name to "nut" for now, we can change it again if we agree on something else
michael
parents: 9335
diff changeset
1 nut format draft 0.02
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
2
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
3
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
4
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
5 Intro:
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
6
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
7 Features / goals:
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
8 (supported by the format, not necessary by a specific implementation)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
9
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
10 Simple
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
11 use the same encoding for nearly all fields
9295
michael
parents: 9294
diff changeset
12 simple decoding, so slow cpus can handle it
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
13 Extendible
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
14 no limit for the possible values for all fields (using universal vlc)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
15 allow adding of new headers in the future
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
16 allow adding more fields at the end of headers
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
17 Compact
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
18 ~0.2% overhead, for normal bitrates
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
19 index is <10kb per hour (1 keyframe every 3sec)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
20 Error resistant
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
21 seeking / playback without an index
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
22 headers & index can be repeated
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
23 audio packet reshuffle
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
24 checksums to allow quick redownloading of damaged parts
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
25
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
26
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
27
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
28 Definitions:
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
29
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
30 MUST the specific part must be done to conform to this standard
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
31 SHOULD its recommanded to be done that way but its not strictly required
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
32
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
33
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
34
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
35 Syntax:
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
36
9295
michael
parents: 9294
diff changeset
37 Type definitions:
michael
parents: 9294
diff changeset
38 v
michael
parents: 9294
diff changeset
39 value=0
michael
parents: 9294
diff changeset
40 do{
michael
parents: 9294
diff changeset
41 more_data u(1)
michael
parents: 9294
diff changeset
42 data u(7)
michael
parents: 9294
diff changeset
43 value= 128*value + data
michael
parents: 9294
diff changeset
44 }while(more_data)
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
45
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
46 b (binary data or string)
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
47 length v
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
48 for(i=0; i<length; i++){
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
49 data[i] u(8)
9295
michael
parents: 9294
diff changeset
50 }
9335
de287fe94511 lang & country codes from ISO & utf8 requirement (ideas from Tobias Diedrich <td at sim dot uni-hannover dot de>
michael
parents: 9325
diff changeset
51 Note: strings MUST be encoded in utf8
9295
michael
parents: 9294
diff changeset
52
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
53
9295
michael
parents: 9294
diff changeset
54 f(x) n fixed bits
michael
parents: 9294
diff changeset
55 u(x) unsigned number encoded in x bits in MSB first order
michael
parents: 9294
diff changeset
56
michael
parents: 9294
diff changeset
57
michael
parents: 9294
diff changeset
58 Bitstream syntax:
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
59 packet header
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
60 forward ptr v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
61 backward ptr v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
62
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
63 align_byte
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
64 while(not byte aligned)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
65 one f(1)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
66
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
67 reserved_bytes
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
68 for(i=0; i<forward_ptr - length_of_non_reserved; i++)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
69 reserved u(8)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
70
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
71 main header:
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
72 packet header
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
73 main_startcode f(64)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
74 version v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
75 stream_count v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
76 file_size v
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
77 length_in_msec v
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
78 reserved_bytes
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
79 checksum u(32)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
80
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
81 stream_header:
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
82 packet_header
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
83 stream_startcode f(64)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
84 stream_id v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
85 stream_class v
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
86 fourcc b
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
87 average_bitrate v
9325
18cdba535f36 hex editor friendly language_code
michael
parents: 9323
diff changeset
88 language_code b
9297
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
89 time_base_nom v
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
90 time_base_denom v
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
91 lsb_timestamp_length v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
92 fixed_fps u(1)
9347
97888c25ae60 changing name to "nut" for now, we can change it again if we agree on something else
michael
parents: 9335
diff changeset
93 index_flag u(1)
9356
025a25987ac0 simplification
michael
parents: 9350
diff changeset
94 reserved u(6)
9357
21347f49e8d8 supprting various codec specific/private headers for different APIs (ideas by arpi/alex/fabian)
michael
parents: 9356
diff changeset
95 for(;;){
9361
06c106f23a41 encoding the whole name doesnt make sense
michael
parents: 9360
diff changeset
96 codec_specific_data_type v
06c106f23a41 encoding the whole name doesnt make sense
michael
parents: 9360
diff changeset
97 if(codec_specific_data_type==0) break;
9357
21347f49e8d8 supprting various codec specific/private headers for different APIs (ideas by arpi/alex/fabian)
michael
parents: 9356
diff changeset
98 codec_specific_data b
21347f49e8d8 supprting various codec specific/private headers for different APIs (ideas by arpi/alex/fabian)
michael
parents: 9356
diff changeset
99 }
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
100
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
101 video_stream_header:
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
102 stream_header
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
103 width v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
104 height v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
105 sample_width v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
106 sample_height v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
107 colorspace_type v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
108 depth v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
109 reserved_bytes
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
110 checksum u(32)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
111
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
112 audio_stream_header:
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
113 stream_header
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
114 samplerate v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
115 channel_count v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
116 reserved_bytes
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
117 checksum u(32)
9420
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
118
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
119 frame
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
120 packet header
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
121 if(keyframe){
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
122 keyframe_startcode f(64)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
123 }
9311
4b04416ada91 zero_bit for normal frames, so we can distinguish them from other packets
michael
parents: 9310
diff changeset
124 zero_bit f(1)
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
125 priority u(2)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
126 checksum_flag u(1)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
127 msb_timestamp_flag u(1)
9420
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
128 subpacket_type u(2)
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
129 reserved u(1)
9311
4b04416ada91 zero_bit for normal frames, so we can distinguish them from other packets
michael
parents: 9310
diff changeset
130 lsb_timestamp v
4b04416ada91 zero_bit for normal frames, so we can distinguish them from other packets
michael
parents: 9310
diff changeset
131 stream_id v
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
132 if(msb_timestamp_flag)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
133 msb_timestamp v
9420
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
134 if(sub_packet_type==00)
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
135 sub_packet[0]
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
136 else{
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
137 subpacket_count v
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
138 shuffle_type v
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
139 if(subpacket_type==10){
9421
4baee69b8e39 subpacket_base_size isnt needed for fixed sized subpackets
michael
parents: 9420
diff changeset
140 subpacket_base_size v
9420
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
141 for(i=0; i<subpacket_count; i++)
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
142 subpacket_size_diff[i] v
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
143 }
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
144 for(i=0; i<subpacket_count; i++)
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
145 subpacket[i]
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
146 }
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
147 }
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
148 if(checksum_flag)
9312
michael
parents: 9311
diff changeset
149 frame_checksum u(32)
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
150
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
151 Index:
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
152 packet header
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
153 index_startcode f(64)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
154 stream_id v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
155 index_length v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
156 for(i=0; i<index_length; i++){
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
157 index_timestamp v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
158 index_position v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
159 }
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
160 reserved_bytes
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
161 checksum u(32)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
162
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
163 info_packet: (optional)
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
164 packet header
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
165 info_startcode f(64)
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
166 start_time v
b16480522be9 some typos
michael
parents: 9307
diff changeset
167 end_time v
9347
97888c25ae60 changing name to "nut" for now, we can change it again if we agree on something else
michael
parents: 9335
diff changeset
168 start_stream_id v
97888c25ae60 changing name to "nut" for now, we can change it again if we agree on something else
michael
parents: 9335
diff changeset
169 end_stream_id v
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
170 for(;;){
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
171 type b
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
172 if(type=="") break;
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
173 name b
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
174 value b
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
175 }
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
176 reserved_bytes
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
177 checksum u(32)
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
178
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
179 stuffing_packet: (optional)
b16480522be9 some typos
michael
parents: 9307
diff changeset
180 packet_header
b16480522be9 some typos
michael
parents: 9307
diff changeset
181 stuffing_startcode f(64)
b16480522be9 some typos
michael
parents: 9307
diff changeset
182 for(i=0; i<forward_ptr - length_of_non_reserved; i++)
b16480522be9 some typos
michael
parents: 9307
diff changeset
183 stuffing f(8)
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
184
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
185
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
186 forward_ptr
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
187 backward_ptr
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
188 pointer to the next / previous packet
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
189 pointers are relative and backward pointer is implicitelly negative
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
190 Note: a frame with 0 bytes means that its skiped
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
191 Note: the forward pointer is equal to the size of this packet including
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
192 the header
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
193 the backward pointer is equal to the size of the previous packet
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
194 Example:
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
195 0
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
196 size1 (size of frame1 including header)
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
197 frame1
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
198
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
199 size1
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
200 size2
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
201 frame2
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
202
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
203 size2
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
204 size3
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
205 frame3
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
206
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
207
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
208 *_startcode
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
209 the first bit is allways set
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
210
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
211 version
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
212 0 for now
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
213
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
214 file_size
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
215 size in bytes, can be 0 if not meaningfull (realtime streams, ...)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
216
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
217 length_in_msec
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
218 length of the file in milli seconds (can be 0 if realtime or such)
9347
97888c25ae60 changing name to "nut" for now, we can change it again if we agree on something else
michael
parents: 9335
diff changeset
219
97888c25ae60 changing name to "nut" for now, we can change it again if we agree on something else
michael
parents: 9335
diff changeset
220 index_flag
97888c25ae60 changing name to "nut" for now, we can change it again if we agree on something else
michael
parents: 9335
diff changeset
221 1 indicates that this file has an index
9372
158bf5cd8f64 index should be otional (idea by alex)
michael
parents: 9369
diff changeset
222 Note, all files SHOULD have an index at the end except, (realtime) streams
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
223
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
224 stream_id
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
225 Note: streams with a lower relative class MUST have a lower relative id
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
226 so a stream with class 0 MUST allways have a id which is lower then any
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
227 stream with class > 0
9295
michael
parents: 9294
diff changeset
228 streams should use low ids
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
229
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
230 stream_class
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
231 0 video
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
232 32 audio
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
233 64 subtiles
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
234 Note the remaining values are reserved and MUST NOT be used
9312
michael
parents: 9311
diff changeset
235 a decoder MUST ignore streams with reserved classes
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
236
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
237 fourcc
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
238 identification for the codec
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
239 example: "H264"
9325
18cdba535f36 hex editor friendly language_code
michael
parents: 9323
diff changeset
240 MUST contain 4 bytes, note, this might be increasd in the future if
18cdba535f36 hex editor friendly language_code
michael
parents: 9323
diff changeset
241 needed
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
242
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
243 language_code
9335
de287fe94511 lang & country codes from ISO & utf8 requirement (ideas from Tobias Diedrich <td at sim dot uni-hannover dot de>
michael
parents: 9325
diff changeset
244 ISO 639 and ISO 3166 for language/country code
9325
18cdba535f36 hex editor friendly language_code
michael
parents: 9323
diff changeset
245 something like "usen" (US english), can be 0
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
246 if unknown
9335
de287fe94511 lang & country codes from ISO & utf8 requirement (ideas from Tobias Diedrich <td at sim dot uni-hannover dot de>
michael
parents: 9325
diff changeset
247 see http://www.loc.gov/standards/iso639-2/englangn.html
de287fe94511 lang & country codes from ISO & utf8 requirement (ideas from Tobias Diedrich <td at sim dot uni-hannover dot de>
michael
parents: 9325
diff changeset
248 and http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1/en_listp1.html
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
249
9297
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
250 time_base_nom / time_base_denom = time_base
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
251 the number of timer ticks per second, this MUST be equal to the fps
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
252 if the fixed_fps is 1
9297
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
253 time_base_denom MUST not be 0
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
254 time_base_nom and time_base_denom MUST be relative prime
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
255 time_base_nom MUST be < 2^15
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
256 examples:
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
257 fps time_base_nom time_base_denom
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
258 30 30 1
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
259 29.97 30000 1001
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
260 23.976 24000 1001
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
261
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
262 lsb_timestamp_length
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
263 length in bits of the lsb_timestamp
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
264 MUST be <16
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
265
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
266 fixed_fps
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
267 1 indicates that the fps is fixed
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
268
9357
21347f49e8d8 supprting various codec specific/private headers for different APIs (ideas by arpi/alex/fabian)
michael
parents: 9356
diff changeset
269 codec_specific_data_type
9361
06c106f23a41 encoding the whole name doesnt make sense
michael
parents: 9360
diff changeset
270 0 end
06c106f23a41 encoding the whole name doesnt make sense
michael
parents: 9360
diff changeset
271 1 native
06c106f23a41 encoding the whole name doesnt make sense
michael
parents: 9360
diff changeset
272 2 bitmapinfoheader
06c106f23a41 encoding the whole name doesnt make sense
michael
parents: 9360
diff changeset
273 3 waveformatex
06c106f23a41 encoding the whole name doesnt make sense
michael
parents: 9360
diff changeset
274 4 imagedesc
06c106f23a41 encoding the whole name doesnt make sense
michael
parents: 9360
diff changeset
275 5 sounddesc
9357
21347f49e8d8 supprting various codec specific/private headers for different APIs (ideas by arpi/alex/fabian)
michael
parents: 9356
diff changeset
276 "native", means a simple api & container independanet storage form,
21347f49e8d8 supprting various codec specific/private headers for different APIs (ideas by arpi/alex/fabian)
michael
parents: 9356
diff changeset
277 for example some mpeg4-es headers
21347f49e8d8 supprting various codec specific/private headers for different APIs (ideas by arpi/alex/fabian)
michael
parents: 9356
diff changeset
278
9356
025a25987ac0 simplification
michael
parents: 9350
diff changeset
279 codec_specific_data
025a25987ac0 simplification
michael
parents: 9350
diff changeset
280 private global data for a codec (could be huffman tables or ...)
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
281
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
282 msb_timestamp_flag
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
283 indicates that the msb_timestamp is coded
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
284 MUST be 1 for keyframes
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
285
9420
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
286 subpacket_type
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
287 00 1 subpacket per packet (normally used for video)
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
288 01 subpacket_count fixed length subpackets per packet
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
289 10 subpacket_count variable length subpackets per packet
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
290 11 reserved
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
291 Note, if there are multiple subpackets then the timestamp of the packet
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
292 is the timestamp of the first subpacket
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
293 Note, if multiple subpackets are stored in one frame then the resulting
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
294 framesize SHOULD be < 16kbyte and not more then 0.5 sec of data SHOULD
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
295 be put in a single packet
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
296
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
297 subpacket_base_size
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
298 an offset which should be added to the subpacket_size_diff of each
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
299 subpacket to get the actual size, so its normally the size of the
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
300 smallest subpacket
9421
4baee69b8e39 subpacket_base_size isnt needed for fixed sized subpackets
michael
parents: 9420
diff changeset
301 for fixed length subpackets, the size is calculated from the
4baee69b8e39 subpacket_base_size isnt needed for fixed sized subpackets
michael
parents: 9420
diff changeset
302 subpacket_count
9420
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
303
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
304 subpacket_count
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
305 the number of subpackets, if not pressent then 1
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
306
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
307 subpacket_size_diff
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
308 the (allways positive) difference from the subpacket_base_size to the
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
309 actual size of the current subpacket, if its not coded
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
310 (subpacket_type != 10) then its 0
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
311 Note a subpacket MUST be in exactly one packet, it cannot be split
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
312
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
313 msb_timestamp
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
314 most significant bits of the timestamp, SHOULD be 0 for the first frame
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
315
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
316 lsb_timestamp
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
317 most significant bits of the timestamp in time_base precission, with
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
318 lsb_timestamp_length bits
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
319 Example: IBBP display order
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
320 keyframe msb_timestamp=0 lsb_timestamp=0 -> timestamp=0
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
321 frame lsb_timestamp=3 -> timestamp=3
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
322 frame lsb_timestamp=1 -> timestamp=1
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
323 frame lsb_timestamp=2 -> timestamp=2
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
324 ...
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
325 keyframe msb_timestamp=1 lsb_timestamp=1 -> timestamp=257
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
326 frame msb_timestamp=0 lsb_timestamp=255->timestamp=255
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
327 frame msb_timestamp=1 lsb_timestamp=0 -> timestamp=256
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
328 frame lsb_timestamp=4 -> timestamp=260
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
329 frame lsb_timestamp=2 -> timestamp=258
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
330 frame lsb_timestamp=3 -> timestamp=259
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
331
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
332 width/height
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
333 MUST be set to the coded width/height
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
334
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
335 sample_width/sample_height (aspect ratio)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
336 sample_width is the horizontal distance between samples
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
337 sample_width and sample_height MUST be relative prime if not zero
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
338 MUST be 0 if unknown
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
339
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
340 depth
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
341 for compatibility with some win32 codecs
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
342
9311
4b04416ada91 zero_bit for normal frames, so we can distinguish them from other packets
michael
parents: 9310
diff changeset
343 zero_bit
4b04416ada91 zero_bit for normal frames, so we can distinguish them from other packets
michael
parents: 9310
diff changeset
344 MUST be 0, its there to distinguish non keyframes from other packets,
4b04416ada91 zero_bit for normal frames, so we can distinguish them from other packets
michael
parents: 9310
diff changeset
345 Note: all packets have a 64-bit startcode except non-keyframes to reduce
4b04416ada91 zero_bit for normal frames, so we can distinguish them from other packets
michael
parents: 9310
diff changeset
346 their size, and all startcodes start with a 1 bit
4b04416ada91 zero_bit for normal frames, so we can distinguish them from other packets
michael
parents: 9310
diff changeset
347
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
348 priority
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
349 if 0 then the frame isnt used as reference (b frame) and can be droped
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
350 MUST be > 0 for keyframes
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
351
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
352 shuffle_type
9420
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
353 audio is often encoded in small subpackets, and to increase the
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
354 error robustness these can be shuffled
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
355 0 -> no shuffle
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
356 1-16 -> interleave packets by 2^n
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
357
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
358 checksum
9307
ec18ad315bbe 10l (copy & pasting the generator poly for crc32 from ogg was a bad idea...)
michael
parents: 9299
diff changeset
359 crc32 checksum using the generator polynomial 0x104c11db7 (same as ogg)
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
360
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
361 checksum_flag
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
362 indicates that the frame_checksum is coded
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
363 must be 1 for the last non keyframe before a keyframe
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
364
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
365 frame_checksum
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
366 identical to checksum, but instead of covering just the current
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
367 packet, it covers all frames of the same stream id since the last
9312
michael
parents: 9311
diff changeset
368 frame_checksum
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
369 this field is only coded if checksum_flag=1
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
370
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
371 index_timestamp
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
372 value in time_base precission, relative to the last index_timestamp
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
373
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
374 index_position
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
375 position in bytes of the first byte of the keyframe header, relative
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
376 to the last index_position
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
377
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
378 start_time, stop_time
b16480522be9 some typos
michael
parents: 9307
diff changeset
379 the time range in msecs to which the info applies
b16480522be9 some typos
michael
parents: 9307
diff changeset
380 Note: can be used to mark chapters
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
381
9347
97888c25ae60 changing name to "nut" for now, we can change it again if we agree on something else
michael
parents: 9335
diff changeset
382 start_stream_id / end_stream_id
97888c25ae60 changing name to "nut" for now, we can change it again if we agree on something else
michael
parents: 9335
diff changeset
383 the stream(s) to which the info packet applies
97888c25ae60 changing name to "nut" for now, we can change it again if we agree on something else
michael
parents: 9335
diff changeset
384
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
385 type
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
386 the fourcc of the type
9347
97888c25ae60 changing name to "nut" for now, we can change it again if we agree on something else
michael
parents: 9335
diff changeset
387 for example: "UTF8" -> String or "JPEG" -> jpeg image
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
388 0 length means end
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
389
9295
michael
parents: 9294
diff changeset
390 name
michael
parents: 9294
diff changeset
391 the name of the info entry, valid names are
9347
97888c25ae60 changing name to "nut" for now, we can change it again if we agree on something else
michael
parents: 9335
diff changeset
392 "Author"
97888c25ae60 changing name to "nut" for now, we can change it again if we agree on something else
michael
parents: 9335
diff changeset
393 "Description"
97888c25ae60 changing name to "nut" for now, we can change it again if we agree on something else
michael
parents: 9335
diff changeset
394 "Copyright"
9369
f7fc442571f7 added (PAL),(NTSC),..
alex
parents: 9361
diff changeset
395 "Encoder" the name & version of the software used for encoding
9347
97888c25ae60 changing name to "nut" for now, we can change it again if we agree on something else
michael
parents: 9335
diff changeset
396 "Title"
9373
e1e2177841ef dvds have covers too - Andreas Hess <jaska@gmx.net>
alex
parents: 9372
diff changeset
397 "Cover" an image of the (cd,dvd,vhs,..) cover (preferable PNG or JPEG)
9350
12391e52c2f7 -typo, +time, -ntsc/pal (idea by alex)
michael
parents: 9347
diff changeset
398 "Source" "DVD", "VCD", "CD", "MD", "FM radio", "VHS", "TV",
12391e52c2f7 -typo, +time, -ntsc/pal (idea by alex)
michael
parents: 9347
diff changeset
399 "LD"
9373
e1e2177841ef dvds have covers too - Andreas Hess <jaska@gmx.net>
alex
parents: 9372
diff changeset
400 Optional: appended PAL,NTSC,SECAM, ... in parentheses
9350
12391e52c2f7 -typo, +time, -ntsc/pal (idea by alex)
michael
parents: 9347
diff changeset
401 "CaptureDevice" "BT878", "BT848", "webcam", ... (more exact names are fine too)
12391e52c2f7 -typo, +time, -ntsc/pal (idea by alex)
michael
parents: 9347
diff changeset
402 "CreationTime" "2003-01-20 20:13:15Z", ...
12391e52c2f7 -typo, +time, -ntsc/pal (idea by alex)
michael
parents: 9347
diff changeset
403 (ISO 8601 format, see http://www.cl.cam.ac.uk/~mgk25/iso-time.html)
12391e52c2f7 -typo, +time, -ntsc/pal (idea by alex)
michael
parents: 9347
diff changeset
404 Note: dont forget the timezone
9360
add934b25d6d "X-" prefix for nonstd fields & "keywords" idea by (Andreas Hess <jaska at gmx dot net>)
michael
parents: 9357
diff changeset
405 "Keywords"
9295
michael
parents: 9294
diff changeset
406 Note: if someone needs some others, please tell us about them, so we can
michael
parents: 9294
diff changeset
407 add them to the official standard (if they are sane)
9360
add934b25d6d "X-" prefix for nonstd fields & "keywords" idea by (Andreas Hess <jaska at gmx dot net>)
michael
parents: 9357
diff changeset
408 Note: nonstandard fields should be prefixed by "X-"
9295
michael
parents: 9294
diff changeset
409
michael
parents: 9294
diff changeset
410 value
michael
parents: 9294
diff changeset
411
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
412 stuffing
b16480522be9 some typos
michael
parents: 9307
diff changeset
413 0xFF
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
414
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
415 Structure:
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
416
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
417 the headers MUST be in exactly the following order (to simplify demuxer design)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
418 main header
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
419 stream_header (id=0)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
420 stream_header (id=1)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
421 ...
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
422 stream_header (id=n)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
423
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
424 headers may be repated, but if they are then they MUST all be repeated together
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
425 and repeated headers MUST be identical
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
426
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
427 headers MUST be repeated every 10sec at least ? FIXME
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
428 headers MUST be repeated at least twice (so they exist 3 times in a file)
9295
michael
parents: 9294
diff changeset
429
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
430 Index
9372
158bf5cd8f64 index should be otional (idea by alex)
michael
parents: 9369
diff changeset
431 the index can be repeated but there SHOULD be at least one at the end
9311
4b04416ada91 zero_bit for normal frames, so we can distinguish them from other packets
michael
parents: 9310
diff changeset
432 Note: in case of realtime streaming there is no end, so no index there either
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
433
b16480522be9 some typos
michael
parents: 9307
diff changeset
434 Info packets
b16480522be9 some typos
michael
parents: 9307
diff changeset
435 the info_packet can be repeated, it can also contain different names & values
b16480522be9 some typos
michael
parents: 9307
diff changeset
436 each time but only if allso the time is different
b16480522be9 some typos
michael
parents: 9307
diff changeset
437 Info packets can be used to describe the file or some part of it (chapters)
b16480522be9 some typos
michael
parents: 9307
diff changeset
438
b16480522be9 some typos
michael
parents: 9307
diff changeset
439 info packets, SHOULD be placed at the begin of the file at least
b16480522be9 some typos
michael
parents: 9307
diff changeset
440 for realtime streaming info packets will normally be transmitted when they apply
b16480522be9 some typos
michael
parents: 9307
diff changeset
441 for example, the current song title & artist of the currently shown music video
b16480522be9 some typos
michael
parents: 9307
diff changeset
442
b16480522be9 some typos
michael
parents: 9307
diff changeset
443 Stuffing packets
b16480522be9 some typos
michael
parents: 9307
diff changeset
444 can be used as a filler, for example to leave some empty space at the begin for
b16480522be9 some typos
michael
parents: 9307
diff changeset
445 a copy of the index
b16480522be9 some typos
michael
parents: 9307
diff changeset
446
b16480522be9 some typos
michael
parents: 9307
diff changeset
447 Unknown packets
b16480522be9 some typos
michael
parents: 9307
diff changeset
448 MUST be ignored by the decoder
b16480522be9 some typos
michael
parents: 9307
diff changeset
449
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
450 Sample code (GPL, & untested)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
451
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
452 typedef BufferContext{
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
453 uint8_t *buf;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
454 uint8_t *buf_ptr;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
455 }BufferContext;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
456
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
457 static inline uint64_t get_bytes(BufferContext *bc, int count){
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
458 uint64_t val=0;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
459
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
460 assert(count>0 && count<9)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
461
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
462 for(i=0; i<count; i++){
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
463 val <<=8;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
464 val += *(bc->buf_ptr++);
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
465 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
466
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
467 return val;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
468 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
469
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
470 static inline void put_bytes(BufferContext *bc, int count, uint64_t val){
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
471 uint64_t val=0;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
472
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
473 assert(count>0 && count<9)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
474
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
475 for(i=count-1; i>=0; i--){
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
476 *(bc->buf_ptr++)= val >> (8*i);
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
477 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
478
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
479 return val;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
480 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
481
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
482 static inline uint64_t get_v(BufferContext *bc){
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
483 uint64_t val= 0;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
484
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
485 for(;;){
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
486 int tmp= *(bc->buf_ptr++);
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
487 if(tmp&0x80)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
488 val= (val<<7) + tmp - 0x80;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
489 else
9299
aa26f77e7aae remove non byte sized stuff
michael
parents: 9297
diff changeset
490 return (val<<7) + tmp;
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
491 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
492 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
493
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
494 static inline void put_v(BufferContext *bc, uint64_t val){
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
495 int i;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
496
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
497 assert(val);
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
498
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
499 for(i=56;; i-=8){
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
500 if(val>>i) break;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
501 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
502
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
503 for(;i>0; i-=8){
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
504 *(bc->buf_ptr++)= 0x80 | (val>>i);
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
505 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
506 *(bc->buf_ptr++)= val&0x7F;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
507 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
508
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
509
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
510 Example stream
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
511
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
512 main header
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
513 video_stream_header (stream 0, video jpjp, timebase 30, lsb_timestamp_length=8)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
514 video_stream_header (stream 1 subtitle usen, timebase 30, lsb_timestamp_length=8)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
515 video_stream_header (stream 2 subtitle atde, timebase 30, lsb_timestamp_length=8)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
516 audio_stream_header (stream 3, audio jpjp, timebase 1 , lsb_timestamp_length=8)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
517 audio_stream_header (stream 4, audio usen, timebase 1 , lsb_timestamp_length=8)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
518 index (stream 0)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
519 keyframe (stream 0, msb_timestamp=0, lsb_timestamp=0)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
520 keyframe (stream 1, msb_timestamp=0, lsb_timestamp=0)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
521 keyframe (stream 2, msb_timestamp=0, lsb_timestamp=0)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
522 keyframe (stream 3, msb_timestamp=0, lsb_timestamp=0)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
523 keyframe (stream 4, msb_timestamp=0, lsb_timestamp=0)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
524 frame (stream 0, lsb_timestamp=1)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
525 frame (stream 0, lsb_timestamp=2)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
526 ...
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
527 frame (stream 0, lsb_timestamp=30)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
528 keyframe (stream 3, msb_timestamp=0, lsb_timestamp=1)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
529 keyframe (stream 4, msb_timestamp=0, lsb_timestamp=1)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
530 frame (stream 0, lsb_timestamp=31)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
531 frame (stream 0, lsb_timestamp=32)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
532 ...
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
533 frame (stream 0, lsb_timestamp=60)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
534 frame (stream 1, lsb_timestamp=60)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
535 frame (stream 2, lsb_timestamp=60)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
536 keyframe (stream 3, msb_timestamp=0, lsb_timestamp=2)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
537 keyframe (stream 4, msb_timestamp=0, lsb_timestamp=2)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
538 frame (stream 0, lsb_timestamp=61)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
539 frame (stream 0, lsb_timestamp=62)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
540 ...
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
541 main header
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
542 video_stream_header (stream 0, video jpjp, timebase 30, lsb_timestamp_length=8)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
543 video_stream_header (stream 1 subtitle usen, timebase 30, lsb_timestamp_length=8)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
544 video_stream_header (stream 2 subtitle atde, timebase 30, lsb_timestamp_length=8)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
545 audio_stream_header (stream 3, audio jpjp, timebase 1 , lsb_timestamp_length=8)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
546 audio_stream_header (stream 4, audio usen, timebase 1 , lsb_timestamp_length=8)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
547 frame (stream 0, lsb_timestamp=255)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
548 frame (stream 0, msb_timestamp=1 lsb_timestamp=0)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
549 frame (stream 0, lsb_timestamp=1)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
550 frame (stream 0, lsb_timestamp=2)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
551 frame (stream 1, msb_timestamp=1 lsb_timestamp=2)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
552 frame (stream 2, msb_timestamp=1 lsb_timestamp=2)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
553 frame (stream 0, lsb_timestamp=3)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
554 frame (stream 0, lsb_timestamp=4)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
555 ...
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
556 keyframe (stream 3, msb_timestamp=0, lsb_timestamp=9)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
557 keyframe (stream 4, msb_timestamp=0, lsb_timestamp=9)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
558 main header
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
559 video_stream_header (stream 0, video jpjp, timebase 30, lsb_timestamp_length=8)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
560 video_stream_header (stream 1 subtitle usen, timebase 30, lsb_timestamp_length=8)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
561 video_stream_header (stream 2 subtitle atde, timebase 30, lsb_timestamp_length=8)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
562 audio_stream_header (stream 3, audio jpjp, timebase 1 , lsb_timestamp_length=8)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
563 audio_stream_header (stream 4, audio usen, timebase 1 , lsb_timestamp_length=8)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
564 index (stream 0)