Author: tack
Date: Wed Apr 26 00:02:26 2006
New Revision: 1506
Modified:
trunk/metadata/src/video/mkvinfo.py
Log:
Fix matroska parser; clean up some of the code.
Modified: trunk/metadata/src/video/mkvinfo.py
==============================================================================
--- trunk/metadata/src/video/mkvinfo.py (original)
+++ trunk/metadata/src/video/mkvinfo.py Wed Apr 26 00:02:26 2006
@@ -99,14 +99,14 @@
def build_entity(self, inbuf):
self.compute_id(inbuf)
- if ( self.id_len == 0):
+ if self.id_len == 0:
log.debug("EBML entity not found, bad file format")
raise mediainfo.KaaMetadataParseError()
self.entity_len = self.compute_len(inbuf[self.id_len:])
# Obviously, the segment can be very long (ie the whole file, so we
# truncate it at the read buffer size
- if (self.entity_len == -1):
+ if self.entity_len == -1:
self.entity_data = inbuf[self.id_len+self.len_size:]
self.entity_len = len(self.entity_data) # Set the remaining size
else:
@@ -129,52 +129,50 @@
def compute_id(self, inbuf):
first = ord(inbuf[0])
self.id_len = 0
- if (first & 0x80):
+ if first & 0x80:
self.id_len = 1
self.entity_id = first
- elif (first & 0x40):
+ elif first & 0x40:
self.id_len = 2
self.entity_id = ord(inbuf[0])<<8 | ord(inbuf[1])
- elif (first & 0x20):
+ elif first & 0x20:
self.id_len = 3
self.entity_id = (ord(inbuf[0])<<16) | (ord(inbuf[1])<<8) | \
(ord(inbuf[2]))
- elif (first & 0x10):
+ elif first & 0x10:
self.id_len = 4
self.entity_id = (ord(inbuf[0])<<24) | (ord(inbuf[1])<<16) | \
(ord(inbuf[2])<<8) | (ord(inbuf[3]))
self.entity_str = inbuf[0:self.id_len]
- return
def compute_len(self, inbuf):
# Here we just handle the size up to 4 bytes
# The size above will be truncated by the read buffer itself
first = ord(inbuf[0])
- if (first & 0x80):
+ if first & 0x80:
self.len_size = 1
return first - 0x80
- if (first & 0x40):
+ if first & 0x40:
self.len_size = 2
(c1,c2) = unpack('BB',inbuf[:2])
return ((c1-0x40)<<8) | (c2)
- if (first & 0x20):
+ if first & 0x20:
self.len_size = 3
(c1, c2, c3) = unpack('BBB',inbuf[:3])
return ((c1-0x20)<<16) | (c2<<8) | (c3)
- if (first & 0x10):
+ if first & 0x10:
self.len_size = 4
- (len) = unpack('!I',inbuf[:4])
- return len
- if (first & 0x08):
+ return unpack('!I',inbuf[:4])
+ if first & 0x08:
self.len_size = 5
return -1
- if (first & 0x04):
+ if first & 0x04:
self.len_size = 6
return -1
- if (first & 0x02):
+ if first & 0x02:
self.len_size = 7
return -1
- if (first & 0x01):
+ if first & 0x01:
self.len_size = 8
return -1
@@ -198,7 +196,7 @@
return self.entity_len
def get_total_len(self):
- return self.entity_len+self.id_len+self.len_size
+ return self.entity_len + self.id_len+self.len_size
class MkvInfo(mediainfo.AVInfo):
@@ -216,7 +214,7 @@
# Check the Matroska header
header = EbmlEntity(buffer)
- if ( header.get_id() != MATROSKA_HEADER_ID ):
+ if header.get_id() != MATROSKA_HEADER_ID:
raise mediainfo.KaaMetadataParseError()
log.debug("HEADER ID found %08X" % header.get_id() )
@@ -224,8 +222,8 @@
self.type = 'Matroska'
# Now get the segment
segment = EbmlEntity(buffer[header.get_total_len():])
- if ( segment.get_id() == MATROSKA_SEGMENT_ID):
- log.debug("SEGMENT ID found %08X" % segment.get_id() )
+ if segment.get_id() == MATROSKA_SEGMENT_ID:
+ log.debug("SEGMENT ID found %08X" % segment.get_id())
segtab = self.process_one_level(segment)
l = segtab[MATROSKA_SEGMENT_INFO_ID]
seginfotab = self.process_one_level(l)
@@ -245,13 +243,13 @@
except (ZeroDivisionError, KeyError, IndexError):
pass
try:
- log.debug ("Searching for id : %X" % MATROSKA_TRACKS_ID)
+ log.debug("Searching for id : %X" % MATROSKA_TRACKS_ID)
entity = segtab[MATROSKA_TRACKS_ID]
self.process_tracks(entity)
except (ZeroDivisionError, KeyError, IndexError):
log.debug("TRACKS ID not found !!" )
else:
- log.debug("SEGMENT ID not found %08X" % segment.get_id() )
+ log.debug("SEGMENT ID not found %08X" % segment.get_id())
def process_tracks(self, tracks):
@@ -282,8 +280,8 @@
type = tabelem[MATROSKA_TRACK_TYPE_ID]
mytype = type.get_value()
log.debug ("Track type found with UID %d" % mytype)
- if (mytype == MATROSKA_VIDEO_TRACK ):
- log.debug("VIDEO TRACK found !!" )
+ if mytype == MATROSKA_VIDEO_TRACK:
+ log.debug("VIDEO TRACK found !!")
vi = mediainfo.VideoInfo()
try:
elem = tabelem[MATROSKA_CODEC_ID]
@@ -310,8 +308,8 @@
log.debug("No other info about video track !!!")
self.video.append(vi)
- elif (mytype == MATROSKA_AUDIO_TRACK ):
- log.debug("AUDIO TRACK found !!" )
+ elif mytype == MATROSKA_AUDIO_TRACK:
+ log.debug("AUDIO TRACK found !!")
ai = mediainfo.AudioInfo()
try:
elem = tabelem[MATROSKA_TRACK_LANGUAGE_ID]
@@ -329,15 +327,15 @@
ai.codec = "Unknown"
try:
ainfo = tabelem[MATROSKA_AUDIO_SETTINGS_ID]
- audtab = self.process_one_level(vinfo)
+ audtab = self.process_one_level(ainfo)
as = audtab[MATROSKA_AUDIO_SAMPLERATE_ID].get_value()
- ai.samplerate = unpack('!f', as)[0]
+ ai.samplerate = unpack('!f', pack("!I", as))[0]
ai.channels = audtab[MATROSKA_AUDIO_CHANNELS_ID].get_value()
except (KeyError, IndexError):
log.debug("No other info about audio track !!!")
self.audio.append(ai)
- elif (mytype == MATROSKA_SUBTITLES_TRACK):
+ elif mytype == MATROSKA_SUBTITLES_TRACK:
try:
elem = tabelem[MATROSKA_TRACK_LANGUAGE_ID]
language = elem.get_data()
-------------------------------------------------------
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