Author: dmeyer
Date: Thu Dec  7 20:49:32 2006
New Revision: 2179

Modified:
   trunk/metadata/src/mediainfo.py
   trunk/metadata/src/video/riffinfo.py

Log:
riffparser cleanup

Modified: trunk/metadata/src/mediainfo.py
==============================================================================
--- trunk/metadata/src/mediainfo.py     (original)
+++ trunk/metadata/src/mediainfo.py     Thu Dec  7 20:49:32 2006
@@ -67,7 +67,7 @@
 
 AVCORE    = ['length', 'encoder', 'trackno', 'trackof', 'copyright', 'product',
              'genre', 'writer', 'producer', 'studio', 'rating', 'starring',
-             'delay', 'image', 'video', 'audio', 'subtitles', 'chapters' ]
+             'delay', 'image', 'video', 'audio', 'subtitles', 'chapters', 
'software' ]
 
 EXTENSION_DEVICE    = 'device'
 EXTENSION_DIRECTORY = 'directory'

Modified: trunk/metadata/src/video/riffinfo.py
==============================================================================
--- trunk/metadata/src/video/riffinfo.py        (original)
+++ trunk/metadata/src/video/riffinfo.py        Thu Dec  7 20:49:32 2006
@@ -44,28 +44,30 @@
 # get logging object
 log = logging.getLogger('metadata')
 
-
 # List of tags
 # http://kibus1.narod.ru/frames_eng.htm?sof/abcavi/infotags.htm
 # http://www.divx-digest.com/software/avitags_dll.html
 # File Format: google for odmlff2.pdf
 
-AVIINFO = { 'INAM': 'title',
-            'IART': 'artist',
-            'IPRD': 'product',
-            'ICRD': 'date',
-            'ICMT': 'comment',
-            'ILNG': 'language',
-            'IKEY': 'keywords',
-            'IPRT': 'trackno',
-            'IFRM': 'trackof',
-            'IPRO': 'producer',
-            'IWRI': 'writer',
-            'IGNR': 'genre',
-                 'ICOP': 'copyright'
-          }
+AVIINFO = {
+    'INAM': 'title',
+    'IART': 'artist',
+    'IPRD': 'product',
+    'ISFT': 'software',
+    'ICRD': 'date',
+    'ICMT': 'comment',
+    'ILNG': 'language',
+    'IKEY': 'keywords',
+    'IPRT': 'trackno',
+    'IFRM': 'trackof',
+    'IPRO': 'producer',
+    'IWRI': 'writer',
+    'IGNR': 'genre',
+    'ICOP': 'copyright'
+}
 
