Author: dmeyer
Date: Sat Nov  5 12:56:59 2005
New Revision: 890

Modified:
   trunk/metadata/src/video/movinfo.py

Log:
read reference atoms

Modified: trunk/metadata/src/video/movinfo.py
==============================================================================
--- trunk/metadata/src/video/movinfo.py (original)
+++ trunk/metadata/src/video/movinfo.py Sat Nov  5 12:56:59 2005
@@ -59,7 +59,8 @@
     def __init__(self,file):
         mediainfo.AVInfo.__init__(self)
         self.context = 'video'
-
+        self.references = []
+        
         self.mime = 'video/quicktime'
         self.type = 'Quicktime Video'
         h = file.read(8)
@@ -88,6 +89,9 @@
         except:
             pass
 
+        if self.references:
+            self.keys.append('references')
+
 
     def _readatom(self, file):
         s = file.read(8)
@@ -293,6 +297,36 @@
             file.seek(pos, 0)
 
 
+        elif atomtype == 'rmra':
+            # reference list
+            while self._readatom(file):
+                pass
+
+        elif atomtype == 'rmda':
+            # reference
+            atomdata = file.read(atomsize-8)
+            pos   = 0
+            url = ''
+            quality = 0
+            datarate = 0
+            while pos < atomsize-8:
+                (datasize, datatype) = unpack('>I4s', atomdata[pos:pos+8])
+                if datatype == 'rdrf':
+                    rflags, rtype, rlen = unpack('>I4sI', 
atomdata[pos+8:pos+20])
+                    if rtype == 'url ':
+                        url = atomdata[pos+20:pos+20+rlen]
+                        if url.find('\0') > 0:
+                            url = url[:url.find('\0')]
+                elif datatype == 'rmqu':
+                    quality = unpack('>I', atomdata[pos+8:pos+12])[0]
+                    
+                elif datatype == 'rmdr':
+                    datarate = unpack('>I', atomdata[pos+12:pos+16])[0]
+
+                pos += datasize
+            if url:
+                self.references.append((url, quality, datarate))
+            
         else:
             if not atomtype in ('wide', 'free'):
                 log.info('unhandled base atom %s' % atomtype)


-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to