summaryrefslogtreecommitdiff
path: root/src/sz_compat.c
diff options
context:
space:
mode:
authorMathis Rosenhauer <rosenhauer@dkrz.de>2012-08-06 18:01:03 +0200
committerMathis Rosenhauer <rosenhauer@dkrz.de>2012-08-06 18:01:03 +0200
commit7b90370fb6b528ddeea0d9b4d5d977bf1e71bddb (patch)
treeb761250eaae81572e71c6ae4a98727f9834556a0 /src/sz_compat.c
parent053ffc5703e151d37409345e24cf6e28e027f4fb (diff)
downloadlibaec-7b90370fb6b528ddeea0d9b4d5d977bf1e71bddb.tar.gz
libaec-7b90370fb6b528ddeea0d9b4d5d977bf1e71bddb.tar.bz2
libaec-7b90370fb6b528ddeea0d9b4d5d977bf1e71bddb.zip
imitate szlib for gribex
Diffstat (limited to 'src/sz_compat.c')
-rw-r--r--src/sz_compat.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/sz_compat.c b/src/sz_compat.c
new file mode 100644
index 0000000..f88e9ff
--- /dev/null
+++ b/src/sz_compat.c
@@ -0,0 +1,50 @@
+#include <stddef.h>
+#include "szlib.h"
+
+int SZ_BufftoBuffCompress(void *dest, size_t *destLen, const void *source, size_t sourceLen, SZ_com_t *param)
+{
+ int status;
+ ae_stream strm;
+
+ strm.bit_per_sample = param->bits_per_pixel;
+ strm.block_size = param->pixels_per_block;
+ strm.segment_size = param->pixels_per_scanline / param->pixels_per_block;
+ strm.flags = param->options_mask;
+ strm.avail_in = sourceLen;
+ strm.avail_out = *destLen;
+ strm.next_out = dest;
+ strm.next_in = source;
+
+ if ((status = ae_encode_init(&strm)) != AE_OK)
+ return status;
+
+ if ((status = ae_encode(&strm, AE_FLUSH)) != AE_OK)
+ return status;
+
+ *destLen = strm.total_out;
+ return SZ_OK;
+}
+
+int SZ_BufftoBuffDecompress(void *dest, size_t *destLen, const void *source, size_t sourceLen, SZ_com_t *param)
+{
+ int status;
+ ae_stream strm;
+
+ strm.bit_per_sample = param->bits_per_pixel;
+ strm.block_size = param->pixels_per_block;
+ strm.segment_size = param->pixels_per_scanline / param->pixels_per_block;
+ strm.flags = param->options_mask;
+ strm.avail_in = sourceLen;
+ strm.avail_out = *destLen;
+ strm.next_out = dest;
+ strm.next_in = source;
+
+ if ((status = ae_decode_init(&strm)) != AE_OK)
+ return status;
+
+ if ((status = ae_decode(&strm, AE_FLUSH)) != AE_OK)
+ return status;
+
+ *destLen = strm.total_out;
+ return SZ_OK;
+}