annotate DOCS/tech/mpcf.txt @ 17714:ad3cb21e1b18

syncpoint_start description
author michael
date Thu, 02 Mar 2006 10:34:09 +0000
parents 8aa18d8e5eb6
children 86bcb118eab1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
1 ========================================
17547
114699930136 Allow headers to be repeated anywhere
ods15
parents: 17533
diff changeset
2 NUT Open Container Format DRAFT 20060207
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
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
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
10 Features / goals:
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
11 (supported by the format, not necessarily by a specific implementation)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
12
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
13 Simple
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
14 use the same encoding for nearly all fields
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
15 simple decoding, so slow CPUs (and embedded systems) can handle it
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
16
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
17 Extendible
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
18 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
19 allow adding of new headers in the future
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
20 allow adding more fields at the end of headers
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 Compact
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
23 ~0.2% overhead, for normal bitrates
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
24 index is <100kb per hour
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
25 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
26 a packet header is about ~1-5 bytes
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
27
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
28 Error resistant
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
29 seeking / playback without an index
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
30 headers & index can be repeated
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
31 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
32 resync times
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
33
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
34
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
35
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
36 Definitions:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
37 ============
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
38
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
39 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
40 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
41
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
42
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
43
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
44 Syntax:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
45 =======
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
46
16428
5f4317692b7c spelling/grammar/wording
diego
parents: 15755
diff changeset
47 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
48 is using a pseudocode approach.
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
49
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
50
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
51
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
52 Conventions:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
53 ============
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
54
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
55 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
56 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
57 follow:
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
58
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
59 name (text description)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
60 functional definition
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
61 [Optional notes]
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
62
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
63 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
64 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
65 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
66
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
67 name: (optional note)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
68 functional definition
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
69 [Optional notes]
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
70
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
71 The in-depth tag description follows the bitstream syntax.
16428
5f4317692b7c spelling/grammar/wording
diego
parents: 15755
diff changeset
72 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
73
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
74
12209
3baef37d3b7c moving f() and u()
michael
parents: 12208
diff changeset
75
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
76 Type definitions:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
77 =================
12209
3baef37d3b7c moving f() and u()
michael
parents: 12208
diff changeset
78
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
79 f(n) (n fixed bits in big-endian order)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
80 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
81
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
82 v (variable length value, unsigned)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
83 value=0
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
84 do{
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
85 more_data u(1)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
86 data u(7)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
87 value= 128*value + data
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
88 }while(more_data)
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 s (variable length value, signed)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
91 temp v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
92 temp++
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
93 if(temp&1) value= -(temp>>1)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
94 else value= (temp>>1)
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
95
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
96 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
97 for(i=0; i<length; i++){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
98 data[i] u(8)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
99 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
100 [Note: strings MUST be encoded in UTF-8]
9295
michael
parents: 9294
diff changeset
101
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
102 vb (variable length binary data or string)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
103 length v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
104 value b
12117
e1e5e2124dae minor changes
michael
parents: 12110
diff changeset
105
9295
michael
parents: 9294
diff changeset
106
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
107
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
108 Bitstream syntax:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
109 =================
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
110
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
111 Common elements:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
112 ----------------
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
113
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
114 reserved_bytes:
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
115 for(i=0; i<forward_ptr - length_of_non_reserved; i++)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
116 reserved u(8)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
117 [a demuxer MUST ignore any reserved bytes
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
118 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
119 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
120 in a compatible way]
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
121
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
122 Headers:
10824
d163db068a12 reserved_bytes & byte order stuff
michael
parents: 10817
diff changeset
123
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
124 main header:
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
125 version v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
126 stream_count v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
127 max_distance v
17437
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
128 tmp_pts=0
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
129 tmp_mul=1
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
130 tmp_stream=0
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
131 for(i=0; i<256; ){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
132 tmp_flag v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
133 tmp_fields v
17437
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
134 if(tmp_fields>0) tmp_sflag v
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
135 else tmp_sflag=0
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
136 if(tmp_fields>1) tmp_pts s
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
137 if(tmp_fields>2) tmp_mul v
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
138 if(tmp_fields>3) tmp_stream v
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
139 if(tmp_fields>4) tmp_size v
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
140 else tmp_size=0
17437
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
141 if(tmp_fields>5) tmp_res v
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
142 else tmp_res=0
17437
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
143 if(tmp_fields>6) count v
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
144 else count= tmp_mul - tmp_size
17437
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
145 for(j=7; j<tmp_fields; j++){
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
146 tmp_reserved[i] v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
147 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
148 for(j=0; j<count && i<256; j++, i++){
17612
99b6205ff32c Make 'N' frame code implictly invalid
ods15
parents: 17585
diff changeset
149 if (i == 'N') {
99b6205ff32c Make 'N' frame code implictly invalid
ods15
parents: 17585
diff changeset
150 flags[i]= 4;
99b6205ff32c Make 'N' frame code implictly invalid
ods15
parents: 17585
diff changeset
151 j--;
99b6205ff32c Make 'N' frame code implictly invalid
ods15
parents: 17585
diff changeset
152 continue;
99b6205ff32c Make 'N' frame code implictly invalid
ods15
parents: 17585
diff changeset
153 }
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
154 flags[i]= tmp_flag;
17437
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
155 stream_flags[i]= tmp_sflag;
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
156 stream_id_plus1[i]= tmp_stream;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
157 data_size_mul[i]= tmp_mul;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
158 data_size_lsb[i]= tmp_size + j;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
159 pts_delta[i]= tmp_pts;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
160 reserved_count[i]= tmp_res;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
161 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
162 }
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
163
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
164 stream_header:
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
165 stream_id v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
166 stream_class v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
167 fourcc vb
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
168 time_base_nom v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
169 time_base_denom v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
170 msb_pts_shift v
17577
0f6b020f867d change checksum to crc32
ods15
parents: 17551
diff changeset
171 max_pts_distance v
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
172 decode_delay v
17671
7f3f86ed5409 fix bit specification for fixed_fps
ods15
parents: 17669
diff changeset
173 reserved u(7)
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
174 fixed_fps u(1)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
175 codec_specific_data vb
17640
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
176 if(stream_class == video){
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
177 width v
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
178 height v
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
179 sample_width v
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
180 sample_height v
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
181 colorspace_type v
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
182 }else if(stream_class == audio){
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
183 samplerate_nom v
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
184 samplerate_denom v
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
185 channel_count v
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
186 }
16429
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
187
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
188 Basic Packets:
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
189
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
190 frame:
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
191 frame_code f(8)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
192 if(stream_id_plus1[frame_code]==0){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
193 stream_id v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
194 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
195 if(pts_delta[frame_code]==0){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
196 coded_pts v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
197 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
198 if(flags[frame_code]&1){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
199 data_size_msb v
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
200 }
17437
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
201 if(flags[frame_code]&2){
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
202 coded_stream_flags v
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
203 }
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
204 for(i=0; i<reserved_count[frame_code]; i++)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
205 reserved v
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
206 if(stream_flags&4){
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
207 checksum u(32)
17584
187260c06b4f Add syncpoint_checksum after frame header
ods15
parents: 17577
diff changeset
208 }
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
209 data
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
210
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
211 index:
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
212 max_pts v
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
213 syncpoint_start v
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
214 syncpoints v
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
215 for(i=syncpoint_start; i<syncpoints; i++){
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
216 syncpoint_pos_div8 v
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
217 }
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
218 for(i=0; i<stream_count; i++){
17615
363d23eb55d3 fix index, first keyframe cannot be written with pts=0
ods15
parents: 17612
diff changeset
219 last_pts= -1
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
220 for(j=syncpoint_start; j<syncpoints; ){
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
221 x v
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
222 type= x & 1
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
223 x>>=1
17455
1bb20b4c4082 Interleave index to ease per-need decoding.
ods15
parents: 17439
diff changeset
224 n=j
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
225 if(type){
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
226 flag= x & 1
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
227 x>>=1
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
228 while(x--)
17455
1bb20b4c4082 Interleave index to ease per-need decoding.
ods15
parents: 17439
diff changeset
229 has_keyframe[n++][i]=flag
1bb20b4c4082 Interleave index to ease per-need decoding.
ods15
parents: 17439
diff changeset
230 has_keyframe[n++][i]=!flag;
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
231 }else{
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
232 while(x != 1){
17455
1bb20b4c4082 Interleave index to ease per-need decoding.
ods15
parents: 17439
diff changeset
233 has_keyframe[n++][i]=x&1;
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
234 x>>=1;
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
235 }
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
236 }
17455
1bb20b4c4082 Interleave index to ease per-need decoding.
ods15
parents: 17439
diff changeset
237 for(; j<n && j<syncpoints; j++){
1bb20b4c4082 Interleave index to ease per-need decoding.
ods15
parents: 17439
diff changeset
238 if (!has_keyframe[j][i]) continue
1bb20b4c4082 Interleave index to ease per-need decoding.
ods15
parents: 17439
diff changeset
239 A v
17531
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
240 if(!A){
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
241 A v
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
242 B v
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
243 eor_pts[j][i] = last_pts + A + B
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
244 }else
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
245 B=0
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
246 keyframe_pts[j][i] = last_pts + A
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
247 last_pts += A + B
17455
1bb20b4c4082 Interleave index to ease per-need decoding.
ods15
parents: 17439
diff changeset
248 }
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
249 }
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
250 }
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
251
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
252 info_packet:
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
253 stream_id_plus1 v
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
254 chapter_id v
17708
11a96a862d43 remove chapter_id == 0 special case
michael
parents: 17686
diff changeset
255 chapter_start v
11a96a862d43 remove chapter_id == 0 special case
michael
parents: 17686
diff changeset
256 chapter_len v
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
257 count v
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
258 for(i=0; i<count; i++){
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
259 name vb
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
260 value s
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
261 if (value==-1){
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
262 type= "UTF-8"
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
263 value vb
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
264 }else if (value==-2){
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
265 type vb
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
266 value vb
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
267 }else if (value==-3){
17685
ac0534e8c3d2 use short 'type' names
ods15
parents: 17684
diff changeset
268 type= "s"
17326
a9e170085990 1) change date and goals slightly
ods15
parents: 17230
diff changeset
269 value s
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
270 }else if (value<-3){
17685
ac0534e8c3d2 use short 'type' names
ods15
parents: 17684
diff changeset
271 type= "r"
17684
325a2a565995 allow rationals with denom of '1'
ods15
parents: 17683
diff changeset
272 value.den= -value-3
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
273 value.num s
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
274 }else{
17685
ac0534e8c3d2 use short 'type' names
ods15
parents: 17684
diff changeset
275 type= "v"
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
276 }
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
277 }
16506
1e42b8be5b7f add back_ptr
michael
parents: 16503
diff changeset
278
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
279 info_frame:
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
280 info_packet
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
281 packet_footer
16506
1e42b8be5b7f add back_ptr
michael
parents: 16503
diff changeset
282
17326
a9e170085990 1) change date and goals slightly
ods15
parents: 17230
diff changeset
283 syncpoint:
17328
33b03e1e4170 1) remove global_timebase
ods15
parents: 17327
diff changeset
284 coded_pts v
33b03e1e4170 1) remove global_timebase
ods15
parents: 17327
diff changeset
285 stream = coded_pts % stream_count
33b03e1e4170 1) remove global_timebase
ods15
parents: 17327
diff changeset
286 global_key_pts = coded_pts/stream_count
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
287 back_ptr_div8 v
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
288
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
289 Complete definition:
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
290
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
291 file:
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
292 file_id_string
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
293 while(bytes_left > 8){
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
294 if(next_byte == 'N'){
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
295 startcode f(64)
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
296 forward_ptr v
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
297 switch(startcode){
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
298 case main_startcode: main_header; break;
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
299 case stream_startcode:stream_header; break;
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
300 case info_startcode: info_packet; break;
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
301 case index_startcode: index; break;
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
302 case syncpoint_startcode: syncpoint; break;
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
303 }
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
304 reserved_bytes
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
305 checksum u(32)
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
306 }else
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
307 frame
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
308 }
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
309 index_ptr u(64)
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
310
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
311 the structure of a undamaged file should look like the following, but
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
312 demuxers should be flexible and be able to deal with damaged headers so the
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
313 above is a better loop in practice (not to mention its simpler)
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
314 note, demuxers MUST be able to deal with new and unknown headers
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
315
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
316 packet_header
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
317 startcode f(64)
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
318 forward_ptr v
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
319
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
320 packet_footer
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
321 reserved_bytes
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
322 checksum u(32)
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
323
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
324 reserved_headers
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
325 while(next_byte == 'N' && next_code != main_startcode
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
326 && next_code != stream_startcode
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
327 && next_code != info_startcode
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
328 && next_code != index_startcode
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
329 && next_code != syncpoint_startcode){
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
330 packet_header
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
331 packet_footer
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
332 }
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
333
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
334 file:
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
335 file_id_string
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
336 while(bytes_left > 8){
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
337 packet_header, main_header, packet_footer
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
338 reserved_headers
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
339 for(i=0; i<stream_count; i++){
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
340 packet_header, stream_header, packet_footer
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
341 reserved_headers
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
342 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
343 while(next_code == info_startcode){
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
344 packet_header, info_packet, packet_footer
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
345 reserved_headers
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
346 }
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
347 while(next_code == index_startcode){
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
348 packet_header, index_packet, packet_footer
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
349 reserved_headers
17533
86a9a60ef596 Index repetition
ods15
parents: 17532
diff changeset
350 }
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
351 if (bytes_left > 8) while(next_code != main_startcode){
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
352 if(next_code == syncpoint_startcode){
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
353 packet_header, syncpoint, packet_footer
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
354 }
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
355 frame
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
356 reserved_headers
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
357 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
358 }
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
359 index_ptr u(64)
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
360
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
361
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
362 Tag description:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
363 ----------------
14854
ebc5136f2a56 some comments and whitespace changes by (Luca Barbato <lu_zero gentoo org>)
michael
parents: 14471
diff changeset
364
12242
f67bc1d216a1 file_id_string (idea by ivan)
michael
parents: 12238
diff changeset
365 file_id_string
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
366 "nut/multimedia container\0"
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
367
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
368 *_startcode
12162
ab533510d598 remove old example stream
michael
parents: 12161
diff changeset
369 all startcodes start with 'N'
ab533510d598 remove old example stream
michael
parents: 12161
diff changeset
370
ab533510d598 remove old example stream
michael
parents: 12161
diff changeset
371 main_startcode
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
372 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
373
12162
ab533510d598 remove old example stream
michael
parents: 12161
diff changeset
374 stream_starcode
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
375 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
376
17326
a9e170085990 1) change date and goals slightly
ods15
parents: 17230
diff changeset
377 syncpoint_startcode
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
378 0xE4ADEECA4569ULL + (((uint64_t)('N'<<8) + 'K')<<48)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
379
12162
ab533510d598 remove old example stream
michael
parents: 12161
diff changeset
380 index_startcode
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
381 0xDD672F23E64EULL + (((uint64_t)('N'<<8) + 'X')<<48)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
382
12162
ab533510d598 remove old example stream
michael
parents: 12161
diff changeset
383 info_startcode
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
384 0xAB68B596BA78ULL + (((uint64_t)('N'<<8) + 'I')<<48)
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
385
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
386 version
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
387 NUT version. The current value is 2.
12238
a0ddf85bdee0 removing backward pointers
michael
parents: 12209
diff changeset
388
17439
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
389 forward_ptr
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
390 size of the packet data (exactly the distance from the first byte
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
391 after the forward_ptr to the first byte of the next packet)
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
392
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
393 max_distance
17326
a9e170085990 1) change date and goals slightly
ods15
parents: 17230
diff changeset
394 max distance of syncpoints, the distance may only be larger if
a9e170085990 1) change date and goals slightly
ods15
parents: 17230
diff changeset
395 there is no more than a single frame between the two syncpoints. This can
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
396 be used by the demuxer to detect damaged frame headers if the damage
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
397 results in too long of a chain
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
398
17439
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
399 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
400 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
401 non-keyframe - keyframe transitions are very frequent
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
402
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
403 SHOULD be set to <=32768 or at least <=65536 unless there is a very
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
404 good reason to set it higher, otherwise reasonable error recovery will
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
405 be impossible
12501
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
406
17577
0f6b020f867d change checksum to crc32
ods15
parents: 17551
diff changeset
407 max_pts_distance
0f6b020f867d change checksum to crc32
ods15
parents: 17551
diff changeset
408 max absoloute difference of pts of new frame from last_pts in the
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
409 timebase of the stream, without a checksum after the frameheader
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
410 Note that last_pts is not necessarily the pts of the last frame
17577
0f6b020f867d change checksum to crc32
ods15
parents: 17551
diff changeset
411 on the same stream, as it is altered by syncpoint timestamps.
0f6b020f867d change checksum to crc32
ods15
parents: 17551
diff changeset
412
16429
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
413 stream_id
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
414 Stream identifier
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
415 stream_id MUST be < stream_count
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
416
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
417 stream_class
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
418 0 video
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
419 1 audio
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
420 2 subtiles
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
421 3 metadata
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
422 4 userdata
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
423 in metadata streams each frame contains exactly one info frame
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
424 Note: the remaining values are reserved and MUST NOT be used
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
425 a demuxer MUST ignore streams with reserved classes
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
426
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
427 fourcc
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
428 identification for the codec
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
429 example: "H264"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
430 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
431 if needed
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
432
9297
8a19be9649e7 use fraction for time_base
michael
parents: 9296
diff changeset
433 time_base_nom / time_base_denom = time_base
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
434 the length of a timer tick in seconds, this MUST be equal to the 1/fps
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
435 if fixed_fps is 1
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
436 time_base_nom and time_base_denom MUST NOT be 0
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
437 time_base_nom and time_base_denom MUST be relatively prime
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
438 time_base_denom MUST be < 2^31
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
439 examples:
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
440 fps time_base_nom time_base_denom
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
441 30 1 30
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
442 29.97 1001 30000
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
443 23.976 1001 24000
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
444
17328
33b03e1e4170 1) remove global_timebase
ods15
parents: 17327
diff changeset
445 convert_ts
33b03e1e4170 1) remove global_timebase
ods15
parents: 17327
diff changeset
446 To switch from 2 different timebases, the following calculation is
33b03e1e4170 1) remove global_timebase
ods15
parents: 17327
diff changeset
447 defined:
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
448
17328
33b03e1e4170 1) remove global_timebase
ods15
parents: 17327
diff changeset
449 ln = from_time_base_nom*to_time_base_denom
33b03e1e4170 1) remove global_timebase
ods15
parents: 17327
diff changeset
450 sn = from_timestamp
33b03e1e4170 1) remove global_timebase
ods15
parents: 17327
diff changeset
451 d1 = from_time_base_denom
33b03e1e4170 1) remove global_timebase
ods15
parents: 17327
diff changeset
452 d2 = to_time_base_nom
33b03e1e4170 1) remove global_timebase
ods15
parents: 17327
diff changeset
453 timestamp = (ln/d1*sn + ln%d1*sn/d1)/d2
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
454 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
455 is equivalent to (ln*sn)/(d1*d2) but this would require a 96bit integer
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
456
17532
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
457 compare_ts
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
458 Compares timestamps from 2 different timebases,
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
459 if a is before b then compare_ts(a, b) = -1
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
460 if a is after b then compare_ts(a, b) = 1
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
461 else compare_ts(a, b) = 0
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
462
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
463 Care must be taken that this is done exactly with no rounding errors,
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
464 simply casting to float or double and doing the obvious
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
465 a*timebase > b*timebase is not compliant or correct, neither is the
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
466 same with integers, and
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
467 a*a_timebase.num*b_timebase.den > b*b_timebase.num*a_timebase.den
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
468 will overflow. One possible implementation which shouldn't overflow
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
469 within the range of legal timestamps and timebases is:
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
470
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
471 if (convert_ts(a, a_timebase, b_timebase) < b) return -1;
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
472 if (convert_ts(b, b_timebase, a_timebase) < a) return 1;
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
473 return 0;
724816ab19be add compare_ts
ods15
parents: 17531
diff changeset
474
16429
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
475 msb_pts_shift
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
476 amount of bits in lsb_pts
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
477 MUST be <16
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
478
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
479 decode_delay
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
480 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
481 dts from pts
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
482 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
483 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
484 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
485
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
486 fixed_fps
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
487 1 indicates that the fps is fixed
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
488
9356
025a25987ac0 simplification
michael
parents: 9350
diff changeset
489 codec_specific_data
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
490 private global data for a codec (could be huffman tables or ...)
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
491
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
492 frame_code
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
493 the meaning of this byte is stored in the main header
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
494 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
495 different from the first byte of any startcode
9420
8a1a8f5e9c91 variable subpacket size support
michael
parents: 9373
diff changeset
496
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
497 flags[frame_code]
17437
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
498 Bit Name Description
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
499 1 data_size_msb if set, data_size_msb is at frame header,
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
500 otherwise data_size_msb is 0
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
501 2 more_flags if set, stream control flags are at frame header.
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
502 4 invalid if set, frame_code is invalid.
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
503
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
504 stream_flags
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
505 stream_flags is "stream_flags[frame_code] ^ coded_stream_flags"
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
506
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
507 Bit Name Description
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
508 1 is_key if set, frame is keyframe
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
509 2 end_of_relevance if set, stream has no relevance on
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
510 presentation. (EOR)
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
511 4 has_checksum if set then the frame header contains a checksum
17437
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
512
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
513 EOR frames MUST be zero-length and must be set keyframe.
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
514 All streams SHOULD end with EOR, where the pts of the EOR indicates the
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
515 end presentation time of the final frame.
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
516 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
517 EOR can only be unset in streams with zero decode_delay .
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
518 has_checksum must be set if the frame is larger then 2*max_distance or its
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
519 pts differs by more then max_pts_distance from the last frame
12110
a34dc5a369ca restrictions to ensure that O(log n) seeking and error recovery is possible
michael
parents: 12084
diff changeset
520
12084
68baf8877c07 reversing the change to the forw/backw pointers, its somewhat simpler to update it if the forward pointer is first
michael
parents: 12082
diff changeset
521 stream_id_plus1[frame_code]
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
522 must be <250
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
523 if it is 0, then the stream_id is coded in the frame
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
524
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
525 data_size_mul[frame_code]
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
526 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
527
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
528 data_size_lsb[frame_code]
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
529 must be <16384
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
530
16429
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
531 pts_delta[frame_code]
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
532 must be <16384 and >-16384
12413
87a6dc69b65a proposals by rich:
michael
parents: 12392
diff changeset
533
17640
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
534 reserved_count[frame_code]
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
535 must be <256
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
536
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
537 data_size
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
538 data_size= data_size_lsb + data_size_msb*data_size_mul;
12082
f705b0777572 removing subpackets (everyone hates them ...)
michael
parents: 11975
diff changeset
539
16429
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
540 coded_pts
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
541 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
542 pts, otherwise it is a full pts + (1<<msb_pts_shift)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
543 lsb pts is converted to a full pts by:
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
544 mask = (1<<msb_pts_shift)-1;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
545 delta = last_pts - mask/2
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
546 pts = ((pts_lsb-delta)&mask) + delta
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
547
16429
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
548 lsb_pts
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
549 least significant bits of the pts in time_base precision
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
550 Example: IBBP display order
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
551 keyframe pts=0 -> pts=0
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
552 frame lsb_pts=3 -> pts=3
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
553 frame lsb_pts=1 -> pts=1
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
554 frame lsb_pts=2 -> pts=2
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
555 ...
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
556 keyframe msb_pts=257 -> pts=257
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
557 frame lsb_pts=255 -> pts=255
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
558 frame lsb_pts=0 -> pts=256
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
559 frame lsb_pts=4 -> pts=260
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
560 frame lsb_pts=2 -> pts=258
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
561 frame lsb_pts=3 -> pts=259
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
562 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
563
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
564 dts
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
565 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
566 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
567 the smallest value is removed, this is then the current dts
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
568 this buffer is initalized with decode_delay -1 elements
17327
2a1cc9c01f64 MN rule
ods15
parents: 17326
diff changeset
569
2a1cc9c01f64 MN rule
ods15
parents: 17326
diff changeset
570 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
571 previous frames in all streams, compared in common timebase. (EOR
e2f2a8ac648a bump date
ods15
parents: 17330
diff changeset
572 frames are NOT exempt from this rule)
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
573
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
574 width/height
17709
acdde9d2b839 width/height/samplerate MUST not be 0
michael
parents: 17708
diff changeset
575 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
576
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
577 sample_width/sample_height (aspect ratio)
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
578 sample_width is the horizontal distance between samples
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
579 sample_width and sample_height MUST be relatively prime if not zero
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
580 MUST be 0 if unknown
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
581
10158
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
582 colorspace_type
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
583 0 unknown
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
584 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
585 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
586 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
587 18 ITU Rec 709 Y range: 0..255 Cb/Cr range: 0..255
10166
e860465ef46e colorspace_type
michael
parents: 10158
diff changeset
588
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
589 samplerate_nom / samplerate_denom = samplerate
17709
acdde9d2b839 width/height/samplerate MUST not be 0
michael
parents: 17708
diff changeset
590 the number of samples per second, MUST not be 0
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
591
17683
39f67ee74bfe CRC32 stuff
ods15
parents: 17671
diff changeset
592 crc32 checksum
17710
9a976f1550f1 leading coeff for crc polynom
michael
parents: 17709
diff changeset
593 Generator polynomial is 0x104C11DB7. Starting value is zero.
17683
39f67ee74bfe CRC32 stuff
ods15
parents: 17671
diff changeset
594
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
595 checksum
17577
0f6b020f867d change checksum to crc32
ods15
parents: 17551
diff changeset
596 crc32 checksum
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
597 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
598 including the checksum itself (from first byte after the
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
599 forward_ptr until last byte before the checksum).
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
600 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
601 following bytes upto the checksum itself
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
602
17640
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
603 Syncpoint tags:
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
604 ---------------
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
605
17439
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
606 back_ptr_div8
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
607 back_ptr = back_ptr_div8 * 8 + 7
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
608 back_ptr must point to a position within 8 bytes of a syncpoint
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
609 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
610 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
611 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
612
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
613 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
614
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
615 global_key_pts
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
616 After a syncpoint, last_pts of each stream is to be set to:
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
617 last_pts[i] = convert_ts(global_key_pts, timebase[stream], timebase[i])
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
618
f6e39517d5b6 cosmetic change, shift stuff around to more logical places
ods15
parents: 17438
diff changeset
619 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
620 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
621
17640
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
622 Index tags:
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
623 -----------
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
624
17714
ad3cb21e1b18 syncpoint_start description
michael
parents: 17711
diff changeset
625 syncpoint_start
ad3cb21e1b18 syncpoint_start description
michael
parents: 17711
diff changeset
626 syncpoints
ad3cb21e1b18 syncpoint_start description
michael
parents: 17711
diff changeset
627 a index packet stores various flags and syncpoint locations for
ad3cb21e1b18 syncpoint_start description
michael
parents: 17711
diff changeset
628 all syncpoints and streams betweem syncpoint_start and
ad3cb21e1b18 syncpoint_start description
michael
parents: 17711
diff changeset
629 syncpoint_start + syncpoints
ad3cb21e1b18 syncpoint_start description
michael
parents: 17711
diff changeset
630
16429
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
631 max_pts
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
632 s = max_pts % stream_count
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
633 pts = max_pts / stream_count
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
634 The highest pts in the entire file in the timebase of stream 's' .
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
635
17438
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
636 syncpoint_pos_div8
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
637 offset from begginning of file to up to 7 bytes before the syncpoint
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
638 referred to in this index entry. Relative to position of last
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
639 syncpoint.
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
640
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
641 has_keyframe
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
642 indicates whether this stream has a keyframe between this syncpoint and
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
643 the last syncpoint.
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
644
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
645 keyframe_pts
81d2f40ce5d4 change goals slightly..
ods15
parents: 17437
diff changeset
646 The pts of the first keyframe for this stream in the region between the
17531
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
647 2 syncpoints, in the stream's timebase. (EOR frames are also keyframes)
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
648
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
649 eor_pts
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
650 Coded only if EOR is set at the position of the syncpoint. The pts of
c6ad2343ec16 EOR in index
ods15
parents: 17491
diff changeset
651 that EOR. EOR is unset by the first keyframe after it.
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
652
16429
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
653 index_ptr
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
654 absolute location in the file of the first byte of the startcode of the
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
655 first index packet, or 0 if there is no index
16429
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
656
17640
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
657 Info tags:
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
658 ----------
6b69c5b4b92a more cosmetics
ods15
parents: 17639
diff changeset
659
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
660 stream_id_plus1
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
661 Stream this info packet applies to. If zero, packet applies to whole
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
662 file.
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
663
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
664 chapter_id
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
665 Id of chapter this packet applies to. If zero, packet applies to whole
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
666 file. Positive chapter_id's are real chapters and MUST NOT overlap.
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
667 Negative chapter_id indicate a sub region of file and not a real
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
668 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
669 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
670 file
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
671
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
672 chapter_start
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
673 s= chapter_start % stream_count
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
674 timestamp= chapter_start / stream_count
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
675 timestamp of start of chapter in timebase of stream 's'.
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
676
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
677 chapter_len
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
678 Length of chapter in same timebase of chapter_start.
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
679
9323
774afe44f17b some more info (copy & pasted from ML)
michael
parents: 9312
diff changeset
680 type
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
681 for example: "UTF8" -> string or "JPEG" -> JPEG image
17685
ac0534e8c3d2 use short 'type' names
ods15
parents: 17684
diff changeset
682 "v" -> unsigned integer
ac0534e8c3d2 use short 'type' names
ods15
parents: 17684
diff changeset
683 "s" -> signed integer
ac0534e8c3d2 use short 'type' names
ods15
parents: 17684
diff changeset
684 "r" -> rational
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
685 Note: nonstandard fields should be prefixed by "X-"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
686 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
687
13308
8ff17d153414 info packet is now file global, while meta pakcet is stream specific, as discussed with Rich
alex
parents: 13047
diff changeset
688 info packet types
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
689 the name of the info entry, valid names are
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
690 "Author"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
691 "Description"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
692 "Copyright"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
693 "Encoder"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
694 the name & version of the software used for encoding
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
695 "Title"
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
696 "Cover" (allowed types are "PNG" and "JPEG")
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
697 image of the (CD, DVD, VHS, ..) cover (preferably PNG or JPEG)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
698 "Source"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
699 "DVD", "VCD", "CD", "MD", "FM radio", "VHS", "TV", "LD"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
700 Optional: appended PAL, NTSC, SECAM, ... in parentheses
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
701 "CaptureDevice"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
702 "BT878", "BT848", "webcam", ... (more exact names are fine too)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
703 "CreationTime"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
704 "2003-01-20 20:13:15Z", ...
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
705 (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
706 Note: do not forget the timezone
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
707 "Keywords"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
708 "Language"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
709 ISO 639 and ISO 3166 for language/country code
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
710 something like "eng" (US english), can be 0 if unknown
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
711 and "multi" if several languages
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
712 see http://www.loc.gov/standards/iso639-2/englangn.html
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
713 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
714 the language code
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
715 "Disposition"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
716 "original", "dub" (translated), "comment", "lyrics", "karaoke"
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
717 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
718 can add them to the official standard (if they are sane)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
719 Note: nonstandard fields should be prefixed by "X-"
17686
eadca2812177 cosmetic, trailing whitespace
ods15
parents: 17685
diff changeset
720 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
721 meaning exists in English
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
722 Note: MUST be less than 64 bytes long
9295
michael
parents: 9294
diff changeset
723
michael
parents: 9294
diff changeset
724 value
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
725 value of this name/type pair
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
726
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
727 stuffing
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
728 0x80 can be placed in front of any type v entry for stuffing purposes
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
729
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
730
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
731
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
732 Structure:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
733 ----------
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
734
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
735 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
736 main header
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
737 stream_header (id=0)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
738 stream_header (id=1)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
739 ...
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
740 stream_header (id=n)
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
741
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
742 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
743 together and repeated headers MUST be identical
17547
114699930136 Allow headers to be repeated anywhere
ods15
parents: 17533
diff changeset
744
114699930136 Allow headers to be repeated anywhere
ods15
parents: 17533
diff changeset
745 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
746 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
747 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
748 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
749
17547
114699930136 Allow headers to be repeated anywhere
ods15
parents: 17533
diff changeset
750 Note: this allows an implementation reading the file to locate backup
114699930136 Allow headers to be repeated anywhere
ods15
parents: 17533
diff changeset
751 headers in O(log filesize) time as opposed to O(filesize)
114699930136 Allow headers to be repeated anywhere
ods15
parents: 17533
diff changeset
752
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
753 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
754 the index or at the file end if there is no index
16428
5f4317692b7c spelling/grammar/wording
diego
parents: 15755
diff changeset
755 headers MUST be repeated at least twice (so they exist three times in a file)
9295
michael
parents: 9294
diff changeset
756
16685
diego
parents: 16574
diff changeset
757 there MUST be a sync point immediately before the first frame after any headers
12503
a160a68209ac disposition
michael
parents: 12502
diff changeset
758
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
759
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
760 Index:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
761 ------
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
762
15008
0a43341c8bfd less amateurish-looking mpcf.txt patch by (Jeff >snacky ikaruga co uk<)
michael
parents: 14919
diff changeset
763 Note: with realtime streaming, there is no end, so no index there either
17533
86a9a60ef596 Index repetition
ods15
parents: 17532
diff changeset
764 Index MAY only be repeated after main headers.
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
765
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
766
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
767 Info:
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
768 -----
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
769
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
770 All info packets with the same chapter_id and stream_id are repeated info
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
771 packets and MUST be binary identical.
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
772
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
773 All info packets MUST appear after main headers at begginning of file, and
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
774 SHOULD be repeated after all main headers unless they are very large.
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
775
16506
1e42b8be5b7f add back_ptr
michael
parents: 16503
diff changeset
776 Info frames can be used to describe the file or some part of it (chapters)
9310
b16480522be9 some typos
michael
parents: 9307
diff changeset
777
17669
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
778 Info SHOULD be stored in global packets instead of info streams/frames if
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
779 possible, and the amount of data is not large.
cb73482267a0 info packet stuff, chapters...
ods15
parents: 17653
diff changeset
780
17711
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
781 If 2 info frames have the same chapter_id and stream_id then the earlier
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
782 MUST be ignored (the last info frame is the most correct, this allows
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
783 updating or correcting info)
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
784
8aa18d8e5eb6 add forward_ptr to syncpoint (+0.006% overhead)
michael
parents: 17710
diff changeset
785 Info frames MUST be keyframes
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
786
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
787 demuxer (non-normative):
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
788 ------------------------
12501
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
789
16428
5f4317692b7c spelling/grammar/wording
diego
parents: 15755
diff changeset
790 in the absence of a valid header at the beginning, players SHOULD search for
5f4317692b7c spelling/grammar/wording
diego
parents: 15755
diff changeset
791 backup headers starting at offset 2^x; for each x players SHOULD end their
5f4317692b7c spelling/grammar/wording
diego
parents: 15755
diff changeset
792 search at a particular offset when any startcode is found (including syncpoint)
12501
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
793
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
794
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
795
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
796 Semantic requirements:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
797 ======================
16429
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
798
17018
baf593fcf738 Change MUST to SHOULD have disposition and if applicable language tags.
al
parents: 16843
diff changeset
799 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
800 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
801 It often highly improves usability and is therefore strongly encouraged.
16429
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
802
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
803 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
804 is wrapped in a structure to facilitate more than one stream or otherwise
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
805 duplicate the role of a container. any such file is to be considered invalid.
84174804804b Updates to NUT spec:
ods15
parents: 16428
diff changeset
806
12501
cd0d9a99b730 remove index flag
michael
parents: 12428
diff changeset
807
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
808
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
809 Sample code (Public Domain, & untested):
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
810 ========================================
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
811
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
812 typedef BufferContext{
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
813 uint8_t *buf;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
814 uint8_t *buf_ptr;
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
815 }BufferContext;
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
816
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
817 static inline uint64_t get_bytes(BufferContext *bc, int count){
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
818 uint64_t val=0;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
819
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
820 assert(count>0 && count<9);
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
821
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
822 for(i=0; i<count; i++){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
823 val <<=8;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
824 val += *(bc->buf_ptr++);
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
825 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
826
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
827 return val;
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
828 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
829
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
830 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
831 uint64_t val=0;
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
832
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
833 assert(count>0 && count<9);
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
834
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
835 for(i=count-1; i>=0; i--){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
836 *(bc->buf_ptr++)= val >> (8*i);
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
837 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
838
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
839 return val;
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
840 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
841
10061
76b1c7d20da8 corrected the sample code
alex
parents: 9580
diff changeset
842 static inline uint64_t get_v(BufferContext *bc){
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
843 uint64_t val= 0;
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
844
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
845 for(; space_left(bc) > 0; ){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
846 int tmp= *(bc->buf_ptr++);
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
847 if(tmp&0x80)
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
848 val= (val<<7) + tmp - 0x80;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
849 else
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
850 return (val<<7) + tmp;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
851 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
852
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
853 return -1;
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
854 }
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
855
10061
76b1c7d20da8 corrected the sample code
alex
parents: 9580
diff changeset
856 static inline int put_v(BufferContext *bc, uint64_t val){
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
857 int i;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
858
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
859 if(space_left(bc) < 9) return -1;
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
860
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
861 val &= 0x7FFFFFFFFFFFFFFFULL; // FIXME can only encode upto 63 bits currently
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
862 for(i=7; ; i+=7){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
863 if(val>>i == 0) break;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
864 }
9294
7159ed6a4d0b nonsense (MPlayer container format draft 0.01)
michael
parents:
diff changeset
865
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
866 for(i-=7; i>0; i-=7){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
867 *(bc->buf_ptr++)= 0x80 | (val>>i);
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
868 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
869 *(bc->buf_ptr++)= val&0x7F;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
870
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
871 return 0;
9579
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
872 }
89d27a306886 *signed int vlc (needs only 5 lines of code so its no increase of complexity)
michael
parents: 9422
diff changeset
873
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
874 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
875 if(reset) memset(pts_cache, -1, delay*sizeof(int64_t));
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
876
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
877 while(delay--){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
878 int64_t t= pts_cache[delay];
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
879 if(t < pts){
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
880 pts_cache[delay]= pts;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
881 pts= t;
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
882 }
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
883 }
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
884
16686
93d4be7ef83e cosmetic reformatting: tabs --> spaces, prettyprinting, trailing whitespace
diego
parents: 16685
diff changeset
885 return pts;
12333
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
886 }
80036bf4a9f5 remove frame types
michael
parents: 12297
diff changeset
887
16842
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
888
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
889
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
890 Authors:
d977560c702b Reformat section titles so that it becomes easier to tell sections and
diego
parents: 16686
diff changeset
891 ========
10158
93e5428d0b3e some changes (michael: is the colorspace_type field needed?)
alex
parents: 10061
diff changeset
892
16428
5f4317692b7c spelling/grammar/wording
diego
parents: 15755
diff changeset
893 Folks from the MPlayer developers mailing list (http://www.mplayerhq.hu/).
5f4317692b7c spelling/grammar/wording
diego
parents: 15755
diff changeset
894 Authors in alphabetical order: (FIXME! Tell us if we left you out)
16843
21fa9b28ca75 author list prettyprinting
diego
parents: 16842
diff changeset
895 Beregszaszi, Alex (alex@fsn.hu)
21fa9b28ca75 author list prettyprinting
diego
parents: 16842
diff changeset
896 Bunkus, Moritz (moritz@bunkus.org)
21fa9b28ca75 author list prettyprinting
diego
parents: 16842
diff changeset
897 Diedrich, Tobias (ranma+mplayer@tdiedrich.de)
21fa9b28ca75 author list prettyprinting
diego
parents: 16842
diff changeset
898 Felker, Rich (dalias@aerifal.cx)
21fa9b28ca75 author list prettyprinting
diego
parents: 16842
diff changeset
899 Franz, Fabian (FabianFranz@gmx.de)
21fa9b28ca75 author list prettyprinting
diego
parents: 16842
diff changeset
900 Gereoffy, Arpad (arpi@thot.banki.hu)
21fa9b28ca75 author list prettyprinting
diego
parents: 16842
diff changeset
901 Hess, Andreas (jaska@gmx.net)
21fa9b28ca75 author list prettyprinting
diego
parents: 16842
diff changeset
902 Niedermayer, Michael (michaelni@gmx.at)
21fa9b28ca75 author list prettyprinting
diego
parents: 16842
diff changeset
903 Shimon, Oded (ods15@ods15.dyndns.org)