def __init__(self, f: IO):
        """
        Init
        """
        super().__init__()

        self.reserved: int = f.read(1)
        self.logger.debug(f"Reserved: {self.reserved}")

        self.mark_type: MarkType = MarkType(
            read_u8(f, endianess=Endianess.BIG_ENDIAN))
        self.logger.debug(f"Mark Type: {self.mark_type}")

        self.ref_to_play_item_id: int = read_u16(
            f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Ref To Play Item ID: {self.ref_to_play_item_id}")

        self.mark_timestamp: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Mark Timestamp: {self.mark_timestamp}")

        self.entry_esp_id: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Entry ESP Id: {self.entry_esp_id}")

        self.duration: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Duration: {self.duration}")
Beispiel #2
0
    def __init__(self, f: IO):
        """
        Init
        """
        super().__init__()

        self.length: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Length: {self.length}")

        self.reserved: bytes = f.read(2)
        self.logger.debug(f"Reserved: {hex_log_str(self.reserved)}")

        self.number_of_play_items: int = read_u16(
            f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Number of Play Items: {self.number_of_play_items}")

        self.number_of_sub_paths: int = read_u16(
            f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Number of Sub Paths: {self.number_of_sub_paths}")

        self.play_items: List[PlayItem] = list()
        for index in range(self.number_of_play_items):
            self.logger.debug(f"Reading Play Item {index}")
            self.play_items.append(PlayItem(f))

        self.sub_paths: List[SubPath] = list()
        for index in range(self.number_of_sub_paths):
            self.logger.debug(f"Reading Sub Path {index}")
            self.sub_paths.append(SubPath(f))
Beispiel #3
0
    def __init__(self, f: IO):
        super().__init__(f)

        #: PSARC Minor and Major File Versions
        self.version_major: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
        self.version_minor: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.info(
            f'Version: v{self.version_major}.{self.version_minor}')

        #: PSARC Compression Type
        self.compression_type: CompressionType = CompressionType(f.read(4))
        self.logger.info(f'Compression Type: {self.compression_type}')

        #: PSARC TOC Length
        self.toc_length: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.info(f'TOC Length: {self.toc_length}')

        #: PSARC TOC Entry Size
        self.toc_entry_size: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.info(f'TOC Entry Size: {self.toc_entry_size}')

        #: PSARC TOC Entry Count
        self.toc_entry_count: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.info(f'TOC Entries: {self.toc_entry_count}')

        #: PSARC Block Size
        self.block_size: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.info(f'Block Size: {self.block_size}')

        #: PSARC Archive Path Type
        # TODO: F*****g use this actually
        self.archive_path_type: ArchivePathType = ArchivePathType(
            read_u32(f, endianess=Endianess.BIG_ENDIAN))
        self.logger.info(f'Archive Path Type: {self.archive_path_type}')
Beispiel #4
0
    def __init__(self, f: IO):
        """
        Init
        """
        super().__init__()

        self.length: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Length: {self.length}")

        self.clip_information_file_name: str = f.read(5).decode("ASCII")
        self.logger.debug(
            f"Clip Information File Name: {self.clip_information_file_name}")

        self.clip_codec_identifier: str = f.read(4).decode("ASCII")
        self.logger.debug(
            f"Clip Codec Identifier: {self.clip_codec_identifier}")

        self.flags_1: bytes = f.read(2)
        self.logger.debug(f"Flags 1: {hex_log_str(self.flags_1)}")

        self.is_multi_angle: bool = ((self.flags_1[1] & 0b00010000) >> 4) == 1
        self.logger.debug(f"Is Multi Angle: {self.is_multi_angle}")

        self.connection_condition: int = self.flags_1[1] & 0b00001111
        self.logger.debug(f"Connection Condition: {self.connection_condition}")

        self.ref_to_stc_id: int = read_u8(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Reference to STC ID: {self.ref_to_stc_id}")

        self.in_time: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"In Time: {self.in_time}")

        self.out_time: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Out Time: {self.out_time}")

        self.u0_mask_table: U0MaskTable = U0MaskTable(f)

        self.flags_2: bytes = f.read(1)
        self.logger.debug(f"Flags 2: {hex_log_str(self.flags_2)}")

        self.random_access_flag: bool = (
            (self.flags_2[0] & 0b10000000) >> 7) == 1
        self.logger.debug(f"Random Access Flag: {self.random_access_flag}")

        self.still_mode: int = read_u8(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Still Mode: {self.still_mode}")

        if self.still_mode == 0x01:
            self.still_time: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
            self.logger.debug(f"Still Time: {self.still_time}")
        else:
            self.reserved: bytes = f.read(2)
            self.logger.debug(f"Reserved: {hex_log_str(self.reserved)}")

        if self.is_multi_angle:
            self.multi_angle_entries: MultiAngleEntries = MultiAngleEntries(f)

        self.stn_table: StnTable = StnTable(f)
Beispiel #5
0
    def __init__(self, f: IO):
        """
        Init
        """
        super().__init__(f)

        if self.object_type == ObjectType.HDMV:
            self.object_flags: bytes = f.read(2)
            self.logger.debug(f"Object Flags: {hexlify(self.flags)}")

            assert (self.object_flags[0] & 0b11000000) >> 6 == 0b01

            self.mobj_id_ref: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
            """
            Represents the ID of a movie indexes used in the top menu
            """
            self.logger.debug(f"Movie Object Id Reference: {self.mobj_id_ref}")

            self.reserved: bytes = f.read(4)
            self.logger.debug(f"Reserved: {hexlify(self.reserved)}")
        elif self.object_type == ObjectType.BDJ:
            self.object_flags: bytes = f.read(2)
            self.logger.debug(f"Object Flags: {hexlify(self.flags)}")

            assert (self.object_flags[0] & 0b11000000) >> 6 == 0b11

            self.bdjo_file_name: int = f.read(5).decode("ASCII")
            """
            Represents the file name of a BD-J indexes used in the top menu
            """
            self.logger.debug(f"BD-J Object File Name: {self.bdjo_file_name}")

            self.reserved: bytes = f.read(1)
            self.logger.debug(f"Reserved: {hexlify(self.reserved)}")
Beispiel #6
0
    def __init__(self, f: IO):
        """
        Init
        """
        super().__init__()

        self.spn_program_sequence_start: int = read_u32(
            f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(
            f"SPN Program Sequence Start: {self.spn_program_sequence_start}")

        self.program_map_pid: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Program Map PID: {self.program_map_pid}")

        self.number_of_streams_in_ps: int = read_u8(
            f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(
            f"Number of Streams in PS: {self.number_of_streams_in_ps}")

        self.number_of_groups_in_ps: int = read_u8(
            f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(
            f"Number of Groups in PS: {self.number_of_groups_in_ps}")

        self.streams: List[StreamInPS] = list()
        for stream_in_ps_index in range(self.number_of_streams_in_ps):
            self.logger.debug(f"Reading Stream in PS {stream_in_ps_index}")
            self.streams.append(StreamInPS(f))
Beispiel #7
0
    def __init__(self, f: IO):
        super().__init__()
        self.f: IO = f

        self.entirety_data_offset: int = read_u32(
            f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Entirety Data Offset: {self.entirety_data_offset}")

        self.entirety_data_size: int = read_u32(f,
                                                endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Entirety Data Size: {self.entirety_data_size}")

        self.flags: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Flags: {hex(self.flags)}")

        self.unk_1: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        constant_check(self.logger, "Unknown 1", self.unk_1, 0x00)

        self.unk_2: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.info(f'Unknown 2: {self.unk_2}')

        self.unk_3: bytes = f.read(0x8)
        self.logger.info(f'Unknown 3: {hexlify(self.unk_3)}')

        self.sha_256_hash: bytes = f.read(0x20)
        self.logger.info(f'SHA-256 Hash: {hexlify(self.sha_256_hash)}')
    def __init__(self, f: IO):
        """
        Init
        """
        super().__init__()

        self.length: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Length: {self.length}")

        self.clip_information_file_name: str = f.read(5).decode("ASCII")
        self.logger.debug(
            f"Clip Information File Name: {self.clip_information_file_name}")

        self.clip_codec_identifier: str = f.read(4).decode("ASCII")
        self.logger.debug(
            f"Clip Codec Identifier: {self.clip_information_file_name}")

        self.flags_1: bytes = f.read(2)
        self.logger.debug(f"Flags 1: {hex_log_str(self.flags_1)}")

        self.connection_condition: int = (self.flags_1[1] & 0b00011110) >> 1
        self.logger.debug(f"Connection Condition: {self.connection_condition}")

        self.is_multi_clip_entries: bool = (self.flags_1[1] & 0b00000001) == 1
        self.logger.debug(
            f"Is Multi Clip Entries: {self.is_multi_clip_entries}")

        self.ref_to_stc_id: int = read_u8(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Reference to STC ID: {self.ref_to_stc_id}")

        self.in_time: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"In Time: {self.in_time}")

        self.out_time: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Out Time: {self.out_time}")

        self.sync_play_item_id: int = read_u16(f,
                                               endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Sync Play Item ID: {self.sync_play_item_id}")

        self.sync_start_pts_of_play_item: int = read_u32(
            f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(
            f"Sync Start PTS of Play Item: {self.sync_start_pts_of_play_item}")

        if self.is_multi_clip_entries:
            self.multi_clip_entries: MultiClipEntries = MultiClipEntries(f)
Beispiel #9
0
    def __init__(self, f: IO):
        """
        Init
        """
        super().__init__()

        self.id1: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"ID1: {self.id1}")

        self.id2: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"ID2: {self.id2}")

        self.ext_data_start_address: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Ext Data Start Address: {self.ext_data_start_address}")

        self.ext_data_length: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Ext Data Length: {self.ext_data_length}")
    def __init__(self, f: IO):
        """
        Init
        """
        super().__init__()

        self.stream_id: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Stream Id: {self.stream_id}")

        self.stream: Stream = Stream(f)
Beispiel #11
0
    def __init__(self, f: IO):
        """
        Init
        """
        super().__init__()

        self.length: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Length: {self.length}")

        self.reserved: bytes = f.read((256 - 16) // 8)
        self.logger.debug(f"Reserved: {hex_log_str(self.reserved_1)}")
Beispiel #12
0
    def __init__(self, f: IO):
        """
        Init
        """
        super().__init__()

        self.length: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Length: {self.length}")

        self.number_of_playlist_mark_items: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Number of Playlist Mark Items: {self.number_of_playlist_mark_items}")

        self.playlist_mark_items: List[PlaylistMarkItem] = list()
        for index in range(self.number_of_playlist_mark_items):
            self.logger.debug(f"Reading Playlist Mark Item {index}")
            self.playlist_mark_items.append(PlaylistMarkItem(f))
Beispiel #13
0
    def __init__(self, f: IO):
        super().__init__()
        self.f: IO = f

        self.unknown_data_offset: int = read_u32(
            f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Unknown Data Offset: {self.unknown_data_offset}")

        self.unknown_data_size: int = read_u16(f,
                                               endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Unknown Data Size: {self.unknown_data_size}")

        self.unknown: bytes = f.read(0x20)
        self.logger.info(f'Unknown: {hexlify(self.unknown)}')

        self.sha_256_hash: bytes = f.read(0x20)
        self.logger.info(f'SHA-256 Hash: {hexlify(self.sha_256_hash)}')
Beispiel #14
0
    def __init__(self, f: IO):
        """
        Init
        """
        super().__init__()

        self.pcrp_id: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"PCRP Id: {self.pcrp_id}")

        self.spn_stc_start: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"SPN STC Start: {self.spn_stc_start}")

        self.presentation_start_time: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Presentation Start Time: {self.presentation_start_time}")

        self.presentation_end_time: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Presentation End Time: {self.presentation_end_time}")
Beispiel #15
0
    def __init__(self, f: IO):
        """
        Init
        """
        super().__init__(f)

        self.access_type: AccessType = AccessType((self.flags[0]
                                                   & 0b00110000) >> 4)
        self.logger.debug(f"Access Type: {self.access_type}")

        if self.object_type == ObjectType.HDMV:
            self.object_flags: bytes = f.read(2)
            self.logger.debug(f"Object Flags: {hexlify(self.flags)}")

            self.hdmv_title_playback_type: HDMVTitlePlaybackType = HDMVTitlePlaybackType(
                (self.object_flags[0] & 0b11000000) >> 6)
            self.logger.debug(
                f"HDMV Title Playback Type: {self.hdmv_title_playback_type}")

            self.mobj_id_ref: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
            """
            Represents the ID of a movie indexes used in the top menu
            """
            self.logger.debug(f"Movie Object Id Reference: {self.mobj_id_ref}")

            self.reserved: bytes = f.read(4)
            self.logger.debug(f"Reserved: {hexlify(self.reserved)}")
        elif self.object_type == ObjectType.BDJ:
            self.object_flags: bytes = f.read(2)
            self.logger.debug(f"Object Flags: {hexlify(self.flags)}")

            self.bdj_title_playback_type: BDJTitlePlaybackType = BDJTitlePlaybackType(
                (self.object_flags[0] & 0b11000000) >> 6)
            self.logger.debug(
                f"BD-J Object Playback Type: {self.bdj_title_playback_type}")

            self.bdjo_file_name: int = f.read(5).decode("ASCII")
            """
            Represents the file name of a BD-J indexes used in the top menu
            """
            self.logger.debug(f"BD-J Object File Name: {self.bdjo_file_name}")

            self.reserved: bytes = f.read(1)
            self.logger.debug(f"Reserved: {hexlify(self.reserved)}")
Beispiel #16
0
    def __init__(self, f: IO):
        super().__init__()

        #: Key Offset (relative to key_table_offset)
        self.key_offset: int = read_u16(f, Endianess.LITTLE_ENDIAN)
        self.logger.debug(f'Key Offset: {self.key_offset}')

        #: Data Type
        self.data_type: DataType = DataType(f.read(2))
        self.logger.debug(f'Data Type: {self.data_type}')

        #: Data Length (used bytes)
        self.data_length: int = read_u32(f, Endianess.LITTLE_ENDIAN)
        self.logger.debug(f'Data Length: {self.data_length}')

        #: Data Max Length
        self.data_max_length: int = read_u32(f, Endianess.LITTLE_ENDIAN)
        self.logger.debug(f'Data Max Length: {self.data_max_length}')

        #: Data Offset (relative to data_table_offset)
        self.data_offset: int = read_u32(f, Endianess.LITTLE_ENDIAN)
        self.logger.debug(f'Data Offset: {self.data_offset}')
Beispiel #17
0
    def __init__(self, f: IO):
        super().__init__()
        self.f: IO = f

        self.param_offset: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Param Offset: {self.param_offset}")

        self.param_size: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Param Size: {self.param_size}")

        self.unknown_int: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Unknown Int: {self.unknown_int}")

        #: May be PSP2_SYSTEM_VER
        self.psp2_disp_version: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"PSP 2 Disp Version: {self.unknown_int}")

        self.unknown: bytes = f.read(0x08)
        constant_check(self.logger, "Unknown", self.unknown, bytes([0x00] * 8))

        self.sha_256_hash: bytes = f.read(0x20)
        self.logger.info(f'SHA-256 Hash: {hexlify(self.sha_256_hash)}')
Beispiel #18
0
    def __init__(self, f: IO):
        """
        Init
        """
        super().__init__()

        self.length: int = read_u32(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Length: {self.length}")

        self.first_playback_object: FirstPlaybackObject = FirstPlaybackObject(
            f)

        self.top_menu_object: TopMenuObject = TopMenuObject(f)

        self.number_of_titles: int = read_u16(f,
                                              endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Number of Titles: {self.number_of_titles}")

        self.titles: List[TitleObject] = list()
        for title_index in range(self.number_of_titles):
            self.logger.debug(f"Reading Title Object {title_index}")
            self.titles.append(TitleObject(f))
Beispiel #19
0
    def __init__(self, f: IO):
        """
        Init
        """
        super().__init__(f)

        self.length: int = read_u8(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Length: {self.length}")

        current_position: int = f.tell()
        self.logger.debug(f"Current Position: {current_position}")

        self.stream_type: StreamType = StreamType(read_u8(f, endianess=Endianess.BIG_ENDIAN))
        self.logger.debug(f"Stream Type: {self.stream_type}")

        if self.stream_type == StreamType.USED_BY_PLAY_ITEM:
            self.pid: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
            self.logger.debug(f"PID: {self.pid}")

        elif self.stream_type == StreamType.USED_BY_SUB_PATH_TYPE_23456:
            self.sub_path_id: int = read_u8(f, endianess=Endianess.BIG_ENDIAN)
            self.logger.debug(f"Sub Path ID: {self.sub_path_id}")

            self.sub_clip_id: int = read_u8(f, endianess=Endianess.BIG_ENDIAN)
            self.logger.debug(f"Sub Clip ID: {self.sub_clip_id}")

            self.pid: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
            self.logger.debug(f"PID: {self.pid}")
        elif self.stream_type == StreamType.USED_BY_SUB_PATH_TYPE_7:
            self.sub_path_id: int = read_u8(f, endianess=Endianess.BIG_ENDIAN)
            self.logger.debug(f"Sub Path ID: {self.sub_path_id}")

            self.pid: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
            self.logger.debug(f"PID: {self.pid}")

        self.logger.debug(f"Seeking to current_position + length")
        self.seek(current_position + self.length)

        self.attributes_length: int = read_u8(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Attributes Length: {self.attributes_length}")

        current_position: int = f.tell()
        self.logger.debug(f"Current Position: {current_position}")

        self.coding_type: CodingType = CodingType(read_u8(f, endianess=Endianess.BIG_ENDIAN))
        self.logger.debug(f"Coding Type: {self.coding_type}")

        if self.coding_type in [
            CodingType.MPEG1_VIDEO_PRIMARY_SECONDARY,
            CodingType.MPEG2_VIDEO_PRIMARY_SECONDARY,
            CodingType.MPEG4_AVC_VIDEO_PRIMARY_SECONDARY,
            CodingType.MPEG4_MVC_VIDEO_PRIMARY_SECONDARY,
            CodingType.VC1_VIDEO_PRIMARY_SECONDARY
        ]:
            self.data: int = read_u8(f, endianess=Endianess.BIG_ENDIAN)
            self.logger.debug(f"Data: {self.data}")

            self.format: VideoFormat = VideoFormat((self.data & 0b11110000) >> 4)
            self.logger.debug(f"Video Format: {self.format}")

            self.rate: FrameRate = FrameRate(self.data & 0b00001111)
            self.logger.debug(f"Frame Rate: {self.rate}")
        elif self.coding_type in [
            CodingType.HEVC_VIDEO_PRIMARY_SECONDARY
        ]:
            self.data: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
            self.logger.debug(f"Data: {self.data}")

            self.format: VideoFormat = VideoFormat((self.data & 0b1111000000000000) >> 12)
            self.logger.debug(f"Video Format: {self.format}")

            self.rate: FrameRate = FrameRate((self.data & 0b0000111100000000) >> 8)
            self.logger.debug(f"Frame Rate: {self.rate}")

            self.dynamic_range_type: DynamicRangeType = DynamicRangeType((self.data & 0b11110000) >> 8)
            self.logger.debug(f"Dynamic Range Type: {self.dynamic_range_type}")

            self.color_space: ColorSpace = ColorSpace((self.data & 0b00001111))
            self.logger.debug(f"Frame Rate: {self.color_space}")
        elif self.coding_type in [
            CodingType.MPEG1_AUDIO_PRIMARY_SECONDARY,
            CodingType.MPEG2_AUDIO_PRIMARY_SECONDARY,
            CodingType.LPCM_AUDIO_PRIMARY,
            CodingType.DOLBY_DIGITAL_AUDIO_PRIMARY,
            CodingType.DTS_AUDIO_PRIMARY,
            CodingType.DOLBY_DIGITAL_TRUEHD_AUDIO_PRIMARY,
            CodingType.DOLBY_DIGITAL_PLUS_AUDIO_PRIMARY,
            CodingType.DTS_HD_HIGH_RESOLUTION_AUDIO_PRIMARY,
            CodingType.DTS_HD_MASTER_AUDIO_AUDIO_PRIMARY,
            CodingType.DOLBY_DIGITAL_PLUS_AUDIO_SECONDARY,
            CodingType.DTS_HD_AUDIO_SECONDARY
        ]:
            self.data: int = read_u8(f, endianess=Endianess.BIG_ENDIAN)
            self.logger.debug(f"Data: {bin(self.data)}")

            self.format: AudioFormat = AudioFormat((self.data & 0b11110000) >> 4)
            self.logger.debug(f"Audio Format: {self.format}")

            self.rate: SampleRate = SampleRate(self.data & 0b00001111)
            self.logger.debug(f"Sample Rate: {self.rate}")

            self.language: str = f.read(3).decode("ASCII")
            self.logger.debug(f"Language Code: {self.language}")
        elif self.coding_type in [
            CodingType.PRESENTATION_GRAPHICS_SUBTITLES,
            CodingType.INTERACTIVE_GRAPHICS_MENU
        ]:
            self.language: str = f.read(3).decode("ASCII")
            self.logger.debug(f"Language Code: {self.language}")
        elif self.coding_type in [
            CodingType.TEXT_SUBTITLES
        ]:
            self.char_code: CharacterCode = CharacterCode(read_u8(f, endianess=Endianess.BIG_ENDIAN))
            self.logger.debug(f"Character Code: {self.char_code}")

            self.language: str = f.read(3).decode("ASCII")
            self.logger.debug(f"Language Code: {self.language}")

        self.logger.debug(f"Seeking to current_position + attributes_length")
        self.seek(current_position + self.attributes_length)
Beispiel #20
0
    def __init__(self, f: IO):
        """
        Init
        """
        super().__init__()

        self.length: int = read_u16(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Length: {self.length}")

        self.reserved_1: bytes = f.read(2)
        self.logger.debug(f"Reserved 1: {hex_log_str(self.reserved_1)}")

        self.num_video: int = read_u8(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Number of Video Streams: {self.num_video}")

        self.num_audio: int = read_u8(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Number of Audio Streams: {self.num_audio}")

        self.num_pg: int = read_u8(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Number of PG Streams: {self.num_pg}")

        self.num_ig: int = read_u8(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Number of IG Streams: {self.num_ig}")

        self.num_secondary_audio: int = read_u8(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Number of Secondary Audio Streams: {self.num_secondary_audio}")

        self.num_secondary_video: int = read_u8(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Number of Secondary Video Streams: {self.num_secondary_video}")

        self.num_secondary_pg: int = read_u8(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Number of Secondary PG Streams: {self.num_secondary_pg}")

        self.num_dv: int = read_u8(f, endianess=Endianess.BIG_ENDIAN)
        self.logger.debug(f"Number of DV Streams: {self.num_dv}")

        self.reserved_2: bytes = f.read(4)
        self.logger.debug(f"Reserved 2: {hex_log_str(self.reserved_2)}")

        self.video_streams: List[Stream] = []
        for index in range(self.num_video):
            self.logger.debug(f"Reading Video Stream {index}")
            self.video_streams.append(Stream(f))

        self.audio_streams: List[Stream] = []
        for index in range(self.num_audio):
            self.logger.debug(f"Reading Audio Stream {index}")
            self.audio_streams.append(Stream(f))

        self.pg_streams: List[Stream] = []
        for index in range(self.num_pg):
            self.logger.debug(f"Reading PG Stream {index}")
            self.pg_streams.append(Stream(f))

        self.secondary_pg_streams: List[Stream] = []
        for index in range(self.num_secondary_pg):
            self.logger.debug(f"Reading Secondary PG Stream {index}")
            self.secondary_pg_streams.append(Stream(f))

        self.ig_streams: List[Stream] = []
        for index in range(self.num_ig):
            self.logger.debug(f"Reading IG Stream {index}")
            self.ig_streams.append(Stream(f))

        self.secondary_audio_streams: List[Stream] = []
        for index in range(self.num_secondary_audio):
            self.logger.debug(f"Reading Secondary Audio Stream {index}")
            self.secondary_audio_streams.append(Stream(f))

        self.secondary_video_streams: List[Stream] = []
        for index in range(self.num_secondary_video):
            self.logger.debug(f"Reading Secondary Video Stream {index}")
            self.secondary_video_streams.append(Stream(f))

        self.dv_streams: List[Stream] = []
        for index in range(self.num_dv):
            self.logger.debug(f"Reading DV Stream {index}")
            self.dv_streams.append(Stream(f))