2024-02-22 10:27:40 +00:00
|
|
|
/*================================================================================================*\
|
|
|
|
|| ||
|
|
|
|
|| /$$$$$$$ /$$ /$$ /$$ /$$ ||
|
|
|
|
|| | $$__ $$|__/ | $$ /$ | $$| $$ ||
|
|
|
|
|| | $$ \ $$ /$$ /$$$$$$ | $$ /$$$| $$| $$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ ||
|
|
|
|
|| | $$$$$$$ | $$ /$$__ $$ | $$/$$ $$ $$| $$__ $$ /$$__ $$ /$$__ $$ /$$__ $$ ||
|
|
|
|
|| | $$__ $$| $$| $$ \ $$ | $$$$_ $$$$| $$ \ $$| $$ \ $$| $$ \ $$| $$ \ $$ ||
|
|
|
|
|| | $$ \ $$| $$| $$ | $$ | $$$/ \ $$$| $$ | $$| $$ | $$| $$ | $$| $$ | $$ ||
|
|
|
|
|| | $$$$$$$/| $$| $$$$$$$ | $$/ \ $$| $$ | $$| $$$$$$/| $$$$$$/| $$$$$$$/ ||
|
|
|
|
|| |_______/ |__/ \____ $$ |__/ \__/|__/ |__/ \______/ \______/ | $$____/ ||
|
|
|
|
|| /$$ \ $$ | $$ ||
|
|
|
|
|| | $$$$$$/ | $$ ||
|
|
|
|
|| \______/ |__/ ||
|
|
|
|
|| ||
|
|
|
|
|| DESCRIPTION: ||
|
|
|
|
|| ------------ ||
|
|
|
|
|| ||
|
|
|
|
|| This header defines a set of derrived types that are used to describe and ||
|
|
|
|
|| instruct the bwc (de-)compression library. ||
|
|
|
|
|| ||
|
|
|
|
|| -------------------------------------------------------------------------------------------- ||
|
|
|
|
|| Copyright (c) 2023, High Performance Computing Center - University of Stuttgart ||
|
|
|
|
|| ||
|
|
|
|
|| Redistribution and use in source and binary forms, with or without modification, are ||
|
|
|
|
|| permitted provided that the following conditions are met: ||
|
|
|
|
|| ||
|
|
|
|
|| (1) Redistributions of source code must retain the above copyright notice, this list of ||
|
|
|
|
|| conditions and the following disclaimer. ||
|
|
|
|
|| ||
|
|
|
|
|| (2) Redistributions in binary form must reproduce the above copyright notice, this list ||
|
|
|
|
|| of conditions and the following disclaimer in the documentation and/or other ||
|
|
|
|
|| materials provided with the distribution. ||
|
|
|
|
|| ||
|
|
|
|
|| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS ||
|
|
|
|
|| OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ||
|
|
|
|
|| MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ||
|
|
|
|
|| COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ||
|
|
|
|
|| EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ||
|
|
|
|
|| SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ||
|
|
|
|
|| HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ||
|
|
|
|
|| TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, ||
|
|
|
|
|| EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ||
|
|
|
|
|| ||
|
|
|
|
\*================================================================================================*/
|
2023-06-20 11:43:33 +00:00
|
|
|
#ifndef BWC_TYPES_H
|
|
|
|
#define BWC_TYPES_H
|
|
|
|
|
2024-02-22 10:27:40 +00:00
|
|
|
#include <stdio.h>
|
|
|
|
/************************************************************************************************\
|
|
|
|
|| _ _ _ ____ _ _ _ ___ ____ ||
|
|
|
|
|| | |\ | | | | | | \ |___ ||
|
|
|
|
|| | | \| |___ |___ |__| |__/ |___ ||
|
|
|
|
|| ||
|
|
|
|
\************************************************************************************************/
|
|
|
|
#ifdef BWC_SINGLE_PRECISION
|
|
|
|
#include "prim_types_single.h"
|
|
|
|
#else
|
|
|
|
#include "prim_types_double.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "constants.h"
|
|
|
|
#include "mq_types.h"
|
|
|
|
|
|
|
|
/************************************************************************************************\
|
|
|
|
|| ___ ____ ____ ____ _ _ _ ____ ___ ___ _ _ ___ ____ ____ ||
|
|
|
|
|| | \ |___ |__/ |__/ | | | |___ | \ | \_/ |__] |___ [__ ||
|
|
|
|
|| |__/ |___ | \ | \ | \/ |___ |__/ | | | |___ ___] ||
|
|
|
|
|| ||
|
|
|
|
\************************************************************************************************/
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This union describes a simple data type used to store a single sample of a !
|
|
|
|
! numerical dataset. The union allows access to the raw bit representation of the !
|
|
|
|
! data sample. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef union
|
|
|
|
{
|
|
|
|
bwc_raw raw; // Raw data sample access.
|
|
|
|
bwc_float f; // IEEE 754 representation of sample.
|
|
|
|
} bwc_sample;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure is used to store the metadata and boy of a packed stream. Tile and !
|
|
|
|
! and paramter index can be supplied to uniquely identify the stream. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint64 size; // Size of packed stream.
|
|
|
|
uint64 position; // Reading/Writing pos. in the stream.
|
|
|
|
|
|
|
|
uchar *access; // Pointer used to parse packed stream.
|
|
|
|
uchar *memory; // Memory handle for the packed stream.
|
|
|
|
} bwc_stream;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure defines a single tagtree node which stores the node value (tag), !
|
|
|
|
! node threshold as well as the address of the parent node. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct node
|
|
|
|
{
|
|
|
|
uint64 index; // Index of current node.
|
|
|
|
|
|
|
|
uint16 value; // Tagtree node value.
|
|
|
|
uint16 threshold; // Tagtree node threshold.
|
|
|
|
|
|
|
|
struct node* parent; // Parent of current node.
|
|
|
|
} bwc_tagtree_node;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure defines a tagtree instance with spatial and temporal leaves that !
|
|
|
|
! can be used to encode codeblock tags - e.g. number of significant bitplanes - to !
|
|
|
|
! efficiently store them in the compressed codestream. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint64 leavesX, leavesY; // Number of spatial tagtree leafs.
|
|
|
|
uint64 leavesZ, leavesTS; // Number of temporal tagtree leafs.
|
|
|
|
|
|
|
|
bwc_tagtree_node *nodes; // Pointer to the tagtree nodes.
|
|
|
|
} bwc_tagtree;
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure defines a linked list which stores the size, index, and bit pre- !
|
|
|
|
! cision The string name is used to store the parameter name supplied by the !
|
|
|
|
! function caller. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct opt
|
|
|
|
{
|
|
|
|
char name[24]; // Parameter name.
|
|
|
|
uint8 id; // Parameter index.
|
|
|
|
|
|
|
|
uint64 size; // Parameter size after sub-sampling.
|
|
|
|
uint8 precision; // Parameter precision.
|
|
|
|
|
|
|
|
struct opt *next; // Next element in linked-list.
|
|
|
|
struct opt *root; // Linked-list root.
|
|
|
|
} bwc_cmd_opts_ll;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure holds all the global information of an uncompressed data set !
|
|
|
|
! including its spatial and temporal dimensions, number of parameters, file !
|
|
|
|
! extension and parameter information as well as the codec precision. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint64 nX, nY, nZ; // Spatial size of uncompressed data-set.
|
|
|
|
uint64 nTS; // Temp. size of uncompressed data-set.
|
|
|
|
|
|
|
|
uint8 nPar; // Number of parameters.
|
|
|
|
|
|
|
|
uint8 precision; // Flag defining codec precision.
|
|
|
|
|
|
|
|
uint8 codec_prec; // Encoder/decoder bit precision.
|
|
|
|
char f_ext[20]; // Uncompressed data set file extension.
|
|
|
|
|
|
|
|
bwc_cmd_opts_ll *parameter; // Command options linked-list.
|
|
|
|
} bwc_gl_inf;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure stores the numerical dataset/compressed bitstream passed to or !
|
|
|
|
! returned from the (de)compressor. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
bwc_gl_inf info; // Gloabal info structure.
|
|
|
|
FILE *fp; // File point to (un)compr. data-set.
|
|
|
|
|
|
|
|
struct codestream
|
|
|
|
{
|
2024-02-22 15:25:52 +00:00
|
|
|
bwc_stream *data; // Data codestream block.
|
|
|
|
bwc_stream *aux; // Auxiliary info. codestream block.
|
|
|
|
bwc_stream *com; // Comment codestream block.
|
2024-02-22 10:27:40 +00:00
|
|
|
}codestream;
|
|
|
|
|
|
|
|
struct field
|
|
|
|
{
|
|
|
|
double *d; // Double precision numerical data-set.
|
|
|
|
float *f; // Single precision numerical data-set.
|
|
|
|
}field;
|
|
|
|
} bwc_data;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure defines and stores all necessary data for a compressed codeblock. !
|
|
|
|
! The coding pass lengths and distortion rate arrays define the convex hull used !
|
|
|
|
! for during rate controlling. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint64 L[MAXIMUM_NO_PASSES]; // Coding pass lengths of an ecnoded blck.
|
|
|
|
uint16 S[MAXIMUM_NO_PASSES + 1]; // Distortion rate of an encoded block.
|
|
|
|
|
|
|
|
uint8 Kmsbs; // N.o. insignificant leading bitplanes.
|
|
|
|
uint8 K; // First significant bitplane.
|
|
|
|
|
|
|
|
uint8 Z; // Number of coding passes generated.
|
|
|
|
|
|
|
|
uchar *data; // Memory handle to compressed bitstream.
|
|
|
|
} bwc_encoded_cblk;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure holds all the control parameters for the current precinct used to !
|
|
|
|
! instruct the bwc codec to (de)compress a floating point array. The unique state !
|
|
|
|
! variables are used during length encoding both for quality layer estimation as !
|
|
|
|
! well as packet assembly. The cp_contr access pointer allows access to the memory !
|
|
|
|
! chunck employed to store the coding passes contributing to a specific quality !
|
|
|
|
! layer. The parameter K represents the most significant bitplane present in the !
|
|
|
|
! current codeblock. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint16 beta; // Codeblock unique state variable.
|
|
|
|
uint16 beta_est; // State variable used for ql estimation.
|
|
|
|
|
|
|
|
uint16 K; // Codeblock spec. significant bitplane.
|
|
|
|
|
|
|
|
int16 *memory; // Coding pass contribution to q. layer.
|
|
|
|
int16 *cp_contr; // Coding pass contribution access ptr.
|
|
|
|
} bwc_cblk_ctrl;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure is used to store the start and end points as well as the index !
|
|
|
|
! for a specific codeblock. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint32 idx; // Codeblock index w.r.t. precinct.
|
|
|
|
|
|
|
|
uint64 X0, Y0, Z0, TS0; // Codeblock starting point.
|
|
|
|
uint64 X1, Y1, Z1, TS1; // Codeblock end point.
|
|
|
|
} bwc_cblk_inf;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure holds all the necessary parameters used to define and control a !
|
|
|
|
! bwc codeblock. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
bwc_cblk_inf info; // Codeblock info structure.
|
|
|
|
bwc_cblk_ctrl control; // Codeblock control structure.
|
|
|
|
bwc_encoded_cblk *encoded_block; // Encoded block structure.
|
|
|
|
} bwc_codeblock;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure holds all the control parameters for the current precinct used to !
|
|
|
|
! instruct the bwc codec to (de)compress a floating point array. The number !
|
|
|
|
! codeblocks are stored for all spatial and temporal dimensions as well as for the !
|
|
|
|
! entire precinct. The two tagtrees are employed to record specific properties of !
|
|
|
|
! the underlying data that is to be compressed. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint64 number_of_codeblocks; // Number of codeblocks w.r.t res. level.
|
|
|
|
|
|
|
|
uint16 numCbX, numCbY; // Number of spaatial codeblocks.
|
|
|
|
uint16 numCbZ, numCbTS; // Number of temporal codeblocks.
|
|
|
|
|
|
|
|
bwc_tagtree *tag_inclusion; // Quality layer contribution tagtree.
|
|
|
|
bwc_tagtree *tag_msbs; // Most significant bit-planes tagtree.
|
|
|
|
} bwc_prec_ctrl;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! DESCRIPTION NEEDED !
|
|
|
|
! This structure is used to store the start and end points for the current !
|
|
|
|
! precinct. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint32 X0, Y0, Z0, TS0; // Precinct starting point.
|
|
|
|
uint32 X1, Y1, Z1, TS1; // Precinct end point.
|
|
|
|
} bwc_prec_inf;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure holds all the necessary parameters used to define and control a !
|
|
|
|
! bwc precinct. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
bwc_prec_inf info; // Precinct info structure.
|
|
|
|
bwc_prec_ctrl control; // Precinct control structure.
|
|
|
|
bwc_codeblock *codeblock; // Precinct specific codeblocks.
|
|
|
|
} bwc_precinct;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure holds all the control parameters for the current subband used to !
|
|
|
|
! instruct the bwc codec to (de)compress a floating point array. The highband flag !
|
|
|
|
! is used to identify the type of highband a specific wavelet band belongs to !
|
|
|
|
! (e.g. HHHH). The quantization step size mantissa and exponent for a subband is !
|
|
|
|
! stored alongside its actual value as well as the effective step size that is !
|
|
|
|
! applied to the wavelet coefficients. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uchar highband_flag; // Current wavelet highband type
|
|
|
|
|
|
|
|
uint16 Kmax; // Dynamic ranger after transformation.
|
|
|
|
|
|
|
|
uint16 qt_mantissa; // Quantization step size mantissa.
|
|
|
|
uint8 qt_exponent; // Quantization step size exponent.
|
|
|
|
|
|
|
|
bwc_float qt_effective_step_size; // Effective quantization step size.
|
|
|
|
bwc_float qt_step_size; // Quantization step size.
|
|
|
|
} bwc_subb_ctrl;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure is used to store the start and end points as well as the energy !
|
|
|
|
! gain factor of the wavelet decomposition that has been applied to the subband !
|
|
|
|
! data samples during transformation. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint64 X0, Y0, Z0, TS0; // Subband starting point.
|
|
|
|
uint64 X1, Y1, Z1, TS1; // Subband end point.
|
|
|
|
|
|
|
|
bwc_float dwt_gain; // Subband energy gain factor.
|
|
|
|
} bwc_subb_inf;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure holds all the necessary parameters used to define and control a !
|
|
|
|
! bwc subband. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
bwc_subb_inf info; // Subband info structure.
|
|
|
|
bwc_subb_ctrl control; // Subband control structure.
|
|
|
|
|
|
|
|
bwc_precinct *precinct; // Subband specific precincts.
|
|
|
|
} bwc_subband;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure holds all the parameters used to assemble a codestream packet. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
2024-02-22 15:25:52 +00:00
|
|
|
bwc_stream header; // Packed stream header.
|
|
|
|
bwc_stream body; // Packed stream body.
|
2024-02-22 10:27:40 +00:00
|
|
|
uint8 e; // Indicator for packet cb. contributions.
|
|
|
|
|
|
|
|
uint32 size; // Codestream packet size.
|
|
|
|
|
|
|
|
uint32 p; // Position of curr. packet in codestream.
|
|
|
|
uint8 c, l, r; // Parameter, Quality Layer and Resolution
|
|
|
|
// codestream position markers.
|
|
|
|
} bwc_packet;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure holds all the control parameters for the current resolution level !
|
|
|
|
! used to instruct the bwc codec to (de)compress a floating point array. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint16 numPX, numPY; // Spatial number of precincts.
|
|
|
|
uint16 numPZ, numPTS; // Temporal number of precincts.
|
|
|
|
|
|
|
|
uint8 rcbX, rcbY; // Real spatial codeblock size.
|
|
|
|
uint8 rcbZ, rcbTS; // Real temporal codeblock size.
|
|
|
|
|
|
|
|
uint64 number_of_precincts; // N.o. precincts in resolution level.
|
|
|
|
uint8 number_of_subbands; // N.o. subbands in resolution level.
|
|
|
|
} bwc_res_ctrl;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure is used to store the name, start and end points of the current !
|
|
|
|
! resolution level. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint64 X0, Y0, Z0, TS0; // Resolution level starting point.
|
|
|
|
uint64 X1, Y1, Z1, TS1; // Resolution level end point.
|
|
|
|
} bwc_res_inf;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure holds all the necessary parameters used to define and control a !
|
|
|
|
! bwc resolution level. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
bwc_res_inf info; // Resolution level info structure.
|
|
|
|
bwc_res_ctrl control; // Resolution level control structure.
|
|
|
|
|
|
|
|
bwc_subband *subband; // Structure defining a bwc subband.
|
|
|
|
bwc_packet *packet; // Structure defining a bwc packet.
|
|
|
|
} bwc_resolution;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure is used to directly access the parameter codeblocks during !
|
|
|
|
! entropy (de-)encoding to facilitate shared memory parallelization. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
bwc_codeblock *codeblock; // Access to all tile param. codeblocks.
|
|
|
|
bwc_precinct *precinct; // Access to all tile param. precincts.
|
|
|
|
bwc_subband *subband; // Access to all tile param. subbands.
|
|
|
|
} bwc_cblk_access;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure holds all the control parameters for the current tile param. used !
|
|
|
|
! to instruct the bwc codec to (de)compress a floating point array. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint64 number_of_codeblocks; // Number of codeblocks in the tile param.
|
|
|
|
bwc_float alpha, beta; // Parameters used for normalization.
|
|
|
|
} bwc_param_ctrl;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure is used to store the name, start and end points as well as the !
|
|
|
|
! overall size of a parameter tile. Furthermore, the minimum and maximum sample !
|
|
|
|
! values for the current parameter tile are stored. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint64 size; // Parameter size.
|
|
|
|
char *name; // Parameter name.
|
|
|
|
|
|
|
|
uint64 X0, Y0, Z0, TS0; // Tile parameter starting point.
|
|
|
|
uint64 X1, Y1, Z1, TS1; // Tile parameter end point.
|
|
|
|
|
|
|
|
uint8 precision; // Tile parameter precision.
|
|
|
|
|
|
|
|
bwc_float parameter_min; // Min. value of tile parameter.
|
|
|
|
bwc_float parameter_max; // Max. value of tile parameter.
|
|
|
|
} bwc_param_inf;
|
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure holds all the necessary parameters used to define and control the !
|
|
|
|
! (de)compression of a bwc tile parameter. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint64 size; // Size of the bwc_float data structure.
|
|
|
|
bwc_sample *data; // Tile parameter values.
|
|
|
|
|
|
|
|
bwc_param_inf info; // Parameter info structure.
|
|
|
|
bwc_param_ctrl control; // Parameter control structure.
|
|
|
|
|
|
|
|
bwc_resolution *resolution; // Tile parameter specific resol. levels.
|
|
|
|
|
|
|
|
bwc_cblk_access *access; // Access to all tile param. codeblocks.
|
|
|
|
} bwc_parameter;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure holds all the control parameters for the current tile used to in- !
|
|
|
|
! struct the bwc codec to (de)compress a floating point array. !
|
|
|
|
! The slope_min and slope_max values represent the minimum and maximum distortion !
|
|
|
|
! rates for the compressed data-samples of a specific tile. These values define !
|
|
|
|
! the distortion-bitrate convex hull used for rate control. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint64 body_size; // Size of the tile parameter body.
|
|
|
|
uint64 Ltp; // Tile part size.
|
|
|
|
uint32 header_size; // Approx. size of the tile param. header.
|
|
|
|
|
|
|
|
uint64 nPackets; // Number of packets assembled for tile.
|
|
|
|
uint32 max_Prec; // Max. N.o. precincts in all tile params.
|
|
|
|
|
|
|
|
uint16 dflt_param_c; // Default idx when writing COD in header.
|
|
|
|
uint16 dflt_param_q; // Default idx when writing QCD in header.
|
|
|
|
|
|
|
|
uint16 slope_min, slope_max; // Min/Max for the convex hull slp.
|
|
|
|
} bwc_tile_ctrl;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure is used to store the start and end points of the tile as well as !
|
|
|
|
! its overall size and index. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint64 size; // Tile size.
|
|
|
|
uint32 tile_index; // Unique tile index.
|
|
|
|
|
|
|
|
uint64 X0, Y0, Z0, TS0; // Tile starting point.
|
|
|
|
uint64 X1, Y1, Z1, TS1; // Tile end point.
|
|
|
|
|
|
|
|
} bwc_tile_inf;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure holds all the necessary parameters used to define and control the !
|
|
|
|
! (de)compression of a bwc tile. The packet_sequence pointer array is used to !
|
|
|
|
! store the bitstream packet memory hanldes of the underlying tile in a prede- !
|
|
|
|
! fined sequence according to the bwc_progression_ord parameter. The pointer array !
|
|
|
|
! is employed during codestream assembly. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
bwc_tile_inf info; // Tile info structure.
|
|
|
|
bwc_tile_ctrl control; // Tile control structure.
|
|
|
|
|
|
|
|
bwc_parameter *parameter; // Tile specific parameter structure.
|
|
|
|
bwc_packet **packet_sequence; // Tile specific packet sequence.
|
|
|
|
} bwc_tile;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure holds all the global control parameters, including the tile, !
|
|
|
|
! precinct and codeblock sizes as well as the global number of tiles, used to !
|
|
|
|
! instruct the bwc codec to (de)compress a floating point array. !
|
|
|
|
! The number of decompositions (numDecompX etc.) define the number of times the !
|
|
|
|
! selected wavelet filter (kernelX etc.) is applied alongside each spatial and !
|
|
|
|
! temporal direction. The global number of decomposition levels is stored in the !
|
|
|
|
! appropriate variable. !
|
|
|
|
! The parameters qt_mantissa and qt_exponent define the mantissa and exponent of !
|
|
|
|
! the global quantization step size appropriate for the specified number of !
|
|
|
|
! wavelet decomposition levels. The quantization_style signals if the quantization !
|
|
|
|
! step size for the subsequent subbands should be derrived from the global !
|
|
|
|
! parameter, or not. The variable Qm represents the dynamic range of the !
|
|
|
|
! float-to-fixed point transformation employed pre-compression. !
|
|
|
|
! The bitrate array stores up to 10 bitrate values - average bits per datasample - !
|
|
|
|
! that define the codestream quality layers. The largest bitrates defines the !
|
|
|
|
! compression ratio, while the total number of defined bitrates represent the !
|
|
|
|
! number of (quality)layers. The parameter use_layer stores the index of the !
|
|
|
|
! quality layer that is used during decompression. The progression order defines !
|
|
|
|
! the packet sequence as they will appear in the compressed codestream. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint16 CSsgc; // Flag signaling user control variable.
|
|
|
|
uchar error_resilience; // Flag signalling error resilience.
|
|
|
|
|
|
|
|
uint64 tileSizeX, tileSizeY; // Spatial tile size.
|
|
|
|
uint64 tileSizeZ, tileSizeTS; // Temporal tile size.
|
|
|
|
|
|
|
|
uint64 nTiles; // Global number of tiles.
|
|
|
|
|
|
|
|
uint8 precSizeX, precSizeY; // Spatial precinct size.
|
|
|
|
uint8 precSizeZ, precSizeTS; // Temporal precinct size.
|
|
|
|
|
|
|
|
uint8 cbX, cbY; // Spatial codeblock size.
|
|
|
|
uint8 cbZ, cbTS; // Temporal codeblock size.
|
|
|
|
|
|
|
|
bwc_dwt_filter KernelX, KernelY; // Spatial wavelet kernels.
|
|
|
|
bwc_dwt_filter KernelZ, KernelTS; // Temporal wavelet kernels.
|
|
|
|
|
|
|
|
uint8 decompX, decompY; // Number of wavelet decompositions ...
|
|
|
|
uint8 decompZ, decompTS; // ... for each of the four dimensions.
|
|
|
|
uint8 nDecomp; // Maximum No. wavelet decompositions.
|
|
|
|
|
|
|
|
uint32 qt_exponent, qt_mantissa; // Global qunatization exponent/mantissa.
|
|
|
|
uint8 Qm; // Q number format range (m).
|
|
|
|
|
|
|
|
float *bitrate; // Quality layers defined by bitrate.
|
|
|
|
|
|
|
|
uint8 nLayers; // Number of quality layers.
|
|
|
|
uint8 useLayer; // Quality layer used for decompression.
|
|
|
|
|
|
|
|
uint8 guard_bits; // Number of guard bits during quant.
|
|
|
|
|
2024-06-25 18:54:44 +00:00
|
|
|
uint64 headerSize; // Size estimation of the global header.
|
|
|
|
uint64 codestreamSize; // Size of entire code-stream.
|
2024-02-22 10:27:40 +00:00
|
|
|
|
|
|
|
bwc_quant_st quantization_style; // Quantization style.
|
|
|
|
bwc_prog_ord progression; // Packet progression order.
|
|
|
|
} bwc_gl_ctrl;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------------------*\
|
|
|
|
! !
|
|
|
|
! DESCRIPTION: !
|
|
|
|
! ------------ !
|
|
|
|
! !
|
|
|
|
! This structure holds all the necessary parameters defining and controling a bwc !
|
|
|
|
! (de-)compression run. !
|
|
|
|
! !
|
|
|
|
! The meter structure is used to store measurements, including important time !
|
|
|
|
! measurements, for a particular compression run. !
|
|
|
|
! !
|
|
|
|
\*----------------------------------------------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
bwc_gl_inf *info; // Gloabal info structure
|
|
|
|
bwc_gl_ctrl control; // Global control structure
|
|
|
|
|
|
|
|
bwc_tile *tile; // Structure defining bwc tile.
|
2024-06-25 18:54:44 +00:00
|
|
|
|
|
|
|
bwc_stream *aux; // Auxiliary info. codestream block.
|
|
|
|
bwc_stream *com; // Comment codestream block.
|
2024-02-22 10:27:40 +00:00
|
|
|
} bwc_field;
|
2023-06-20 11:43:33 +00:00
|
|
|
#endif
|