ReverseBox 0.37.1__tar.gz → 0.38.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. {reversebox-0.37.1 → reversebox-0.38.0}/PKG-INFO +5 -2
  2. {reversebox-0.37.1 → reversebox-0.38.0}/README.md +3 -0
  3. {reversebox-0.37.1 → reversebox-0.38.0}/ReverseBox.egg-info/PKG-INFO +5 -2
  4. {reversebox-0.37.1 → reversebox-0.38.0}/ReverseBox.egg-info/SOURCES.txt +5 -0
  5. reversebox-0.38.0/reversebox/image/decoders/pvrtexlib_decoder_encoder.py +96 -0
  6. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/image_decoder.py +6 -0
  7. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/image_encoder.py +6 -0
  8. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/image_formats.py +3 -0
  9. reversebox-0.38.0/reversebox/libs/PVRTexLib.dll +0 -0
  10. reversebox-0.38.0/reversebox/libs/TexWrapper.dll +0 -0
  11. reversebox-0.38.0/reversebox/libs/crnlib.dll +0 -0
  12. reversebox-0.38.0/reversebox/libs/ispc_texcomp.dll +0 -0
  13. {reversebox-0.37.1 → reversebox-0.38.0}/setup.py +2 -2
  14. {reversebox-0.37.1 → reversebox-0.38.0}/LICENSE +0 -0
  15. {reversebox-0.37.1 → reversebox-0.38.0}/ReverseBox.egg-info/dependency_links.txt +0 -0
  16. {reversebox-0.37.1 → reversebox-0.38.0}/ReverseBox.egg-info/requires.txt +0 -0
  17. {reversebox-0.37.1 → reversebox-0.38.0}/ReverseBox.egg-info/top_level.txt +0 -0
  18. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/__init__.py +0 -0
  19. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/checksum/__init__.py +0 -0
  20. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/checksum/checksum_adler32.py +0 -0
  21. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/checksum/checksum_cocos2d_pvr.py +0 -0
  22. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/checksum/checksum_fletcher16.py +0 -0
  23. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/checksum/checksum_fletcher32.py +0 -0
  24. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/checksum/checksum_internet_ipv4_header.py +0 -0
  25. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/checksum/checksum_sum8.py +0 -0
  26. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/checksum/checksum_sum8_2s_complement.py +0 -0
  27. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/checksum/checksum_unix_sum_bsd16.py +0 -0
  28. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/checksum/checksum_unix_sum_sysv.py +0 -0
  29. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/checksum/checksum_xor8.py +0 -0
  30. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/common/__init__.py +0 -0
  31. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/common/common.py +0 -0
  32. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/common/logger.py +0 -0
  33. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/common/numpy_helper_functions.py +0 -0
  34. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/compression/__init__.py +0 -0
  35. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/compression/compression_jcalg1.py +0 -0
  36. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/compression/compression_lzo.py +0 -0
  37. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/compression/compression_mio0.py +0 -0
  38. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/compression/compression_re_tiyoruga_dat.py +0 -0
  39. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/compression/compression_refpack.py +0 -0
  40. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/compression/compression_zlib.py +0 -0
  41. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/crc/__init__.py +0 -0
  42. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/crc/crc16_arc.py +0 -0
  43. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/crc/crc16_ccitt.py +0 -0
  44. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/crc/crc16_dnp.py +0 -0
  45. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/crc/crc16_ea_crcf.py +0 -0
  46. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/crc/crc16_kermit.py +0 -0
  47. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/crc/crc16_modbus.py +0 -0
  48. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/crc/crc16_sick.py +0 -0
  49. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/crc/crc32_asobo.py +0 -0
  50. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/crc/crc32_iso_hdlc.py +0 -0
  51. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/crc/crc64_asobo.py +0 -0
  52. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/crc/crc64_go_iso.py +0 -0
  53. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/crc/crc8.py +0 -0
  54. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/crc/crc_unix_cksum.py +0 -0
  55. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/encryption/__init__.py +0 -0
  56. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/encryption/encryption_hatch_engine.py +0 -0
  57. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/encryption/encryption_rot13.py +0 -0
  58. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/encryption/encryption_xor_basic.py +0 -0
  59. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/encryption/encryption_xor_basic_key_guesser.py +0 -0
  60. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/encryption/encryption_xor_gianas_return_zda.py +0 -0
  61. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/encryption/encryption_xor_retro64_eco.py +0 -0
  62. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/hash/__init__.py +0 -0
  63. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/hash/hash_additive.py +0 -0
  64. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/hash/hash_ap.py +0 -0
  65. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/hash/hash_djb2.py +0 -0
  66. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/hash/hash_fnv.py +0 -0
  67. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/hash/hash_jenkins_one_at_a_time.py +0 -0
  68. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/hash/hash_md2.py +0 -0
  69. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/hash/hash_md5.py +0 -0
  70. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/hash/hash_murmur3.py +0 -0
  71. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/hash/hash_pivotal_games_dat.py +0 -0
  72. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/hash/hash_sdbm.py +0 -0
  73. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/hash/hash_sha1.py +0 -0
  74. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/hash/hash_sha2.py +0 -0
  75. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/__init__.py +0 -0
  76. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/byte_swap.py +0 -0
  77. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/common.py +0 -0
  78. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/compression/__init__.py +0 -0
  79. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/compression/compression_gst.py +0 -0
  80. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/compression/compression_lzw.py +0 -0
  81. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/compression/compression_packbits.py +0 -0
  82. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/compression/compression_rle_executioners.py +0 -0
  83. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/compression/compression_rle_tga.py +0 -0
  84. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/compression/compression_zlib.py +0 -0
  85. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/decoders/__init__.py +0 -0
  86. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/decoders/bumpmap_decoder.py +0 -0
  87. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/decoders/compressed_decoder_encoder.py +0 -0
  88. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/decoders/gst_decoder.py +0 -0
  89. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/decoders/n64_decoder.py +0 -0
  90. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/decoders/yuv_decoder.py +0 -0
  91. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/encoders/__init__.py +0 -0
  92. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/encoders/gst_encoder.py +0 -0
  93. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/file_formats/__init__.py +0 -0
  94. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/file_formats/image_dds.py +0 -0
  95. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/palettes/__init__.py +0 -0
  96. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/palettes/palette_random.py +0 -0
  97. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/palettes/palette_vga.py +0 -0
  98. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/pillow_wrapper.py +0 -0
  99. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/swizzling/__init__.py +0 -0
  100. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/swizzling/swizzle_3ds.py +0 -0
  101. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/swizzling/swizzle_bc.py +0 -0
  102. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/swizzling/swizzle_cmpr.py +0 -0
  103. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/swizzling/swizzle_gamecube.py +0 -0
  104. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/swizzling/swizzle_gst.py +0 -0
  105. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/swizzling/swizzle_morton.py +0 -0
  106. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/swizzling/swizzle_morton_ps4.py +0 -0
  107. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/swizzling/swizzle_ps2.py +0 -0
  108. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/swizzling/swizzle_ps2_4bit.py +0 -0
  109. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/swizzling/swizzle_ps2_suba.py +0 -0
  110. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/swizzling/swizzle_psp.py +0 -0
  111. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/swizzling/swizzle_psvita_dreamcast.py +0 -0
  112. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/swizzling/swizzle_switch.py +0 -0
  113. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/swizzling/swizzle_wii_u.py +0 -0
  114. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/image/swizzling/swizzle_x360.py +0 -0
  115. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/io_files/__init__.py +0 -0
  116. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/io_files/bytes_handler.py +0 -0
  117. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/io_files/bytes_helper_functions.py +0 -0
  118. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/io_files/check_file.py +0 -0
  119. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/io_files/file_handler.py +0 -0
  120. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/io_files/mod_handler.py +0 -0
  121. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/io_files/translation_text_handler.py +0 -0
  122. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/libs/DirectXTex.dll +0 -0
  123. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/libs/__init__.py +0 -0
  124. {reversebox-0.37.1 → reversebox-0.38.0}/reversebox/libs/refpack.dll +0 -0
  125. {reversebox-0.37.1 → reversebox-0.38.0}/setup.cfg +0 -0
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ReverseBox
3
- Version: 0.37.1
3
+ Version: 0.38.0
4
4
  Summary: A set of functions useful in reverse engineering.
5
5
  Home-page: https://github.com/bartlomiejduda/ReverseBox
6
6
  Author: Bartlomiej Duda
7
7
  Author-email: ikskoks@gmail.com
8
- Keywords: ReverseBox,reverse engineering,RE,CRC,Hash,Encryption,Compression,Checksum,Python,image,decode,decoding,RGB,swizzle,swizzling,morton,twiddle,twiddling,texture,UYVY,YUY2,NV21,NV12,RGBA,RGBA8888,RGB565,RGBA8,BGR,grayscale,graphics,color,pixel,convert,converting,YUV,RAW,PSP,PS1,PS2,PS3,PS4,XBOX,X360,gamecube,dreamcast,BC,BC1,BC2,BC3,BC4,BC5,BC6,BC7,DXT1,DXT2,DXT3,PackBits,RLE,Macintosh,Jenkins,murmur,murmur3,one-at-a-time,additive
8
+ Keywords: ReverseBox,reverse engineering,RE,CRC,Hash,Encryption,Compression,Checksum,Python,image,decode,decoding,RGB,swizzle,swizzling,morton,twiddle,twiddling,texture,UYVY,YUY2,NV21,NV12,RGBA,RGBA8888,RGB565,RGBA8,BGR,grayscale,graphics,color,pixel,convert,converting,YUV,RAW,PSP,PS1,PS2,PS3,PS4,XBOX,X360,gamecube,dreamcast,BC,BC1,BC2,BC3,BC4,BC5,BC6,BC7,DXT1,DXT2,DXT3,PackBits,RLE,Macintosh,Jenkins,murmur,murmur3,one-at-a-time,additive,ASTC,ETC1,ETC2
9
9
  Classifier: Programming Language :: Python :: 3
10
10
  Classifier: Programming Language :: Python :: 3.6
11
11
  Classifier: Programming Language :: Python :: 3.7
@@ -193,6 +193,9 @@ or software researchers).
193
193
  - Decode/Encode BC5 ✔️
194
194
  - Decode/Encode BC6 ✔️
195
195
  - Decode/Encode BC7 ✔️
196
+ - Decode/Encode ASTC_4x4
197
+ - Decode/Encode ASTC_5x4
198
+ - Decode/Encode ASTC_5x5
196
199
  - Decode GST121 ✔️
197
200
  - Decode GST221 ✔️
198
201
  - Decode GST421 ✔️
@@ -156,6 +156,9 @@ or software researchers).
156
156
  - Decode/Encode BC5 ✔️
157
157
  - Decode/Encode BC6 ✔️
158
158
  - Decode/Encode BC7 ✔️
159
+ - Decode/Encode ASTC_4x4
160
+ - Decode/Encode ASTC_5x4
161
+ - Decode/Encode ASTC_5x5
159
162
  - Decode GST121 ✔️
160
163
  - Decode GST221 ✔️
161
164
  - Decode GST421 ✔️
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ReverseBox
3
- Version: 0.37.1
3
+ Version: 0.38.0
4
4
  Summary: A set of functions useful in reverse engineering.
5
5
  Home-page: https://github.com/bartlomiejduda/ReverseBox
6
6
  Author: Bartlomiej Duda
7
7
  Author-email: ikskoks@gmail.com
8
- Keywords: ReverseBox,reverse engineering,RE,CRC,Hash,Encryption,Compression,Checksum,Python,image,decode,decoding,RGB,swizzle,swizzling,morton,twiddle,twiddling,texture,UYVY,YUY2,NV21,NV12,RGBA,RGBA8888,RGB565,RGBA8,BGR,grayscale,graphics,color,pixel,convert,converting,YUV,RAW,PSP,PS1,PS2,PS3,PS4,XBOX,X360,gamecube,dreamcast,BC,BC1,BC2,BC3,BC4,BC5,BC6,BC7,DXT1,DXT2,DXT3,PackBits,RLE,Macintosh,Jenkins,murmur,murmur3,one-at-a-time,additive
8
+ Keywords: ReverseBox,reverse engineering,RE,CRC,Hash,Encryption,Compression,Checksum,Python,image,decode,decoding,RGB,swizzle,swizzling,morton,twiddle,twiddling,texture,UYVY,YUY2,NV21,NV12,RGBA,RGBA8888,RGB565,RGBA8,BGR,grayscale,graphics,color,pixel,convert,converting,YUV,RAW,PSP,PS1,PS2,PS3,PS4,XBOX,X360,gamecube,dreamcast,BC,BC1,BC2,BC3,BC4,BC5,BC6,BC7,DXT1,DXT2,DXT3,PackBits,RLE,Macintosh,Jenkins,murmur,murmur3,one-at-a-time,additive,ASTC,ETC1,ETC2
9
9
  Classifier: Programming Language :: Python :: 3
10
10
  Classifier: Programming Language :: Python :: 3.6
11
11
  Classifier: Programming Language :: Python :: 3.7
@@ -193,6 +193,9 @@ or software researchers).
193
193
  - Decode/Encode BC5 ✔️
194
194
  - Decode/Encode BC6 ✔️
195
195
  - Decode/Encode BC7 ✔️
196
+ - Decode/Encode ASTC_4x4
197
+ - Decode/Encode ASTC_5x4
198
+ - Decode/Encode ASTC_5x5
196
199
  - Decode GST121 ✔️
197
200
  - Decode GST221 ✔️
198
201
  - Decode GST421 ✔️
@@ -82,6 +82,7 @@ reversebox/image/decoders/bumpmap_decoder.py
82
82
  reversebox/image/decoders/compressed_decoder_encoder.py
83
83
  reversebox/image/decoders/gst_decoder.py
84
84
  reversebox/image/decoders/n64_decoder.py
85
+ reversebox/image/decoders/pvrtexlib_decoder_encoder.py
85
86
  reversebox/image/decoders/yuv_decoder.py
86
87
  reversebox/image/encoders/__init__.py
87
88
  reversebox/image/encoders/gst_encoder.py
@@ -114,5 +115,9 @@ reversebox/io_files/file_handler.py
114
115
  reversebox/io_files/mod_handler.py
115
116
  reversebox/io_files/translation_text_handler.py
116
117
  reversebox/libs/DirectXTex.dll
118
+ reversebox/libs/PVRTexLib.dll
119
+ reversebox/libs/TexWrapper.dll
117
120
  reversebox/libs/__init__.py
121
+ reversebox/libs/crnlib.dll
122
+ reversebox/libs/ispc_texcomp.dll
118
123
  reversebox/libs/refpack.dll
@@ -0,0 +1,96 @@
1
+ """
2
+ Copyright © 2025 Bartłomiej Duda
3
+ License: GPL-3.0 License
4
+ """
5
+
6
+ import ctypes
7
+ from ctypes import POINTER, c_int, c_uint8, cast, create_string_buffer
8
+
9
+ from reversebox.common.common import get_dll_path
10
+ from reversebox.common.logger import get_logger
11
+ from reversebox.image.image_formats import ImageFormats
12
+
13
+ logger = get_logger(__name__)
14
+
15
+ # fmt: off
16
+ # mypy: ignore-errors
17
+
18
+
19
+ pvrtexlib_format_mapping: dict[ImageFormats, int] = {
20
+ ImageFormats.RGB565: 7,
21
+ ImageFormats.ASTC_4x4: 48,
22
+ ImageFormats.ASTC_5x4: 70,
23
+ ImageFormats.ASTC_5x5: 49,
24
+ }
25
+
26
+
27
+ class PvrTexlibImageDecoderEncoder:
28
+ """
29
+ Decoder/Encoder for any compressed images like ASTC, ETC1 etc.
30
+ """
31
+
32
+ def __init__(self):
33
+ pass
34
+
35
+ def _get_pvrtexlib_format_number(self, image_format: ImageFormats) -> int:
36
+ """
37
+ Mapping ReverseBox formats to PvrTexLib formats
38
+ """
39
+
40
+ try:
41
+ return pvrtexlib_format_mapping[image_format]
42
+ except KeyError:
43
+ raise Exception(f"Not supported image format! Image_format: {image_format}")
44
+
45
+ def _convert_pvrtexlib_image(self, image_data: bytes, img_width: int, img_height: int, image_format: ImageFormats, encode_flag: bool) -> bytes:
46
+ """
47
+ Function used for decoding/encoding compressed PvrTexlib formats
48
+ """
49
+ dll_path: str = get_dll_path("TexWrapper.dll")
50
+
51
+ input_format_number: int = self._get_pvrtexlib_format_number(image_format)
52
+ output_buffer_size: int = img_height * img_width * 4
53
+
54
+ c_format_number = c_int(input_format_number)
55
+ c_image_width = c_int(img_width)
56
+ c_image_height = c_int(img_height)
57
+ c_comp_level = c_int(1)
58
+
59
+ input_buffer = create_string_buffer(bytes(image_data))
60
+ c_input_buffer = cast(input_buffer, POINTER(c_uint8)) # buffer with input image data
61
+ c_output_buffer = (c_uint8 * output_buffer_size)() # empty buffer for output image data
62
+
63
+ try:
64
+ dll_file = ctypes.CDLL(dll_path)
65
+
66
+ if encode_flag:
67
+ output_size: int = dll_file.EncodeByPVRTexLib(
68
+ c_input_buffer,
69
+ c_output_buffer,
70
+ c_format_number,
71
+ c_comp_level,
72
+ c_image_width,
73
+ c_image_height
74
+ )
75
+ else:
76
+ output_size: int = dll_file.DecodeByPVRTexLib(
77
+ c_input_buffer,
78
+ c_output_buffer,
79
+ c_format_number,
80
+ c_image_width,
81
+ c_image_height
82
+ )
83
+ except Exception as error:
84
+ raise Exception(f"Error! Error: {error}")
85
+
86
+ if output_size == 0:
87
+ raise Exception("Output texture is empty!")
88
+
89
+ converted_data = bytearray((c_uint8 * output_size).from_address(ctypes.addressof(c_output_buffer)))
90
+ return converted_data
91
+
92
+ def decode_compressed_image_main(self, image_data: bytes, img_width: int, img_height: int, image_format: ImageFormats) -> bytes:
93
+ return self._convert_pvrtexlib_image(image_data, img_width, img_height, image_format, False)
94
+
95
+ def encode_compressed_image_main(self, image_data: bytes, img_width: int, img_height: int, image_format: ImageFormats) -> bytes:
96
+ return self._convert_pvrtexlib_image(image_data, img_width, img_height, image_format, True)
@@ -13,6 +13,9 @@ from reversebox.image.decoders.compressed_decoder_encoder import (
13
13
  )
14
14
  from reversebox.image.decoders.gst_decoder import GSTImageDecoder
15
15
  from reversebox.image.decoders.n64_decoder import N64Decoder
16
+ from reversebox.image.decoders.pvrtexlib_decoder_encoder import (
17
+ PvrTexlibImageDecoderEncoder,
18
+ )
16
19
  from reversebox.image.decoders.yuv_decoder import YUVDecoder
17
20
  from reversebox.image.image_formats import ImageFormats
18
21
  from reversebox.image.pillow_wrapper import PillowWrapper
@@ -796,6 +799,9 @@ class ImageDecoder:
796
799
  def decode_compressed_image(self, image_data: bytes, img_width: int, img_height: int, image_format: ImageFormats) -> bytes:
797
800
  return CompressedImageDecoderEncoder().decode_compressed_image_main(image_data, img_width, img_height, image_format)
798
801
 
802
+ def decode_pvrtexlib_image(self, image_data: bytes, img_width: int, img_height: int, image_format: ImageFormats) -> bytes:
803
+ return PvrTexlibImageDecoderEncoder().decode_compressed_image_main(image_data, img_width, img_height, image_format)
804
+
799
805
  def decode_gst_image(self, image_data: bytes, palette_data: bytes, img_width: int, img_height: int, image_format: ImageFormats, convert_format: ImageFormats, convert_pal_format: ImageFormats, is_swizzled: bool = True) -> bytes:
800
806
  gst_decoder = GSTImageDecoder()
801
807
  decoded_gst_data: bytes = gst_decoder.decode_gst_image_main(image_data, img_width, img_height, image_format, is_swizzled)
@@ -15,6 +15,9 @@ from reversebox.image.common import (
15
15
  from reversebox.image.decoders.compressed_decoder_encoder import (
16
16
  CompressedImageDecoderEncoder,
17
17
  )
18
+ from reversebox.image.decoders.pvrtexlib_decoder_encoder import (
19
+ PvrTexlibImageDecoderEncoder,
20
+ )
18
21
  from reversebox.image.image_formats import ImageFormats
19
22
  from reversebox.image.pillow_wrapper import PillowWrapper
20
23
  from reversebox.io_files.bytes_handler import BytesHandler
@@ -437,3 +440,6 @@ class ImageEncoder:
437
440
 
438
441
  def encode_compressed_image(self, image_data: bytes, img_width: int, img_height: int, image_format: ImageFormats) -> bytes:
439
442
  return CompressedImageDecoderEncoder().encode_compressed_image_main(image_data, img_width, img_height, image_format)
443
+
444
+ def encode_pvrtexlib_image(self, image_data: bytes, img_width: int, img_height: int, image_format: ImageFormats) -> bytes:
445
+ return PvrTexlibImageDecoderEncoder().encode_compressed_image_main(image_data, img_width, img_height, image_format)
@@ -111,6 +111,9 @@ class ImageFormats(Enum):
111
111
  BC6H_UF16 = "bc6h_uf16"
112
112
  BC6H_SF16 = "bc6h_sf16"
113
113
  BC7_UNORM = "bc7_unorm"
114
+ ASTC_4x4 = "ASTC_4x4"
115
+ ASTC_5x4 = "ASTC_5x4"
116
+ ASTC_5x5 = "ASTC_5x5"
114
117
 
115
118
  # PS2 GS Texture Formats
116
119
  GST121 = "gst121"
@@ -8,7 +8,7 @@ from typing import Final
8
8
 
9
9
  import setuptools
10
10
 
11
- VERSION_NUM: Final[str] = "0.37.1"
11
+ VERSION_NUM: Final[str] = "0.38.0"
12
12
 
13
13
 
14
14
  def get_long_description() -> str:
@@ -54,7 +54,7 @@ setuptools.setup(
54
54
  "RGB, swizzle, swizzling, morton, twiddle, twiddling, texture, UYVY, YUY2, NV21, NV12, RGBA, RGBA8888, RGB565, RGBA8, BGR, "
55
55
  "grayscale, graphics, color, pixel, convert, converting, YUV, RAW, PSP, PS1, PS2, PS3, PS4, XBOX, X360, gamecube, dreamcast, "
56
56
  "BC, BC1, BC2, BC3, BC4, BC5, BC6, BC7, DXT1, DXT2, DXT3, PackBits, RLE, Macintosh, Jenkins, murmur, murmur3, one-at-a-time, "
57
- "additive",
57
+ "additive, ASTC, ETC1, ETC2",
58
58
  python_requires=">=3.6",
59
59
  install_requires=[
60
60
  "lzokay",
File without changes
File without changes