annotate DOCS/tech/nut.txt @ 20658:ed20cbab07a4

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