annotate DOCS/tech/nut.txt @ 22511:6fb4b3944764

Clarify that commits should not be split arbitrarily by file/directory.
author diego
date Mon, 12 Mar 2007 17:38:32 +0000
parents ae4e7d11e66f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19056
36f993b7f91d freeze (this is pretty much oded shimons patch from a few month ago)
michael
parents: 18899
diff changeset
1 ==================================
20922
e53110c2d071 revert last 2 commits on nut.txt
ods15
parents: 20911
diff changeset
2 NUT Open Container Format 20061104
19056
36f993b7f91d freeze (this is pretty much oded shimons patch from a few month ago)
michael
parents: 18899
diff changeset
3 ==================================
9294
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
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
7 Intro:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
8 ======
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
9
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
10 NUT is a free multimedia container format for storage of audio, video,
20649
michael
parents: 20633
diff changeset
11 subtitles and related user defined streams, it provides exact timestamps for
michael
parents: 20633
diff changeset
12 synchronization and seeking, is simple, has low overhead and can recover
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
13 in case of errors in the stream.
20649
michael
parents: 20633
diff changeset
14
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
15 Other common multimedia container formats are AVI, Ogg, Matroska, MP4, MOV
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
16 ASF, MPEG-PS, MPEG-TS.
20649
michael
parents: 20633
diff changeset
17
michael
parents: 20633
diff changeset
18
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
19 Features / goals:
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
20 (supported by the format, not necessarily by a specific implementation)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
21
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
22 Simplicity
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
23 Use the same encoding for nearly all fields.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
24 Simple decoding, so slow CPUs (and embedded systems) can handle it.
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
25
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
26 Extensibility
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
27 No limit for the possible values of all fields (using universal vlc).
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
28 Allow adding of new headers in the future.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
29 Allow adding more fields at the end of headers.
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
30
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
31 Compactness
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
32 ~0.2% overhead for normal bitrates.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
33 The index is <100kb per hour.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
34 A typical file header is about 100 bytes (audio + video headers together).
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
35 A packet header is about ~1-5 bytes.
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
36
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
37 Error resistance
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
38 Seeking / playback is possible without an index.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
39 Headers & index can be repeated.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
40 Damaged files can be played back with minimal data loss and fast
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
41 resynchronization times.
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
42
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
43 The specification is frozen. All files following the specification will be
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
44 compatible unless the specification is unfrozen.
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
45
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
46
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
47 Definitions:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
48 ============
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
49
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
50 MUST The specific part must be done to conform to this standard.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
51 SHOULD It is recommended to be done that way, but not strictly required.
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
52
20622
b105cebec25c keyframe definition
michael
parents: 20619
diff changeset
53 keyframe
20772
b58788cc1b27 simple 1 line definition of what a keyframe is
michael
parents: 20658
diff changeset
54 A keyframe is a frame from which you can start decoding, a more
b58788cc1b27 simple 1 line definition of what a keyframe is
michael
parents: 20658
diff changeset
55 exact definition is below
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
56 The nth frame is a keyframe if and only if frames n, n+1, ... in
20631
ec285c2d1055 2nd try for a keyframe definition
michael
parents: 20622
diff changeset
57 presentation order (that are all frames with a pts >= frame[n].pts) can
21165
ad87c5c9bb94 fix some typos
ivo
parents: 20966
diff changeset
58 be decoded successfully without reference to frames prior n in storage
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
59 order (that are all frames with a dts < frame[n].dts).
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
60 If no such frames exist (for example due to using overlapped transforms
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
61 like the MDCT in an audio codec), then the definition shall be extended
21165
ad87c5c9bb94 fix some typos
ivo
parents: 20966
diff changeset
62 by dropping n out of the set of frames which must be decodable, if this
ad87c5c9bb94 fix some typos
ivo
parents: 20966
diff changeset
63 is still insufficient then n+1 shall be dropped, and so on until there is
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
64 a keyframe.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
65 Every frame which is marked as a keyframe MUST be a keyframe according to
21165
ad87c5c9bb94 fix some typos
ivo
parents: 20966
diff changeset
66 the definition above, a muxer MUST mark every frame it knows is a keyframe
20633
44ea011155d1 attempt to fix the unbound future frame issue with keyframes on the muxer side
michael
parents: 20631
diff changeset
67 as such, a muxer SHOULD NOT analyze future frames to determine the
44ea011155d1 attempt to fix the unbound future frame issue with keyframes on the muxer side
michael
parents: 20631
diff changeset
68 keyframe status of the current frame but instead just set the frame as
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
69 non-keyframe.
20622
b105cebec25c keyframe definition
michael
parents: 20619
diff changeset
70 (FIXME maybe move somewhere else?)
20870
01f57f7226de pts definition by mans
michael
parents: 20846
diff changeset
71 pts
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
72 Presentation time of the first frame/sample that is completed by decoding
20870
01f57f7226de pts definition by mans
michael
parents: 20846
diff changeset
73 the coded frame.
01f57f7226de pts definition by mans
michael
parents: 20846
diff changeset
74 dts
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
75 The time when a frame is input into a synchronous 1-in-1-out decoder.
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
76
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
77
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
78 Syntax:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
79 =======
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
80
16428
5f4317692b7c spelling/grammar/wording
diego
parents: 15755
diff changeset
81 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
82 is using a pseudocode approach.
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
83
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
84
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
85
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
86 Conventions:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
87 ============
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
88
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
89 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
90 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
91 follow:
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
92
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
93 name (text description)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
94 functional definition
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
95 [Optional notes]
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
96
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
97 The bitstream syntax elements have a tagname and a functional definition, they
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
98 are presented in a bottom-up approach, again optional notes may follow and
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
99 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
100
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
101 name: (optional note)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
102 functional definition
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
103 [Optional notes]
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
104
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
105 The in-depth tag description follows the bitstream syntax.
16428
5f4317692b7c spelling/grammar/wording
diego
parents: 15755
diff changeset
106 The functional definition has a C-like syntax.
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
107
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
108
12209
3baef37d3b7c moving f() and u()
michael
parents: 12208
diff changeset
109
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
110 Type definitions:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
111 =================
12209
3baef37d3b7c moving f() and u()
michael
parents: 12208
diff changeset
112
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
113 f(n) (n fixed bits in big-endian order)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
114 u(n) (unsigned number encoded in n bits in MSB-first order)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
115
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
116 v (variable length value, unsigned)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
117 value=0
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
118 do{
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
119 more_data u(1)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
120 data u(7)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
121 value= 128*value + data
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
122 }while(more_data)
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
123
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
124 s (variable length value, signed)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
125 temp v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
126 temp++
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
127 if(temp&1) value= -(temp>>1)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
128 else value= (temp>>1)
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
129
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
130 b (binary data or string, to be use in vb, see below)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
131 for(i=0; i<length; i++){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
132 data[i] u(8)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
133 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
134 [Note: strings MUST be encoded in UTF-8]
17835
b493e5ba8741 strings without terminating NUL
ods15
parents: 17827
diff changeset
135 [Note: the character NUL (U+0000) is not legal within
b493e5ba8741 strings without terminating NUL
ods15
parents: 17827
diff changeset
136 or at the end of a string.]
9295
michael
parents: 9294
diff changeset
137
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
138 vb (variable length binary data or string)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
139 length v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
140 value b
12117
e1e5e2124dae minor changes
michael
parents: 12110
diff changeset
141
17796
6edc4492b777 universal timestamp (= stream_id + timestamp in stream timebase)
michael
parents: 17795
diff changeset
142 t (v coded universal timestamp)
6edc4492b777 universal timestamp (= stream_id + timestamp in stream timebase)
michael
parents: 17795
diff changeset
143 tmp v
17872
a05b9e4da7b8 timebase table
ods15
parents: 17845
diff changeset
144 id= tmp % time_base_count
a05b9e4da7b8 timebase table
ods15
parents: 17845
diff changeset
145 value= (tmp / time_base_count) * time_base[id]
9295
michael
parents: 9294
diff changeset
146
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
147
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
148 Bitstream syntax:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
149 =================
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
150
20618
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
151 file:
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
152 file_id_string
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
153 while(!eof){
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
154 if(next_byte == 'N'){
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
155 packet_header
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
156 switch(startcode){
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
157 case main_startcode: main_header; break;
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
158 case stream_startcode:stream_header; break;
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
159 case info_startcode: info_packet; break;
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
160 case index_startcode: index; break;
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
161 case syncpoint_startcode: syncpoint; break;
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
162 }
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
163 packet_footer
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
164 }else
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
165 frame
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
166 }
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
167
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
168 The structure of an undamaged file should look like the following, but
20618
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
169 demuxers should be flexible and be able to deal with damaged headers so the
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
170 above is a better loop in practice (not to mention it is simpler).
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
171 Note: Demuxers MUST be able to deal with new and unknown headers.
20618
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
172
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
173 file:
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
174 file_id_string
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
175 while(!eof){
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
176 packet_header, main_header, packet_footer
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
177 reserved_headers
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
178 for(i=0; i<stream_count; i++){
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
179 packet_header, stream_header, packet_footer
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
180 reserved_headers
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
181 }
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
182 while(next_code == info_startcode){
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
183 packet_header, info_packet, packet_footer
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
184 reserved_headers
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
185 }
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
186 if(next_code == index_startcode){
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
187 packet_header, index_packet, packet_footer
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
188 }
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
189 if (!eof) while(next_code != main_startcode){
20922
e53110c2d071 revert last 2 commits on nut.txt
ods15
parents: 20911
diff changeset
190 if(next_code == syncpoint_startcode){
e53110c2d071 revert last 2 commits on nut.txt
ods15
parents: 20911
diff changeset
191 packet_header, syncpoint, packet_footer
e53110c2d071 revert last 2 commits on nut.txt
ods15
parents: 20911
diff changeset
192 }
e53110c2d071 revert last 2 commits on nut.txt
ods15
parents: 20911
diff changeset
193 frame
20910
824cb042e035 allow info packets to appear in mid-stream, outside of main headers.
ods15
parents: 20870
diff changeset
194 reserved_headers
20618
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
195 }
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
196 }
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
197
4f0d58f5b10d move file up so its found first, this probably improves readability
michael
parents: 20468
diff changeset
198
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
199 Common elements:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
200 ----------------
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
201
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
202 reserved_bytes:
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
203 for(i=0; i<forward_ptr - length_of_non_reserved; i++)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
204 reserved u(8)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
205 [A demuxer MUST ignore any reserved bytes.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
206 A muxer MUST NOT write any reserved bytes, as this would make it
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
207 impossible to add new fields at the end of packets in the future
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
208 in a compatible way.]
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
209
17845
0ebc8dfa136a cosmetic, move stuff around
ods15
parents: 17835
diff changeset
210 packet_header
0ebc8dfa136a cosmetic, move stuff around
ods15
parents: 17835
diff changeset
211 startcode f(64)
0ebc8dfa136a cosmetic, move stuff around
ods15
parents: 17835
diff changeset
212 forward_ptr v
0ebc8dfa136a cosmetic, move stuff around
ods15
parents: 17835
diff changeset
213 if(forward_ptr > 4096)
0ebc8dfa136a cosmetic, move stuff around
ods15
parents: 17835
diff changeset
214 header_checksum u(32)
0ebc8dfa136a cosmetic, move stuff around
ods15
parents: 17835
diff changeset
215
0ebc8dfa136a cosmetic, move stuff around
ods15
parents: 17835
diff changeset
216 packet_footer
0ebc8dfa136a cosmetic, move stuff around
ods15
parents: 17835
diff changeset
217 checksum u(32)
0ebc8dfa136a cosmetic, move stuff around
ods15
parents: 17835
diff changeset
218
0ebc8dfa136a cosmetic, move stuff around
ods15
parents: 17835
diff changeset
219 reserved_headers
0ebc8dfa136a cosmetic, move stuff around
ods15
parents: 17835
diff changeset
220 while(next_byte == 'N' && next_code != main_startcode
0ebc8dfa136a cosmetic, move stuff around
ods15
parents: 17835
diff changeset
221 && next_code != stream_startcode
0ebc8dfa136a cosmetic, move stuff around
ods15
parents: 17835
diff changeset
222 && next_code != info_startcode
0ebc8dfa136a cosmetic, move stuff around
ods15
parents: 17835
diff changeset
223 && next_code != index_startcode
0ebc8dfa136a cosmetic, move stuff around
ods15
parents: 17835
diff changeset
224 && next_code != syncpoint_startcode){
0ebc8dfa136a cosmetic, move stuff around
ods15
parents: 17835
diff changeset
225 packet_header
21389
deac3aacf67e move reserved_bytes out of packet_footer. this makes all packets uniform.
ivo
parents: 21278
diff changeset
226 reserved_bytes
17845
0ebc8dfa136a cosmetic, move stuff around
ods15
parents: 17835
diff changeset
227 packet_footer
0ebc8dfa136a cosmetic, move stuff around
ods15
parents: 17835
diff changeset
228 }
0ebc8dfa136a cosmetic, move stuff around
ods15
parents: 17835
diff changeset
229
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
230 Headers:
10824
d163db068a12 reserved_bytes & byte order stuff
michael
parents: 10817
diff changeset
231
20619
fd2cd70ecc3f main header typo
michael
parents: 20618
diff changeset
232 main_header:
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
233 version v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
234 stream_count v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
235 max_distance v
17872
a05b9e4da7b8 timebase table
ods15
parents: 17845
diff changeset
236 time_base_count v
a05b9e4da7b8 timebase table
ods15
parents: 17845
diff changeset
237 for(i=0; i<time_base_count; i++)
21278
32dbc205ba34 rename all *_nom (nominator) to the correct *_num (numerator)
ivo
parents: 21195
diff changeset
238 time_base_num v
17872
a05b9e4da7b8 timebase table
ods15
parents: 17845
diff changeset
239 time_base_denom v
21278
32dbc205ba34 rename all *_nom (nominator) to the correct *_num (numerator)
ivo
parents: 21195
diff changeset
240 time_base[i]= time_base_num/time_base_denom
17437
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
241 tmp_pts=0
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
242 tmp_mul=1
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
243 tmp_stream=0
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
244 for(i=0; i<256; ){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
245 tmp_flag v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
246 tmp_fields v
17719
6f1bc4789a5d update tmp_field numbers (pretty much just cosmetic)
michael
parents: 17718
diff changeset
247 if(tmp_fields>0) tmp_pts s
6f1bc4789a5d update tmp_field numbers (pretty much just cosmetic)
michael
parents: 17718
diff changeset
248 if(tmp_fields>1) tmp_mul v
6f1bc4789a5d update tmp_field numbers (pretty much just cosmetic)
michael
parents: 17718
diff changeset
249 if(tmp_fields>2) tmp_stream v
6f1bc4789a5d update tmp_field numbers (pretty much just cosmetic)
michael
parents: 17718
diff changeset
250 if(tmp_fields>3) tmp_size v
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
251 else tmp_size=0
17719
6f1bc4789a5d update tmp_field numbers (pretty much just cosmetic)
michael
parents: 17718
diff changeset
252 if(tmp_fields>4) tmp_res v
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
253 else tmp_res=0
17719
6f1bc4789a5d update tmp_field numbers (pretty much just cosmetic)
michael
parents: 17718
diff changeset
254 if(tmp_fields>5) count v
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
255 else count= tmp_mul - tmp_size
17719
6f1bc4789a5d update tmp_field numbers (pretty much just cosmetic)
michael
parents: 17718
diff changeset
256 for(j=6; j<tmp_fields; j++){
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
257 tmp_reserved[i] v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
258 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
259 for(j=0; j<count && i<256; j++, i++){
17612
99b6205ff32c Make 'N' frame code implictly invalid
ods15
parents: 17585
diff changeset
260 if (i == 'N') {
17718
86bcb118eab1 simplify flags
michael
parents: 17714
diff changeset
261 flags[i]= FLAG_INVALID;
17612
99b6205ff32c Make 'N' frame code implictly invalid
ods15
parents: 17585
diff changeset
262 j--;
99b6205ff32c Make 'N' frame code implictly invalid
ods15
parents: 17585
diff changeset
263 continue;
99b6205ff32c Make 'N' frame code implictly invalid
ods15
parents: 17585
diff changeset
264 }
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
265 flags[i]= tmp_flag;
17887
f20bba087cc8 flags cleanup
michael
parents: 17883
diff changeset
266 stream_id[i]= tmp_stream;
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
267 data_size_mul[i]= tmp_mul;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
268 data_size_lsb[i]= tmp_size + j;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
269 pts_delta[i]= tmp_pts;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
270 reserved_count[i]= tmp_res;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
271 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
272 }
21389
deac3aacf67e move reserved_bytes out of packet_footer. this makes all packets uniform.
ivo
parents: 21278
diff changeset
273 reserved_bytes
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
274
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
275 stream_header:
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
276 stream_id v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
277 stream_class v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
278 fourcc vb
17872
a05b9e4da7b8 timebase table
ods15
parents: 17845
diff changeset
279 time_base_id v
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
280 msb_pts_shift v
17577
0f6b020f867d change checksum to crc32
ods15
parents: 17551
diff changeset
281 max_pts_distance v
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
282 decode_delay v
17939
daa0fdad26ed switch to using vlc for stream_flags
ods15
parents: 17887
diff changeset
283 stream_flags v
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
284 codec_specific_data vb
17640
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
285 if(stream_class == video){
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
286 width v
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
287 height v
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
288 sample_width v
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
289 sample_height v
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
290 colorspace_type v
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
291 }else if(stream_class == audio){
21278
32dbc205ba34 rename all *_nom (nominator) to the correct *_num (numerator)
ivo
parents: 21195
diff changeset
292 samplerate_num v
17640
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
293 samplerate_denom v
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
294 channel_count v
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
295 }
21389
deac3aacf67e move reserved_bytes out of packet_footer. this makes all packets uniform.
ivo
parents: 21278
diff changeset
296 reserved_bytes
16429
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
297
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
298 Basic Packets:
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
299
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
300 frame:
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
301 frame_code f(8)
17718
86bcb118eab1 simplify flags
michael
parents: 17714
diff changeset
302 frame_flags= flags[frame_code]
22174
a25747a97680 clarify description of reserved_count in frame header patch by (Clemens Ladisch cladisch,fastmail,net)
michael
parents: 22051
diff changeset
303 frame_res= reserved_count[frame_code]
17718
86bcb118eab1 simplify flags
michael
parents: 17714
diff changeset
304 if(frame_flags&FLAG_CODED){
86bcb118eab1 simplify flags
michael
parents: 17714
diff changeset
305 coded_flags v
86bcb118eab1 simplify flags
michael
parents: 17714
diff changeset
306 frame_flags ^= coded_flags
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
307 }
17887
f20bba087cc8 flags cleanup
michael
parents: 17883
diff changeset
308 if(frame_flags&FLAG_STREAM_ID){
f20bba087cc8 flags cleanup
michael
parents: 17883
diff changeset
309 stream_id v
f20bba087cc8 flags cleanup
michael
parents: 17883
diff changeset
310 }
f20bba087cc8 flags cleanup
michael
parents: 17883
diff changeset
311 if(frame_flags&FLAG_CODED_PTS){
f20bba087cc8 flags cleanup
michael
parents: 17883
diff changeset
312 coded_pts v
f20bba087cc8 flags cleanup
michael
parents: 17883
diff changeset
313 }
17718
86bcb118eab1 simplify flags
michael
parents: 17714
diff changeset
314 if(frame_flags&FLAG_SIZE_MSB){
86bcb118eab1 simplify flags
michael
parents: 17714
diff changeset
315 data_size_msb v
17437
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
316 }
17887
f20bba087cc8 flags cleanup
michael
parents: 17883
diff changeset
317 if(frame_flags&FLAG_RESERVED)
22174
a25747a97680 clarify description of reserved_count in frame header patch by (Clemens Ladisch cladisch,fastmail,net)
michael
parents: 22051
diff changeset
318 frame_res v
a25747a97680 clarify description of reserved_count in frame header patch by (Clemens Ladisch cladisch,fastmail,net)
michael
parents: 22051
diff changeset
319 for(i=0; i<frame_res; i++)
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
320 reserved v
17723
ods15
parents: 17722
diff changeset
321 if(frame_flags&FLAG_CHECKSUM){
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
322 checksum u(32)
17584
187260c06b4f Add syncpoint_checksum after frame header
ods15
parents: 17577
diff changeset
323 }
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
324 data
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
325
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
326 index:
17796
6edc4492b777 universal timestamp (= stream_id + timestamp in stream timebase)
michael
parents: 17795
diff changeset
327 max_pts t
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
328 syncpoints v
17720
63755b0aca46 the return of the monolithic index
michael
parents: 17719
diff changeset
329 for(i=0; i<syncpoints; i++){
17800
7547340823a9 div8 -> div16
michael
parents: 17799
diff changeset
330 syncpoint_pos_div16 v
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
331 }
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
332 for(i=0; i<stream_count; i++){
17615
363d23eb55d3 fix index, first keyframe cannot be written with pts=0
ods15
parents: 17612
diff changeset
333 last_pts= -1
17720
63755b0aca46 the return of the monolithic index
michael
parents: 17719
diff changeset
334 for(j=0; j<syncpoints; ){
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
335 x v
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
336 type= x & 1
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
337 x>>=1
17455
1bb20b4c4082 Interleave index to ease per-need decoding.
ods15
parents: 17439
diff changeset
338 n=j
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
339 if(type){
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
340 flag= x & 1
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
341 x>>=1
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
342 while(x--)
17455
1bb20b4c4082 Interleave index to ease per-need decoding.
ods15
parents: 17439
diff changeset
343 has_keyframe[n++][i]=flag
1bb20b4c4082 Interleave index to ease per-need decoding.
ods15
parents: 17439
diff changeset
344 has_keyframe[n++][i]=!flag;
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
345 }else{
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
346 while(x != 1){
17455
1bb20b4c4082 Interleave index to ease per-need decoding.
ods15
parents: 17439
diff changeset
347 has_keyframe[n++][i]=x&1;
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
348 x>>=1;
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
349 }
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
350 }
17455
1bb20b4c4082 Interleave index to ease per-need decoding.
ods15
parents: 17439
diff changeset
351 for(; j<n && j<syncpoints; j++){
1bb20b4c4082 Interleave index to ease per-need decoding.
ods15
parents: 17439
diff changeset
352 if (!has_keyframe[j][i]) continue
1bb20b4c4082 Interleave index to ease per-need decoding.
ods15
parents: 17439
diff changeset
353 A v
17531
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
354 if(!A){
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
355 A v
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
356 B v
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
357 eor_pts[j][i] = last_pts + A + B
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
358 }else
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
359 B=0
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
360 keyframe_pts[j][i] = last_pts + A
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
361 last_pts += A + B
17455
1bb20b4c4082 Interleave index to ease per-need decoding.
ods15
parents: 17439
diff changeset
362 }
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
363 }
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
364 }
17873
1ea882991bb4 rephrase index_ptr positioning
ods15
parents: 17872
diff changeset
365 reserved_bytes
17726
541738aa3079 return index_ptr to inside index
ods15
parents: 17723
diff changeset
366 index_ptr u(64)
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
367
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
368 info_packet:
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
369 stream_id_plus1 v
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
370 chapter_id s (Note: Due to a typo this was v
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
371 until 2006-11-04.)
17796
6edc4492b777 universal timestamp (= stream_id + timestamp in stream timebase)
michael
parents: 17795
diff changeset
372 chapter_start t
17708
11a96a862d43 remove chapter_id == 0 special case
michael
parents: 17686
diff changeset
373 chapter_len v
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
374 count v
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
375 for(i=0; i<count; i++){
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
376 name vb
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
377 value s
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
378 if (value==-1){
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
379 type= "UTF-8"
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
380 value vb
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
381 }else if (value==-2){
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
382 type vb
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
383 value vb
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
384 }else if (value==-3){
17685
ac0534e8c3d2 use short 'type' names
ods15
parents: 17684
diff changeset
385 type= "s"
17326
a9e170085990 1) change date and goals slightly
ods15
parents: 17230
diff changeset
386 value s
17796
6edc4492b777 universal timestamp (= stream_id + timestamp in stream timebase)
michael
parents: 17795
diff changeset
387 }else if (value==-4){
6edc4492b777 universal timestamp (= stream_id + timestamp in stream timebase)
michael
parents: 17795
diff changeset
388 type= "t"
6edc4492b777 universal timestamp (= stream_id + timestamp in stream timebase)
michael
parents: 17795
diff changeset
389 value t
6edc4492b777 universal timestamp (= stream_id + timestamp in stream timebase)
michael
parents: 17795
diff changeset
390 }else if (value<-4){
17685
ac0534e8c3d2 use short 'type' names
ods15
parents: 17684
diff changeset
391 type= "r"
17796
6edc4492b777 universal timestamp (= stream_id + timestamp in stream timebase)
michael
parents: 17795
diff changeset
392 value.den= -value-4
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
393 value.num s
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
394 }else{
17685
ac0534e8c3d2 use short 'type' names
ods15
parents: 17684
diff changeset
395 type= "v"
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
396 }
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
397 }
21389
deac3aacf67e move reserved_bytes out of packet_footer. this makes all packets uniform.
ivo
parents: 21278
diff changeset
398 reserved_bytes
16506
1e42b8be5b7f add back_ptr
michael
parents: 16503
diff changeset
399
17326
a9e170085990 1) change date and goals slightly
ods15
parents: 17230
diff changeset
400 syncpoint:
17796
6edc4492b777 universal timestamp (= stream_id + timestamp in stream timebase)
michael
parents: 17795
diff changeset
401 global_key_pts t
17800
7547340823a9 div8 -> div16
michael
parents: 17799
diff changeset
402 back_ptr_div16 v
21389
deac3aacf67e move reserved_bytes out of packet_footer. this makes all packets uniform.
ivo
parents: 21278
diff changeset
403 reserved_bytes
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
404
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
405 Complete definition:
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
406
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
407
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
408 Tag description:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
409 ----------------
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
410
12242
f67bc1d216a1 file_id_string (idea by ivan)
michael
parents: 12238
diff changeset
411 file_id_string
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
412 "nut/multimedia container\0"
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
413 The very first thing in every NUT file, useful for identifying NUT files.
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
414
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
415 *_startcode (f(64))
20468
7fdcfb0dbc1d indentation fix
ods15
parents: 20460
diff changeset
416 all startcodes start with 'N'
12162
ab533510d598 remove old example stream
michael
parents: 12161
diff changeset
417
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
418 main_startcode (f(64))
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
419 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
420
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
421 stream_startcode (f(64))
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
422 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
423
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
424 syncpoint_startcode (f(64))
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
425 0xE4ADEECA4569ULL + (((uint64_t)('N'<<8) + 'K')<<48)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
426
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
427 index_startcode (f(64))
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
428 0xDD672F23E64EULL + (((uint64_t)('N'<<8) + 'X')<<48)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
429
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
430 info_startcode (f(64))
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
431 0xAB68B596BA78ULL + (((uint64_t)('N'<<8) + 'I')<<48)
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
432
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
433 version (v)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
434 NUT version. The current value is 3. All lower values are pre-freeze.
12238
a0ddf85bdee0 removing backward pointers
michael
parents: 12209
diff changeset
435
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
436 stream_count (v)
20822
684313be54f6 stream_count
michael
parents: 20780
diff changeset
437 number of streams in this file
684313be54f6 stream_count
michael
parents: 20780
diff changeset
438
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
439 time_base_count (v)
20823
507efc9b161b time_base_count
michael
parents: 20822
diff changeset
440 number of different time bases in this file
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
441 This MUST NOT be 0.
20823
507efc9b161b time_base_count
michael
parents: 20822
diff changeset
442
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
443 forward_ptr (v)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
444 Size of the packet data (exactly the distance from the first byte
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
445 after the packet_header to the first byte of the next packet).
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
446 Every NUT packet contains a forward_ptr immediately after its startcode
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
447 with the exception of frame_code-based packets. The forward pointer
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
448 can be used to skip over the packet without decoding its contents.
17439
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
449
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
450 max_distance (v)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
451 maximum distance between startcodes. If p1 and p2 are the byte
17944
db2c775fb2b9 max_distance clarification
ods15
parents: 17940
diff changeset
452 positions of the first byte of two consecutive startcodes, then
db2c775fb2b9 max_distance clarification
ods15
parents: 17940
diff changeset
453 p2-p1 MUST be less than or equal to max_distance unless the entire
db2c775fb2b9 max_distance clarification
ods15
parents: 17940
diff changeset
454 span from p1 to p2 comprises a single packet or a syncpoint
db2c775fb2b9 max_distance clarification
ods15
parents: 17940
diff changeset
455 followed by a single frame. This imposition places efficient upper
db2c775fb2b9 max_distance clarification
ods15
parents: 17940
diff changeset
456 bounds on seek operations and allows for the detection of damaged
db2c775fb2b9 max_distance clarification
ods15
parents: 17940
diff changeset
457 frame headers, should a chain of frame headers pass max_distance
db2c775fb2b9 max_distance clarification
ods15
parents: 17940
diff changeset
458 without encountering any startcode.
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
459
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
460 Syncpoints SHOULD be placed immediately before a keyframe if the
17439
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
461 previous frame of the same stream was a non-keyframe, unless such
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
462 non-keyframe - keyframe transitions are very frequent.
17439
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
463
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
464 SHOULD be set to <=32768.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
465 If the stored value is >65536 then max_distance MUST be set to 65536.
12501
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
466
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
467 This is also half the maximum frame size without a checksum after the
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
468 frame header.
17799
02139a9b7c7b drop max_frame_size
michael
parents: 17798
diff changeset
469
02139a9b7c7b drop max_frame_size
michael
parents: 17798
diff changeset
470
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
471 max_pts_distance (v)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
472 Maximum absolute difference of the pts of the new frame from last_pts in
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
473 the timebase of the stream, without a checksum after the frame header.
17944
db2c775fb2b9 max_distance clarification
ods15
parents: 17940
diff changeset
474 A frame header MUST include a checksum if abs(pts-last_pts) is
db2c775fb2b9 max_distance clarification
ods15
parents: 17940
diff changeset
475 strictly greater than max_pts_distance.
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
476 Note that last_pts is not necessarily the pts of the last frame
17577
0f6b020f867d change checksum to crc32
ods15
parents: 17551
diff changeset
477 on the same stream, as it is altered by syncpoint timestamps.
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
478 SHOULD NOT be higher than 1/timebase.
17577
0f6b020f867d change checksum to crc32
ods15
parents: 17551
diff changeset
479
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
480 stream_id (v)
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
481 Stream identifier
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
482 stream_id MUST be < stream_count
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
483
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
484 stream_class (v)
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
485 0 video
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
486 1 audio
21165
ad87c5c9bb94 fix some typos
ivo
parents: 20966
diff changeset
487 2 subtitles
17793
68d3692cfd47 push back userdata stream_class
ods15
parents: 17792
diff changeset
488 3 userdata
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
489 Note: The remaining values are reserved and MUST NOT be used.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
490 A demuxer MUST ignore streams with reserved classes.
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
491
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
492 fourcc (vb)
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
493 identification for the codec
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
494 example: "H264"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
495 MUST contain 2 or 4 bytes, note, this might be increased in the future
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
496 if needed.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
497 The ID values used are the same as in AVI, so if a codec uses a specific
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
498 FourCC in AVI then the same FourCC MUST be used here.
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
499
21278
32dbc205ba34 rename all *_nom (nominator) to the correct *_num (numerator)
ivo
parents: 21195
diff changeset
500 time_base_num (v) / time_base_denom (v) = time_base
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
501 the length of a timer tick in seconds, this MUST be equal to the 1/fps
17939
daa0fdad26ed switch to using vlc for stream_flags
ods15
parents: 17887
diff changeset
502 if FLAG_FIXED_FPS is set
21278
32dbc205ba34 rename all *_nom (nominator) to the correct *_num (numerator)
ivo
parents: 21195
diff changeset
503 time_base_num and time_base_denom MUST NOT be 0
32dbc205ba34 rename all *_nom (nominator) to the correct *_num (numerator)
ivo
parents: 21195
diff changeset
504 time_base_num and time_base_denom MUST be relatively prime
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
505 time_base_denom MUST be < 2^31
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
506 examples:
21278
32dbc205ba34 rename all *_nom (nominator) to the correct *_num (numerator)
ivo
parents: 21195
diff changeset
507 fps time_base_num time_base_denom
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
508 30 1 30
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
509 29.97 1001 30000
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
510 23.976 1001 24000
17883
063c90340a34 timebases guidelines
ods15
parents: 17873
diff changeset
511 There MUST NOT be 2 identical timebases in a file.
063c90340a34 timebases guidelines
ods15
parents: 17873
diff changeset
512 There SHOULD NOT be more timebases than streams.
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
513
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
514 time_base_id (v)
20829
60754557f39a clearer time_base_id description
michael
parents: 20823
diff changeset
515 index into the time_base table
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
516 MUST be < time_base_count.
17872
a05b9e4da7b8 timebase table
ods15
parents: 17845
diff changeset
517
17328
33b03e1e4170 1) remove global_timebase
ods15
parents: 17327
diff changeset
518 convert_ts
33b03e1e4170 1) remove global_timebase
ods15
parents: 17327
diff changeset
519 To switch from 2 different timebases, the following calculation is
33b03e1e4170 1) remove global_timebase
ods15
parents: 17327
diff changeset
520 defined:
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
521
21278
32dbc205ba34 rename all *_nom (nominator) to the correct *_num (numerator)
ivo
parents: 21195
diff changeset
522 ln = from_time_base_num*to_time_base_denom
17328
33b03e1e4170 1) remove global_timebase
ods15
parents: 17327
diff changeset
523 sn = from_timestamp
33b03e1e4170 1) remove global_timebase
ods15
parents: 17327
diff changeset
524 d1 = from_time_base_denom
21278
32dbc205ba34 rename all *_nom (nominator) to the correct *_num (numerator)
ivo
parents: 21195
diff changeset
525 d2 = to_time_base_num
17328
33b03e1e4170 1) remove global_timebase
ods15
parents: 17327
diff changeset
526 timestamp = (ln/d1*sn + ln%d1*sn/d1)/d2
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
527 Note: This calculation MUST be done with unsigned 64 bit integers, and
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
528 is equivalent to (ln*sn)/(d1*d2) but this would require a 96 bit integer.
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
529
17532
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
530 compare_ts
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
531 Compares timestamps from 2 different timebases,
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
532 if a is before b then compare_ts(a, b) = -1
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
533 if a is after b then compare_ts(a, b) = 1
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
534 else compare_ts(a, b) = 0
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
535
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
536 Care must be taken that this is done exactly with no rounding errors,
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
537 simply casting to float or double and doing the obvious
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
538 a*timebase > b*timebase is not compliant or correct, neither is the
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
539 same with integers, and
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
540 a*a_timebase.num*b_timebase.den > b*b_timebase.num*a_timebase.den
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
541 will overflow. One possible implementation which shouldn't overflow
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
542 within the range of legal timestamps and timebases is:
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
543
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
544 if (convert_ts(a, a_timebase, b_timebase) < b) return -1;
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
545 if (convert_ts(b, b_timebase, a_timebase) < a) return 1;
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
546 return 0;
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
547
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
548 msb_pts_shift (v)
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
549 amount of bits in lsb_pts
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
550 MUST be <16.
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
551
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
552 decode_delay (v)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
553 Size of the reordering buffer used to convert pts to dts.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
554 Codecs which do not support B-frames normally use 0.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
555 MPEG-1/MPEG-2-style codecs with B-frames use 1.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
556 H.264-style B-pyramid uses 2.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
557 H.264 and future codecs might need values >2.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
558 Audio codecs generally use 0. (We are not aware of any, but it
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
559 is theoretically possible that a codec might need a value >0.)
17639
56ec8716e25b some cleanup. enforce decode_delay to not be too high.
ods15
parents: 17615
diff changeset
560 decode_delay MUST NOT be set higher than necessary for a codec.
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
561
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
562 stream_flags (v)
17939
daa0fdad26ed switch to using vlc for stream_flags
ods15
parents: 17887
diff changeset
563 Bit Name Description
daa0fdad26ed switch to using vlc for stream_flags
ods15
parents: 17887
diff changeset
564 1 FLAG_FIXED_FPS indicates that the fps is fixed
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
565
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
566 codec_specific_data (vb)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
567 Private global data for a codec (could be huffman tables or ...).
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
568 If a codec has a global header it SHOULD be placed in here instead of
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
569 at the start of every keyframe.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
570 The exact format is specified in the codec specification.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
571 For H.264 the NAL units MUST be formatted as in a bytestream
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
572 (with 00 00 01 prefixes).
21173
da82711ea019 codec_specific_data clarification
michael
parents: 21171
diff changeset
573 codec_specific_data SHOULD contain exactly the essential global packets
da82711ea019 codec_specific_data clarification
michael
parents: 21171
diff changeset
574 needed to decode a stream, more specifically it SHOULD NOT contain packets
da82711ea019 codec_specific_data clarification
michael
parents: 21171
diff changeset
575 which contain only non essential metadata like author, title, ...
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
576 It also MUST NOT contain normal packets which cause the reference decoder
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
577 to generate any specific decoded samples.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
578 The encoder name and version shall be considered essential as it is very
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
579 useful to work around possible encoder bugs.
21195
a1aaa21a66f2 a few more clarifications for codec_specific_data by Ralph Giles and me
michael
parents: 21177
diff changeset
580 The global headers MUST consist of the normal
a1aaa21a66f2 a few more clarifications for codec_specific_data by Ralph Giles and me
michael
parents: 21177
diff changeset
581 sequence of header packets required for codec initialization, in the
a1aaa21a66f2 a few more clarifications for codec_specific_data by Ralph Giles and me
michael
parents: 21177
diff changeset
582 order defined in the codec spec. An implementation MAY strip metadata and
a1aaa21a66f2 a few more clarifications for codec_specific_data by Ralph Giles and me
michael
parents: 21177
diff changeset
583 other redundant information not necessary for correct playback from the
a1aaa21a66f2 a few more clarifications for codec_specific_data by Ralph Giles and me
michael
parents: 21177
diff changeset
584 global headers as long as no incorrect values are stored and as long as
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
585 the stripped result is not less valid per codec spec as before stripping.
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
586
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
587 frame_code (f(8))
21171
9412a906a058 fix another typo
ivo
parents: 21165
diff changeset
588 frame_code is an 8-bit field which exists before every frame, it can
20775
05159ef5282e clearer frame_code explanation
michael
parents: 20772
diff changeset
589 store part of the size of the frame, the stream number, the timestamp
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
590 and some flags amongst other things. What is not directly stored
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
591 in it but is needed is stored in various fields immediately after it.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
592 The values stored in it can be found in the main header.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
593 The value 78 ('N') is forbidden to ensure that the byte is always
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
594 different from the first byte of any startcode.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
595 A muxer SHOULD mark 0x00 and 0xFF as invalid to improve error
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
596 detection.
9420
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
597
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
598 flags[frame_code], frame_flags (v)
17940
0436e8344ee4 cosmetic, table align
ods15
parents: 17939
diff changeset
599 Bit Name Description
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
600 0 FLAG_KEY If set, the frame is a keyframe.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
601 1 FLAG_EOR If set, the stream has no relevance on
17824
c3429282c9a8 10l to me, misarrangment of flags
ods15
parents: 17823
diff changeset
602 presentation. (EOR)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
603 3 FLAG_CODED_PTS If set, coded_pts is in the frame header.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
604 4 FLAG_STREAM_ID If set, stream_id is coded in the frame header.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
605 5 FLAG_SIZE_MSB If set, data_size_msb at the frame header,
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
606 otherwise data_size_msb is 0.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
607 6 FLAG_CHECKSUM If set, the frame header contains a checksum.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
608 7 FLAG_RESERVED If set, reserved_count is coded in the frame header.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
609 12 FLAG_CODED If set, coded_flags are stored in the frame header.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
610 13 FLAG_INVALID If set, frame_code is invalid.
17437
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
611
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
612 EOR frames MUST be zero-length and must be set keyframe.
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
613 All streams SHOULD end with EOR, where the pts of the EOR indicates the
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
614 end presentation time of the final frame.
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
615 An EOR set stream is unset by the first content frames.
17551
6c3ca4e1fceb EOR can only be (un)set for non delayed streams.
ods15
parents: 17547
diff changeset
616 EOR can only be unset in streams with zero decode_delay .
17944
db2c775fb2b9 max_distance clarification
ods15
parents: 17940
diff changeset
617 FLAG_CHECKSUM MUST be set if the frame's data_size is strictly greater than
db2c775fb2b9 max_distance clarification
ods15
parents: 17940
diff changeset
618 2*max_distance or the difference abs(pts-last_pts) is strictly greater than
db2c775fb2b9 max_distance clarification
ods15
parents: 17940
diff changeset
619 max_pts_distance (where pts represents this frame's pts and last_pts is
db2c775fb2b9 max_distance clarification
ods15
parents: 17940
diff changeset
620 defined as below).
12110
a34dc5a369ca restrictions to ensure that O(log n) seeking and error recovery is possible
michael
parents: 12084
diff changeset
621
20460
0feb44107cdf clarify pts related stuff
michael
parents: 19123
diff changeset
622 last_pts
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
623 The timestamp of the last frame with the same stream_id as the current.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
624 If there is no such frame between the last syncpoint and the current
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
625 frame then the syncpoint timestamp is used, see global_key_pts.
20460
0feb44107cdf clarify pts related stuff
michael
parents: 19123
diff changeset
626
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
627 stream_id[frame_code] (v)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
628 If FLAG_STREAM_ID is not set then this is the stream number for the
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
629 frame following this frame_code.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
630 If FLAG_STREAM_ID is set then this value has no meaning.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
631 MUST be <250.
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
632
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
633 data_size_mul[frame_code] (v)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
634 If FLAG_SIZE_MSB is set then data_size_msb which is stored after the
20778
2581bc30a279 size and stream_id docs
michael
parents: 20775
diff changeset
635 frame code is multiplied with it and forms the more significant part
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
636 of the size of the following frame.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
637 If FLAG_SIZE_MSB is not set then this field has no meaning.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
638 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
639
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
640 data_size_lsb[frame_code] (v)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
641 The less significant part of the size of the following frame.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
642 This added together with data_size_mul*data_size_msb is the size of
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
643 the following frame.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
644 MUST be <16384.
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
645
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
646 pts_delta[frame_code] (s)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
647 If FLAG_CODED_PTS is set in the flags of the current frame then this
20460
0feb44107cdf clarify pts related stuff
michael
parents: 19123
diff changeset
648 value MUST be ignored, if FLAG_CODED_PTS is not set then pts_delta is the
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
649 difference between the current pts and last_pts.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
650 MUST be <16384 and >-16384.
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
651
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
652 reserved_count[frame_code] (v)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
653 MUST be <256.
17640
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
654
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
655 data_size
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
656 The size of the following frame.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
657 data_size = data_size_lsb + data_size_msb * data_size_mul ;
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
658
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
659 coded_pts (v)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
660 If coded_pts < ( 1 << msb_pts_shift ) then it is an lsb
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
661 pts, otherwise it is a full pts + ( 1 << msb_pts_shift ).
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
662 lsb pts is converted to a full pts by:
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
663 mask = ( 1 << msb_pts_shift ) - 1;
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
664 delta = last_pts - mask / 2
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
665 pts = ( (pts_lsb - delta) & mask ) + delta
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
666
16429
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
667 lsb_pts
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
668 Least significant bits of the pts in time_base precision.
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
669 Example: IBBP display order
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
670 keyframe pts=0 -> pts=0
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
671 frame lsb_pts=3 -> pts=3
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
672 frame lsb_pts=1 -> pts=1
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
673 frame lsb_pts=2 -> pts=2
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
674 ...
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
675 keyframe msb_pts=257 -> pts=257
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
676 frame lsb_pts=255 -> pts=255
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
677 frame lsb_pts=0 -> pts=256
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
678 frame lsb_pts=4 -> pts=260
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
679 frame lsb_pts=2 -> pts=258
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
680 frame lsb_pts=3 -> pts=259
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
681 All pts values of keyframes of a single stream MUST be monotone.
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
682
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
683 dts
20780
e8cd0590bf97 dts, width/height explanation
michael
parents: 20778
diff changeset
684 decoding timestamp
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
685 The dts of a frame is the timestamp of the first sample which is
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
686 output by a decoder when it is fed with the frame. Note that the
21165
ad87c5c9bb94 fix some typos
ivo
parents: 20966
diff changeset
687 data output is not necessarily what is coded in the frame, but may
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
688 be data from previous frames.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
689 dts is calculated by using a decode_delay + 1 sized buffer for each
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
690 stream, into which the current pts is inserted and the element with
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
691 the smallest value is removed. This is then the current dts.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
692 This buffer is initialized with decode_delay - 1 elements.
17327
2a1cc9c01f64 MN rule
ods15
parents: 17326
diff changeset
693
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
694 pts of all frames in all streams MUST be bigger or equal to dts of all
17437
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
695 previous frames in all streams, compared in common timebase. (EOR
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
696 frames are NOT exempt from this rule.)
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
697 dts of all frames MUST be bigger or equal to dts of all previous frames
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
698 in the same stream.
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
699
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
700 width (v) / height (v)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
701 Width and height of the video in pixels.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
702 MUST be set to the coded width/height, MUST NOT be 0.
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
703
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
704 sample_width (v) /sample_height (v) (aspect ratio)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
705 sample_width is the horizontal distance between samples.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
706 sample_width and sample_height MUST be relatively prime if not zero.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
707 Both MUST be 0 if unknown otherwise both MUST be nonzero.
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
708
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
709 colorspace_type (v)
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
710 0 unknown
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
711 1 ITU Rec 624 / ITU Rec 601 Y range: 16..235 Cb/Cr range: 16..240
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
712 2 ITU Rec 709 Y range: 16..235 Cb/Cr range: 16..240
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
713 17 ITU Rec 624 / ITU Rec 601 Y range: 0..255 Cb/Cr range: 0..255
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
714 18 ITU Rec 709 Y range: 0..255 Cb/Cr range: 0..255
10166
e860465ef46e colorspace_type
michael
parents: 10158
diff changeset
715
21278
32dbc205ba34 rename all *_nom (nominator) to the correct *_num (numerator)
ivo
parents: 21195
diff changeset
716 samplerate_num (v) / samplerate_denom (v) = samplerate
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
717 The number of samples per second, MUST NOT be 0.
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
718
17683
39f67ee74bfe CRC32 stuff
ods15
parents: 17671
diff changeset
719 crc32 checksum
17710
9a976f1550f1 leading coeff for crc polynom
michael
parents: 17709
diff changeset
720 Generator polynomial is 0x104C11DB7. Starting value is zero.
17683
39f67ee74bfe CRC32 stuff
ods15
parents: 17671
diff changeset
721
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
722 checksum (u(32))
17577
0f6b020f867d change checksum to crc32
ods15
parents: 17551
diff changeset
723 crc32 checksum
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
724 The checksum is calculated for the area pointed to by forward_ptr
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
725 not including the checksum itself (from first byte after the
17808
278206dd6fbd clarify, header_checksum is not included in forward_ptr and in packet checksum
ods15
parents: 17801
diff changeset
726 packet_header until last byte before the checksum).
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
727 For frame headers the checksum contains the framecode byte and all
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
728 following bytes up to the checksum itself.
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
729
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
730 header_checksum (u(32))
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
731 Checksum over the startcode and forward pointer.
17792
fd980f31fbc2 header_checksum
michael
parents: 17773
diff changeset
732
17640
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
733 Syncpoint tags:
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
734 ---------------
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
735
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
736 back_ptr_div16 (v)
17800
7547340823a9 div8 -> div16
michael
parents: 17799
diff changeset
737 back_ptr = back_ptr_div16 * 16 + 15
22051
456d6d9dddce better back_ptr_div16 description by (Clemens Ladisch ((( cladisch ( fastmail (( net
michael
parents: 21389
diff changeset
738 back_ptr must point to a position up to 15 bytes before a syncpoint
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
739 startcode, relative to position of current syncpoint. The syncpoint
22051
456d6d9dddce better back_ptr_div16 description by (Clemens Ladisch ((( cladisch ( fastmail (( net
michael
parents: 21389
diff changeset
740 pointed to MUST be the closest syncpoint such that at least one keyframe
456d6d9dddce better back_ptr_div16 description by (Clemens Ladisch ((( cladisch ( fastmail (( net
michael
parents: 21389
diff changeset
741 with a pts lower or equal to the current syncpoint's global_key_pts for
456d6d9dddce better back_ptr_div16 description by (Clemens Ladisch ((( cladisch ( fastmail (( net
michael
parents: 21389
diff changeset
742 all streams lies between it and the current syncpoint.
17439
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
743
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
744 A stream where EOR is set is to be ignored for back_ptr.
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
745
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
746 global_key_pts (t)
17439
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
747 After a syncpoint, last_pts of each stream is to be set to:
17872
a05b9e4da7b8 timebase table
ods15
parents: 17845
diff changeset
748 last_pts[i] = convert_ts(global_key_pts, time_base[id], time_base[i])
17439
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
749
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
750 global_key_pts MUST be bigger or equal to dts of all past frames across
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
751 all streams, and smaller or equal to pts of all future frames.
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
752
17640
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
753 Index tags:
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
754 -----------
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
755
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
756 max_pts (t)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
757 the highest pts in the entire file
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
758
21177
a84cf294f135 add two missing descriptions (index.syncpoints and info_packet.count)
ivo
parents: 21176
diff changeset
759 syncpoints (v)
a84cf294f135 add two missing descriptions (index.syncpoints and info_packet.count)
ivo
parents: 21176
diff changeset
760 number of indexed syncpoints
a84cf294f135 add two missing descriptions (index.syncpoints and info_packet.count)
ivo
parents: 21176
diff changeset
761
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
762 syncpoint_pos_div16 (v)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
763 The offset from the beginning of the file to up to 15 bytes before the
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
764 syncpoint referred to in this index entry. Relative to position of last
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
765 syncpoint.
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
766
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
767 has_keyframe
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
768 Indicates whether this stream has a keyframe between this syncpoint and
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
769 the last syncpoint.
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
770
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
771 keyframe_pts
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
772 The pts of the first keyframe for this stream in the region between the
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
773 2 syncpoints, in the stream's timebase. (EOR frames are also keyframes.)
17531
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
774
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
775 eor_pts
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
776 Coded only if EOR is set at the position of the syncpoint. The pts of
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
777 that EOR. EOR is unset by the first keyframe after it.
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
778
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
779 index_ptr (u(64))
17726
541738aa3079 return index_ptr to inside index
ods15
parents: 17723
diff changeset
780 Length in bytes of the entire index, from the first byte of the
541738aa3079 return index_ptr to inside index
ods15
parents: 17723
diff changeset
781 startcode until the last byte of the checksum.
541738aa3079 return index_ptr to inside index
ods15
parents: 17723
diff changeset
782 Note: A demuxer can use this to find the index when it is written at
541738aa3079 return index_ptr to inside index
ods15
parents: 17723
diff changeset
783 EOF, as index_ptr will always be 12 bytes before the end of file if
541738aa3079 return index_ptr to inside index
ods15
parents: 17723
diff changeset
784 there is an index at all.
541738aa3079 return index_ptr to inside index
ods15
parents: 17723
diff changeset
785
16429
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
786
17640
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
787 Info tags:
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
788 ----------
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
789
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
790 stream_id_plus1 (v)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
791 Stream this info packet applies to. If zero, packet applies to the
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
792 whole file.
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
793
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
794 chapter_id (s)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
795 The ID of the chapter this packet applies to. If zero, the packet applies
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
796 to the whole file. Positive chapter_id values represent real chapters and
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
797 MUST NOT overlap.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
798 A negative chapter_id indicates a sub region of the file and not a real
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
799 chapter. chapter_id MUST be unique to the region it represents.
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
800 chapter_id n MUST NOT be used unless there are at least n chapters in the
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
801 file.
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
802
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
803 chapter_start (t)
17796
6edc4492b777 universal timestamp (= stream_id + timestamp in stream timebase)
michael
parents: 17795
diff changeset
804 timestamp of start of chapter
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
805
21175
3cdb95ea504d specify, where possible, the type of the tags in the tag description section
ivo
parents: 21173
diff changeset
806 chapter_len (v)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
807 Length of chapter in the same timebase as chapter_start.
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
808
21177
a84cf294f135 add two missing descriptions (index.syncpoints and info_packet.count)
ivo
parents: 21176
diff changeset
809 count (v)
a84cf294f135 add two missing descriptions (index.syncpoints and info_packet.count)
ivo
parents: 21176
diff changeset
810 number of name/value pairs in this info packet
a84cf294f135 add two missing descriptions (index.syncpoints and info_packet.count)
ivo
parents: 21176
diff changeset
811
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
812 type
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
813 for example: "UTF8" -> string or "JPEG" -> JPEG image
17685
ac0534e8c3d2 use short 'type' names
ods15
parents: 17684
diff changeset
814 "v" -> unsigned integer
ac0534e8c3d2 use short 'type' names
ods15
parents: 17684
diff changeset
815 "s" -> signed integer
ac0534e8c3d2 use short 'type' names
ods15
parents: 17684
diff changeset
816 "r" -> rational
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
817 Note: Nonstandard fields should be prefixed by "X-".
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
818 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
819
13308
8ff17d153414 info packet is now file global, while meta pakcet is stream specific, as discussed with Rich
alex
parents: 13047
diff changeset
820 info packet types
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
821 The name of the info entry. Valid names are
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
822 "Author"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
823 "Description"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
824 "Copyright"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
825 "Encoder"
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
826 The name & version of the software used for encoding.
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
827 "Title"
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
828 "Cover" (allowed types are "PNG" and "JPEG")
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
829 image of the (CD, DVD, VHS, ..) cover (preferably PNG or JPEG)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
830 "Source"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
831 "DVD", "VCD", "CD", "MD", "FM radio", "VHS", "TV", "LD"
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
832 Optional: Appended PAL, NTSC, SECAM, ... in parentheses.
18899
676cd8ab1cff trying to end the codec id battle
michael
parents: 17944
diff changeset
833 "SourceContainer"
676cd8ab1cff trying to end the codec id battle
michael
parents: 17944
diff changeset
834 "nut", "mkv", "mov", "avi", "ogg", "rm", "mpeg-ps", "mpeg-ts", "raw"
676cd8ab1cff trying to end the codec id battle
michael
parents: 17944
diff changeset
835 "SourceCodecTag"
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
836 The source codec ID like a FourCC which was used to store a specific
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
837 stream in its SourceContainer.
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
838 "CaptureDevice"
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
839 "BT878", "BT848", "webcam", ... (or more precise names)
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
840 "CreationTime"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
841 "2003-01-20 20:13:15Z", ...
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
842 (ISO 8601 format, see http://www.cl.cam.ac.uk/~mgk25/iso-time.html)
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
843 Note: Do not forget the timezone.
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
844 "Keywords"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
845 "Language"
22247
69becfa63e68 clarify that language must be a 3 letter code
michael
parents: 22199
diff changeset
846 An ISO 639-2 (three-letter) language code, optionally followed by an
69becfa63e68 clarify that language must be a 3 letter code
michael
parents: 22199
diff changeset
847 ISO 3166-1 country code that is separated from the language
69becfa63e68 clarify that language must be a 3 letter code
michael
parents: 22199
diff changeset
848 code by a hyphen. All codes defined in ISO 639-2 are allowed,
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
849 including "und" (Undetermined), "mul" (Multiple languages).
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
850 See http://www.loc.gov/standards/iso639-2/
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
851 and http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1/en_listp1.html
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
852 the language code
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
853 A demuxer MUST ignore unknown language and country codes instead of
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
854 treating them as an error.
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
855 "Disposition"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
856 "original", "dub" (translated), "comment", "lyrics", "karaoke"
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
857 Note: If someone needs some others, please tell us about them, so we
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
858 can add them to the official standard (if they are sane).
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
859 Note: Nonstandard fields should be prefixed by "X-".
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
860 Note: Names of fields SHOULD be in English if a word with the same
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
861 meaning exists in English.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
862 Note: MUST be less than 64 bytes long.
9295
michael
parents: 9294
diff changeset
863
michael
parents: 9294
diff changeset
864 value
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
865 value of this name/type pair
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
866
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
867 stuffing
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
868 0x80 can be placed in front of any type v entry for stuffing purposes.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
869 Exceptions are the forward_ptr and all fields in the frame header where
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
870 a maximum of 8 stuffing bytes per field are allowed.
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
871
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
872
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
873 Structure:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
874 ----------
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
875
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
876 The headers MUST be in exactly the following order (to simplify demuxer design).
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
877
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
878 main header
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
879 stream_header (id=0)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
880 stream_header (id=1)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
881 ...
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
882 stream_header (id=n)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
883
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
884 Headers may be repeated, but if they are, then they MUST all be repeated
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
885 together and repeated headers MUST be identical.
17547
114699930136 Allow headers to be repeated anywhere
ods15
parents: 17533
diff changeset
886
114699930136 Allow headers to be repeated anywhere
ods15
parents: 17533
diff changeset
887 Each set of repeated headers not at the beginning or end of the file SHOULD
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
888 be stored at the earliest possible position after 2^x where x is an integer
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
889 and the end of the file. So the headers may be repeated at 4102 if that is
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
890 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
891
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
892 Note: This allows an implementation reading the file to locate backup
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
893 headers in O(log filesize) time as opposed to O(filesize).
17547
114699930136 Allow headers to be repeated anywhere
ods15
parents: 17533
diff changeset
894
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
895 Headers MUST be placed at least at the start of the file and immediately before
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
896 the index or at the end of the file if there is no index.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
897 Headers MUST be repeated at least twice (so they exist three times in a file).
9295
michael
parents: 9294
diff changeset
898
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
899 There MUST be a syncpoint immediately before the first frame after any headers.
12503
a160a68209ac disposition
michael
parents: 12502
diff changeset
900
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
901
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
902 Index:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
903 ------
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
904
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
905 Note: With realtime streaming, there is no end, so no index there either.
17533
86a9a60ef596 Index repetition
ods15
parents: 17532
diff changeset
906 Index MAY only be repeated after main headers.
17726
541738aa3079 return index_ptr to inside index
ods15
parents: 17723
diff changeset
907 If an index is written anywhere in the file, it MUST be written at end of
541738aa3079 return index_ptr to inside index
ods15
parents: 17723
diff changeset
908 file as well.
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
909
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
910
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
911 Info:
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
912 -----
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
913
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
914 If an info packet is stored anywhere then a muxer MUST also store an identical
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
915 info packet after every main-stream-header set.
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
916
17771
af02066c0706 remove info streams
michael
parents: 17730
diff changeset
917 If a demuxer has seen several info packets with the same chapter_id and
af02066c0706 remove info streams
michael
parents: 17730
diff changeset
918 stream_id then it MUST ignore all but the one with the highest position in
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
919 the file.
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
920
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
921 Demuxers SHOULD NOT search the whole file for info packets.
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
922
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
923 demuxer (non-normative):
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
924 ------------------------
12501
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
925
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
926 In the absence of a valid header at the beginning, players SHOULD search for
16428
5f4317692b7c spelling/grammar/wording
diego
parents: 15755
diff changeset
927 backup headers starting at offset 2^x; for each x players SHOULD end their
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
928 search at a particular offset when any startcode (including a syncpoint) is
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
929 found.
12501
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
930
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
931
20965
a8651041ba2b seeking
michael
parents: 20964
diff changeset
932 Seeking without an index (non-normative):
a8651041ba2b seeking
michael
parents: 20964
diff changeset
933 -----------------------------------------
a8651041ba2b seeking
michael
parents: 20964
diff changeset
934 A. backward seeking
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
935 1. Perform a binary search on the syncpoint timestamps finding the one
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
936 which is largest and <= the target timestamp.
20965
a8651041ba2b seeking
michael
parents: 20964
diff changeset
937 B. forward seeking
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
938 1a. Perform a binary search on the syncpoint timestamps finding the one
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
939 which is smallest and >= the target timestamp.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
940 1b. Perform a binary search on the syncpoint back pointers finding the
20965
a8651041ba2b seeking
michael
parents: 20964
diff changeset
941 smallest one which has a back ptr >= the position of what was found in 1.
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
942 2. Follow the back pointer to the corresponding syncpoint.
20965
a8651041ba2b seeking
michael
parents: 20964
diff changeset
943
a8651041ba2b seeking
michael
parents: 20964
diff changeset
944 Seeking with an index (non-normative):
a8651041ba2b seeking
michael
parents: 20964
diff changeset
945 --------------------------------------
a8651041ba2b seeking
michael
parents: 20964
diff changeset
946 The demuxer only has to find the appropriate keyframe in the index and
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
947 start demuxing from the previous syncpoint.
20965
a8651041ba2b seeking
michael
parents: 20964
diff changeset
948
a8651041ba2b seeking
michael
parents: 20964
diff changeset
949 Note, more complicated seeking methods exist which are capable of quickly
a8651041ba2b seeking
michael
parents: 20964
diff changeset
950 seeking to the optimal point in the presence of an index even if only a
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
951 subset of all streams is active.
20966
dc1a02e98cb6 clarify syncpoint placement recommanditions
michael
parents: 20965
diff changeset
952
dc1a02e98cb6 clarify syncpoint placement recommanditions
michael
parents: 20965
diff changeset
953 A muxer SHOULD place syncpoints so that that simple low complexity seeking
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
954 works with fine granularity. That is, syncpoints should be placed prior
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
955 to keyframes instead of non-keyframes and with high enough frequency
20966
dc1a02e98cb6 clarify syncpoint placement recommanditions
michael
parents: 20965
diff changeset
956 (once per second unless there are no keyframes between this and the previous
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
957 syncpoint).
20966
dc1a02e98cb6 clarify syncpoint placement recommanditions
michael
parents: 20965
diff changeset
958
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
959 Encoders SHOULD place keyframes so that the number of points where all
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
960 streams have a keyframe at the same time is maximized. This ensures that
20966
dc1a02e98cb6 clarify syncpoint placement recommanditions
michael
parents: 20965
diff changeset
961 seeking (complicated or not) does not need to demux and decode significant
dc1a02e98cb6 clarify syncpoint placement recommanditions
michael
parents: 20965
diff changeset
962 amounts of data to reach a point where a presentable frame for each stream
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
963 is available after seeking.
20965
a8651041ba2b seeking
michael
parents: 20964
diff changeset
964
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
965
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
966 Semantic requirements:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
967 ======================
16429
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
968
17018
baf593fcf738 Change MUST to SHOULD have disposition and if applicable language tags.
al
parents: 16843
diff changeset
969 If more than one stream of a given stream class is present, each one SHOULD
16429
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
970 have info tags specifying disposition, and if applicable, language.
17018
baf593fcf738 Change MUST to SHOULD have disposition and if applicable language tags.
al
parents: 16843
diff changeset
971 It often highly improves usability and is therefore strongly encouraged.
16429
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
972
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
973 A demuxer MUST NOT demux a stream which contains more than one stream, or which
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
974 is wrapped in a structure to facilitate more than one stream or otherwise
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
975 duplicate the role of a container. Any such file is to be considered invalid.
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
976 For example Vorbis in Ogg in NUT is invalid, as is
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
977 mpegvideo + mpegaudio in MPEG-PS/TS in NUT or dvvideo + dvaudio in DV in NUT.
16429
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
978
12501
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
979
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
980
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
981 Sample code (Public Domain, & untested):
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
982 ========================================
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
983
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
984 typedef BufferContext{
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
985 uint8_t *buf;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
986 uint8_t *buf_ptr;
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
987 }BufferContext;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
988
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
989 static inline uint64_t get_bytes(BufferContext *bc, int count){
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
990 uint64_t val=0;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
991
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
992 assert(count>0 && count<9);
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
993
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
994 for(i=0; i<count; i++){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
995 val <<=8;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
996 val += *(bc->buf_ptr++);
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
997 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
998
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
999 return val;
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
1000 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
1001
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
1002 static inline void put_bytes(BufferContext *bc, int count, uint64_t val){
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1003 uint64_t val=0;
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
1004
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1005 assert(count>0 && count<9);
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
1006
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1007 for(i=count-1; i>=0; i--){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1008 *(bc->buf_ptr++)= val >> (8*i);
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1009 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1010
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1011 return val;
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
1012 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
1013
10061
76b1c7d20da8 corrected the sample code
alex
parents: 9580
diff changeset
1014 static inline uint64_t get_v(BufferContext *bc){
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1015 uint64_t val= 0;
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
1016
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1017 for(; space_left(bc) > 0; ){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1018 int tmp= *(bc->buf_ptr++);
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1019 if(tmp&0x80)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1020 val= (val<<7) + tmp - 0x80;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1021 else
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1022 return (val<<7) + tmp;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1023 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1024
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1025 return -1;
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
1026 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
1027
10061
76b1c7d20da8 corrected the sample code
alex
parents: 9580
diff changeset
1028 static inline int put_v(BufferContext *bc, uint64_t val){
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1029 int i;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1030
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1031 if(space_left(bc) < 9) return -1;
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
1032
22470
ae4e7d11e66f spelling/punctuation/grammar/wording improvements, no semantic changes
diego
parents: 22247
diff changeset
1033 val &= 0x7FFFFFFFFFFFFFFFULL; // FIXME: Can only encode up to 63 bits ATM.
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1034 for(i=7; ; i+=7){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1035 if(val>>i == 0) break;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1036 }
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
1037
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1038 for(i-=7; i>0; i-=7){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1039 *(bc->buf_ptr++)= 0x80 | (val>>i);
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1040 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1041 *(bc->buf_ptr++)= val&0x7F;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1042
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1043 return 0;
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
1044 }
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
1045
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
1046 static int64_t get_dts(int64_t pts, int64_t *pts_cache, int delay, int reset){
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1047 if(reset) memset(pts_cache, -1, delay*sizeof(int64_t));
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
1048
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1049 while(delay--){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1050 int64_t t= pts_cache[delay];
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1051 if(t < pts){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1052 pts_cache[delay]= pts;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1053 pts= t;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1054 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1055 }
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
1056
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
1057 return pts;
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
1058 }
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
1059
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
1060
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
1061
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
1062 Authors:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
1063 ========
10158
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
1064
16428
5f4317692b7c spelling/grammar/wording
diego
parents: 15755
diff changeset
1065 Folks from the MPlayer developers mailing list (http://www.mplayerhq.hu/).
5f4317692b7c spelling/grammar/wording
diego
parents: 15755
diff changeset
1066 Authors in alphabetical order: (FIXME! Tell us if we left you out)
16843
21fa9b28ca75 author list prettyprinting
diego
parents: 16842
diff changeset
1067 Beregszaszi, Alex (alex@fsn.hu)
21fa9b28ca75 author list prettyprinting
diego
parents: 16842
diff changeset
1068 Bunkus, Moritz (moritz@bunkus.org)
21fa9b28ca75 author list prettyprinting
diego
parents: 16842
diff changeset
1069 Diedrich, Tobias (ranma+mplayer@tdiedrich.de)
21fa9b28ca75 author list prettyprinting
diego
parents: 16842
diff changeset
1070 Felker, Rich (dalias@aerifal.cx)
21fa9b28ca75 author list prettyprinting
diego
parents: 16842
diff changeset
1071 Franz, Fabian (FabianFranz@gmx.de)
21fa9b28ca75 author list prettyprinting
diego
parents: 16842
diff changeset
1072 Gereoffy, Arpad (arpi@thot.banki.hu)
21fa9b28ca75 author list prettyprinting
diego
parents: 16842
diff changeset
1073 Hess, Andreas (jaska@gmx.net)
21fa9b28ca75 author list prettyprinting
diego
parents: 16842
diff changeset
1074 Niedermayer, Michael (michaelni@gmx.at)
21fa9b28ca75 author list prettyprinting
diego
parents: 16842
diff changeset
1075 Shimon, Oded (ods15@ods15.dyndns.org)