Author: dmeyer
Date: Wed Dec 6 15:03:23 2006
New Revision: 2153
Modified:
trunk/metadata/src/mediainfo.py
trunk/metadata/src/video/asfinfo.py
trunk/metadata/src/video/mkvinfo.py
trunk/metadata/src/video/movinfo.py
trunk/metadata/src/video/mpeginfo.py
trunk/metadata/src/video/ogminfo.py
trunk/metadata/src/video/riffinfo.py
Log:
Update fourcc handling. The codec is now stored in is
four or two byte code and only resolved when
transforming the object to unicode or string.
This will make it possible for kaa.popcorn to access
the real fourcc id.
Modified: trunk/metadata/src/mediainfo.py
==============================================================================
--- trunk/metadata/src/mediainfo.py (original)
+++ trunk/metadata/src/mediainfo.py Wed Dec 6 15:03:23 2006
@@ -38,6 +38,9 @@
# kaa imports
from kaa.strutils import str_to_unicode, unicode_to_str
+# fourcc list for debugging
+import fourcc
+
UNPRINTABLE_KEYS = [ 'thumbnail']
# type definitions
@@ -262,6 +265,17 @@
setattr(self,k,None)
self.keys.append(k)
+ def __unicode__(self):
+ result = u''
+ for key in self.keys:
+ value = self[key]
+ if value == None:
+ continue
+ if key == 'codec':
+ value = fourcc.resolve(value)
+ result += u'\n %s: %s' % (unicode(key), unicode(value))
+ return result
+
class MusicInfo(AudioInfo):
"""
@@ -301,6 +315,17 @@
self.keys.append(k)
+ def __unicode__(self):
+ result = u''
+ for key in self.keys:
+ value = self[key]
+ if value == None:
+ continue
+ if key == 'codec':
+ value = fourcc.resolve(value)
+ result += u'\n %s: %s' % (unicode(key), unicode(value))
+ return result
+
class ChapterInfo(MediaInfo):
"""
Chapter in a Multiplexed Container.
Modified: trunk/metadata/src/video/asfinfo.py
==============================================================================
--- trunk/metadata/src/video/asfinfo.py (original)
+++ trunk/metadata/src/video/asfinfo.py Wed Dec 6 15:03:23 2006
@@ -37,7 +37,6 @@
import re
import struct
import string
-import fourcc
import logging
# kaa imports
@@ -273,8 +272,7 @@
vi = mediainfo.VideoInfo()
vi.width, vi.height, depth, \
codec, = struct.unpack('<4xII2xH4s', s[89:89+20])
- vi.codec = fourcc.RIFFCODEC[codec]
- vi.format = codec
+ vi.codec = codec
vi.id = strno
self.video.append(vi)
elif streamtype == GUIDS['ASF_Audio_Media']:
@@ -282,8 +280,7 @@
twocc, ai.channels, ai.samplerate, bitrate, block, \
ai.samplebits, = struct.unpack('<HHIIHH', s[78:78+16])
ai.bitrate = 8*bitrate # XXX Is this right?
- ai.codec = fourcc.RIFFWAVE[twocc]
- ai.format = twocc
+ ai.codec = twocc
ai.id = strno
self.audio.append(ai)
pass
Modified: trunk/metadata/src/video/mkvinfo.py
==============================================================================
--- trunk/metadata/src/video/mkvinfo.py (original)
+++ trunk/metadata/src/video/mkvinfo.py Wed Dec 6 15:03:23 2006
@@ -42,7 +42,6 @@
# kaa imports
from kaa.metadata import mediainfo
from kaa.metadata import factory
-import fourcc
# get logging object
log = logging.getLogger('metadata')
@@ -106,6 +105,23 @@
# See mkv spec for details:
# http://www.matroska.org/technical/specs/index.html
+# Map to convert to well known codes
+# http://haali.cs.msu.ru/mkv/codecs.pdf
+FOURCCMap = {
+ 'V_THEORA': 'THEO',
+ 'V_SNOW': 'SNOW',
+ 'V_MPEG4/ISO/ASP': 'MP4V',
+ 'V_MPEG4/ISO/AVC': 'AVC1',
+ 'A_AC3': 0x2000,
+ 'A_MPEG/L3': 0x0055,
+ 'A_MPEG/L2': 0x0050,
+ 'A_MPEG/L1': 0x0050,
+ 'A_DTS': 0x2001,
+ 'A_PCM/INT/LIT': 0x0001,
+ 'A_PCM/FLOAT/IEEE': 0x003,
+ 'A_TTA1': 0x77a1
+}
+
class EbmlEntity:
"""
This is class that is responsible to handle one Ebml entity as described in
@@ -337,20 +353,23 @@
try:
elem = tabelem[MATROSKA_CODEC_ID]
track.codec = elem.get_str()
- if track.codec.startswith('V_'):
- track.codec = track.codec[2:]
except (ZeroDivisionError, KeyError, IndexError):
track.codec = u'Unknown'
- if MATROSKA_CODEC_PRIVATE_ID in tabelem and \
+ # convert codec information
+ # http://haali.cs.msu.ru/mkv/codecs.pdf
+ if track.codec in FOURCCMap:
+ track.codec = FOURCCMap[track.codec]
+ elif track.codec.endswith('FOURCC') and \
+ MATROSKA_CODEC_PRIVATE_ID in tabelem and \
tabelem[MATROSKA_CODEC_PRIVATE_ID].get_len() == 40:
- # Assuming it's a alBITMAPINFOHEADER, grab fourcc
- c = tabelem[MATROSKA_CODEC_PRIVATE_ID].get_data()[16:20]
- if c in fourcc.RIFFWAVE:
- track.format = fourcc.RIFFWAVE[c]
- if c in fourcc.RIFFCODEC:
- track.format = fourcc.RIFFCODEC[c]
-
+ track.codec =
tabelem[MATROSKA_CODEC_PRIVATE_ID].get_data()[16:20]
+ elif track.codec.startswith('V_REAL/'):
+ track.codec = track.codec[7:]
+ elif track.codec.startswith('V_'):
+ # FIXME: add more video codecs here
+ track.codec = track.codec[2:]
+
try:
elem = tabelem[MATROSKA_FRAME_DURATION_ID]
track.fps = 1 / (pow(10, -9) * (elem.get_value()))
@@ -382,7 +401,9 @@
try:
elem = tabelem[MATROSKA_CODEC_ID]
track.codec = elem.get_str()
- if track.codec.startswith('A_'):
+ if track.codec in FOURCCMap:
+ track.codec = FOURCCMap[track.codec]
+ elif track.codec.startswith('A_'):
track.codec = track.codec[2:]
except (KeyError, IndexError):
track.codec = u"Unknown"
Modified: trunk/metadata/src/video/movinfo.py
==============================================================================
--- trunk/metadata/src/video/movinfo.py (original)
+++ trunk/metadata/src/video/movinfo.py Wed Dec 6 15:03:23 2006
@@ -43,7 +43,6 @@
from kaa.metadata import factory
from kaa.metadata import mediainfo
from movlanguages import *
-import fourcc
# get logging object
log = logging.getLogger('metadata')
@@ -211,7 +210,8 @@
# jpeg is no video, remove it from the list
self.video.remove(vi)
info = None
-
+ print codec
+
elif mdia[1] == 'dinf':
dref = unpack('>I4s', atomdata[pos+8:pos+8+8])
log.debug(' --> %s, %s' % mdia)
Modified: trunk/metadata/src/video/mpeginfo.py
==============================================================================
--- trunk/metadata/src/video/mpeginfo.py (original)
+++ trunk/metadata/src/video/mpeginfo.py Wed Dec 6 15:03:23 2006
@@ -40,7 +40,6 @@
# kaa imports
from kaa.metadata import mediainfo
from kaa.metadata import factory
-import fourcc
# get logging object
log = logging.getLogger('metadata')
Modified: trunk/metadata/src/video/ogminfo.py
==============================================================================
--- trunk/metadata/src/video/ogminfo.py (original)
+++ trunk/metadata/src/video/ogminfo.py Wed Dec 6 15:03:23 2006
@@ -39,7 +39,6 @@
# kaa imports
from kaa.metadata import mediainfo
from kaa.metadata import factory
-import fourcc
# get logging object
log = logging.getLogger('metadata')
@@ -289,10 +288,7 @@
vi.width /= 65536
vi.height /= 65536
# XXX length, bitrate are very wrong
- try:
- vi.codec = fourcc.RIFFCODEC[type]
- except (KeyError, IndexError):
- vi.codec = 'Unknown (%s)' % type
+ vi.codec = type
vi.fps = 10000000 / timeunit
self.video.append(vi)
self.all_streams.append(vi)
Modified: trunk/metadata/src/video/riffinfo.py
==============================================================================
--- trunk/metadata/src/video/riffinfo.py (original)
+++ trunk/metadata/src/video/riffinfo.py Wed Dec 6 15:03:23 2006
@@ -33,7 +33,6 @@
import re
import struct
import string
-import fourcc
import logging
import time
@@ -205,11 +204,7 @@
# http://www.stats.uwa.edu.au/Internal/Specs/DXALL/FileSpec/\
# Languages
# ai.language = strh['wLanguage']
- try:
- ai.codec = fourcc.RIFFWAVE[retval['wFormatTag']]
- except (KeyError, IndexError):
- ai.codec = "Unknown"
- ai.format = retval['wFormatTag']
+ ai.codec = retval['wFormatTag']
self.audio.append(ai)
elif fccType == 'vids':
v = struct.unpack('<IIIHH',t[0:16])
@@ -218,7 +213,6 @@
retval['biHeight'],
retval['biPlanes'],
retval['biBitCount'], ) = v
- retval['fourcc'] = t[16:20]
v = struct.unpack('IIIII',t[20:40])
( retval['biSizeImage'],
retval['biXPelsPerMeter'],
@@ -226,16 +220,12 @@
retval['biClrUsed'],
retval['biClrImportant'], ) = v
vi = mediainfo.VideoInfo()
- try:
- vi.codec = fourcc.RIFFCODEC[t[16:20]]
- except (KeyError, IndexError):
- vi.codec = "Unknown"
+ vi.codec = t[16:20]
vi.width = retval['biWidth']
vi.height = retval['biHeight']
vi.bitrate = strh['dwRate']
vi.fps = float(strh['dwRate']) / strh['dwScale']
vi.length = strh['dwLength'] / vi.fps
- vi.format = retval['fourcc']
self.video.append(vi)
return retval
-------------------------------------------------------------------------
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