You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

321 lines
9.0 KiB
C

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* All rights reserved. *
* *
* This file is part of HDF5. The full HDF5 copyright notice, including *
* terms governing use, modification, and redistribution, is contained in *
* the COPYING file, which can be found at the root of the source code *
* distribution tree, or in https://www.hdfgroup.org/licenses. *
* If you do not have access to either file, you may request a copy from *
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* Programmer: Robb Matzke
* Thursday, April 16, 1998
*/
#ifndef H5Zpublic_H
#define H5Zpublic_H
/* Public headers needed by this file */
#include "H5public.h"
/**
* \brief Filter identifiers
*
* \details Values 0 through 255 are for filters defined by the HDF5 library.
* Values 256 through 511 are available for testing new filters.
* Subsequent values should be obtained from the HDF5 development team
* at mailto:help@hdfgroup.org. These values will never change because
* they appear in the HDF5 files.
*/
typedef int H5Z_filter_t;
/* Filter IDs */
/**
* no filter
*/
#define H5Z_FILTER_ERROR (-1)
/**
* reserved indefinitely
*/
#define H5Z_FILTER_NONE 0
/**
* deflation like gzip
*/
#define H5Z_FILTER_DEFLATE 1
/**
* shuffle the data
*/
#define H5Z_FILTER_SHUFFLE 2
/**
* fletcher32 checksum of EDC
*/
#define H5Z_FILTER_FLETCHER32 3
/**
* szip compression
*/
#define H5Z_FILTER_SZIP 4
/**
* nbit compression
*/
#define H5Z_FILTER_NBIT 5
/**
* scale+offset compression
*/
#define H5Z_FILTER_SCALEOFFSET 6
/**
* filter ids below this value are reserved for library use
*/
#define H5Z_FILTER_RESERVED 256
/**
* maximum filter id
*/
#define H5Z_FILTER_MAX 65535
/* General macros */
/**
* Symbol to remove all filters in H5Premove_filter()
*/
#define H5Z_FILTER_ALL 0
/**
* Maximum number of filters allowed in a pipeline
*
* \internal (should probably be allowed to be an unlimited amount, but
* currently each filter uses a bit in a 32-bit field, so the format
* would have to be changed to accommodate that)
*/
#define H5Z_MAX_NFILTERS 32
/* Flags for filter definition (stored) */
/**
* definition flag mask
*/
#define H5Z_FLAG_DEFMASK 0x00ff
/**
* filter is mandatory
*/
#define H5Z_FLAG_MANDATORY 0x0000
/**
* filter is optional
*/
#define H5Z_FLAG_OPTIONAL 0x0001
/* Additional flags for filter invocation (not stored) */
/**
* invocation flag mask
*/
#define H5Z_FLAG_INVMASK 0xff00
/**
* reverse direction; read
*/
#define H5Z_FLAG_REVERSE 0x0100
/**
* skip EDC filters for read
*/
#define H5Z_FLAG_SKIP_EDC 0x0200
/* Special parameters for szip compression */
/* [These are aliases for the similar definitions in szlib.h, which we can't
* include directly due to the duplication of various symbols with the zlib.h
* header file] */
/**
* \ingroup SZIP */
#define H5_SZIP_ALLOW_K13_OPTION_MASK 1
/**
* \ingroup SZIP */
#define H5_SZIP_CHIP_OPTION_MASK 2
/**
* \ingroup SZIP */
#define H5_SZIP_EC_OPTION_MASK 4
/**
* \ingroup SZIP */
#define H5_SZIP_NN_OPTION_MASK 32
/**
* \ingroup SZIP */
#define H5_SZIP_MAX_PIXELS_PER_BLOCK 32
/* Macros for the shuffle filter */
/**
* \ingroup SHUFFLE
* Number of parameters that users can set for the shuffle filter
*/
#define H5Z_SHUFFLE_USER_NPARMS 0
/**
* \ingroup SHUFFLE
* Total number of parameters for the shuffle filter
*/
#define H5Z_SHUFFLE_TOTAL_NPARMS 1
/* Macros for the szip filter */
/**
* \ingroup SZIP
* Number of parameters that users can set for SZIP
*/
#define H5Z_SZIP_USER_NPARMS 2
/**
* \ingroup SZIP
* Total number of parameters for SZIP filter
*/
#define H5Z_SZIP_TOTAL_NPARMS 4
/**
* \ingroup SZIP
* "User" parameter for option mask
*/
#define H5Z_SZIP_PARM_MASK 0
/**
* \ingroup SZIP
* "User" parameter for pixels-per-block
*/
#define H5Z_SZIP_PARM_PPB 1
/**
* \ingroup SZIP
* "Local" parameter for bits-per-pixel
*/
#define H5Z_SZIP_PARM_BPP 2
/**
* \ingroup SZIP
* "Local" parameter for pixels-per-scanline
*/
#define H5Z_SZIP_PARM_PPS 3
/* Macros for the nbit filter */
/**
* \ingroup NBIT
* Number of parameters that users can set for the N-bit filter
*/
#define H5Z_NBIT_USER_NPARMS 0 /* Number of parameters that users can set */
/* Macros for the scale offset filter */
/**
* \ingroup SCALEOFFSET
* Number of parameters that users can set for the scale-offset filter
*/
#define H5Z_SCALEOFFSET_USER_NPARMS 2
/* Special parameters for ScaleOffset filter*/
/**
* \ingroup SCALEOFFSET */
#define H5Z_SO_INT_MINBITS_DEFAULT 0
/**
* \ingroup SCALEOFFSET */
typedef enum H5Z_SO_scale_type_t {
H5Z_SO_FLOAT_DSCALE = 0,
H5Z_SO_FLOAT_ESCALE = 1,
H5Z_SO_INT = 2
} H5Z_SO_scale_type_t;
/**
* \ingroup FLETCHER32
* Values to decide if EDC is enabled for reading data
*/
typedef enum H5Z_EDC_t {
H5Z_ERROR_EDC = -1, /**< error value */
H5Z_DISABLE_EDC = 0,
H5Z_ENABLE_EDC = 1,
H5Z_NO_EDC = 2 /**< sentinel */
} H5Z_EDC_t;
/* Bit flags for H5Zget_filter_info */
#define H5Z_FILTER_CONFIG_ENCODE_ENABLED (0x0001)
#define H5Z_FILTER_CONFIG_DECODE_ENABLED (0x0002)
/**
* Return values for filter callback function
*/
typedef enum H5Z_cb_return_t {
H5Z_CB_ERROR = -1, /**< error value */
H5Z_CB_FAIL = 0, /**< I/O should fail if filter fails. */
H5Z_CB_CONT = 1, /**< I/O continues if filter fails. */
H5Z_CB_NO = 2 /**< sentinel */
} H5Z_cb_return_t;
//! <!-- [H5Z_filter_func_t_snip] -->
/**
* Filter callback function definition
*/
typedef H5Z_cb_return_t (*H5Z_filter_func_t)(H5Z_filter_t filter, void *buf, size_t buf_size, void *op_data);
//! <!-- [H5Z_filter_func_t_snip] -->
#ifdef __cplusplus
extern "C" {
#endif
/**
* \ingroup H5Z
*
* \brief Determines whether a filter is available
*
* \param[in] id Filter identifier
* \return \htri_t
*
* \details H5Zfilter_avail() determines whether the filter specified in \p id
* is available to the application.
*
* \since 1.6.0
*/
H5_DLL htri_t H5Zfilter_avail(H5Z_filter_t id);
/**
* \ingroup H5Z
*
* \brief Retrieves information about a filter
*
* \param[in] filter Filter identifier
* \param[out] filter_config_flags A bit field encoding the returned filter
* information
* \return \herr_t
*
* \details H5Zget_filter_info() retrieves information about a filter. At
* present, this means that the function retrieves a filter's
* configuration flags, indicating whether the filter is configured to
* decode data, to encode data, neither, or both.
*
* If \p filter_config_flags is not set to NULL prior to the function
* call, the returned parameter contains a bit field specifying the
* available filter configuration. The configuration flag values can
* then be determined through a series of bitwise AND operations, as
* described below.
*
* Valid filter configuration flags include the following:
* <table>
* <tr><td>#H5Z_FILTER_CONFIG_ENCODE_ENABLED</td>
* <td>Encoding is enabled for this filter</td></tr>
* <tr><td>#H5Z_FILTER_CONFIG_DECODE_ENABLED</td>
* <td>Decoding is enabled for this filter</td></tr>
* </table>
*
* A bitwise AND of the returned \p filter_config_flags and a valid
* filter configuration flag will reveal whether the related
* configuration option is available. For example, if the value of
* \code
* H5Z_FILTER_CONFIG_ENCODE_ENABLED & filter_config_flags
* \endcode
* is true, i.e., greater than 0 (zero), the queried filter
* is configured to encode data; if the value is \c FALSE, i.e., equal to
* 0 (zero), the filter is not so configured.
*
* If a filter is not encode-enabled, the corresponding \c H5Pset_*
* function will return an error if the filter is added to a dataset
* creation property list (which is required if the filter is to be
* used to encode that dataset). For example, if the
* #H5Z_FILTER_CONFIG_ENCODE_ENABLED flag is not returned for the SZIP
* filter, #H5Z_FILTER_SZIP, a call to H5Pset_szip() will fail.
*
* If a filter is not decode-enabled, the application will not be able
* to read an existing file encoded with that filter.
*
* This function should be called, and the returned \p
* filter_config_flags analyzed, before calling any other function,
* such as H5Pset_szip() , that might require a particular filter
* configuration.
*
* \since 1.6.3
*/
H5_DLL herr_t H5Zget_filter_info(H5Z_filter_t filter, unsigned int *filter_config_flags);
#ifdef __cplusplus
}
#endif
#endif /* _H5Zpublic_H */