75e401f0e5
Build Packages / Unit tests (push) Successful in 1h31m59s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 8m43s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 10m5s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 9m27s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 8m56s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 9m24s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 10m27s
Build Packages / build:rpm (rocky8) (push) Successful in 9m20s
Build Packages / build:rpm (rocky9) (push) Successful in 10m50s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 9m54s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 8m38s
Build Packages / DIALS test (push) Successful in 12m13s
Build Packages / XDS test (durin plugin) (push) Successful in 7m8s
Build Packages / XDS test (JFJoch plugin) (push) Successful in 7m8s
Build Packages / XDS test (neggia plugin) (push) Successful in 7m50s
Build Packages / Generate python client (push) Successful in 16s
Build Packages / Build documentation (push) Successful in 50s
Build Packages / Create release (push) Skipped
This is an UNSTABLE release. It includes many experimental features, as well as many AI generated fixes. We recommend using rc.152 for production use. * jfjoch_broker: Add EXPERIMENTAL pixelrefine mode for image processing * jfjoch_broker: Allow to load user mask from 8-bit and 16-bit TIFF files * jfjoch_broker: Add ROI calculation in non-FPGA workflow * jfjoch_broker: Fixes to TCP image pusher * jfjoch_broker: Remove NUMA bindings * jfjoch_broker: Improvements to indexing * jfjoch_broker: For PSI EIGER, trimming energies are taken from the detector configuration (now compulsory) instead of hardcoded values * jfjoch_writer: Save ROI definitions and the per-pixel ROI bitmap in the master file; azimuthal ROIs support phi (angular) sectors * jfjoch_viewer: Major redesign with dockable panels and saved layouts, plus on-canvas creation/move/resize of box, circle and azimuthal ROIs * jfjoch_viewer: Run jfjoch_process reprocessing jobs from inside the GUI and overlay per-run results Reviewed-on: #63
183 lines
4.4 KiB
C
183 lines
4.4 KiB
C
/*
|
|
* Bitshuffle - Filter for improving compression of typed binary data.
|
|
*
|
|
* This file is part of Bitshuffle
|
|
* Author: Kiyoshi Masui <kiyo@physics.ubc.ca>
|
|
* Website: https://www.github.com/kiyo-masui/bitshuffle
|
|
* Created: 2014
|
|
*
|
|
* See LICENSE file for details about copyright and rights to use.
|
|
*
|
|
*
|
|
* Header File
|
|
*
|
|
* Worker routines return an int64_t which is the number of bytes processed
|
|
* if positive or an error code if negative.
|
|
*
|
|
* Error codes:
|
|
* -1 : Failed to allocate memory.
|
|
* -11 : Missing SSE.
|
|
* -12 : Missing AVX.
|
|
* -13 : Missing Arm Neon.
|
|
* -14 : Missing AVX512.
|
|
* -80 : Input size not a multiple of 8.
|
|
* -81 : block_size not multiple of 8.
|
|
* -91 : Decompression error, wrong number of bytes processed.
|
|
* -1YYY : Error internal to compression routine with error code -YYY.
|
|
*/
|
|
|
|
|
|
#ifndef BITSHUFFLE_CORE_H
|
|
#define BITSHUFFLE_CORE_H
|
|
|
|
// We assume GNU g++ defining `__cplusplus` has stdint.h
|
|
#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199900L) || defined(__cplusplus)
|
|
#include <stdint.h>
|
|
#else
|
|
typedef unsigned char uint8_t;
|
|
typedef unsigned short uint16_t;
|
|
typedef unsigned int uint32_t;
|
|
typedef signed int int32_t;
|
|
typedef unsigned long long uint64_t;
|
|
typedef long long int64_t;
|
|
#endif
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
// These are usually set in the setup.py.
|
|
#ifndef BSHUF_VERSION_MAJOR
|
|
#define BSHUF_VERSION_MAJOR 0
|
|
#define BSHUF_VERSION_MINOR 4
|
|
#define BSHUF_VERSION_POINT 0
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* --- bshuf_using_SSE2 ----
|
|
*
|
|
* Whether routines where compiled with the SSE2 instruction set.
|
|
*
|
|
* Returns
|
|
* -------
|
|
* 1 if using SSE2, 0 otherwise.
|
|
*
|
|
*/
|
|
int bshuf_using_SSE2(void);
|
|
|
|
|
|
/* ---- bshuf_using_NEON ----
|
|
*
|
|
* Whether routines where compiled with the NEON instruction set.
|
|
*
|
|
* Returns
|
|
* -------
|
|
* 1 if using NEON, 0 otherwise.
|
|
*
|
|
*/
|
|
int bshuf_using_NEON(void);
|
|
|
|
|
|
/* ---- bshuf_using_AVX2 ----
|
|
*
|
|
* Whether routines where compiled with the AVX2 instruction set.
|
|
*
|
|
* Returns
|
|
* -------
|
|
* 1 if using AVX2, 0 otherwise.
|
|
*
|
|
*/
|
|
int bshuf_using_AVX2(void);
|
|
|
|
|
|
/* ---- bshuf_using_AVX512 ----
|
|
*
|
|
* Whether routines where compiled with the AVX512 instruction set.
|
|
*
|
|
* Returns
|
|
* -------
|
|
* 1 if using AVX512, 0 otherwise.
|
|
*
|
|
*/
|
|
int bshuf_using_AVX512(void);
|
|
|
|
|
|
/* ---- bshuf_default_block_size ----
|
|
*
|
|
* The default block size as function of element size.
|
|
*
|
|
* This is the block size used by the blocked routines (any routine
|
|
* taking a *block_size* argument) when the block_size is not provided
|
|
* (zero is passed).
|
|
*
|
|
* The results of this routine are guaranteed to be stable such that
|
|
* shuffled/compressed data can always be decompressed.
|
|
*
|
|
* Parameters
|
|
* ----------
|
|
* elem_size : element size of data to be shuffled/compressed.
|
|
*
|
|
*/
|
|
size_t bshuf_default_block_size(const size_t elem_size);
|
|
|
|
|
|
/* ---- bshuf_bitshuffle ----
|
|
*
|
|
* Bitshuffle the data.
|
|
*
|
|
* Transpose the bits within elements, in blocks of *block_size*
|
|
* elements.
|
|
*
|
|
* Parameters
|
|
* ----------
|
|
* in : input buffer, must be of size * elem_size bytes
|
|
* out : output buffer, must be of size * elem_size bytes
|
|
* size : number of elements in input
|
|
* elem_size : element size of typed data
|
|
* block_size : Do transpose in blocks of this many elements. Pass 0 to
|
|
* select automatically (recommended).
|
|
*
|
|
* Returns
|
|
* -------
|
|
* number of bytes processed, negative error-code if failed.
|
|
*
|
|
*/
|
|
int64_t bshuf_bitshuffle(const void* in, void* out, const size_t size,
|
|
const size_t elem_size, size_t block_size);
|
|
|
|
|
|
/* ---- bshuf_bitunshuffle ----
|
|
*
|
|
* Unshuffle bitshuffled data.
|
|
*
|
|
* Untranspose the bits within elements, in blocks of *block_size*
|
|
* elements.
|
|
*
|
|
* To properly unshuffle bitshuffled data, *size*, *elem_size* and *block_size*
|
|
* must match the parameters used to shuffle the data.
|
|
*
|
|
* Parameters
|
|
* ----------
|
|
* in : input buffer, must be of size * elem_size bytes
|
|
* out : output buffer, must be of size * elem_size bytes
|
|
* size : number of elements in input
|
|
* elem_size : element size of typed data
|
|
* block_size : Do transpose in blocks of this many elements. Pass 0 to
|
|
* select automatically (recommended).
|
|
*
|
|
* Returns
|
|
* -------
|
|
* number of bytes processed, negative error-code if failed.
|
|
*
|
|
*/
|
|
int64_t bshuf_bitunshuffle(const void* in, void* out, const size_t size,
|
|
const size_t elem_size, size_t block_size);
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
#endif // BITSHUFFLE_CORE_H
|