Index: DOCS/tech/mpcf.txt =================================================================== RCS file: /cvsroot/mplayer/main/DOCS/tech/mpcf.txt,v retrieving revision 1.105 diff -u -r1.105 mpcf.txt --- DOCS/tech/mpcf.txt 13 Feb 2006 07:29:11 -0000 1.105 +++ DOCS/tech/mpcf.txt 16 Feb 2006 05:59:12 -0000 @@ -98,6 +98,7 @@ data[i] u(8) } [Note: strings MUST be encoded in UTF-8] + [Note: strings MUST NOT be encoded with their terminating NUL] vb (variable length binary data or string) length v @@ -122,6 +123,24 @@ impossible to add new fields at the end of packets in the future in a compatible way] +compressed_bitmask(bitmask, index): + x v + type= x & 1 + x>>=1 + if(type){ + flag= x & 1 + x>>=1 + while(x--) + bitmask[index++]=flag + bitmask[index++]=!flag; + }else{ + while(x != 1){ + bitmask[index++]=x&1; + x>>=1; + } + } + return index; + Headers: main header: @@ -240,24 +259,9 @@ for(i=0; i>=1 - n=j - if(type){ - flag= x & 1 - x>>=1 - while(x--) - has_keyframe[n++][i]=flag - has_keyframe[n++][i]=!flag; - }else{ - while(x != 1){ - has_keyframe[n++][i]=x&1; - x>>=1; - } - } + n= compressed_bitmask(has_keyframe[i],j) for(; j>2 + name= info_table[code][index][0] + if(name==NULL) name vb + if(code==0) { value s - else + } else if(code==1) { + nom s + denom v + value= nom/denom + } else if(code==2) { + mantissa s + exponent s + value= mantissa*pow(2,exp) + } else { + if(index) type= info_table[code][index][1] + else type vb value vb + } } reserved_bytes checksum u(32) @@ -613,9 +626,11 @@ EOF, as index_ptr will always be 12 bytes before the end of file if there is an index at all. +info_stream_mask + Bit mask saying which which stream(s) this info packet reffers to. + id the ID of the type/name pair, so it is more compact - 0 means end type for example: "UTF8" -> string or "JPEG" -> JPEG image @@ -624,8 +639,6 @@ info packet types the name of the info entry, valid names are - "StreamId" - the stream(s) to which the info packet applies "Author" "Description" "Copyright" @@ -644,8 +657,8 @@ (ISO 8601 format, see http://www.cl.cam.ac.uk/~mgk25/iso-time.html) Note: do not forget the timezone "Keywords" - "TotalTime" - total length of the stream in msecs + "TrackTime" + length of a track/chapter in seconds "Language" ISO 639 and ISO 3166 for language/country code something like "eng" (US english), can be 0 if unknown @@ -666,24 +679,36 @@ stuffing 0x80 can be placed in front of any type v entry for stuffing purposes -info_table[][2]={ - {NULL , NULL }, // end - {NULL , NULL }, - {NULL , "UTF8"}, - {NULL , "v"}, - {NULL , "s"}, - {"StreamId" , "v"}, - {"Author" , "UTF8"}, - {"Title" , "UTF8"}, - {"Language" , "UTF8"}, - {"Description" , "UTF8"}, - {"Copyright" , "UTF8"}, - {"Encoder" , "UTF8"}, - {"Keyword" , "UTF8"}, - {"Cover" , "JPEG"}, - {"Cover" , "PNG"}, - {"Disposition" , "UTF8"}, +info_table[4][][2]={ + { + {NULL , "i"}, // integer + }, + { + {NULL , "r"}, // rational + {"TrackTime" , "r"}, + }, + { + {NULL , "f"}, // float + }, + { + {NULL , NULL }, + {NULL , "UTF8"}, + {"Author" , "UTF8"}, + {"Description" , "UTF8"}, + {"Copyright" , "UTF8"}, + {"Encoder" , "UTF8"}, + {"Title" , "UTF8"}, + {"Cover" , "JPEG"}, + {"Cover" , "PNG"}, + {"Source" , "UTF8"}, + {"CaptureDevice" , "UTF8"}, + {"CreationTime" , "UTF8"}, + {"Keywords" , "UTF8"}, + {"Language" , "UTF8"}, + {"Disposition" , "UTF8"}, + } }; + Note: No future entries will have NULL as a value. Structure: