示例#1
0
文件: flac.py 项目: esc777690/LGK-Hub
 def createFields(self):
     yield UInt16(self, "min_block_size", "The minimum block size (in samples) used in the stream")
     yield UInt16(self, "max_block_size", "The maximum block size (in samples) used in the stream")
     yield UInt24(self, "min_frame_size", "The minimum frame size (in bytes) used in the stream")
     yield UInt24(self, "max_frame_size", "The maximum frame size (in bytes) used in the stream")
     yield Bits(self, "sample_hertz", 20, "Sample rate in Hertz")
     yield Bits(self, "nb_channel", 3, "Number of channels minus one")
     yield Bits(self, "bits_per_sample", 5, "Bits per sample minus one")
     yield Bits(self, "total_samples", 36, "Total samples in stream")
     yield RawBytes(self, "md5sum", 16, "MD5 signature of the unencoded audio data")
示例#2
0
文件: flv.py 项目: esc777690/LGK-Hub
 def createFields(self):
     yield UInt8(self, "tag")
     yield UInt24(self, "size", "Content size")
     yield UInt24(self, "timestamp", "Timestamp in millisecond")
     yield NullBytes(self, "reserved", 4)
     size = self["size"].value
     if size:
         if self.parser:
             yield from self.parser(self, size)
         else:
             yield RawBytes(self, "content", size)
示例#3
0
 def createFields(self):
     yield UInt8(self, "version")
     yield UInt24(self, "flags")
     yield RawBytes(self, "scheme_type", 4)
     yield UInt32(self, "scheme_version")
     if self["flags"].value & 0x1:
         yield CString(self, "scheme_uri")
示例#4
0
    def createFields(self):
        yield UInt8(self, "version")
        yield UInt24(self, "flags")

        yield UInt32(self, "sample_count")
        for i in range(self["sample_count"].value):
            yield SampleEncryptionItem(self, "sample[]")
示例#5
0
def DecoderConfigDescriptor(self):
    yield UInt8(self, "objectTypeIndication")
    yield Bits(self, "streamType", 6)
    yield Bit(self, "upStream", 1)
    yield NullBits(self, "reserved", 1)
    yield UInt24(self, "bufferSizeDB")
    yield UInt32(self, "maxBitrate")
    yield UInt32(self, "avgBitrate")

    # TODO
    while not self.eof:
        yield Descriptor(self, "descr[]")
示例#6
0
    def createFields(self):
        yield UInt8(self, "version", "Version")
        yield UInt24(self, "flags")
        flags = self["flags"].value

        yield UInt32(self, "sample_count")
        if flags & 0x1:
            yield UInt32(self, "data_offset")
        if flags & 0x4:
            yield UInt32(self, "first_sample_flags")
        for i in range(self["sample_count"].value):
            yield TrackRunSample(self, "sample[]")
示例#7
0
    def createFields(self):
        # Header
        yield GUID(self, "name")
        yield UInt16(self, "integrity_check")
        yield Enum(UInt8(self, "type"), EFI_FV_FILETYPE)
        yield UInt8(self, "attributes")
        yield UInt24(self, "size")
        yield UInt8(self, "state")

        # Content
        while not self.eof:
            yield FileSection(self, "section[]")
示例#8
0
def parseTheoraHeader(parent):
    yield UInt8(parent, "version_major")
    yield UInt8(parent, "version_minor")
    yield UInt8(parent, "version_revision")
    yield UInt16(parent, "width", "Width*16 in pixel")
    yield UInt16(parent, "height", "Height*16 in pixel")

    yield UInt24(parent, "frame_width")
    yield UInt24(parent, "frame_height")
    yield UInt8(parent, "offset_x")
    yield UInt8(parent, "offset_y")

    yield UInt32(parent, "fps_num", "Frame per second numerator")
    yield UInt32(parent, "fps_den", "Frame per second denominator")
    yield UInt24(parent, "aspect_ratio_num", "Aspect ratio numerator")
    yield UInt24(parent, "aspect_ratio_den", "Aspect ratio denominator")

    yield UInt8(parent, "color_space")
    yield UInt24(parent, "target_bitrate")
    yield Bits(parent, "quality", 6)
    yield Bits(parent, "gp_shift", 5)
    yield Enum(Bits(parent, "pixel_format", 2), PIXEL_FORMATS)
    yield Bits(parent, "spare_config", 3)
示例#9
0
    def createFields(self):
        yield UInt8(self, "version", "Version")
        yield UInt24(self, "flags")
        flags = self["flags"].value

        yield UInt32(self, "track_ID")
        if flags & 0x1:
            yield UInt64(self, "base_data_offset")
        if flags & 0x2:
            yield UInt32(self, "sample_description_index")
        if flags & 0x8:
            yield UInt32(self, "default_sample_duration")
        if flags & 0x10:
            yield UInt32(self, "default_sample_size")
        if flags & 0x20:
            yield UInt32(self, "default_sample_flags")
