aboutsummaryrefslogtreecommitdiff
path: root/core/io/compression.cpp
diff options
context:
space:
mode:
authorFerenc Arn2017-06-08 20:43:56 -0500
committerFerenc Arn2017-06-08 23:48:14 -0500
commitf177c1534757973063f244450df063def879d7db (patch)
treef92cf1c822d71acfe5e56ea42b80018abe0e0117 /core/io/compression.cpp
parent01ed55987c4c044191e50ecc94c277b97962ffc7 (diff)
downloadgodot-f177c1534757973063f244450df063def879d7db.tar.gz
godot-f177c1534757973063f244450df063def879d7db.tar.zst
godot-f177c1534757973063f244450df063def879d7db.zip
Diffstat (limited to 'core/io/compression.cpp')
-rw-r--r--core/io/compression.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/core/io/compression.cpp b/core/io/compression.cpp
index 662411a62..9c3e0e8ec 100644
--- a/core/io/compression.cpp
+++ b/core/io/compression.cpp
@@ -33,9 +33,12 @@
#include "zip_io.h"
#include "thirdparty/misc/fastlz.h"
+#include "thirdparty/zstd/zstd.h"
#include <zlib.h>
+#define ZSTD_DEFAULT_COMPRESSION 3
+
int Compression::compress(uint8_t *p_dst, const uint8_t *p_src, int p_src_size, Mode p_mode) {
switch (p_mode) {
@@ -76,6 +79,11 @@ int Compression::compress(uint8_t *p_dst, const uint8_t *p_src, int p_src_size,
return aout;
} break;
+ case MODE_ZSTD: {
+
+ int max_dst_size = get_max_compressed_buffer_size(p_src_size, MODE_ZSTD);
+ return ZSTD_compress(p_dst, max_dst_size, p_src, p_src_size, ZSTD_DEFAULT_COMPRESSION);
+ } break;
}
ERR_FAIL_V(-1);
@@ -105,6 +113,10 @@ int Compression::get_max_compressed_buffer_size(int p_src_size, Mode p_mode) {
deflateEnd(&strm);
return aout;
} break;
+ case MODE_ZSTD: {
+
+ return ZSTD_compressBound(p_src_size);
+ } break;
}
ERR_FAIL_V(-1);
@@ -148,6 +160,10 @@ int Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p
ERR_FAIL_COND_V(err != Z_STREAM_END, -1);
return total;
} break;
+ case MODE_ZSTD: {
+
+ return ZSTD_decompress(p_dst, p_dst_max_size, p_src, p_src_size);
+ } break;
}
ERR_FAIL_V(-1);