Esempio n. 1
0
    def extractAVI(self, headers, **kwargs):
        audio_index = 1
        for stream in headers.array("stream"):
            if "stream_hdr/stream_type" not in stream:
                continue
            stream_type = stream["stream_hdr/stream_type"].value
            if stream_type == "vids":
                if "stream_hdr" in stream:
                    meta = Metadata(self)
                    self.extractAVIVideo(stream["stream_hdr"], meta)
                    self.addGroup("video", meta, "Video stream")
            elif stream_type == "auds":
                if "stream_fmt" in stream:
                    meta = Metadata(self)
                    self.extractAVIAudio(stream["stream_fmt"], meta)
                    self.addGroup("audio[%u]" % audio_index, meta,
                                  "Audio stream")
                    audio_index += 1
        if "avi_hdr" in headers:
            self.useAviHeader(headers["avi_hdr"])

        # Compute global bit rate
        if self.has("duration") and "/movie/size" in headers:
            self.bit_rate = float(
                headers["/movie/size"].value) * 8 / timedelta2seconds(
                    self.get('duration'))

        # Video has index?
        scan_index = (True, kwargs['scan_index'])['scan_index' in kwargs]
        if scan_index and "/index" in headers:
            self.comment = _("Has audio/video index (%s)") \
                           % humanFilesize(headers["/index"].size // 8)
Esempio n. 2
0
 def createDescription(self):
     if self.isEmpty():
         desc = "(terminator, empty header)"
     else:
         filename = self["name"].value
         if self["prefix"].value:
             filename = self["prefix"].value + '/' + filename
         filesize = humanFilesize(self.getOctal("size"))
         desc = "(%s: %s, %s)" % \
                (filename, self["type"].display, filesize)
     return "Tar File " + desc
Esempio n. 3
0
 def __init__(self,
              parent,
              name,
              length,
              decompressor,
              description=None,
              parser=None,
              filename=None,
              mime_type=None,
              parser_class=None):
     if filename:
         if not isinstance(filename, unicode):
             filename = makePrintable(filename, "ISO-8859-1")
         if not description:
             description = 'File "%s" (%s)' % (filename,
                                               humanFilesize(length))
     Bytes.__init__(self, parent, name, length, description)
     self.setupInputStream(decompressor, parser, filename, mime_type,
                           parser_class)
Esempio n. 4
0
    def checkPattern(self):
        if not (config.check_padding_pattern):
            return False
        if self.pattern is None:
            return False

        if self.MAX_SIZE < self._size // 8:
            self.info("only check first %s of padding" %
                      humanFilesize(self.MAX_SIZE))
            content = self._parent.stream.readBytes(self.absolute_address,
                                                    self.MAX_SIZE)
        else:
            content = self.value
        index = 0
        pattern_len = len(self.pattern)
        while index < len(content):
            if content[index:index + pattern_len] != self.pattern:
                self.warning("padding contents doesn't look normal"
                             " (invalid pattern at byte %u)!" % index)
                return False
            index += pattern_len
        return True
Esempio n. 5
0
 def __init__(self, parent, name, description=None):
     FieldSet.__init__(self, parent, name, description)
     self._size = (self["size"].value + 3 * 4) * 8
     if MAX_CHUNK_SIZE < (self._size // 8):
         raise ParserError("PNG: Chunk is too big (%s)" %
                           humanFilesize(self._size // 8))
     tag = self["tag"].value
     self.desc_func = None
     self.value_func = None
     if tag in self.TAG_INFO:
         self._name, self.parse_func, desc, value_func = self.TAG_INFO[tag]
         if value_func:
             self.value_func = value_func
             self.createValue = self.createValueFunc
         if desc:
             if isinstance(desc, str):
                 self._description = desc
             else:
                 self.desc_func = desc
     else:
         self._description = ""
         self.parse_func = None
Esempio n. 6
0
    def __init__(self, parent, name, length, description=None,
                 parser=None, filename=None, mime_type=None, parser_class=None):
        if filename:
            if not isinstance(filename, unicode):
                filename = makePrintable(filename, "ISO-8859-1")
            if not description:
                description = 'File "%s" (%s)' % (filename, humanFilesize(length))
        Bytes.__init__(self, parent, name, length, description)

        def createInputStream(cis, **args):
            tags = args.setdefault("tags", [])
            if parser_class:
                tags.append(("class", parser_class))
            if parser is not None:
                tags.append(("id", parser.PARSER_TAGS["id"]))
            if mime_type:
                tags.append(("mime", mime_type))
            if filename:
                tags.append(("filename", filename))
            return cis(**args)

        self.setSubIStream(createInputStream)
Esempio n. 7
0
 def createDescription(self):
     return "%d blocks of %s" % (self["num_blocks"].value,
                                 humanFilesize(self["len"].value))
Esempio n. 8
0
 def createDisplay(self):
     if not self["value"].hasValue():
         return None
     if self._name in ("length", "piece_length"):
         return humanFilesize(self.value)
     return FieldSet.createDisplay(self)