|
21 | 21 | ) |
22 | 22 | from reversebox.compression.compression_rle_tzar import decompress_rle_tzar |
23 | 23 | from reversebox.compression.compression_zlib2 import decompress_zlib |
24 | | -from reversebox.image.byte_swap import swap_byte_order_gamecube, swap_byte_order_x360 |
| 24 | +from reversebox.image.byte_swap import ( |
| 25 | + swap_byte_order_etc1, |
| 26 | + swap_byte_order_gamecube, |
| 27 | + swap_byte_order_x360, |
| 28 | +) |
25 | 29 | from reversebox.image.common import ( |
26 | 30 | calculate_aligned_value, |
27 | 31 | get_block_data_size, |
28 | 32 | get_bpp_for_image_format, |
29 | 33 | ) |
30 | 34 | from reversebox.image.image_decoder import ImageDecoder |
31 | 35 | from reversebox.image.image_formats import ImageFormats |
32 | | -from reversebox.image.swizzling.swizzle_3ds import unswizzle_3ds |
| 36 | +from reversebox.image.swizzling.swizzle_3ds import unswizzle_3ds, unswizzle_3ds_blocks |
33 | 37 | from reversebox.image.swizzling.swizzle_bc import unswizzle_bc |
34 | 38 | from reversebox.image.swizzling.swizzle_gamecube import unswizzle_gamecube |
35 | 39 | from reversebox.image.swizzling.swizzle_morton import unswizzle_morton |
@@ -98,6 +102,12 @@ def _image_decode(self) -> bool: |
98 | 102 | # endianess logic |
99 | 103 | endianess_id: str = get_endianess_id(self.gui_params.endianess_type) |
100 | 104 |
|
| 105 | + if endianess_id == "little" and image_format == ImageFormats.ETC1: |
| 106 | + try: |
| 107 | + self.encoded_image_data = swap_byte_order_etc1(self.encoded_image_data) |
| 108 | + except Exception as error: |
| 109 | + logger.warning(f"ETC1 byte swap function failed! Error: {error}") |
| 110 | + |
101 | 111 | if endianess_id == "byte_swap_x360": |
102 | 112 | endianess_id = "little" |
103 | 113 | try: |
@@ -219,7 +229,15 @@ def _image_decode(self) -> bool: |
219 | 229 | elif swizzling_id == "bc": |
220 | 230 | self.encoded_image_data = unswizzle_bc(self.encoded_image_data, self.gui_params.img_width, self.gui_params.img_height, 8, 8, image_bpp) |
221 | 231 | elif swizzling_id == "3ds": |
222 | | - self.encoded_image_data = unswizzle_3ds(self.encoded_image_data, self.gui_params.img_width, self.gui_params.img_height, image_bpp) |
| 232 | + if image_format == ImageFormats.ETC1: |
| 233 | + self.encoded_image_data = unswizzle_3ds_blocks( |
| 234 | + self.encoded_image_data, self.gui_params.img_width, self.gui_params.img_height, |
| 235 | + 4, block_width=4, block_height=4 |
| 236 | + ) |
| 237 | + else: |
| 238 | + self.encoded_image_data = unswizzle_3ds( |
| 239 | + self.encoded_image_data, self.gui_params.img_width, self.gui_params.img_height, image_bpp |
| 240 | + ) |
223 | 241 | else: |
224 | 242 | logger.error(f"Swizzling type not supported! Type: {swizzling_id}") |
225 | 243 |
|
|
0 commit comments