- Added Zstd support
- Upgrade libraries.
This commit is contained in:
@@ -10,9 +10,9 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="K4os.Compression.LZ4" Version="1.3.4-beta" />
|
<PackageReference Include="K4os.Compression.LZ4" Version="1.3.5" />
|
||||||
<PackageReference Include="MessagePack" Version="2.5.108" />
|
<PackageReference Include="MessagePack" Version="2.6.100-alpha" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using K4os.Compression.LZ4;
|
using K4os.Compression.LZ4;
|
||||||
|
using ZstdSharp;
|
||||||
using System;
|
using System;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
@@ -31,7 +32,8 @@ namespace AssetStudio
|
|||||||
Lz4,
|
Lz4,
|
||||||
Lz4HC,
|
Lz4HC,
|
||||||
Lzham,
|
Lzham,
|
||||||
Lz4Mr0k
|
Lz4Mr0k,
|
||||||
|
Zstd = 5
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BundleFile
|
public class BundleFile
|
||||||
@@ -423,7 +425,7 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
case CompressionType.Lz4: //LZ4
|
case CompressionType.Lz4: //LZ4
|
||||||
case CompressionType.Lz4HC: //LZ4HC
|
case CompressionType.Lz4HC: //LZ4HC
|
||||||
case CompressionType.Lz4Mr0k: //Lz4Mr0k
|
case CompressionType.Lz4Mr0k when Game.Type.IsMhyGroup(): //Lz4Mr0k
|
||||||
{
|
{
|
||||||
var compressedSize = (int)blockInfo.compressedSize;
|
var compressedSize = (int)blockInfo.compressedSize;
|
||||||
var compressedBytes = BigArrayPool<byte>.Shared.Rent(compressedSize);
|
var compressedBytes = BigArrayPool<byte>.Shared.Rent(compressedSize);
|
||||||
@@ -454,6 +456,34 @@ namespace AssetStudio
|
|||||||
BigArrayPool<byte>.Shared.Return(uncompressedBytes);
|
BigArrayPool<byte>.Shared.Return(uncompressedBytes);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case CompressionType.Zstd when !Game.Type.IsMhyGroup(): //Zstd
|
||||||
|
{
|
||||||
|
var compressedSize = (int)blockInfo.compressedSize;
|
||||||
|
var compressedBytes = BigArrayPool<byte>.Shared.Rent(compressedSize);
|
||||||
|
reader.Read(compressedBytes, 0, compressedSize);
|
||||||
|
|
||||||
|
var uncompressedSize = (int)blockInfo.uncompressedSize;
|
||||||
|
var uncompressedBytes = BigArrayPool<byte>.Shared.Rent(uncompressedSize);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using var decompressor = new Decompressor();
|
||||||
|
var numWrite = decompressor.Unwrap(compressedBytes, 0, compressedSize, uncompressedBytes, 0, uncompressedSize);
|
||||||
|
if (numWrite != uncompressedSize)
|
||||||
|
{
|
||||||
|
throw new IOException($"Zstd decompression error, write {numWrite} bytes but expected {uncompressedSize} bytes");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Zstd decompression error:\n{ex}");
|
||||||
|
}
|
||||||
|
|
||||||
|
blocksStream.Write(uncompressedBytes.ToArray(), 0, uncompressedSize);
|
||||||
|
BigArrayPool<byte>.Shared.Return(compressedBytes);
|
||||||
|
BigArrayPool<byte>.Shared.Return(uncompressedBytes);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
throw new IOException($"Unsupported compression type {compressionType}");
|
throw new IOException($"Unsupported compression type {compressionType}");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,9 +11,9 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
<PackageReference Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
|
<PackageReference Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
|
||||||
<PackageReference Include="System.Configuration.ConfigurationManager" Version="7.0.0" />
|
<PackageReference Include="System.Configuration.ConfigurationManager" Version="8.0.0-preview.5.23280.8" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -68,7 +68,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
<PackageReference Include="OpenTK" Version="5.0.0-pre.8" />
|
<PackageReference Include="OpenTK" Version="5.0.0-pre.8" />
|
||||||
<Reference Include="OpenTK.WinForms">
|
<Reference Include="OpenTK.WinForms">
|
||||||
<HintPath>Libraries\OpenTK.WinForms.dll</HintPath>
|
<HintPath>Libraries\OpenTK.WinForms.dll</HintPath>
|
||||||
|
|||||||
Reference in New Issue
Block a user