Mercurial > mplayer.hg
comparison DOCS/tech/mpcf.txt @ 13308:8ff17d153414
info packet is now file global, while meta pakcet is stream specific, as discussed with Rich
author | alex |
---|---|
date | Sat, 11 Sep 2004 09:18:07 +0000 |
parents | 4e613c87c2f5 |
children | 6cdd5669e930 |
comparison
equal
deleted
inserted
replaced
13307:b94f228dfed6 | 13308:8ff17d153414 |
---|---|
1 NUT Open Container Format DRAFT 20040409 | 1 NUT Open Container Format DRAFT 20040911 |
2 ---------------------------------------- | 2 ---------------------------------------- |
3 | 3 |
4 | 4 |
5 | 5 |
6 Intro: | 6 Intro: |
125 packet_header | 125 packet_header |
126 stream_id v | 126 stream_id v |
127 stream_class v | 127 stream_class v |
128 fourcc vb | 128 fourcc vb |
129 average_bitrate v | 129 average_bitrate v |
130 language_code vb | |
131 time_base_nom v | 130 time_base_nom v |
132 time_base_denom v | 131 time_base_denom v |
133 msb_timestamp_shift v | 132 msb_timestamp_shift v |
134 decode_delay v | 133 decode_delay v |
135 fixed_fps u(1) | 134 fixed_fps u(1) |
183 index_position v | 182 index_position v |
184 } | 183 } |
185 reserved_bytes | 184 reserved_bytes |
186 checksum u(32) | 185 checksum u(32) |
187 | 186 |
188 info_packet: (optional) | 187 info_packet: (optional) (file global) |
189 info_startcode f(64) | 188 info_startcode f(64) |
190 packet header | 189 packet header |
191 for(;;){ | 190 for(;;){ |
192 id v | 191 id v |
193 if(id==0) break | 192 if(id==0) break |
194 name= info_table[id][0] | 193 name= info_table[id][0] |
195 type= info_table[id][1] | 194 type= info_table[id][1] |
195 if(type==NULL) | |
196 type vb | |
197 if(name==NULL) | |
198 name vb | |
199 if(type=="v") | |
200 value v | |
201 else | |
202 value vb | |
203 } | |
204 reserved_bytes | |
205 checksum u(32) | |
206 | |
207 meta_packet: (optional) (stream specific) | |
208 meta_startcode f(64) | |
209 packet header | |
210 stream_id v | |
211 for(;;){ | |
212 id v | |
213 if(id==0) break | |
214 name= meta_table[id][0] | |
215 type= meta_table[id][1] | |
196 if(type==NULL) | 216 if(type==NULL) |
197 type vb | 217 type vb |
198 if(name==NULL) | 218 if(name==NULL) |
199 name vb | 219 name vb |
200 if(type=="v") | 220 if(type=="v") |
255 | 275 |
256 index_startcode | 276 index_startcode |
257 0xDD672F23E64EULL + (((uint64_t)('N'<<8) + 'X')<<48) | 277 0xDD672F23E64EULL + (((uint64_t)('N'<<8) + 'X')<<48) |
258 info_startcode | 278 info_startcode |
259 0xAB68B596BA78ULL + (((uint64_t)('N'<<8) + 'I')<<48) | 279 0xAB68B596BA78ULL + (((uint64_t)('N'<<8) + 'I')<<48) |
280 meta_startcode | |
281 FIXME | |
260 | 282 |
261 version | 283 version |
262 2 for now | 284 2 for now |
263 | 285 |
264 max_distance | 286 max_distance |
365 1 native | 387 1 native |
366 2 bitmapinfoheader | 388 2 bitmapinfoheader |
367 3 waveformatex | 389 3 waveformatex |
368 4 imagedesc | 390 4 imagedesc |
369 5 sounddesc | 391 5 sounddesc |
370 "native", means a simple api & container independanet storage form, | 392 "native", means a simple api & container independent storage form, |
371 for example some mpeg4-es headers | 393 for example some mpeg4-es headers |
372 | 394 |
373 codec_specific_data | 395 codec_specific_data |
374 private global data for a codec (could be huffman tables or ...) | 396 private global data for a codec (could be huffman tables or ...) |
375 | 397 |
478 type | 500 type |
479 for example: "UTF8" -> String or "JPEG" -> jpeg image | 501 for example: "UTF8" -> String or "JPEG" -> jpeg image |
480 Note: nonstandard fields should be prefixed by "X-" | 502 Note: nonstandard fields should be prefixed by "X-" |
481 Note: MUST be less than 6 byte long (might be increased to 64 later) | 503 Note: MUST be less than 6 byte long (might be increased to 64 later) |
482 | 504 |
483 name | 505 info packet types |
484 the name of the info entry, valid names are | 506 the name of the info entry, valid names are |
485 "TotalTime" total length of the stream in msecs | 507 |
486 "StreamId" the stream(s) to which the info packet applies | |
487 "StartTimestamp" | |
488 "EndTimestamp" the time range in msecs to which the info applies | |
489 "SegmentId" a unique id for the streams + time specified | |
490 "Author" | 508 "Author" |
491 "Description" | 509 "Description" |
492 "Copyright" | 510 "Copyright" |
493 "Encoder" the name & version of the software used for encoding | 511 "Encoder" the name & version of the software used for encoding |
494 "Title" | 512 "Title" |
498 Optional: appended PAL,NTSC,SECAM, ... in parentheses | 516 Optional: appended PAL,NTSC,SECAM, ... in parentheses |
499 "CaptureDevice" "BT878", "BT848", "webcam", ... (more exact names are fine too) | 517 "CaptureDevice" "BT878", "BT848", "webcam", ... (more exact names are fine too) |
500 "CreationTime" "2003-01-20 20:13:15Z", ... | 518 "CreationTime" "2003-01-20 20:13:15Z", ... |
501 (ISO 8601 format, see http://www.cl.cam.ac.uk/~mgk25/iso-time.html) | 519 (ISO 8601 format, see http://www.cl.cam.ac.uk/~mgk25/iso-time.html) |
502 Note: dont forget the timezone | 520 Note: dont forget the timezone |
521 "Keywords" | |
522 "TotalTime" total length of the stream in msecs | |
523 | |
524 meta packet types | |
503 "ReplayGain" | 525 "ReplayGain" |
504 "Keywords" | 526 "Language" the language code |
505 "Disposition" "original", "dub" (translated), "comment", "lyrics", "karaoke" | 527 "Disposition" "original", "dub" (translated), "comment", "lyrics", "karaoke" |
506 Note: if someone needs some others, please tell us about them, so we can | 528 Note: if someone needs some others, please tell us about them, so we can |
507 add them to the official standard (if they are sane) | 529 add them to the official standard (if they are sane) |
508 Note: nonstandard fields should be prefixed by "X-" | 530 Note: nonstandard fields should be prefixed by "X-" |
509 Note: MUST be less than 64 bytes long | 531 Note: MUST be less than 64 bytes long |
519 {NULL , NULL }, // end | 541 {NULL , NULL }, // end |
520 {NULL , NULL }, | 542 {NULL , NULL }, |
521 {NULL , "UTF8"}, | 543 {NULL , "UTF8"}, |
522 {NULL , "v"}, | 544 {NULL , "v"}, |
523 {NULL , "s"}, | 545 {NULL , "s"}, |
524 {"StreamId" , "v"}, | |
525 {"SegmentId" , "v"}, | |
526 {"StartTimestamp" , "v"}, | |
527 {"EndTimestamp" , "v"}, | |
528 {"Author" , "UTF8"}, | 546 {"Author" , "UTF8"}, |
529 {"Titel" , "UTF8"}, | 547 {"Titel" , "UTF8"}, |
530 {"Description" , "UTF8"}, | 548 {"Description" , "UTF8"}, |
531 {"Copyright" , "UTF8"}, | 549 {"Copyright" , "UTF8"}, |
532 {"Encoder" , "UTF8"}, | 550 {"Encoder" , "UTF8"}, |
533 {"Keyword" , "UTF8"}, | 551 {"Keyword" , "UTF8"}, |
534 {"Cover" , "JPEG"}, | 552 {"Cover" , "JPEG"}, |
535 {"Cover" , "PNG"}, | 553 {"Cover" , "PNG"}, |
536 {"Disposition" , "UTF8"}, | 554 }; |
555 | |
556 meta_table[][2]={ | |
557 {NULL , NULL }, // end | |
558 {NULL , NULL }, | |
559 {NULL , "UTF8"}, | |
560 {NULL , "v"}, | |
561 {NULL , "s"}, | |
562 {"Language" , to be decided}, | |
563 {"Disposition" , to be decided}, | |
564 {"ReplayGain" , to be decided}, | |
537 }; | 565 }; |
538 | 566 |
539 Structure: | 567 Structure: |
540 | 568 |
541 the headers MUST be in exactly the following order (to simplify demuxer design) | 569 the headers MUST be in exactly the following order (to simplify demuxer design) |