annotate DOCS/tech/mpcf.txt @ 15158:d570dfbf9ef6

--Patch by Stefan '1stein' Schuermans <1stein@schuermans.info>: bugfix of the "grayscale" output scheme; the height and width of the movie were written als -1 and -1 into the resulting *.bml file
author rik
date Thu, 14 Apr 2005 12:44:28 +0000
parents 0a43341c8bfd
children b1b06adc5cd3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14471
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
1 NUT Open Container Format DRAFT 20050111
10817
59ac254c2541 some updates
alex
parents: 10166
diff changeset
2 ----------------------------------------
9294
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
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
6 Intro:
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
7
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
8 Features / goals:
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
9 (supported by the format, not necessary by a specific implementation)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
10
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
11 Simple
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
12 use the same encoding for nearly all fields
10158
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
13 simple decoding, so slow cpus (and embedded systems) can handle it
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
14 Extendible
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
15 no limit for the possible values for all fields (using universal vlc)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
16 allow adding of new headers in the future
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
17 allow adding more fields at the end of headers
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
18 Compact
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
19 ~0.2% overhead, for normal bitrates
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
20 index is <10kb per hour (1 keyframe every 3sec)
10831
3f716efeb27a moved packet header after startcodes
alex
parents: 10827
diff changeset
21 a usual header for a file is about 100bytes (audio + video headers together)
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
22 a packet header is about ~1-8 bytes
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
23 Error resistant
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
24 seeking / playback without an index
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
25 headers & index can be repeated
10158
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
26 damaged files can be played back with minimal data lost and fast
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
27 resyncing times
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
28
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
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
31 Definitions:
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 MUST the specific part must be done to conform to this standard
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
34 SHOULD it's recommended to be done that way, but it's not strictly required
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
35
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
36
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
37
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
38 Syntax:
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
39
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
40 Since nut heavily uses variable length fields, the simplest way to describe it
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
41 is using a pseudocode approach.
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
42
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
43 Conventions:
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
44
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
45 The data types have a name, used in the bitstream syntax description, a short
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
46 text description and a pseudocode (functional) definition, optional notes may
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
47 follow:
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
48
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
49 name (text description)
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
50 functional definition
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
51 [Optional notes]
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
52
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
53 The bitstream syntax elements have a tagname and a functional definition, they
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
54 are presented in a bottom up approach, again optional notes may follow and
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
55 are reproduced in the tag description:
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
56
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
57 name: (optional note)
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
58 functional definition
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
59 [Optional notes]
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
60
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
61 The in-depth tag description follows the bitstream syntax.
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
62 The functional definition has a C like syntax.
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
63
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
64
9295
michael
parents: 9294
diff changeset
65 Type definitions:
12209
3baef37d3b7c moving f() and u()
michael
parents: 12208
diff changeset
66
3baef37d3b7c moving f() and u()
michael
parents: 12208
diff changeset
67
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
68 f(n) (n fixed bits in big-endian order)
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
69 u(n) (unsigned number encoded in n bits in MSB first order)
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
70
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
71 v (variable length value, unsigned)
9295
michael
parents: 9294
diff changeset
72 value=0
michael
parents: 9294
diff changeset
73 do{
michael
parents: 9294
diff changeset
74 more_data u(1)
michael
parents: 9294
diff changeset
75 data u(7)
michael
parents: 9294
diff changeset
76 value= 128*value + data
michael
parents: 9294
diff changeset
77 }while(more_data)
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
78
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
79 s (variable length value, signed)
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
80 temp v
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
81 temp++
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
82 if(temp&1) value= -(temp>>1)
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
83 else value= (temp>>1)
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
84
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
85 b (binary data or string, to be use in vb, see below)
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
86 for(i=0; i<length; i++){
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
87 data[i] u(8)
9295
michael
parents: 9294
diff changeset
88 }
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
89 [Note: strings MUST be encoded in utf8]
9295
michael
parents: 9294
diff changeset
90
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
91 vb (variable length binary data or string)
12117
e1e5e2124dae minor changes
michael
parents: 12110
diff changeset
92 length v
e1e5e2124dae minor changes
michael
parents: 12110
diff changeset
93 value b
e1e5e2124dae minor changes
michael
parents: 12110
diff changeset
94
9295
michael
parents: 9294
diff changeset
95
michael
parents: 9294
diff changeset
96 Bitstream syntax:
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
97
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
98 Common elements:
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
99
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
100 packet header:
12084
68baf8877c07 reversing the change to the forw/backw pointers, its somewhat simpler to update it if the forward pointer is first
michael
parents: 12082
diff changeset
101 forward ptr v
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
102
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
103 align_byte:
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
104 while(not byte aligned)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
105 one f(1)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
106
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
107 reserved_bytes:
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
108 for(i=0; i<forward_ptr - length_of_non_reserved; i++)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
109 reserved u(8)
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
110 [a demuxer MUST ignore any reserved bytes
12184
17667db616d3 (de)coder -> (de)muxer
michael
parents: 12162
diff changeset
111 a muxer MUST NOT write any reserved bytes, as this would make it
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
112 impossible to add new fields at the end of packets in the future in
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
113 a compatible way]
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
114
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
115 Headers:
10824
d163db068a12 reserved_bytes & byte order stuff
michael
parents: 10817
diff changeset
116
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
117 main header:
10831
3f716efeb27a moved packet header after startcodes
alex
parents: 10827
diff changeset
118 main_startcode f(64)
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
119 packet header
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
120 version v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
121 stream_count v
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
122 max_distance v
14919
1d4861b2ac4a returning to the old index at the end system, alternatives are too complex with questionable advantages
michael
parents: 14911
diff changeset
123 max_index_distance v
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
124 global_time_base_nom v
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
125 global_time_base_denom v
12084
68baf8877c07 reversing the change to the forw/backw pointers, its somewhat simpler to update it if the forward pointer is first
michael
parents: 12082
diff changeset
126 for(i=0; i<256; ){
68baf8877c07 reversing the change to the forw/backw pointers, its somewhat simpler to update it if the forward pointer is first
michael
parents: 12082
diff changeset
127 tmp_flag v
12428
bfa269cec22b extendible frame_code table
michael
parents: 12413
diff changeset
128 tmp_fields v
bfa269cec22b extendible frame_code table
michael
parents: 12413
diff changeset
129 if(tmp_fields>0) tmp_timestamp s
bfa269cec22b extendible frame_code table
michael
parents: 12413
diff changeset
130 if(tmp_fields>1) tmp_mul v
bfa269cec22b extendible frame_code table
michael
parents: 12413
diff changeset
131 if(tmp_fields>2) tmp_stream v
bfa269cec22b extendible frame_code table
michael
parents: 12413
diff changeset
132 if(tmp_fields>3) tmp_size v
bfa269cec22b extendible frame_code table
michael
parents: 12413
diff changeset
133 else tmp_size=0
bfa269cec22b extendible frame_code table
michael
parents: 12413
diff changeset
134 if(tmp_fields>4) tmp_res v
bfa269cec22b extendible frame_code table
michael
parents: 12413
diff changeset
135 else tmp_res=0
bfa269cec22b extendible frame_code table
michael
parents: 12413
diff changeset
136 if(tmp_fields>5) count v
bfa269cec22b extendible frame_code table
michael
parents: 12413
diff changeset
137 else count= tmp_mul - tmp_size
bfa269cec22b extendible frame_code table
michael
parents: 12413
diff changeset
138 for(j=6; j<tmp_fields; j++){
bfa269cec22b extendible frame_code table
michael
parents: 12413
diff changeset
139 tmp_reserved[i] v
bfa269cec22b extendible frame_code table
michael
parents: 12413
diff changeset
140 }
bfa269cec22b extendible frame_code table
michael
parents: 12413
diff changeset
141 for(j=0; j<count && i<256; j++, i++){
12084
68baf8877c07 reversing the change to the forw/backw pointers, its somewhat simpler to update it if the forward pointer is first
michael
parents: 12082
diff changeset
142 flags[i]= tmp_flag;
68baf8877c07 reversing the change to the forw/backw pointers, its somewhat simpler to update it if the forward pointer is first
michael
parents: 12082
diff changeset
143 stream_id_plus1[i]= tmp_stream;
68baf8877c07 reversing the change to the forw/backw pointers, its somewhat simpler to update it if the forward pointer is first
michael
parents: 12082
diff changeset
144 data_size_mul[i]= tmp_mul;
12428
bfa269cec22b extendible frame_code table
michael
parents: 12413
diff changeset
145 data_size_lsb[i]= tmp_size + j;
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
146 timestamp_delta[i]= tmp_timestamp;
12501
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
147 reserved_count[i]= tmp_res;
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
148 }
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
149 }
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
150 reserved_bytes
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
151 checksum u(32)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
152
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
153 stream_header:
10831
3f716efeb27a moved packet header after startcodes
alex
parents: 10827
diff changeset
154 stream_startcode f(64)
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
155 packet_header
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
156 stream_id v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
157 stream_class v
12150
2c9a2b1772bc language_code & fourcc vb->v reversal
michael
parents: 12118
diff changeset
158 fourcc vb
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
159 average_bitrate v
9297
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
160 time_base_nom v
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
161 time_base_denom v
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
162 msb_timestamp_shift v
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
163 decode_delay v
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
164 fixed_fps u(1)
9356
025a25987ac0 simplification
michael
parents: 9350
diff changeset
165 reserved u(6)
14471
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
166 codec_specific_data vb
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
167
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
168 video_stream_header:
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
169 stream_header
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
170 width v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
171 height v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
172 sample_width v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
173 sample_height v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
174 colorspace_type v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
175 reserved_bytes
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
176 checksum u(32)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
177
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
178 audio_stream_header:
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
179 stream_header
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
180 samplerate_nom v
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
181 samplerate_denom v
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
182 channel_count v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
183 reserved_bytes
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
184 checksum u(32)
9420
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
185
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
186 Basic Packets:
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
187
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
188 frame:
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
189 frame_code f(8)
12084
68baf8877c07 reversing the change to the forw/backw pointers, its somewhat simpler to update it if the forward pointer is first
michael
parents: 12082
diff changeset
190 if(stream_id_plus1[frame_code]==0){
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
191 stream_id v
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
192 }
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
193 if(timestamp_delta[frame_code]==0){
12261
d43f1c599701 remove data_size prediction
michael
parents: 12254
diff changeset
194 coded_timestamp v
d43f1c599701 remove data_size prediction
michael
parents: 12254
diff changeset
195 }
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
196 if(flags[frame_code]&1){
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
197 data_size_msb v
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
198 }
12501
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
199 for(i=0; i<reserved_count[frame_code]; i++)
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
200 reserved v
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
201 data
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
202
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
203 index:
10831
3f716efeb27a moved packet header after startcodes
alex
parents: 10827
diff changeset
204 index_startcode f(64)
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
205 packet header
14471
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
206 stream_id v
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
207 index_length v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
208 for(i=0; i<index_length; i++){
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
209 index_timestamp v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
210 index_position v
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
211 }
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
212 reserved_bytes
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
213 checksum u(32)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
214
14471
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
215 info_packet: (optional)
10831
3f716efeb27a moved packet header after startcodes
alex
parents: 10827
diff changeset
216 info_startcode f(64)
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
217 packet header
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
218 for(;;){
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
219 id v
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
220 if(id==0) break
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
221 name= info_table[id][0]
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
222 type= info_table[id][1]
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
223 if(type==NULL)
12117
e1e5e2124dae minor changes
michael
parents: 12110
diff changeset
224 type vb
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
225 if(name==NULL)
12117
e1e5e2124dae minor changes
michael
parents: 12110
diff changeset
226 name vb
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
227 if(type=="v")
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
228 value v
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
229 else
12117
e1e5e2124dae minor changes
michael
parents: 12110
diff changeset
230 value vb
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
231 }
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
232 reserved_bytes
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
233 checksum u(32)
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
234
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
235 sync_point:
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
236 frame_startcode f(64)
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
237 global_timestamp v
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
238
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
239 Complete definition:
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
240
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
241 file:
12242
f67bc1d216a1 file_id_string (idea by ivan)
michael
parents: 12238
diff changeset
242 file_id_string
14919
1d4861b2ac4a returning to the old index at the end system, alternatives are too complex with questionable advantages
michael
parents: 14911
diff changeset
243 while(!eof && next_code != index_startcode){
12242
f67bc1d216a1 file_id_string (idea by ivan)
michael
parents: 12238
diff changeset
244 main_header
f67bc1d216a1 file_id_string (idea by ivan)
michael
parents: 12238
diff changeset
245 for(i=0; i<stream_count; i++){
f67bc1d216a1 file_id_string (idea by ivan)
michael
parents: 12238
diff changeset
246 if(next_packet==video_stream_header)
f67bc1d216a1 file_id_string (idea by ivan)
michael
parents: 12238
diff changeset
247 video_stream_header
f67bc1d216a1 file_id_string (idea by ivan)
michael
parents: 12238
diff changeset
248 else
f67bc1d216a1 file_id_string (idea by ivan)
michael
parents: 12238
diff changeset
249 audio_stream_header
f67bc1d216a1 file_id_string (idea by ivan)
michael
parents: 12238
diff changeset
250 }
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
251 while(next_code != main_startcode){
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
252 if(next_code == info_startcode)
12242
f67bc1d216a1 file_id_string (idea by ivan)
michael
parents: 12238
diff changeset
253 info_packet
14919
1d4861b2ac4a returning to the old index at the end system, alternatives are too complex with questionable advantages
michael
parents: 14911
diff changeset
254 else{
14471
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
255 if(next_code == frame_startcode)
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
256 sync_point
12242
f67bc1d216a1 file_id_string (idea by ivan)
michael
parents: 12238
diff changeset
257 frame
12368
39974ab6ec8a cosmetic
michael
parents: 12365
diff changeset
258 }
12242
f67bc1d216a1 file_id_string (idea by ivan)
michael
parents: 12238
diff changeset
259 }
f67bc1d216a1 file_id_string (idea by ivan)
michael
parents: 12238
diff changeset
260 }
14919
1d4861b2ac4a returning to the old index at the end system, alternatives are too complex with questionable advantages
michael
parents: 14911
diff changeset
261 index
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
262
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
263
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
264
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
265 Tag description:
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
266
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
267 forward_ptr
12238
a0ddf85bdee0 removing backward pointers
michael
parents: 12209
diff changeset
268 size of the packet (exactly the distance from the first byte of the
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
269 startcode of the current packet to the first byte of the following
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
270 packet
12242
f67bc1d216a1 file_id_string (idea by ivan)
michael
parents: 12238
diff changeset
271
f67bc1d216a1 file_id_string (idea by ivan)
michael
parents: 12238
diff changeset
272 file_id_string
f67bc1d216a1 file_id_string (idea by ivan)
michael
parents: 12238
diff changeset
273 "nut/multimedia container\0"
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
274
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
275 *_startcode
12162
ab533510d598 remove old example stream
michael
parents: 12161
diff changeset
276 all startcodes start with 'N'
ab533510d598 remove old example stream
michael
parents: 12161
diff changeset
277
ab533510d598 remove old example stream
michael
parents: 12161
diff changeset
278 main_startcode
ab533510d598 remove old example stream
michael
parents: 12161
diff changeset
279 0x7A561F5F04ADULL + (((uint64_t)('N'<<8) + 'M')<<48)
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
280
12162
ab533510d598 remove old example stream
michael
parents: 12161
diff changeset
281 stream_starcode
ab533510d598 remove old example stream
michael
parents: 12161
diff changeset
282 0x11405BF2F9DBULL + (((uint64_t)('N'<<8) + 'S')<<48)
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
283
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
284 frame_startcode
12162
ab533510d598 remove old example stream
michael
parents: 12161
diff changeset
285 0xE4ADEECA4569ULL + (((uint64_t)('N'<<8) + 'K')<<48)
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
286
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
287 frame_startcodes SHOULD be placed immediately before a keyframe if the
12392
f4878bfe49c8 nicer startcode before keyframe rule
michael
parents: 12379
diff changeset
288 previous frame of the same stream was a non-keyframe, unless such
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
289 non-keyframe - keyframe transitions are very frequent
12365
dc05db3f172f additional start_code rule (implemenattion does this since a long time already)
michael
parents: 12333
diff changeset
290
12162
ab533510d598 remove old example stream
michael
parents: 12161
diff changeset
291 index_startcode
ab533510d598 remove old example stream
michael
parents: 12161
diff changeset
292 0xDD672F23E64EULL + (((uint64_t)('N'<<8) + 'X')<<48)
ab533510d598 remove old example stream
michael
parents: 12161
diff changeset
293 info_startcode
ab533510d598 remove old example stream
michael
parents: 12161
diff changeset
294 0xAB68B596BA78ULL + (((uint64_t)('N'<<8) + 'I')<<48)
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
295
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
296 version
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
297 NUT version. The current value is 2.
12238
a0ddf85bdee0 removing backward pointers
michael
parents: 12209
diff changeset
298
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
299 max_distance
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
300 max distance of frame_startcodes, the distance may only be larger if
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
301 there is only a single frame between the 2 frame_startcodes this can
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
302 be used by the demuxer to detect damaged frame headers if the damage
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
303 results in too long of a chain
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
304
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
305 SHOULD be set to <=32768 or at least <=65536 unless there is a very
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
306 good reason to set it higher, otherwise reasonable error recovery will
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
307 be impossible
12501
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
308
14919
1d4861b2ac4a returning to the old index at the end system, alternatives are too complex with questionable advantages
michael
parents: 14911
diff changeset
309 max_index_distance
1d4861b2ac4a returning to the old index at the end system, alternatives are too complex with questionable advantages
michael
parents: 14911
diff changeset
310 max distance of keyframes which are represented in the index, the
1d4861b2ac4a returning to the old index at the end system, alternatives are too complex with questionable advantages
michael
parents: 14911
diff changeset
311 distance between consecutive entries A and B may only be larger if
1d4861b2ac4a returning to the old index at the end system, alternatives are too complex with questionable advantages
michael
parents: 14911
diff changeset
312 there are no keyframes within this stream between A and B
1d4861b2ac4a returning to the old index at the end system, alternatives are too complex with questionable advantages
michael
parents: 14911
diff changeset
313 SHOULD be set to <=32768 or at least <=65536 unless there is a very
1d4861b2ac4a returning to the old index at the end system, alternatives are too complex with questionable advantages
michael
parents: 14911
diff changeset
314 good reason to set it higher
12501
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
315
14471
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
316 stream_id[FIXME]
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
317 Stream identifier
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
318 Note: streams with a lower relative class MUST have a lower relative id
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
319 so a stream with class 0 MUST always have an id which is lower than any
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
320 stream with class > 0
12150
2c9a2b1772bc language_code & fourcc vb->v reversal
michael
parents: 12118
diff changeset
321 stream_id MUST be < stream_count
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
322
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
323 stream_class
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
324 0 video
14471
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
325 1 audio
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
326 2 subtiles
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
327 3 metadata
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
328 Note: the remaining values are reserved and MUST NOT be used
12184
17667db616d3 (de)coder -> (de)muxer
michael
parents: 12162
diff changeset
329 a demuxer MUST ignore streams with reserved classes
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
330
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
331 fourcc
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
332 identification for the codec
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
333 example: "H264"
10817
59ac254c2541 some updates
alex
parents: 10166
diff changeset
334 MUST contain 2 or 4 bytes, note, this might be increased in the future
59ac254c2541 some updates
alex
parents: 10166
diff changeset
335 if needed
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
336
9297
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
337 time_base_nom / time_base_denom = time_base
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
338 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
339 if the fixed_fps is 1
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
340 time_base_denom MUST NOT be 0
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
341 time_base_nom and time_base_denom MUST be relatively prime
12254
362cf8df665e new time_base_nom limit
michael
parents: 12247
diff changeset
342 time_base_nom MUST be < 2^31
9297
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
343 examples:
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
344 fps time_base_nom time_base_denom
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
345 30 30 1
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
346 29.97 30000 1001
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
347 23.976 24000 1001
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
348 sample_rate sample_rate_mul time_base_nom time_base_denom
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
349 44100 1 44100 1
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
350 44100 64 11025 16
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
351 48000 1024 375 8
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
352
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
353 Note: the advantage to using a large sample_rate_mul is that
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
354 the timestamps need fewer bits
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
355
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
356 global_time_base_nom / global_time_base_denom = global_time_base
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
357 the number of timer ticks per second
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
358 global_time_base_denom MUST NOT be 0
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
359 global_time_base_nom and global_time_base_denom MUST be relatively prime
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
360 global_time_base_nom MUST be < 2^31
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
361
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
362 global_timestamp
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
363 timestamp in global_time_base units
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
364 when a global_timestamp is encountered the last_timestamp of all
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
365 streams is set to the following:
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
366
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
367 ln= global_time_base_denom*time_base_nom
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
368 sn= global_timestamp
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
369 d1= global_time_base_nom
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
370 d2= time_base_denom
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
371 last_timestamp= (ln/d1*sn + ln%d1*sn/d1)/d2
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
372 Note: this calculation MUST be done with unsigned 64 bit integers, and
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
373 is equivalent to (ln*sn)/(d1*d2) but this would require a 96bit integer
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
374
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
375 msb_timestamp_shift
12261
d43f1c599701 remove data_size prediction
michael
parents: 12254
diff changeset
376 amount of bits in lsb_timestamp
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
377 MUST be <16
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
378
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
379 decode_delay
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
380 maximum time between input and output for a codec, used to generate
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
381 dts from pts
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
382 is set to 0 for streams without b frames, and set to 1 for streams with
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
383 b frames, may be larger for future codecs
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
384
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
385 fixed_fps
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
386 1 indicates that the fps is fixed
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
387
9356
025a25987ac0 simplification
michael
parents: 9350
diff changeset
388 codec_specific_data
025a25987ac0 simplification
michael
parents: 9350
diff changeset
389 private global data for a codec (could be huffman tables or ...)
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
390
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
391 frame_code
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
392 the meaning of this byte is stored in the main header
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
393 the value 78 ('N') is forbidden to ensure that the byte is always
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
394 different from the first byte of any startcode
9420
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
395
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
396 flags[frame_code]
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
397 first of the flags from MSB to LSB are called KD
12261
d43f1c599701 remove data_size prediction
michael
parents: 12254
diff changeset
398 if D is 1 then data_size_msb is coded, otherwise data_size_msb is 0
12238
a0ddf85bdee0 removing backward pointers
michael
parents: 12209
diff changeset
399 K is the keyframe_type
a0ddf85bdee0 removing backward pointers
michael
parents: 12209
diff changeset
400 0-> no keyframe,
a0ddf85bdee0 removing backward pointers
michael
parents: 12209
diff changeset
401 1-> keyframe,
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
402 flags=4 can be used to mark illegal frame_code bytes
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
403 frame_code=78 must have flags=4
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
404 Note: frames MUST NOT depend(1) upon frames prior to the last
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
405 frame_startcode
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
406 Important: depend(1) means dependency on the container level (NUT) not
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
407 dependency on the codec level
12110
a34dc5a369ca restrictions to ensure that O(log n) seeking and error recovery is possible
michael
parents: 12084
diff changeset
408
12084
68baf8877c07 reversing the change to the forw/backw pointers, its somewhat simpler to update it if the forward pointer is first
michael
parents: 12082
diff changeset
409 stream_id_plus1[frame_code]
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
410 must be <250
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
411 if it is 0, then the stream_id is coded in the frame
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
412
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
413 data_size_mul[frame_code]
12379
4100528fadf1 limits too small, my CBR mp3 samples have 2x overhead after removial of size prediction
michael
parents: 12368
diff changeset
414 must be <16384
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
415
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
416 data_size_lsb[frame_code]
12379
4100528fadf1 limits too small, my CBR mp3 samples have 2x overhead after removial of size prediction
michael
parents: 12368
diff changeset
417 must be <16384
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
418
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
419 timestamp_delta[frame_code]
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
420 must be <16384 and >-16384
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
421
12084
68baf8877c07 reversing the change to the forw/backw pointers, its somewhat simpler to update it if the forward pointer is first
michael
parents: 12082
diff changeset
422 data_size
12261
d43f1c599701 remove data_size prediction
michael
parents: 12254
diff changeset
423 data_size= data_size_lsb + data_size_msb*data_size_mul;
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
424
12261
d43f1c599701 remove data_size prediction
michael
parents: 12254
diff changeset
425 coded_timestamp
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
426 if coded_timestamp < (1<<msb_timestamp_shift) then it is an lsb
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
427 timestamp, otherwise it is a full timestamp + (1<<msb_timestamp_shift)
12261
d43f1c599701 remove data_size prediction
michael
parents: 12254
diff changeset
428 lsb timestamps are converted to full timesamps by:
d43f1c599701 remove data_size prediction
michael
parents: 12254
diff changeset
429 mask = (1<<msb_timestamp_shift)-1;
d43f1c599701 remove data_size prediction
michael
parents: 12254
diff changeset
430 delta= last_timestamp - mask/2
d43f1c599701 remove data_size prediction
michael
parents: 12254
diff changeset
431 timestamp= ((timestamp_lsb-delta)&mask) + delta
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
432 a full timestamp MUST be used if there is no reference timestamp
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
433 available after the last frame_startcode with the current stream_id
12261
d43f1c599701 remove data_size prediction
michael
parents: 12254
diff changeset
434
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
435 lsb_timestamp
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
436 least significant bits of the timestamp in time_base precision
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
437 Example: IBBP display order
12084
68baf8877c07 reversing the change to the forw/backw pointers, its somewhat simpler to update it if the forward pointer is first
michael
parents: 12082
diff changeset
438 keyframe timestamp=0 -> timestamp=0
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
439 frame lsb_timestamp=3 -> timestamp=3
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
440 frame lsb_timestamp=1 -> timestamp=1
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
441 frame lsb_timestamp=2 -> timestamp=2
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
442 ...
12084
68baf8877c07 reversing the change to the forw/backw pointers, its somewhat simpler to update it if the forward pointer is first
michael
parents: 12082
diff changeset
443 keyframe msb_timestamp=257 -> timestamp=257
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
444 frame lsb_timestamp=255->timestamp=255
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
445 frame lsb_timestamp=0 -> timestamp=256
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
446 frame lsb_timestamp=4 -> timestamp=260
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
447 frame lsb_timestamp=2 -> timestamp=258
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
448 frame lsb_timestamp=3 -> timestamp=259
12110
a34dc5a369ca restrictions to ensure that O(log n) seeking and error recovery is possible
michael
parents: 12084
diff changeset
449 all timestamps of keyframes of a single stream MUST be monotone
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
450
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
451 dts
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
452 dts is calculated by using a decode_delay+1 sized buffer for each
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
453 stream, into which the current pts is inserted and the element with
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
454 the smallest value is removed, this is then the current dts
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
455 this buffer is initalized with decode_delay -1 elements
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
456 all frames with dts == timestamp must be monotone, that means a frame
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
457 which occures later in the stream must have a larger or equal dts
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
458 than an earlier frame
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
459 FIXME rename timestamp* to pts* ?
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
460
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
461 width/height
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
462 MUST be set to the coded width/height
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
463
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
464 sample_width/sample_height (aspect ratio)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
465 sample_width is the horizontal distance between samples
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
466 sample_width and sample_height MUST be relatively prime if not zero
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
467 MUST be 0 if unknown
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
468
10158
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
469 colorspace_type
10166
e860465ef46e colorspace_type
michael
parents: 10158
diff changeset
470 0 unknown
e860465ef46e colorspace_type
michael
parents: 10158
diff changeset
471 1 ITU Rec 624 / ITU Rec 601 Y range: 16..235 Cb/Cr range: 16..240
e860465ef46e colorspace_type
michael
parents: 10158
diff changeset
472 2 ITU Rec 709 Y range: 16..235 Cb/Cr range: 16..240
e860465ef46e colorspace_type
michael
parents: 10158
diff changeset
473 17 ITU Rec 624 / ITU Rec 601 Y range: 0..255 Cb/Cr range: 0..255
e860465ef46e colorspace_type
michael
parents: 10158
diff changeset
474 18 ITU Rec 709 Y range: 0..255 Cb/Cr range: 0..255
e860465ef46e colorspace_type
michael
parents: 10158
diff changeset
475
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
476 samplerate_nom / samplerate_denom = samplerate
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
477 the number of samples per second
9294
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 checksum
12118
b8fea9441d02 switching from crc32 to adler32 checksums, cuz they are faster and simpler
michael
parents: 12117
diff changeset
480 adler32 checksum
9294
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 index_timestamp
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
483 value of the timestamp of a keyframe relative to the last keyframe
14471
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
484 stored in this index
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
485
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
486 index_position
14471
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
487 position in bytes of the first byte of a keyframe, relative to the
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
488 last keyframe stored in this index
14919
1d4861b2ac4a returning to the old index at the end system, alternatives are too complex with questionable advantages
michael
parents: 14911
diff changeset
489 there MUST be no keyframe with the same stream_id as this index between
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
490 2 consecutive index entries if they are more than max_index_distance
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
491 apart
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
492
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
493 id
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
494 the id of the type/name pair, so it's more compact
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
495 0 means end
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
496
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
497 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
498 for example: "UTF8" -> String or "JPEG" -> jpeg image
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
499 Note: nonstandard fields should be prefixed by "X-"
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
500 Note: MUST be less than 6 byte long (might be increased to 64 later)
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
501
13308
8ff17d153414 info packet is now file global, while meta pakcet is stream specific, as discussed with Rich
alex
parents: 13047
diff changeset
502 info packet types
9295
michael
parents: 9294
diff changeset
503 the name of the info entry, valid names are
14471
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
504 "StreamId" the stream(s) to which the info packet applies
13308
8ff17d153414 info packet is now file global, while meta pakcet is stream specific, as discussed with Rich
alex
parents: 13047
diff changeset
505
9347
97888c25ae60 changing name to "nut" for now, we can change it again if we agree on something else
michael
parents: 9335
diff changeset
506 "Author"
97888c25ae60 changing name to "nut" for now, we can change it again if we agree on something else
michael
parents: 9335
diff changeset
507 "Description"
97888c25ae60 changing name to "nut" for now, we can change it again if we agree on something else
michael
parents: 9335
diff changeset
508 "Copyright"
9369
f7fc442571f7 added (PAL),(NTSC),..
alex
parents: 9361
diff changeset
509 "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
510 "Title"
9373
e1e2177841ef dvds have covers too - Andreas Hess <jaska@gmx.net>
alex
parents: 9372
diff changeset
511 "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
512 "Source" "DVD", "VCD", "CD", "MD", "FM radio", "VHS", "TV",
12391e52c2f7 -typo, +time, -ntsc/pal (idea by alex)
michael
parents: 9347
diff changeset
513 "LD"
9373
e1e2177841ef dvds have covers too - Andreas Hess <jaska@gmx.net>
alex
parents: 9372
diff changeset
514 Optional: appended PAL,NTSC,SECAM, ... in parentheses
9350
12391e52c2f7 -typo, +time, -ntsc/pal (idea by alex)
michael
parents: 9347
diff changeset
515 "CaptureDevice" "BT878", "BT848", "webcam", ... (more exact names are fine too)
12391e52c2f7 -typo, +time, -ntsc/pal (idea by alex)
michael
parents: 9347
diff changeset
516 "CreationTime" "2003-01-20 20:13:15Z", ...
12391e52c2f7 -typo, +time, -ntsc/pal (idea by alex)
michael
parents: 9347
diff changeset
517 (ISO 8601 format, see http://www.cl.cam.ac.uk/~mgk25/iso-time.html)
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
518 Note: don't forget the timezone
13308
8ff17d153414 info packet is now file global, while meta pakcet is stream specific, as discussed with Rich
alex
parents: 13047
diff changeset
519 "Keywords"
8ff17d153414 info packet is now file global, while meta pakcet is stream specific, as discussed with Rich
alex
parents: 13047
diff changeset
520 "TotalTime" total length of the stream in msecs
14471
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
521 "Language" ISO 639 and ISO 3166 for language/country code
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
522 something like "eng" (US english), can be 0 if unknown
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
523 and "multi" if several languages
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
524 see http://www.loc.gov/standards/iso639-2/englangn.html
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
525 and http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1/en_listp1.html the language code
12503
a160a68209ac disposition
michael
parents: 12502
diff changeset
526 "Disposition" "original", "dub" (translated), "comment", "lyrics", "karaoke"
9295
michael
parents: 9294
diff changeset
527 Note: if someone needs some others, please tell us about them, so we can
michael
parents: 9294
diff changeset
528 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
529 Note: nonstandard fields should be prefixed by "X-"
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
530 Note: MUST be less than 64 bytes long
9295
michael
parents: 9294
diff changeset
531
michael
parents: 9294
diff changeset
532 value
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
533 value of this name/type pair
9295
michael
parents: 9294
diff changeset
534
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
535 stuffing
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
536 0x80 can be placed in front of any type v entry for stuffing purposes
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
537
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
538 info_table[][2]={
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
539 {NULL , NULL }, // end
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
540 {NULL , NULL },
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
541 {NULL , "UTF8"},
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
542 {NULL , "v"},
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
543 {NULL , "s"},
14471
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
544 {"StreamId" , "v"},
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
545 {"Author" , "UTF8"},
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
546 {"Titel" , "UTF8"},
14471
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
547 {"Language" , "UTF8"},
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
548 {"Description" , "UTF8"},
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
549 {"Copyright" , "UTF8"},
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
550 {"Encoder" , "UTF8"},
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
551 {"Keyword" , "UTF8"},
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
552 {"Cover" , "JPEG"},
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
553 {"Cover" , "PNG"},
14471
6cdd5669e930 Here is an updated draft with the bits discussed previously merged:
michael
parents: 13308
diff changeset
554 {"Disposition" , "UTF8"},
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
555 };
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
556
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
557 Structure:
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
558
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
559 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
560 main header
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
561 stream_header (id=0)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
562 stream_header (id=1)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
563 ...
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
564 stream_header (id=n)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
565
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
566 headers may be repeated, but if they are, then they MUST all be repeated
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
567 together and repeated headers MUST be identical
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
568 headers MAY only repeat at the closest possible positions after 2^x where x is
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
569 an integer and the file end, so the headers may be repeated at 4102 if that is
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
570 the closest position after 2^12=4096 at which the headers can be placed
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
571
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
572 headers MUST be placed at least at the start of the file and immediately before
12501
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
573 the index or at the file end if there is no index
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
574 headers MUST be repeated at least twice (so they exist 3 times in a file)
9295
michael
parents: 9294
diff changeset
575
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
576 a demuxer MUST NOT demux a stream which contains more than one stream, or which
12501
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
577 is wrapped in a structure to facilitate more than one stream or otherwise
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
578 duplicate the role of a container. any such file is to be considered invalid
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
579
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
580 info packets which describe the whole file or individual streams/tracks MUST be
12503
a160a68209ac disposition
michael
parents: 12502
diff changeset
581 placed before any video/audio/... frames
a160a68209ac disposition
michael
parents: 12502
diff changeset
582
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
583 Index
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
584 Note: with realtime streaming, there is no end, so no index there either
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
585
b16480522be9 some typos
michael
parents: 9307
diff changeset
586 Info packets
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
587 the info_packet can be repeated, and can also contain different names & values
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
588 each time, but only if the time is different
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
589 Info packets can be used to describe the file or some part of it (chapters)
b16480522be9 some typos
michael
parents: 9307
diff changeset
590
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
591 info packets SHOULD be placed at the start of the file at least for realtime
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
592 streaming info packets will normally be transmitted when they apply for
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
593 example, the current song title & artist of the currently shown music video
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
594
b16480522be9 some typos
michael
parents: 9307
diff changeset
595 Unknown packets
12184
17667db616d3 (de)coder -> (de)muxer
michael
parents: 12162
diff changeset
596 MUST be ignored by the demuxer
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
597
12501
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
598 demuxer (non-normative)
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
599
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
600 in the absence of valid header at beginning, players SHOULD search for backup
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
601 headers starting at offset 2^x for each x players SHOULD end their search from
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
602 a particular offset when any startcode is found (including syncpoint)
12501
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
603
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
604
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
605 Sample code (GPL, & untested)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
606
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
607 typedef BufferContext{
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
608 uint8_t *buf;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
609 uint8_t *buf_ptr;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
610 }BufferContext;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
611
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
612 static inline uint64_t get_bytes(BufferContext *bc, int count){
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
613 uint64_t val=0;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
614
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
615 assert(count>0 && count<9);
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
616
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
617 for(i=0; i<count; i++){
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
618 val <<=8;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
619 val += *(bc->buf_ptr++);
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
620 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
621
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
622 return val;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
623 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
624
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
625 static inline void put_bytes(BufferContext *bc, int count, uint64_t val){
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
626 uint64_t val=0;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
627
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
628 assert(count>0 && count<9);
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
629
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
630 for(i=count-1; i>=0; i--){
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
631 *(bc->buf_ptr++)= val >> (8*i);
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
632 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
633
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
634 return val;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
635 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
636
10061
76b1c7d20da8 corrected the sample code
alex
parents: 9580
diff changeset
637 static inline uint64_t get_v(BufferContext *bc){
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
638 uint64_t val= 0;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
639
10158
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
640 for(; space_left(bc) > 0; ){
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
641 int tmp= *(bc->buf_ptr++);
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
642 if(tmp&0x80)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
643 val= (val<<7) + tmp - 0x80;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
644 else
9299
aa26f77e7aae remove non byte sized stuff
michael
parents: 9297
diff changeset
645 return (val<<7) + tmp;
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
646 }
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
647
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
648 return -1;
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
649 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
650
10061
76b1c7d20da8 corrected the sample code
alex
parents: 9580
diff changeset
651 static inline int put_v(BufferContext *bc, uint64_t val){
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
652 int i;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
653
10158
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
654 if(space_left(bc) < 9) return -1;
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
655
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
656 val &= 0x7FFFFFFFFFFFFFFFULL; // FIXME can only encode upto 63 bits currently
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
657 for(i=7; ; i+=7){
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
658 if(val>>i == 0) break;
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
659 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
660
10827
michael
parents: 10824
diff changeset
661 for(i-=7; i>0; i-=7){
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
662 *(bc->buf_ptr++)= 0x80 | (val>>i);
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
663 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
664 *(bc->buf_ptr++)= val&0x7F;
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
665
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
666 return 0;
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
667 }
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
668
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
669 static int64_t get_dts(int64_t pts, int64_t *pts_cache, int delay, int reset){
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
670 if(reset) memset(pts_cache, -1, delay*sizeof(int64_t));
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
671
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
672 while(delay--){
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
673 int64_t t= pts_cache[delay];
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
674 if(t < pts){
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
675 pts_cache[delay]= pts;
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
676 pts= t;
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
677 }
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
678 }
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
679
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
680 return pts;
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
681 }
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
682
10158
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
683 Authors
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
684
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
685 Folks from MPlayer Developers Mailinglist (http://www.mplayehrq.hu/).
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
686 Authors in ABC-order: (FIXME! Tell us if we left you out)
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
687 Beregszaszi, Alex (alex@fsn.hu)
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
688 Bunkus, Moritz (moritz@bunkus.org)
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
689 Diedrich, Tobias (td@sim.uni-hannover.de)
12297
a6b64a263ca2 imo i'm one of the nut spec authors :)
rfelker
parents: 12261
diff changeset
690 Felker, Rich (dalias@aerifal.cx)
10158
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
691 Franz, Fabian (FabianFranz@gmx.de)
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
692 Gereoffy, Arpad (arpi@thot.banki.hu)
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
693 Hess, Andreas (jaska@gmx.net)
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
694 Niedermayer, Michael (michaelni@gmx.at)