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}")
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))
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}')
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)
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)}")
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))
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)
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)
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)}")
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))
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)}')
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}")
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)}")
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}')
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)}')
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))
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)
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))