[NUT-devel] info packets/frames

Oded Shimon ods15 at ods15.dyndns.org
Wed Feb 15 09:34:04 CET 2006


TotalTime is unecessary thanks to max_pts in index
no more null termination of info packets
stream_id coded sperately
seperate to 4 basic types for extendibility, now we can add new fields 
without breaking old demuxers

more:
maybe use null terminated strings instead of vb?


The reason I gave 'NULL' as an option for type for basic codes, maybe those 
1 or 2 vlc's can take on a different meaning with some other type...

Also I consider collapsing rational and float into a single code, with 
different types. They decode the same, being 2 vlc's...

- ods15
-------------- next part --------------
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	15 Feb 2006 08:24:19 -0000
@@ -275,21 +275,29 @@
     checksum                            u(32)
 
 info_frame: (optional)
-    for(;;){
+    info_stream_id                      v
+    items                               v
+    for(i=0; i<items; i++){
         id                              v
-        if(id==0) break
-        name= info_table[id][0]
-        type= info_table[id][1]
-        if(type==NULL)
-            type                        vb
-        if(name==NULL)
-            name                        vb
-        if(type=="v")
-            value                       v
-        else if(type=="s")
+        code= id&3
+        name= info_table[code][id>>2][0]
+        type= info_table[code][id>>2][1]
+        if(type==NULL) type             vb
+        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= abs(mantissa)^exp
+            value*= sign(mantissa)
+        } else {
             value                       vb
+        }
     }
     reserved_bytes
     checksum                            u(32)
@@ -613,9 +621,12 @@
     EOF, as index_ptr will always be 12 bytes before the end of file if
     there is an index at all.
 
+info_stream_id
+    Which stream this info packet reffers to, plus one. Zero menas global
+    to file.
+
 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 +635,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 +653,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 msecs
     "Language"
         ISO 639 and ISO 3166 for language/country code
         something like "eng" (US english), can be 0 if unknown
@@ -666,23 +675,34 @@
 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            , NULL},
+        {NULL            , "i"}, // integer
+        {"TrackTime"     , "i"}, // integer
+    },
+    {
+        {NULL            , NULL},
+        {NULL            , "r"}, // rational
+    },
+    {
+        {NULL            , NULL},
+        {NULL            , "f"}, // float
+    },
+    {
+        {NULL            ,  NULL },
+        {NULL            , "UTF8"},
+        {"Author"        , "UTF8"},
+        {"Title"         , "UTF8"},
+        {"Language"      , "UTF8"},
+        {"Description"   , "UTF8"},
+        {"Copyright"     , "UTF8"},
+        {"Encoder"       , "UTF8"},
+        {"Keyword"       , "UTF8"},
+        {"Cover"         , "JPEG"},
+        {"Cover"         , "PNG"},
+        {"Disposition"   , "UTF8"},
+    }
 };
 
 


More information about the NUT-devel mailing list