示例#10
0
    def createFields(self):
        if 3 <= self["../ver_major"].value:
            # ID3 v2.3 and 2.4
            yield Enum(
                String(self, "tag", 4, "Tag", charset="ASCII", strip="\0"),
                ID3_Chunk.tag23_name)
            if 4 <= self["../ver_major"].value:
                yield ID3_Size(self, "size")  # ID3 v2.4
            else:
                yield UInt32(self, "size")  # ID3 v2.3

            yield Bit(self, "tag_alter", "Tag alter preservation")
            yield Bit(self, "file_alter", "Tag alter preservation")
            yield Bit(self, "rd_only", "Read only?")
            yield NullBits(self, "padding[]", 5)

            yield Bit(self, "compressed", "Frame is compressed?")
            yield Bit(self, "encrypted", "Frame is encrypted?")
            yield Bit(self, "group", "Grouping identity")
            yield NullBits(self, "padding[]", 5)
            size = self["size"].value
            is_compressed = self["compressed"].value
        else:
            # ID3 v2.2
            yield Enum(
                String(self, "tag", 3, "Tag", charset="ASCII", strip="\0"),
                ID3_Chunk.tag22_name)
            yield UInt24(self, "size")
            size = self["size"].value - self.current_size // 8 + 6
            is_compressed = False

        if size:
            cls = None
            if not (is_compressed):
                tag = self["tag"].value
                if tag in ID3_Chunk.handler:
                    cls = ID3_Chunk.handler[tag]
                elif tag[0] == "T":
                    cls = ID3_StringCharset
            if cls:
                yield cls(self, "content", "Content", size=size * 8)
            else:
                yield RawBytes(self, "content", size, "Raw data content")
示例#11
0
文件: flac.py 项目: esc777690/LGK-Hub
    def createFields(self):
        yield Bit(self, "last_metadata_block", "True if this is the last metadata block")
        yield Enum(Bits(self, "block_type", 7, "Metadata block header type"), self.BLOCK_TYPE_DESC)
        yield UInt24(self, "metadata_length", "Length of following metadata in bytes (doesn't include this header)")

        block_type = self["block_type"].value
        size = self["metadata_length"].value
        if not size:
            return
        try:
            handler = self.BLOCK_TYPES[block_type][2]
        except KeyError:
            handler = None
        if handler:
            yield handler(self, "content", size=size * 8)
        elif self["block_type"].value == 1:
            yield NullBytes(self, "padding", size)
        else:
            yield RawBytes(self, "rawdata", size)
示例#12
0
    def createFields(self):
        # Header
        yield UInt24(self, "size")
        yield Enum(UInt8(self, "type"), EFI_SECTION_TYPE)
        section_type = self["type"].value

        if section_type == EFI_SECTION_COMPRESSION:
            yield UInt32(self, "uncomp_len")
            yield Enum(UInt8(self, "comp_type"), self.COMPRESSION_TYPE)
        elif section_type == EFI_SECTION_FREEFORM_SUBTYPE_GUID:
            yield GUID(self, "sub_type_guid")
        elif section_type == EFI_SECTION_GUID_DEFINED:
            yield GUID(self, "section_definition_guid")
            yield UInt16(self, "data_offset")
            yield UInt16(self, "attributes")
        elif section_type == EFI_SECTION_USER_INTERFACE:
            yield CString(self, "file_name", charset="UTF-16-LE")
        elif section_type == EFI_SECTION_VERSION:
            yield UInt16(self, "build_number")
            yield CString(self, "version", charset="UTF-16-LE")

        # Content
        content_size = (self.size - self.current_size) // 8
        if content_size == 0:
            return

        if section_type == EFI_SECTION_COMPRESSION:
            compression_type = self["comp_type"].value
            if compression_type == 1:
                while not self.eof:
                    yield RawBytes(self, "compressed_content", content_size)
            else:
                while not self.eof:
                    yield FileSection(self, "section[]")
        elif section_type == EFI_SECTION_FIRMWARE_VOLUME_IMAGE:
            yield FirmwareVolume(self, "firmware_volume")
        else:
            yield RawBytes(
                self, "content", content_size,
                EFI_SECTION_TYPE.get(self["type"].value,
                                     "Unknown Section Type"))
示例#13
0
文件: midi.py 项目: esc777690/LGK-Hub
def parseTempo(parser, size):
    yield textHandler(
        UInt24(parser, "microsec_quarter", "Microseconds per quarter note"),
        formatTempo)