-PIXEL_ASPECT = {  # Taken from libavcodec/mpeg4data.h (pixel_aspect struct)
+# Taken from libavcodec/mpeg4data.h (pixel_aspect struct)
+PIXEL_ASPECT = {
     1: (1, 1),
     2: (12, 11),
     3: (10, 11),
@@ -96,7 +98,7 @@
         elif self.type == 'WAVE':
             self.mime = 'application/x-wave'
         try:
-            while self.parseRIFFChunk(file):
+            while self._parseRIFFChunk(file):
                 pass
         except IOError:
             log.exception('error in file, stop parsing')
@@ -108,10 +110,6 @@
             self._set('corrupt', True)
 
 
-    def _extractHeaderString(self,h,offset,len):
-        return h[offset:offset+len]
-
-
     def _find_subtitles(self, filename):
         """
         Search for subtitle files. Right now only VobSub is supported
@@ -130,7 +128,7 @@
             file.close()
 
 
-    def parseAVIH(self,t):
+    def _parseAVIH(self,t):
         retval = {}
         v = struct.unpack('<IIIIIIIIIIIIII',t[0:56])
         ( retval['dwMicroSecPerFrame'],
@@ -154,10 +152,10 @@
         return retval
 
 
-    def parseSTRH(self,t):
+    def _parseSTRH(self,t):
         retval = {}
         retval['fccType'] = t[0:4]
-        log.debug("parseSTRH(%s) : %d bytes" % ( retval['fccType'], len(t)))
+        log.debug("_parseSTRH(%s) : %d bytes" % ( retval['fccType'], len(t)))
         if retval['fccType'] != 'auds':
             retval['fccHandler'] = t[4:8]
             v = struct.unpack('<IHHIIIIIIIII',t[8:52])
@@ -196,7 +194,7 @@
         return retval
 
 
-    def parseSTRF(self,t,strh):
+    def _parseSTRF(self,t,strh):
         fccType = strh['fccType']
         retval = {}
         if fccType == 'auds':
@@ -242,7 +240,7 @@
         return retval
 
 
-    def parseSTRL(self,t):
+    def _parseSTRL(self,t):
         retval = {}
         size = len(t)
         i = 0
@@ -252,22 +250,22 @@
         value = t[i:]
 
         if key == 'strh':
-            retval[key] = self.parseSTRH(value)
+            retval[key] = self._parseSTRH(value)
             i += sz
         else:
-            log.debug("parseSTRL: Error")
+            log.debug("_parseSTRL: Error")
         key = t[i:i+4]
         sz = struct.unpack('<I',t[i+4:i+8])[0]
         i+=8
         value = t[i:]
 
         if key == 'strf':
-            retval[key] = self.parseSTRF(value, retval['strh'])
+            retval[key] = self._parseSTRF(value, retval['strh'])
             i += sz
         return ( retval, i )
 
 
-    def parseODML(self,t):
+    def _parseODML(self,t):
         retval = {}
         size = len(t)
         i = 0
@@ -276,13 +274,13 @@
         i += 8
         value = t[i:]
         if key != 'dmlh':
-            log.debug("parseODML: Error")
+            log.debug("_parseODML: Error")
 
         i += sz - 8
         return ( retval, i )
 
 
-    def parseVPRP(self,t):
+    def _parseVPRP(self,t):
         retval = {}
         v = struct.unpack('<IIIIIIIIII',t[:4*10])
 
@@ -309,7 +307,7 @@
         return ( retval, v[0] )
 
 
-    def parseLISTmovi(self, size, file):
+    def _parseLISTmovi(self, size, file):
         """
         Digs into movi list, looking for a Video Object Layer header in an
         mpeg4 stream in order to determine aspect ratio.
@@ -400,7 +398,7 @@
 
 
 
-    def parseLIST(self,t):
+    def _parseLIST(self,t):
         retval = {}
         i = 0
         size = len(t)
@@ -415,7 +413,7 @@
                 sz = struct.unpack('<I',t[i+4:i+8])[0]
                 i+=8
                 key = "LIST:"+t[i:i+4]
-                value = self.parseLIST(t[i:i+sz])
+                value = self._parseLIST(t[i:i+sz])
                 if key == 'strl':
                     for k in value.keys():
                         retval[k] = value[k]
@@ -425,22 +423,22 @@
             elif key == 'avih':
                 sz = struct.unpack('<I',t[i+4:i+8])[0]
                 i += 8
-                value = self.parseAVIH(t[i:i+sz])
+                value = self._parseAVIH(t[i:i+sz])
                 i += sz
                 retval[key] = value
             elif key == 'strl':
                 i += 4
-                (value, sz) = self.parseSTRL(t[i:])
+                (value, sz) = self._parseSTRL(t[i:])
                 key = value['strh']['fccType']
                 i += sz
                 retval[key] = value
             elif key == 'odml':
                 i += 4
-                (value, sz) = self.parseODML(t[i:])
+                (value, sz) = self._parseODML(t[i:])
                 i += sz
             elif key == 'vprp':
                 i += 4
-                (value, sz) = self.parseVPRP(t[i:])
+                (value, sz) = self._parseVPRP(t[i:])
                 retval[key] = value
                 i += sz
             elif key == 'JUNK':
@@ -449,16 +447,16 @@
             else:
                 sz = struct.unpack('<I',t[i+4:i+8])[0]
                 i+=8
-                if key not in ('IDIT', 'ISFT'):
+                # in most cases this is some info stuff
+                if not key in AVIINFO.keys() and key != 'IDIT':
                     log.debug("Unknown Key: %s, len: %d" % (key,sz))
-                value = self._extractHeaderString(t,i,sz)
+                value = t[i:i+sz]
                 if key == 'ISFT':
+                    # product information
                     if value.find('\0') > 0:
                         # works for Casio S500 camera videos
                         value = value[:value.find('\0')]
                     value = value.replace('\0', '').lstrip().rstrip()
-                    if value:
-                        self.product = value
                 value = value.replace('\0', '').lstrip().rstrip()
                 if value:
                     retval[key] = value
@@ -485,7 +483,7 @@
         return retval
 
 
-    def parseRIFFChunk(self,file):
+    def _parseRIFFChunk(self,file):
         h = file.read(8)
         if len(h) < 4:
             return False
@@ -502,7 +500,7 @@
                 # header), but we do know the video's dimensions, and
                 # we're dealing with an mpeg4 stream, try to get the aspect
                 # from the VOL header in the mpeg4 stream.
-                self.parseLISTmovi(size-4, file)
+                self._parseLISTmovi(size-4, file)
                 return True
             elif size > 80000:
                 log.debug('RIFF LIST "%s" to long to parse: %s bytes' % (key, 
size))
@@ -511,7 +509,7 @@
 
             t = file.read(size-4)
             log.debug('parse RIFF LIST "%s": %d bytes' % (key, size))
-            value = self.parseLIST(t)
+            value = self._parseLIST(t)
             self.header[key] = value
             if key == 'INFO':
                 self.infoStart = pos
@@ -552,43 +550,4 @@
             return False
         return True
 
-    def buildTag(self,key,value):
-        text = value + '\0'
-        l = len(text)
-        return struct.pack('<4sI%ds'%l, key[:4], l, text[:l])
-
-
-    def setInfo(self,file,hash):
-        if self.junkStart == None:
-            raise "junkstart missing"
-        tags = []
-        size = 4 # Length of 'INFO'
-        # Build String List and compute req. size
-        for key in hash.keys():
-            tag = self.buildTag( key, hash[key] )
-            if (len(tag))%2 == 1: tag += '\0'
-            tags.append(tag)
-            size += len(tag)
-            log.debug("Tag [%i]: %s" % (len(tag),tag))
-        if self.infoStart != None:
-            log.debug("Infostart found. %i" % (self.infoStart))
-            # Read current info size
-            file.seek(self.infoStart,0)
-            s = file.read(12)
-            (list, oldsize, info) = struct.unpack('<4sI4s',s)
-            self.junkSize += oldsize + 8
-        else:
-            self.infoStart = self.junkStart
-            log.debug("Infostart computed. %i" % (self.infoStart))
-        file.seek(self.infoStart,0)
-        if ( size > self.junkSize - 8 ):
-            raise "Too large"
-        file.write( "LIST" + struct.pack('<I',size) + "INFO" )
-        for tag in tags:
-            file.write( tag )
-        log.debug("Junksize %i" % (self.junkSize-size-8))
-        file.write( "JUNK" + struct.pack('<I',self.junkSize-size-8) )
-
-
-
 factory.register( 'video/avi', ('avi',), mediainfo.TYPE_AV, RiffInfo )

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to