diff --git a/compression/CMakeLists.txt b/compression/CMakeLists.txt index e2fc0669..42f0415c 100644 --- a/compression/CMakeLists.txt +++ b/compression/CMakeLists.txt @@ -4,6 +4,8 @@ ADD_LIBRARY(Compression STATIC bitshuffle/bitshuffle.c bitshuffle/bitshuffle_core.c bitshuffle/iochain.c + bitshuffle_dectris/src/bitshuffle.c + bitshuffle_dectris/src/bitshuffle.h JFJochZstdCompressor.cpp JFJochZstdCompressor.h JFJochCompressor.cpp diff --git a/compression/JFJochCompressor.cpp b/compression/JFJochCompressor.cpp index 1263f251..543fb9cc 100644 --- a/compression/JFJochCompressor.cpp +++ b/compression/JFJochCompressor.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -22,8 +23,7 @@ JFJochBitShuffleCompressor::JFJochBitShuffleCompressor(CompressionAlgorithm in_a size_t JFJochBitShuffleCompressor::CompressBlock(char *dest, const char *source, size_t nelements, size_t elem_size) { // Assert nelements < block_size const char *src_ptr; - - int64_t bshuf_ret = bshuf_trans_bit_elem(source, tmp_space.data(), nelements, elem_size); + int64_t bshuf_ret = bitshuf_encode_block(tmp_space.data(), source, scratch, nelements, elem_size); if (bshuf_ret < 0) throw JFJochException(JFJochExceptionCategory::Compression, "bshuf_trans_bit_elem error"); src_ptr = tmp_space.data(); diff --git a/compression/JFJochCompressor.h b/compression/JFJochCompressor.h index 43300cd5..0a2b5828 100644 --- a/compression/JFJochCompressor.h +++ b/compression/JFJochCompressor.h @@ -18,6 +18,7 @@ class JFJochBitShuffleCompressor { JFJochZstdCompressor zstd_compressor; CompressionAlgorithm algorithm; std::vector tmp_space; + size_t CompressBlock(char *dest, const char * source, size_t nelements, size_t elem_size); public: constexpr static const size_t DefaultBlockSize = 4096; @@ -38,6 +39,8 @@ public: } size_t Compress(char *dest, const char* source, size_t nelements, size_t elem_size); +private: + char scratch[DefaultBlockSize * sizeof(uint64_t)]; }; template std::vector bitshuffle(const std::vector &input, size_t block_size) {