Author: tack
Date: Sat Apr 29 22:36:11 2006
New Revision: 1529
Modified:
trunk/metadata/src/video/mkvinfo.py
Log:
Fix bug with certain floating point values; fix bug with durations not
being computed correctly in all cases; fix bug with dates (they are
relative start of millenium according to spec)
Modified: trunk/metadata/src/video/mkvinfo.py
==============================================================================
--- trunk/metadata/src/video/mkvinfo.py (original)
+++ trunk/metadata/src/video/mkvinfo.py Sat Apr 29 22:36:11 2006
@@ -197,6 +197,13 @@
def get_value(self):
return self.value
+ def get_float_value(self):
+ if len(self.entity_data) == 4:
+ return unpack('!f', self.entity_data)[0]
+ elif len(self.entity_data) == 8:
+ return unpack('!d', self.entity_data)[0]
+ return 0.0
+
def get_data(self):
return self.entity_data
@@ -220,6 +227,7 @@
def __init__(self, file):
mediainfo.AVInfo.__init__(self)
self.samplerate = 1
+ self.media = 'audio'
buffer = file.read(80000)
if len(buffer) == 0:
@@ -244,14 +252,13 @@
try:
# Express scalecode in ms instead of ns
# Rescale it to the second
- scalecode = seginfotab[MATROSKA_TIMECODESCALE_ID].get_value()
/ 1000.0
+ scalecode = seginfotab[MATROSKA_TIMECODESCALE_ID].get_value()
except (ZeroDivisionError, KeyError, IndexError):
- scalecode = 1000.0
+ scalecode = 1000000.0
try:
- md = seginfotab[MATROSKA_DURATION_ID].get_data()
- duration = unpack('!f', md)[0]
- self.length = duration / scalecode
+ duration = seginfotab[MATROSKA_DURATION_ID].get_float_value()
+ self.length = duration * scalecode / 1000000000.0
except (ZeroDivisionError, KeyError, IndexError):
pass
@@ -260,6 +267,8 @@
if MATROSKA_DATE_UTC_ID in seginfotab:
self.date = unpack('!q',
seginfotab[MATROSKA_DATE_UTC_ID].get_data())[0] / 10.0**9
+ # Date is offset 2001-01-01 00:00:00 (timestamp 978307200.0)
+ self.date += 978307200.0
try:
log.debug("Searching for id : %X" % MATROSKA_TRACKS_ID)
@@ -341,6 +350,7 @@
vidtab[MATROSKA_DISPLAY_VID_HEIGHT_ID].get_value()
except Exception, e:
log.debug("No other info about video track !!!")
+ self.media = 'video'
self.video.append(track)
elif mytype == MATROSKA_AUDIO_TRACK:
@@ -358,7 +368,7 @@
try:
ainfo = tabelem[MATROSKA_AUDIO_SETTINGS_ID]
audtab = self.process_one_level(ainfo)
- track.samplerate = unpack('!f',
audtab[MATROSKA_AUDIO_SAMPLERATE_ID].get_data())[0]
+ track.samplerate =
audtab[MATROSKA_AUDIO_SAMPLERATE_ID].get_float_value()
track.channels = audtab[MATROSKA_AUDIO_CHANNELS_ID].get_value()
except (KeyError, IndexError):
log.debug("No other info about audio track !!!")
-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog