ReverseBox 0.37.1__tar.gz → 0.39.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 (123) hide show
  1. {reversebox-0.37.1 → reversebox-0.39.0}/PKG-INFO +6 -2
  2. {reversebox-0.37.1 → reversebox-0.39.0}/README.md +4 -0
  3. {reversebox-0.37.1 → reversebox-0.39.0}/ReverseBox.egg-info/PKG-INFO +6 -2
  4. {reversebox-0.37.1 → reversebox-0.39.0}/ReverseBox.egg-info/SOURCES.txt +3 -0
  5. reversebox-0.39.0/reversebox/image/decoders/pvrtexlib_decoder_encoder.py +97 -0
  6. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/image_decoder.py +6 -0
  7. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/image_encoder.py +6 -0
  8. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/image_formats.py +4 -0
  9. reversebox-0.39.0/reversebox/libs/PVRTexLib.dll +0 -0
  10. reversebox-0.39.0/reversebox/libs/PVRTexLibWrapper.dll +0 -0
  11. {reversebox-0.37.1 → reversebox-0.39.0}/setup.py +2 -2
  12. {reversebox-0.37.1 → reversebox-0.39.0}/LICENSE +0 -0
  13. {reversebox-0.37.1 → reversebox-0.39.0}/ReverseBox.egg-info/dependency_links.txt +0 -0
  14. {reversebox-0.37.1 → reversebox-0.39.0}/ReverseBox.egg-info/requires.txt +0 -0
  15. {reversebox-0.37.1 → reversebox-0.39.0}/ReverseBox.egg-info/top_level.txt +0 -0
  16. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/__init__.py +0 -0
  17. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/checksum/__init__.py +0 -0
  18. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/checksum/checksum_adler32.py +0 -0
  19. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/checksum/checksum_cocos2d_pvr.py +0 -0
  20. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/checksum/checksum_fletcher16.py +0 -0
  21. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/checksum/checksum_fletcher32.py +0 -0
  22. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/checksum/checksum_internet_ipv4_header.py +0 -0
  23. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/checksum/checksum_sum8.py +0 -0
  24. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/checksum/checksum_sum8_2s_complement.py +0 -0
  25. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/checksum/checksum_unix_sum_bsd16.py +0 -0
  26. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/checksum/checksum_unix_sum_sysv.py +0 -0
  27. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/checksum/checksum_xor8.py +0 -0
  28. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/common/__init__.py +0 -0
  29. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/common/common.py +0 -0
  30. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/common/logger.py +0 -0
  31. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/common/numpy_helper_functions.py +0 -0
  32. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/compression/__init__.py +0 -0
  33. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/compression/compression_jcalg1.py +0 -0
  34. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/compression/compression_lzo.py +0 -0
  35. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/compression/compression_mio0.py +0 -0
  36. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/compression/compression_re_tiyoruga_dat.py +0 -0
  37. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/compression/compression_refpack.py +0 -0
  38. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/compression/compression_zlib.py +0 -0
  39. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/crc/__init__.py +0 -0
  40. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/crc/crc16_arc.py +0 -0
  41. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/crc/crc16_ccitt.py +0 -0
  42. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/crc/crc16_dnp.py +0 -0
  43. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/crc/crc16_ea_crcf.py +0 -0
  44. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/crc/crc16_kermit.py +0 -0
  45. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/crc/crc16_modbus.py +0 -0
  46. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/crc/crc16_sick.py +0 -0
  47. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/crc/crc32_asobo.py +0 -0
  48. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/crc/crc32_iso_hdlc.py +0 -0
  49. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/crc/crc64_asobo.py +0 -0
  50. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/crc/crc64_go_iso.py +0 -0
  51. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/crc/crc8.py +0 -0
  52. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/crc/crc_unix_cksum.py +0 -0
  53. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/encryption/__init__.py +0 -0
  54. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/encryption/encryption_hatch_engine.py +0 -0
  55. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/encryption/encryption_rot13.py +0 -0
  56. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/encryption/encryption_xor_basic.py +0 -0
  57. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/encryption/encryption_xor_basic_key_guesser.py +0 -0
  58. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/encryption/encryption_xor_gianas_return_zda.py +0 -0
  59. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/encryption/encryption_xor_retro64_eco.py +0 -0
  60. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/hash/__init__.py +0 -0
  61. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/hash/hash_additive.py +0 -0
  62. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/hash/hash_ap.py +0 -0
  63. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/hash/hash_djb2.py +0 -0
  64. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/hash/hash_fnv.py +0 -0
  65. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/hash/hash_jenkins_one_at_a_time.py +0 -0
  66. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/hash/hash_md2.py +0 -0
  67. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/hash/hash_md5.py +0 -0
  68. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/hash/hash_murmur3.py +0 -0
  69. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/hash/hash_pivotal_games_dat.py +0 -0
  70. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/hash/hash_sdbm.py +0 -0
  71. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/hash/hash_sha1.py +0 -0
  72. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/hash/hash_sha2.py +0 -0
  73. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/__init__.py +0 -0
  74. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/byte_swap.py +0 -0
  75. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/common.py +0 -0
  76. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/compression/__init__.py +0 -0
  77. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/compression/compression_gst.py +0 -0
  78. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/compression/compression_lzw.py +0 -0
  79. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/compression/compression_packbits.py +0 -0
  80. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/compression/compression_rle_executioners.py +0 -0
  81. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/compression/compression_rle_tga.py +0 -0
  82. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/compression/compression_zlib.py +0 -0
  83. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/decoders/__init__.py +0 -0
  84. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/decoders/bumpmap_decoder.py +0 -0
  85. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/decoders/compressed_decoder_encoder.py +0 -0
  86. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/decoders/gst_decoder.py +0 -0
  87. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/decoders/n64_decoder.py +0 -0
  88. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/decoders/yuv_decoder.py +0 -0
  89. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/encoders/__init__.py +0 -0
  90. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/encoders/gst_encoder.py +0 -0
  91. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/file_formats/__init__.py +0 -0
  92. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/file_formats/image_dds.py +0 -0
  93. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/palettes/__init__.py +0 -0
  94. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/palettes/palette_random.py +0 -0
  95. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/palettes/palette_vga.py +0 -0
  96. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/pillow_wrapper.py +0 -0
  97. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/swizzling/__init__.py +0 -0
  98. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/swizzling/swizzle_3ds.py +0 -0
  99. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/swizzling/swizzle_bc.py +0 -0
  100. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/swizzling/swizzle_cmpr.py +0 -0
  101. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/swizzling/swizzle_gamecube.py +0 -0
  102. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/swizzling/swizzle_gst.py +0 -0
  103. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/swizzling/swizzle_morton.py +0 -0
  104. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/swizzling/swizzle_morton_ps4.py +0 -0
  105. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/swizzling/swizzle_ps2.py +0 -0
  106. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/swizzling/swizzle_ps2_4bit.py +0 -0
  107. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/swizzling/swizzle_ps2_suba.py +0 -0
  108. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/swizzling/swizzle_psp.py +0 -0
  109. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/swizzling/swizzle_psvita_dreamcast.py +0 -0
  110. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/swizzling/swizzle_switch.py +0 -0
  111. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/swizzling/swizzle_wii_u.py +0 -0
  112. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/image/swizzling/swizzle_x360.py +0 -0
  113. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/io_files/__init__.py +0 -0
  114. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/io_files/bytes_handler.py +0 -0
  115. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/io_files/bytes_helper_functions.py +0 -0
  116. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/io_files/check_file.py +0 -0
  117. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/io_files/file_handler.py +0 -0
  118. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/io_files/mod_handler.py +0 -0
  119. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/io_files/translation_text_handler.py +0 -0
  120. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/libs/DirectXTex.dll +0 -0
  121. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/libs/__init__.py +0 -0
  122. {reversebox-0.37.1 → reversebox-0.39.0}/reversebox/libs/refpack.dll +0 -0
  123. {reversebox-0.37.1 → reversebox-0.39.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.39.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,10 @@ 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 ✔️
199
+ - Decode/Encode ASTC_6x5 ✔️
196
200
  - Decode GST121 ✔️
197
201
  - Decode GST221 ✔️
198
202
  - Decode GST421 ✔️
@@ -156,6 +156,10 @@ 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 ✔️
162
+ - Decode/Encode ASTC_6x5 ✔️
159
163
  - Decode GST121 ✔️
160
164
  - Decode GST221 ✔️
161
165
  - Decode GST421 ✔️
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ReverseBox
3
- Version: 0.37.1
3
+ Version: 0.39.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,10 @@ 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 ✔️
199
+ - Decode/Encode ASTC_6x5 ✔️
196
200
  - Decode GST121 ✔️
197
201
  - Decode GST221 ✔️
198
202
  - 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,7 @@ 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/PVRTexLibWrapper.dll
117
120
  reversebox/libs/__init__.py
118
121
  reversebox/libs/refpack.dll
@@ -0,0 +1,97 @@
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
+ ImageFormats.ASTC_6x5: 71,
25
+ }
26
+
27
+
28
+ class PvrTexlibImageDecoderEncoder:
29
+ """
30
+ Decoder/Encoder for any compressed images like ASTC, ETC1 etc.
31
+ """
32
+
33
+ def __init__(self):
34
+ pass
35
+
36
+ def _get_pvrtexlib_format_number(self, image_format: ImageFormats) -> int:
37
+ """
38
+ Mapping ReverseBox formats to PvrTexLib formats
39
+ """
40
+
41
+ try:
42
+ return pvrtexlib_format_mapping[image_format]
43
+ except KeyError:
44
+ raise Exception(f"Not supported image format! Image_format: {image_format}")
45
+
46
+ def _convert_pvrtexlib_image(self, image_data: bytes, img_width: int, img_height: int, image_format: ImageFormats, encode_flag: bool) -> bytes:
47
+ """
48
+ Function used for decoding/encoding compressed PvrTexlib formats
49
+ """
50
+ dll_path: str = get_dll_path("PVRTexLibWrapper.dll")
51
+
52
+ input_format_number: int = self._get_pvrtexlib_format_number(image_format)
53
+ output_buffer_size: int = img_height * img_width * 4
54
+
55
+ c_format_number = c_int(input_format_number)
56
+ c_image_width = c_int(img_width)
57
+ c_image_height = c_int(img_height)
58
+ c_comp_level = c_int(1)
59
+
60
+ input_buffer = create_string_buffer(bytes(image_data))
61
+ c_input_buffer = cast(input_buffer, POINTER(c_uint8)) # buffer with input image data
62
+ c_output_buffer = (c_uint8 * output_buffer_size)() # empty buffer for output image data
63
+
64
+ try:
65
+ dll_file = ctypes.CDLL(dll_path)
66
+
67
+ if encode_flag:
68
+ output_size: int = dll_file.EncodeByPVRTexLib(
69
+ c_input_buffer,
70
+ c_output_buffer,
71
+ c_format_number,
72
+ c_comp_level,
73
+ c_image_width,
74
+ c_image_height
75
+ )
76
+ else:
77
+ output_size: int = dll_file.DecodeByPVRTexLib(
78
+ c_input_buffer,
79
+ c_output_buffer,
80
+ c_format_number,
81
+ c_image_width,
82
+ c_image_height
83
+ )
84
+ except Exception as error:
85
+ raise Exception(f"Error! Error: {error}")
86
+
87
+ if output_size == 0:
88
+ raise Exception("Output texture is empty!")
89
+
90
+ converted_data = bytearray((c_uint8 * output_size).from_address(ctypes.addressof(c_output_buffer)))
91
+ return converted_data
92
+
93
+ def decode_compressed_image_main(self, image_data: bytes, img_width: int, img_height: int, image_format: ImageFormats) -> bytes:
94
+ return self._convert_pvrtexlib_image(image_data, img_width, img_height, image_format, False)
95
+
96
+ def encode_compressed_image_main(self, image_data: bytes, img_width: int, img_height: int, image_format: ImageFormats) -> bytes:
97
+ 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,10 @@ 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"
117
+ ASTC_6x5 = "ASTC_6x5"
114
118
 
115
119
  # PS2 GS Texture Formats
116
120
  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.39.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