cmdl-tool #45
9 changed files with 1793 additions and 973 deletions
|
@ -347,6 +347,21 @@
|
|||
|| | |__| |__] |___ | |___ | |__| | \| |___ | | |__| | \| ___] ||
|
||||
|| ||
|
||||
\************************************************************************************************************/
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
! ------------ !
|
||||
! This function deallocates the data structure used to store an numerical dataset !
|
||||
! and can be called if an error occurs or once the data is no longer needed is to be closed. !
|
||||
! The deallocation will be carried out down to the structure levels that have been allocated. !
|
||||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
void
|
||||
eas3_free_data(eas3_data* data);
|
||||
|
||||
uchar
|
||||
bwc_to_eas3(bwc_stream *const stream, eas3_data *const data);
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: bwc_data* read_eas3(const char* const filename) !
|
||||
! -------------- !
|
||||
|
|
|
@ -100,6 +100,10 @@
|
|||
size_t assemble_codestream (bwc_codec *const codec,
|
||||
bwc_stream *const stream);
|
||||
//==========|==========================|======================|======|======|=====================
|
||||
bwc_codec* parse_main_header (bwc_codec *const codec,
|
||||
bwc_stream *const data,
|
||||
bitstream *const stream);
|
||||
//==========|==========================|======================|======|======|=====================
|
||||
bwc_codec* parse_codestream (bwc_codec *const codec,
|
||||
bwc_stream *const stream,
|
||||
uint8 const layer);
|
||||
|
|
|
@ -142,6 +142,10 @@
|
|||
uint64 const tilesTS,
|
||||
bwc_tile_instr const instr);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
bwc_header* bwc_open_header (void *const inpbuf);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
void bwc_close_header (bwc_header *const header);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
uchar bwc_create_compression (bwc_codec *const codec,
|
||||
bwc_stream *const data,
|
||||
char *const rate_control);
|
||||
|
|
|
@ -659,18 +659,25 @@
|
|||
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. !
|
||||
! !
|
||||
\*----------------------------------------------------------------------------------------------*/
|
||||
/*================================================================================================*/
|
||||
/**
|
||||
* @details Structure that is used to probe header information from a compressed data set.
|
||||
*/
|
||||
/*================================================================================================*/
|
||||
typedef struct
|
||||
{
|
||||
bwc_gl_inf info; // Global info structure
|
||||
bwc_gl_ctrl control; // Global control structure
|
||||
bwc_span aux; // Auxiliary info. codestream block.
|
||||
bwc_span com; // Comment codestream block.
|
||||
} bwc_header;
|
||||
|
||||
/*================================================================================================*/
|
||||
/**
|
||||
* @details Structure holding all the necessary parameters defining and controlling a bwc
|
||||
* (de-)compression run.
|
||||
*/
|
||||
/*================================================================================================*/
|
||||
typedef struct
|
||||
{
|
||||
bwc_gl_inf info; // Global info structure
|
||||
|
|
|
@ -1,350 +0,0 @@
|
|||
/*====================================================================================================================*\
|
||||
|| ||
|
||||
|| /$$$$$$$ /$$ /$$ /$$ /$$ ||
|
||||
|| | $$__ $$|__/ | $$ /$ | $$| $$ ||
|
||||
|| | $$ \ $$ /$$ /$$$$$$ | $$ /$$$| $$| $$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ ||
|
||||
|| | $$$$$$$ | $$ /$$__ $$ | $$/$$ $$ $$| $$__ $$ /$$__ $$ /$$__ $$ /$$__ $$ ||
|
||||
|| | $$__ $$| $$| $$ \ $$ | $$$$_ $$$$| $$ \ $$| $$ \ $$| $$ \ $$| $$ \ $$ ||
|
||||
|| | $$ \ $$| $$| $$ | $$ | $$$/ \ $$$| $$ | $$| $$ | $$| $$ | $$| $$ | $$ ||
|
||||
|| | $$$$$$$/| $$| $$$$$$$ | $$/ \ $$| $$ | $$| $$$$$$/| $$$$$$/| $$$$$$$/ ||
|
||||
|| |_______/ |__/ \____ $$ |__/ \__/|__/ |__/ \______/ \______/ | $$____/ ||
|
||||
|| /$$ \ $$ | $$ ||
|
||||
|| | $$$$$$/ | $$ ||
|
||||
|| \______/ |__/ ||
|
||||
|| ||
|
||||
|| DESCRIPTION: ||
|
||||
|| ------------ ||
|
||||
|| This is a simple command line tool that uses the Big Whoop library to (de)com- ||
|
||||
|| press a 2- to 4-dimensional IEEE 754 floating point array. For further infor- ||
|
||||
|| mation use the --help (-h) argument in the command-line or consult the appro- ||
|
||||
|| priate README file. ||
|
||||
|| ||
|
||||
|| STRUCTS: ||
|
||||
|| -------- ||
|
||||
|| DESCRIPTION NEEDED. ||
|
||||
|| ||
|
||||
|| DEVELOPMENT HISTORY: ||
|
||||
|| -------------------- ||
|
||||
|| ||
|
||||
|| Date Author Change Id Release Description ||
|
||||
|| ---- ------ --------- ------- ----------- ||
|
||||
|| 13.10.2017 Patrick Vogler B87D120 V 0.1.0 source file created ||
|
||||
|| 26.11.2020 Patrick Vogler B87E7E4 V 0.1.0 Command line tool refac- ||
|
||||
|| tored. ||
|
||||
|| ||
|
||||
|| ||
|
||||
|| ------------------------------------------------------------------------------------------------------ ||
|
||||
|| ||
|
||||
|| 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 OWNER 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. ||
|
||||
|| ||
|
||||
\*====================================================================================================================*/
|
||||
#ifndef BWC_CMDL_H
|
||||
#define BWC_CMDL_H
|
||||
|
||||
/********************************************************************************************************************\
|
||||
|| _ _ _ ____ _ _ _ ___ ____ ||
|
||||
|| | |\ | | | | | | \ |___ ||
|
||||
|| | | \| |___ |___ |__| |__/ |___ ||
|
||||
|| ||
|
||||
\********************************************************************************************************************/
|
||||
#include <inttypes.h>
|
||||
|
||||
/********************************************************************************************************************\
|
||||
|| _ _ ____ ____ ____ ____ ____ ||
|
||||
|| |\/| |__| | |__/ | | [__ ||
|
||||
|| | | | | |___ | \ |__| ___] ||
|
||||
|| ||
|
||||
\********************************************************************************************************************/
|
||||
/*------------------------------------------------------------------------------------------------------------------*\
|
||||
! DESCRIPTION: !
|
||||
! ------------ !
|
||||
! !
|
||||
! These macros define minimum and maximum operators as well as an operator used !
|
||||
! to evaluate the size of an array. !
|
||||
! !
|
||||
! MACROS: !
|
||||
! ------- !
|
||||
! Name Description !
|
||||
! ---- ----------- !
|
||||
! MAX(x, y) - Returns the maximum value of !
|
||||
! two values. !
|
||||
! !
|
||||
! MIN(x, y) - Returns the minimum value of !
|
||||
! two values. !
|
||||
! !
|
||||
! GET_LEN(x) - Returns the size of an array. !
|
||||
! !
|
||||
! DEVELOPMENT HISTORY: !
|
||||
! -------------------- !
|
||||
! !
|
||||
! Date Author Change Id Release Description !
|
||||
! ---- ------ --------- ------- ----------- !
|
||||
! 21.03.2018 Patrick Vogler B87D120 V 0.1.0 macros created !
|
||||
! 16.09.2019 Patrick Vogler B87E7E4 V 0.1.0 Added GET_LEN(X) macro. !
|
||||
! !
|
||||
\*------------------------------------------------------------------------------------------------------------------*/
|
||||
#define MAX(x, y) (((x) < (y))?(y):(x))
|
||||
#define MIN(x, y) (((x) > (y))?(y):(x))
|
||||
|
||||
/*------------------------------------------------------------------------------------------------------------------*\
|
||||
! DESCRIPTION: !
|
||||
! ------------ !
|
||||
! !
|
||||
! These Constants define codestream markers used to create the embedded code- !
|
||||
! stream. !
|
||||
! !
|
||||
! MACROS: !
|
||||
! ------- !
|
||||
! Name Description !
|
||||
! ---- ----------- !
|
||||
! SOC - Start of code-stream !
|
||||
! SGI - Global data-set information !
|
||||
! SGC - Global control parameters !
|
||||
! SGR - Global register containing tile !
|
||||
! bitstream size information !
|
||||
! SAX - Auxiliary data-set information !
|
||||
! TLM - Packet lengths: main header !
|
||||
! PLM - Packet lengths: tile-part !
|
||||
! PPM - Quantization default !
|
||||
! COM - Comment !
|
||||
! EOH - End of header !
|
||||
! PLT - Packed packet headers: main header !
|
||||
! PPT - Packed packet headers: tile-part !
|
||||
! SOT - Start of tile !
|
||||
! SOP - Start of packet !
|
||||
! EPH - End of packet header !
|
||||
! SOD - Start of data !
|
||||
! EOC - End of code-stream !
|
||||
! !
|
||||
! DEVELOPMENT HISTORY: !
|
||||
! -------------------- !
|
||||
! !
|
||||
! Date Author Change Id Release Description !
|
||||
! ---- ------ --------- ------- ----------- !
|
||||
! 01.12.2017 Patrick Vogler B87D120 V 0.1.0 macros created !
|
||||
! !
|
||||
\*------------------------------------------------------------------------------------------------------------------*/
|
||||
#define SOC 0xFF50
|
||||
#define SGI 0xFF51
|
||||
#define SGC 0xFF52
|
||||
#define SAX 0xFF53
|
||||
#define TLM 0xFF54
|
||||
#define PLM 0xFF55
|
||||
#define PPM 0xFF56
|
||||
#define COM 0xFF57
|
||||
#define EOH 0xFF58
|
||||
#define PLT 0xFF60
|
||||
#define PPT 0xFF61
|
||||
#define SOT 0xFF90
|
||||
#define SOP 0xFF91
|
||||
#define EPH 0xFF92
|
||||
#define SOD 0xFF93
|
||||
#define EOC 0xFFFF
|
||||
|
||||
/*------------------------------------------------------------------------------------------------------------------*\
|
||||
! DESCRIPTION: !
|
||||
! ------------ !
|
||||
! !
|
||||
! These macros define flags used for codestream parsing. !
|
||||
! !
|
||||
! MACROS: !
|
||||
! ------- !
|
||||
! Name Description !
|
||||
! ---- ----------- !
|
||||
! CODESTREAM_OK - No errors detected in Codestream !
|
||||
! !
|
||||
! CODESTREAM_READ - Codestream has been fully read. !
|
||||
! !
|
||||
! DEVELOPMENT HISTORY: !
|
||||
! -------------------- !
|
||||
! !
|
||||
! Date Author Change Id Release Description !
|
||||
! ---- ------ --------- ------- ----------- !
|
||||
! 01.08.2019 Patrick Vogler B87D120 V 0.1.0 macros created !
|
||||
! !
|
||||
\*------------------------------------------------------------------------------------------------------------------*/
|
||||
#define CODESTREAM_OK 0x00
|
||||
#define CODESTREAM_READ 0x80
|
||||
|
||||
/*------------------------------------------------------------------------------------------------------------------*\
|
||||
! DESCRIPTION: !
|
||||
! ------------ !
|
||||
! !
|
||||
! These Constants define common error messages used throughout the bwc library. !
|
||||
! !
|
||||
! MACROS: !
|
||||
! ------- !
|
||||
! Name Description !
|
||||
! ---- ----------- !
|
||||
! CSTERROR - Codestream parser has encoun- !
|
||||
! tered invalid marker. !
|
||||
! !
|
||||
! MEMERROR - Allocation has returned a NULL !
|
||||
! pointer due to limited memory. !
|
||||
! !
|
||||
! RDERROR - Invalid number of bytes read !
|
||||
! from file. !
|
||||
! !
|
||||
! WRTERROR - Invalid number of bytes writ- !
|
||||
! ten to file. !
|
||||
! !
|
||||
! DEVELOPMENT HISTORY: !
|
||||
! -------------------- !
|
||||
! !
|
||||
! Date Author Change Id Release Description !
|
||||
! ---- ------ --------- ------- ----------- !
|
||||
! 01.12.2017 Patrick Vogler B87D120 V 0.1.0 macros created !
|
||||
! !
|
||||
\*------------------------------------------------------------------------------------------------------------------*/
|
||||
#define CSTERROR "o##########################################################o\n"\
|
||||
"| ERROR: Invalid Codestream |\n"\
|
||||
"o##########################################################o\n"
|
||||
|
||||
#define MEMERROR "o##########################################################o\n"\
|
||||
"| ERROR: Out of Memory |\n"\
|
||||
"o##########################################################o\n"
|
||||
|
||||
#define RDERROR "o##########################################################o\n"\
|
||||
"| ERROR: Invalid Number of Bytes Read from File. |\n"\
|
||||
"o##########################################################o\n"
|
||||
|
||||
#define WRTERROR "o##########################################################o\n"\
|
||||
"| ERROR: Invalid Number of Bytes Written to File. |\n"\
|
||||
"o##########################################################o\n"
|
||||
|
||||
#define GET_DIM(x) (sizeof(x)/sizeof(*(x)))
|
||||
/********************************************************************************************************************\
|
||||
|| ___ ____ ____ ____ _ _ _ ____ ___ ___ _ _ ___ ____ ____ ||
|
||||
|| | \ |___ |__/ |__/ | | | |___ | \ | \_/ |__] |___ [__ ||
|
||||
|| |__/ |___ | \ | \ | \/ |___ |__/ | | | |___ ___] ||
|
||||
|| ||
|
||||
\********************************************************************************************************************/
|
||||
/*------------------------------------------------------------------------------------------------------------------*\
|
||||
! DESCRIPTION: !
|
||||
! ------------ !
|
||||
! !
|
||||
! This structure defines the attributes of a single argument supported by the bwc !
|
||||
! command line tool. !
|
||||
! !
|
||||
! PARAMETERS: !
|
||||
! ----------- !
|
||||
! Name Type Description !
|
||||
! ---- ---- ----------- !
|
||||
! active char - Flag indicating if the argu- !
|
||||
! ment is active. !
|
||||
! !
|
||||
! arg_long char - Long form of the argument name. !
|
||||
! !
|
||||
! arg_short char - Short form of the argument !
|
||||
! name. !
|
||||
! !
|
||||
! arg_type char - Flag signaling if the argument !
|
||||
! is optional. !
|
||||
! !
|
||||
! type char - Flag signaling the argument !
|
||||
! type. !
|
||||
! !
|
||||
! usage char - A string of 24 characters de- !
|
||||
! scribing the argument usage. !
|
||||
! !
|
||||
! definition char - A string of 1024 characters !
|
||||
! containing the argument de- !
|
||||
! scription. !
|
||||
! !
|
||||
! DEVELOPMENT HISTORY: !
|
||||
! -------------------- !
|
||||
! !
|
||||
! Date Author Change Id Release Description !
|
||||
! ---- ------ --------- ------- ----------- !
|
||||
! 14.02.2019 Patrick Vogler B87D120 V 0.1.0 struct created !
|
||||
! 26.11.2020 Patrick Vogler B87E7E4 V 0.1.0 clean up !
|
||||
! !
|
||||
\*------------------------------------------------------------------------------------------------------------------*/
|
||||
typedef struct
|
||||
{
|
||||
char active;
|
||||
char arg_long[25];
|
||||
char arg_short[3];
|
||||
char arg_type[4];
|
||||
char type[5];
|
||||
char usage[25];
|
||||
char definition[1024];
|
||||
} bwc_cmdl_args;
|
||||
|
||||
/*------------------------------------------------------------------------------------------------------------------*\
|
||||
! DESCRIPTION: !
|
||||
! ------------ !
|
||||
! This structure describes a linked list which stores all the arguments and their !
|
||||
! attributes supplied to the command line tool by the user. !
|
||||
! !
|
||||
! PARAMETERS: !
|
||||
! ----------- !
|
||||
! Name Type Description !
|
||||
! ---- ---- ----------- !
|
||||
! hash unsigned int(64 bit) - Uniquely identifiable hash that !
|
||||
! corresponds to the arg/opt name. !
|
||||
! !
|
||||
! count unsigned int(8 bit) - Counter that signifies the num- !
|
||||
! ber of modifier values stored !
|
||||
! in the linked list node. !
|
||||
! !
|
||||
! dim unsigned int(8 bit) - Dimension(s) for which the mod- !
|
||||
! ifiers have been defined !
|
||||
! !
|
||||
! active char - Flag indicating if the arg/opt !
|
||||
! is active. !
|
||||
! !
|
||||
! num_opt double* - Array of numerical modifier !
|
||||
! values. !
|
||||
! !
|
||||
! lit_opt char** - Character array of literal mod- !
|
||||
! ifier values. !
|
||||
! !
|
||||
! DEPENDENCIES: !
|
||||
! ------------- !
|
||||
! Name TYPE !
|
||||
! ---- ---- !
|
||||
! next opt* !
|
||||
! !
|
||||
! root opt* !
|
||||
! !
|
||||
! DEVELOPMENT HISTORY: !
|
||||
! -------------------- !
|
||||
! !
|
||||
! Date Author Change Id Release Description !
|
||||
! ---- ------ --------- ------- ----------- !
|
||||
! 26.04.2019 Patrick Vogler B87D120 V 0.1.0 struct created !
|
||||
! 26.11.2020 Patrick Vogler B87E7E4 V 0.1.0 clean up !
|
||||
! !
|
||||
\*------------------------------------------------------------------------------------------------------------------*/
|
||||
typedef struct arg
|
||||
{
|
||||
uint64_t hash;
|
||||
uint8_t count;
|
||||
uint8_t dim;
|
||||
char active;
|
||||
double *num_opt;
|
||||
char **lit_opt;
|
||||
struct arg *next;
|
||||
struct arg *root;
|
||||
} bwc_cmdl_arg_node;
|
||||
#endif
|
|
@ -76,7 +76,25 @@
|
|||
#include <string.h>
|
||||
|
||||
#include "eas3.h"
|
||||
#include "bwccmdl.h"
|
||||
|
||||
|
||||
/************************************************************************************************************\
|
||||
|| _ _ ____ ____ ____ ____ ____ ||
|
||||
|| |\/| |__| | |__/ | | [__ ||
|
||||
|| | | | | |___ | \ |__| ___] ||
|
||||
|| ||
|
||||
\************************************************************************************************************/
|
||||
#define MEMERROR "o##########################################################o\n"\
|
||||
"| ERROR: Out of memory |\n"\
|
||||
"o##########################################################o\n"
|
||||
|
||||
#define RDERROR "o##########################################################o\n"\
|
||||
"| ERROR: Invalid Number of Bytes Read from File. |\n"\
|
||||
"o##########################################################o\n"
|
||||
|
||||
#define WRTERROR "o##########################################################o\n"\
|
||||
"| ERROR: Invalid Number of Bytes Written to File. |\n"\
|
||||
"o##########################################################o\n"
|
||||
|
||||
/************************************************************************************************************\
|
||||
|| ___ ____ _ _ _ ____ ___ ____ ____ _ _ _ _ ____ ___ _ ____ _ _ ____ ||
|
||||
|
@ -84,15 +102,11 @@
|
|||
|| | | \ | \/ | | | |___ | |__| | \| |___ | | |__| | \| ___] ||
|
||||
|| ||
|
||||
\************************************************************************************************************/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
! ------------ !
|
||||
! This macro is used to write an additional chunck of size length to the auxilliary !
|
||||
! information. !
|
||||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
/*================================================================================================*/
|
||||
/**
|
||||
* @details Enqueues a chunck of size length to the auxilliary information.
|
||||
*/
|
||||
/*================================================================================================*/
|
||||
#define aux_enqueue(aux, chunck, chunck_len) \
|
||||
{ \
|
||||
if (aux.pos + chunck_len > aux.len) \
|
||||
|
@ -107,6 +121,11 @@
|
|||
aux.pos += chunck_len; \
|
||||
}
|
||||
|
||||
/*================================================================================================*/
|
||||
/**
|
||||
* @details Dequeues a chunck of size length from the auxilliary information.
|
||||
*/
|
||||
/*================================================================================================*/
|
||||
#define aux_dequeue(aux, chunck, chunck_len) \
|
||||
{ \
|
||||
if(aux.pos + chunck_len <= aux.len) { \
|
||||
|
@ -117,37 +136,14 @@
|
|||
} \
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
! ------------ !
|
||||
! This function converts the endianess of half, single or double precision values. !
|
||||
! !
|
||||
! PARAMETERS: !
|
||||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! value void* - Memory address of the parame- !
|
||||
! ter to be converted. !
|
||||
! !
|
||||
! RETURN VALUE: !
|
||||
! ------------- !
|
||||
! Type Description !
|
||||
! ---- ----------- !
|
||||
! - - !
|
||||
! !
|
||||
! DEVELOPMENT HISTORY: !
|
||||
! -------------------- !
|
||||
! !
|
||||
! Date Author Change Id Release Description !
|
||||
! ---- ------ --------- ------- ----------- !
|
||||
! 30.04.2019 Patrick Vogler B87D120 V 0.1.0 function created !
|
||||
! 21.11.2019 Patrick Vogler B87E7E4 V 0.1.0 functionality expanded !
|
||||
! to 32 bit integers !
|
||||
! 21.11.2019 Patrick Vogler B87E7E4 V 0.1.0 functionality expanded !
|
||||
! to 16 bit integers !
|
||||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
/*================================================================================================*/
|
||||
/**
|
||||
* @details Converts the endianess of half, single, or double precision values.
|
||||
*
|
||||
* @param[inout] value Pointer to the parameter to be converted.
|
||||
* @param[in] accuracy Precision/accuracy of the pointed parameter.
|
||||
*/
|
||||
/*================================================================================================*/
|
||||
static void
|
||||
endian_conversion(void *value,
|
||||
uint8_t const accuracy)
|
||||
|
@ -201,34 +197,56 @@ endian_conversion(void *value,
|
|||
}
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
! ------------ !
|
||||
! This function deallocates the data structure used to store an numerical dataset !
|
||||
! and can be called if an error occurs or once the data is no longer needed is to be closed. !
|
||||
! The deallocation will be carried out down to the structure levels that have been allocated. !
|
||||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
/*================================================================================================*/
|
||||
/**
|
||||
* @details Deallocates the provided eas3_data structure including all contained data.
|
||||
*
|
||||
* @param[in] data Pointer to eas3_data structure to be filled.
|
||||
*/
|
||||
/*================================================================================================*/
|
||||
void
|
||||
eas3_free_data(eas3_data* data)
|
||||
{
|
||||
if(data)
|
||||
{
|
||||
//if(data->aux)
|
||||
//{
|
||||
//free(data->aux->memory);
|
||||
//data->aux->access = NULL;
|
||||
//data->aux->position = 0;
|
||||
//data->aux->size = 0;
|
||||
// TODO: remove
|
||||
//data->aux->L = 0;
|
||||
//}
|
||||
//free(data->aux);
|
||||
free(data);
|
||||
}
|
||||
/*-----------------------*\
|
||||
! DEFINE STRUCTS: !
|
||||
\*-----------------------*/
|
||||
eas3_param_names *param, *temp;
|
||||
|
||||
if(data != NULL)
|
||||
{
|
||||
if (data->param_names != NULL)
|
||||
{
|
||||
param = data->param_names->root;
|
||||
|
||||
while(param != NULL)
|
||||
{
|
||||
temp = param;
|
||||
param = param -> next;
|
||||
free(temp);
|
||||
}
|
||||
}
|
||||
|
||||
if (data->field.d != NULL)
|
||||
free(data->field.d);
|
||||
|
||||
if (data->field.f != NULL)
|
||||
free(data->field.f);
|
||||
|
||||
if(data->aux.ptr != NULL)
|
||||
free(data->aux.ptr);
|
||||
|
||||
free(data);
|
||||
}
|
||||
}
|
||||
|
||||
/*================================================================================================*/
|
||||
/**
|
||||
* @details Adds a parameter name to the linked list inside the eas3_data structure.
|
||||
*
|
||||
* @param[in] data Pointer to eas3_data structure to be filled.
|
||||
* @param[in] name Name to be added to the linked list.
|
||||
*/
|
||||
/*================================================================================================*/
|
||||
void
|
||||
eas3_add_param_name(eas3_data *const data, char *name)
|
||||
{
|
||||
|
@ -283,49 +301,137 @@ eas3_add_param_name(eas3_data *const data, char *name)
|
|||
strcpy(data->param_names->name, name ? name : "undefined");
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: uchar read_eas3_header(bwc_data *const data) !
|
||||
! -------------- !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
! ------------ !
|
||||
! This function opens an eas3 file and checks it for its validity. Once the specified file !
|
||||
! has been verified, its header and flow field data is read and stored in the bwc_data !
|
||||
! structure. !
|
||||
! !
|
||||
! !
|
||||
! PARAMETERS: !
|
||||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! filename char* - Defines the filename of the eas3 file !
|
||||
! that is to be opened and read. !
|
||||
! !
|
||||
! RETURN VALUE: !
|
||||
! ------------- !
|
||||
! Type Description !
|
||||
! ---- ----------- !
|
||||
! file - Defines a structure used to store all !
|
||||
! the relevant parameters and the data !
|
||||
! field of an eas3 file. !
|
||||
! !
|
||||
! DEVELOPMENT HISTORY: !
|
||||
! -------------------- !
|
||||
! !
|
||||
! Date Author Change Id Release Description Of Change !
|
||||
! ---- ------ --------- ------- --------------------- !
|
||||
! 20.06.2018 Patrick Vogler B87D120 V 0.1.0 function created !
|
||||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
static uchar
|
||||
read_eas3_header(FILE *const fp, eas3_data *const data)
|
||||
/*================================================================================================*/
|
||||
/**
|
||||
* @details Parses the uncompressed output from bwc_stream into the eas3_data.
|
||||
*
|
||||
* @param[in] stream Pointer to uncompressed data set.
|
||||
* @param[inout] data Pointer to eas3_data structure to be filled.
|
||||
*
|
||||
* @retval uchar
|
||||
*/
|
||||
/*================================================================================================*/
|
||||
uchar
|
||||
bwc_to_eas3(bwc_stream *const stream, eas3_data *const data)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
\*-----------------------*/
|
||||
uint64 Lread;
|
||||
uint64 size;
|
||||
uint64 i;
|
||||
|
||||
/*-----------------------*\
|
||||
! DEFINE CHAR VARIABLES: !
|
||||
\*-----------------------*/
|
||||
uchar *buffer_char;
|
||||
char param_name[ATTRLEN + 1] = {};
|
||||
|
||||
/*-----------------------*\
|
||||
! DEFINE STRUCTS: !
|
||||
\*-----------------------*/
|
||||
eas3_std_params *params;
|
||||
|
||||
params = &data->params;
|
||||
|
||||
data->aux.ptr = calloc(stream->codestream.aux->size, sizeof(uchar));
|
||||
data->aux.pos = 0;
|
||||
data->aux.len = stream->codestream.aux->size;
|
||||
if(!data->aux.ptr)
|
||||
{
|
||||
// memory allocation error
|
||||
fprintf(stderr, MEMERROR);
|
||||
free(data->aux.ptr);
|
||||
return 1;
|
||||
}
|
||||
memcpy(data->aux.ptr, stream->codestream.aux->memory,
|
||||
stream->codestream.aux->size);
|
||||
|
||||
aux_dequeue(data->aux, (uchar*)params, 176);
|
||||
|
||||
endian_conversion(¶ms->nts, 8);
|
||||
endian_conversion(¶ms->npar, 8);
|
||||
endian_conversion(¶ms->ndim1, 8);
|
||||
endian_conversion(¶ms->ndim2, 8);
|
||||
endian_conversion(¶ms->ndim3, 8);
|
||||
endian_conversion(¶ms->accuracy, 8);
|
||||
if(params->accuracy != 1 && params->accuracy != 2)
|
||||
{
|
||||
fprintf(stderr, "o##########################################################o\n"\
|
||||
"| ERROR: The accuracy of the specified dataset is not sup- |\n"\
|
||||
"| ported by the compression algorithm. |\n"\
|
||||
"o##########################################################o\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
buffer_char = calloc(params->nts, sizeof(uint64));
|
||||
if(!buffer_char)
|
||||
{
|
||||
// memory allocation error
|
||||
fprintf(stderr, MEMERROR);
|
||||
free(buffer_char);
|
||||
return 1;
|
||||
}
|
||||
aux_dequeue(data->aux, buffer_char, params->nts * sizeof(uint64));
|
||||
|
||||
if(params->attribute_mode == EAS3_ALL_ATTR)
|
||||
{
|
||||
buffer_char = realloc(buffer_char, params->nts * ATTRLEN * sizeof(char));
|
||||
if(!buffer_char)
|
||||
{
|
||||
// memory allocation error
|
||||
fprintf(stderr, MEMERROR);
|
||||
free(buffer_char);
|
||||
return 1;
|
||||
}
|
||||
aux_dequeue(data->aux, buffer_char, params->nts * ATTRLEN * sizeof(char));
|
||||
|
||||
for(i = 0; i < params->npar; ++i)
|
||||
{
|
||||
aux_dequeue(data->aux, param_name, ATTRLEN * sizeof(char));
|
||||
eas3_add_param_name(data, param_name);
|
||||
memset(param_name, 0, ATTRLEN + 1);
|
||||
}
|
||||
}
|
||||
|
||||
size = params->ndim1 * params->ndim2 * params->ndim3 *
|
||||
params->nts * params->npar;
|
||||
|
||||
if(params->accuracy == 1)
|
||||
{
|
||||
data->field.d = NULL;
|
||||
data->field.f = calloc(size, sizeof(float));
|
||||
memcpy(data->field.f, stream->out, size*sizeof(float));
|
||||
}
|
||||
else if(params->accuracy == 2)
|
||||
{
|
||||
data->field.f = NULL;
|
||||
data->field.d = calloc(size, sizeof(double));
|
||||
memcpy(data->field.d, stream->out, size*sizeof(double));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*================================================================================================*/
|
||||
/**
|
||||
* @details Reads the header from an open eas3 file pointer parsing the header information into
|
||||
* the eas3_data structure argument.
|
||||
*
|
||||
* @param[in] fp Readily opened file pointer.
|
||||
* @param[inout] data Structure to store eas3 data.
|
||||
*
|
||||
* @retval uchar
|
||||
*/
|
||||
/*================================================================================================*/
|
||||
static uchar
|
||||
read_eas3_header(FILE *const fp, eas3_data *const data)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
\*-----------------------*/
|
||||
uint64 Lread;
|
||||
uint64 i;
|
||||
uint8 precision;
|
||||
|
||||
/*-----------------------*\
|
||||
! DEFINE CHAR VARIABLES: !
|
||||
|
@ -336,7 +442,6 @@ read_eas3_header(FILE *const fp, eas3_data *const data)
|
|||
/*-----------------------*\
|
||||
! DEFINE STRUCTS: !
|
||||
\*-----------------------*/
|
||||
bwc_gl_inf *info;
|
||||
eas3_std_params *params;
|
||||
|
||||
/*-----------------------*\
|
||||
|
@ -550,13 +655,9 @@ read_eas3_header(FILE *const fp, eas3_data *const data)
|
|||
return 1;
|
||||
}
|
||||
|
||||
aux_enqueue(data->aux, param_name, ATTRLEN * sizeof(char));
|
||||
eas3_add_param_name(data, param_name);
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Read the parameter name from the file stream and add all !
|
||||
! the necessary parameter information to the paramter !
|
||||
! linked list. |
|
||||
\*--------------------------------------------------------*/
|
||||
memset(param_name, 0, ATTRLEN + 1);
|
||||
}
|
||||
}
|
||||
|
@ -632,40 +733,17 @@ read_eas3_header(FILE *const fp, eas3_data *const data)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: uchar read_eas3_header(bwc_data *const data) !
|
||||
! -------------- !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
! ------------ !
|
||||
! This function opens an eas3 file and checks it for its validity. Once the specified file !
|
||||
! has been verified, its header and flow field data is read and stored in the bwc_data !
|
||||
! structure. !
|
||||
! !
|
||||
! !
|
||||
! PARAMETERS: !
|
||||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! filename char* - Defines the filename of the eas3 file !
|
||||
! that is to be opened and read. !
|
||||
! !
|
||||
! RETURN VALUE: !
|
||||
! ------------- !
|
||||
! Type Description !
|
||||
! ---- ----------- !
|
||||
! file - Defines a structure used to store all !
|
||||
! the relevant parameters and the data !
|
||||
! field of an eas3 file. !
|
||||
! !
|
||||
! DEVELOPMENT HISTORY: !
|
||||
! -------------------- !
|
||||
! !
|
||||
! Date Author Change Id Release Description Of Change !
|
||||
! ---- ------ --------- ------- --------------------- !
|
||||
! 20.06.2018 Patrick Vogler B87D120 V 0.1.0 function created !
|
||||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
/*================================================================================================*/
|
||||
/**
|
||||
* @details Writes the header information from the eas3_data structure into the open eas3
|
||||
* file pointer.
|
||||
*
|
||||
* @param[in] fp Readily opened file pointer.
|
||||
* @param[inout] data Structure to store eas3 data.
|
||||
*
|
||||
* @retval uchar
|
||||
*/
|
||||
/*================================================================================================*/
|
||||
static uchar
|
||||
write_eas3_header(FILE *const fp, eas3_data *const data)
|
||||
{
|
||||
|
@ -682,7 +760,6 @@ write_eas3_header(FILE *const fp, eas3_data *const data)
|
|||
/*-----------------------*\
|
||||
! DEFINE STRUCTS: !
|
||||
\*-----------------------*/
|
||||
bwc_gl_inf *info;
|
||||
eas3_std_params *params;
|
||||
eas3_param_names *param_names;
|
||||
|
||||
|
@ -729,7 +806,13 @@ write_eas3_header(FILE *const fp, eas3_data *const data)
|
|||
! Convert the size parameters, used to write the rest of !
|
||||
! the header, to little endian. !
|
||||
\*--------------------------------------------------------*/
|
||||
endian_conversion(¶ms->file_type, 8);
|
||||
endian_conversion(¶ms->accuracy, 8);
|
||||
endian_conversion(¶ms->nts, 8);
|
||||
endian_conversion(¶ms->npar, 8);
|
||||
endian_conversion(¶ms->ndim1, 8);
|
||||
endian_conversion(¶ms->ndim2, 8);
|
||||
endian_conversion(¶ms->ndim3, 8);
|
||||
endian_conversion(¶ms->size_time, 8);
|
||||
endian_conversion(¶ms->size_parameter, 8);
|
||||
endian_conversion(¶ms->size_dim1, 8);
|
||||
|
@ -739,6 +822,8 @@ write_eas3_header(FILE *const fp, eas3_data *const data)
|
|||
endian_conversion(¶ms->udef_int_size, 8);
|
||||
endian_conversion(¶ms->udef_real_size, 8);
|
||||
|
||||
data->params = *params;
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Allocate the buffer character array. If successful, get !
|
||||
! the timestep array from the auxiliary information block !
|
||||
|
@ -872,40 +957,16 @@ write_eas3_header(FILE *const fp, eas3_data *const data)
|
|||
|| | |__| |__] |___ | |___ | |__| | \| |___ | | |__| | \| ___] ||
|
||||
|| ||
|
||||
\************************************************************************************************************/
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: bwc_data* read_eas3(const char* const filename) !
|
||||
! -------------- !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
! ------------ !
|
||||
! This function opens an eas3 file and checks it for its validity. Once the specified file !
|
||||
! has been verified, its header and flow field data is read and stored in the bwc_data !
|
||||
! structure. !
|
||||
! !
|
||||
! !
|
||||
! PARAMETERS: !
|
||||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! filename char* - Defines the filename of the eas3 file !
|
||||
! that is to be opened and read. !
|
||||
! !
|
||||
! RETURN VALUE: !
|
||||
! ------------- !
|
||||
! Type Description !
|
||||
! ---- ----------- !
|
||||
! file - Defines a structure used to store all !
|
||||
! the relevant parameters and the data !
|
||||
! field of an eas3 file. !
|
||||
! !
|
||||
! DEVELOPMENT HISTORY: !
|
||||
! -------------------- !
|
||||
! !
|
||||
! Date Author Change Id Release Description Of Change !
|
||||
! ---- ------ --------- ------- --------------------- !
|
||||
! 20.06.2018 Patrick Vogler B87D120 V 0.1.0 function created !
|
||||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
/*================================================================================================*/
|
||||
/**
|
||||
* @details Opens an eas3 file and checks it for its validity. Then, it reads header and flow
|
||||
* field data and returns a filled instance of the eas3_data structure.
|
||||
*
|
||||
* @param[in] filename Name of the eas3 file.
|
||||
*
|
||||
* @retval eas3_data*
|
||||
*/
|
||||
/*================================================================================================*/
|
||||
eas3_data*
|
||||
read_eas3(char *const filename)
|
||||
{
|
||||
|
@ -1068,40 +1129,16 @@ read_eas3(char *const filename)
|
|||
return data;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: uchar write_eas3(bwc_data *const file, char *const filename) !
|
||||
! -------------- !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
! ------------ !
|
||||
! This function creates a valid eas3 file from the information stored in the bwc_data !
|
||||
! structure. !
|
||||
! !
|
||||
! PARAMETERS: !
|
||||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! filename char* - Defines the filename of the eas3 file !
|
||||
! that is to be opened and read. !
|
||||
! !
|
||||
! file bwc_data* - Defines a structure used to store all !
|
||||
! the relevant parameters and the data !
|
||||
! field of an eas3 file. !
|
||||
! !
|
||||
! RETURN VALUE: !
|
||||
! ------------- !
|
||||
! Type Description !
|
||||
! ---- ----------- !
|
||||
! uchar - Returns an unsigned char for error handling. !
|
||||
! !
|
||||
! DEVELOPMENT HISTORY: !
|
||||
! -------------------- !
|
||||
! !
|
||||
! Date Author Change Id Release Description Of Change !
|
||||
! ---- ------ --------- ------- --------------------- !
|
||||
! 20.06.2018 Patrick Vogler B87D120 V 0.1.0 function created !
|
||||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
/*================================================================================================*/
|
||||
/**
|
||||
* @details Opens an eas3 file and writes the content from the provided eas3_data structure.
|
||||
*
|
||||
* @param[in] data Data to be written into the eas3 file.
|
||||
* @param[in] filename Name of the eas3 file.
|
||||
*
|
||||
* @retval uchar
|
||||
*/
|
||||
/*================================================================================================*/
|
||||
uchar
|
||||
write_eas3(eas3_data *const data, char *const filename)
|
||||
{
|
||||
|
|
|
@ -912,7 +912,7 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
data->codestream.com->memory = get_chunck(stream, Lcom - 2);
|
||||
data->codestream.com->size = Lcom -2;
|
||||
|
||||
status |= CODESTREAM_ERROR;
|
||||
status |= CODESTREAM_COM_READ;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -1498,8 +1498,9 @@ bwc_set_com(bwc_stream *const data, char const *const com, uint16 size)
|
|||
! Save the global info structure to a temporary variable !
|
||||
! to make the code more readable. !
|
||||
\*--------------------------------------------------------*/
|
||||
data->codestream.com = calloc(1, sizeof(bwc_span));
|
||||
data->codestream.com->memory = calloc(size, sizeof(char));
|
||||
if(!data->codestream.com->memory)
|
||||
if(!data->codestream.com->memory)
|
||||
{
|
||||
// memory allocation error
|
||||
fprintf(stderr, MEMERROR);
|
||||
|
@ -1536,18 +1537,19 @@ bwc_set_aux(bwc_stream *const data, char const *const aux, uint32 size)
|
|||
! Save the global info structure to a temporary variable !
|
||||
! to make the code more readable. !
|
||||
\*--------------------------------------------------------*/
|
||||
data->codestream.com->memory = calloc(size, sizeof(char));
|
||||
if(!data->codestream.com->memory)
|
||||
data->codestream.aux = calloc(1, sizeof(bwc_span));
|
||||
data->codestream.aux->memory = calloc(size, sizeof(char));
|
||||
if(!data->codestream.aux->memory)
|
||||
{
|
||||
// memory allocation error
|
||||
fprintf(stderr, MEMERROR);
|
||||
return 1;
|
||||
}
|
||||
|
||||
memcpy(data->codestream.com->memory, aux, size * sizeof(char));
|
||||
data->codestream.com->access = data->codestream.com->memory;
|
||||
data->codestream.com->size = size;
|
||||
data->codestream.com->position = 0;
|
||||
memcpy(data->codestream.aux->memory, aux, size * sizeof(char));
|
||||
data->codestream.aux->access = data->codestream.aux->memory;
|
||||
data->codestream.aux->size = size;
|
||||
data->codestream.aux->position = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -2490,15 +2492,14 @@ set_quant_step_size(bwc_codec *const codec, double delta)
|
|||
\*--------------------------------------------------------*/
|
||||
if((delta <= 0) || (delta >= 2))
|
||||
{
|
||||
fprintf(stderr, "o==========================================================o\n"\
|
||||
"| WARNING: Invalid quantization step size |\n"\
|
||||
"| |\n"\
|
||||
"| The quantization step size does not lie within |\n"\
|
||||
"| the acceptable range of: |\n"\
|
||||
"| |\n"\
|
||||
"| 0 < step size < 2 |\n"\
|
||||
"| |\n"\
|
||||
"o==========================================================o\n");
|
||||
fprintf(stderr, ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"\
|
||||
" WARNING: Invalid quantization step size \n"\
|
||||
" \n"\
|
||||
" The quantization step size does not lie within \n"\
|
||||
" the acceptable range of: \n"\
|
||||
" \n"\
|
||||
" 0 < step size < 2 \n"\
|
||||
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -2782,14 +2783,13 @@ bwc_set_decomp(bwc_codec *const codec, uint8 decompX, uint8 decompY, uint8 decom
|
|||
if((control->decompX > 63) || (control->decompY > 63) ||
|
||||
(control->decompZ > 63) || (control->decompTS > 31))
|
||||
{
|
||||
fprintf(stderr, "o==========================================================o\n"\
|
||||
"| WARNING: Invalid decomposition level value |\n"\
|
||||
"| |\n"\
|
||||
"| The maximum acceptable decomposition level is |\n"\
|
||||
"| 63 for all spatial and 31 for the temporal |\n"\
|
||||
"| dimensions. |\n"\
|
||||
"| |\n"\
|
||||
"o==========================================================o\n");
|
||||
fprintf(stderr, ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"\
|
||||
" WARNING: Invalid decomposition level value \n"\
|
||||
" \n"\
|
||||
" The maximum acceptable decomposition level is \n"\
|
||||
" 63 for all spatial and 31 for the temporal \n"\
|
||||
" dimensions. \n"\
|
||||
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Reset the decomposition levels to their standard values. !
|
||||
|
@ -2924,13 +2924,12 @@ bwc_set_precincts(bwc_codec *const codec, uint8 pX, uint8 pY, uint8 pZ, uint8 pT
|
|||
((control->precSizeTS < 1) && (info->nTS >> 1)) ||
|
||||
(control->precSizeX > 15) || (control->precSizeY > 15) || (control->precSizeZ > 15) || (control->precSizeTS > 15))
|
||||
{
|
||||
fprintf(stderr, "o==========================================================o\n"\
|
||||
"| WARNING: Invalid precinct size |\n"\
|
||||
"| |\n"\
|
||||
"| The maximum acceptable precinct size is 2^15, |\n"\
|
||||
"| the smallest valid precinct size is 2^1. |\n"\
|
||||
"| |\n"\
|
||||
"o==========================================================o\n");
|
||||
fprintf(stderr, ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"\
|
||||
" WARNING: Invalid precinct size \n"\
|
||||
" \n"\
|
||||
" The maximum acceptable precinct size is 2^15, \n"\
|
||||
" the smallest valid precinct size is 2^1. \n"\
|
||||
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Reset the codeblock sizes to their standard values. !
|
||||
|
@ -3023,15 +3022,14 @@ bwc_set_codeblocks(bwc_codec *const codec, uint8 cbX, uint8 cbY, uint8 cbZ, uint
|
|||
((control->cbX + control->cbY + control->cbZ + control->cbTS) < 4) ||
|
||||
((control->cbX + control->cbY + control->cbZ + control->cbTS) > 20))
|
||||
{
|
||||
fprintf(stderr, "o==========================================================o\n"\
|
||||
"| WARNING: Invalid codeblock size |\n"\
|
||||
"| |\n"\
|
||||
"| The maximum acceptable codeblock size is 2^20 |\n"\
|
||||
"| with a maximum allowable number of datapoints |\n"\
|
||||
"| in each dimension of 2^10. The smallest valid |\n"\
|
||||
"| codeblock size is 2^4. |\n"\
|
||||
"| |\n"\
|
||||
"o==========================================================o\n");
|
||||
fprintf(stderr, ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"\
|
||||
" WARNING: Invalid codeblock size \n"\
|
||||
" \n"\
|
||||
" The maximum acceptable codeblock size is 2^20 \n"\
|
||||
" with a maximum allowable number of datapoints \n"\
|
||||
" in each dimension of 2^10. The smallest valid \n"\
|
||||
" codeblock size is 2^4. \n"\
|
||||
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Reset the codeblock sizes to their standard values. !
|
||||
|
@ -3106,19 +3104,18 @@ bwc_set_qm(bwc_codec *const codec, uint8 Qm)
|
|||
! Check if the Q number formate range is valid and amend !
|
||||
! the bwc_codec structure accordingly. !
|
||||
\*--------------------------------------------------------*/
|
||||
if((int8)(PREC_BIT - Qm) < 2)
|
||||
if((int8)(PREC_BIT - Qm) < 1)
|
||||
{
|
||||
fprintf(stderr, "o==========================================================o\n"\
|
||||
"| WARNING: Invalid Q number formate range |\n"\
|
||||
"| |\n"\
|
||||
"| The specified Q number formate range is larger |\n");
|
||||
fprintf(stderr, ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"\
|
||||
" WARNING: Invalid Q number formate range \n"\
|
||||
" \n"\
|
||||
" The specified Q number formate range is larger \n");
|
||||
#ifdef BWC_SINGLE_PRECISION
|
||||
fprintf(stderr, "| than the permitted 30 bits. |\n");
|
||||
fprintf(stderr, " than the permitted 30 bits. \n");
|
||||
#else
|
||||
fprintf(stderr, "| than the permitted 62 bits. |\n");
|
||||
fprintf(stderr, " than the permitted 62 bits. \n");
|
||||
#endif
|
||||
fprintf(stderr, "| |\n"\
|
||||
"o==========================================================o\n");
|
||||
fprintf(stderr, ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -3213,17 +3210,16 @@ bwc_set_tiles(bwc_codec *const codec, uint64 tilesX, uint64 tilesY, uint64 tiles
|
|||
(control->tileSizeZ < 16 && control->tileSizeZ > info->nZ)||
|
||||
(control->tileSizeTS < 16 && control->tileSizeTS > info->nTS))
|
||||
{
|
||||
fprintf(stderr,"o==========================================================o\n"\
|
||||
"| WARNING: Invalid Tile Dimensions |\n"\
|
||||
"| |\n"\
|
||||
"| One or more of the specified tile dimensions |\n"\
|
||||
"| has a value that falls outside of its valid |\n"\
|
||||
"| range. Please verify that all tile dimension |\n"\
|
||||
"| are within the range of: |\n"\
|
||||
"| |\n"\
|
||||
"| 16 ≤ Tile_Size_Xi ≤ Grid_Points_Xi |\n"\
|
||||
"| |\n"\
|
||||
"o==========================================================o\n");
|
||||
fprintf(stderr,">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"\
|
||||
" WARNING: Invalid Tile Dimensions \n"\
|
||||
" \n"\
|
||||
" One or more of the specified tile dimensions \n"\
|
||||
" has a value that falls outside of its valid \n"\
|
||||
" range. Please verify that all tile dimension \n"\
|
||||
" are within the range of: \n"\
|
||||
" \n"\
|
||||
" 16 ≤ Tile_Size_Xi ≤ Grid_Points_Xi \n"\
|
||||
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -3255,16 +3251,15 @@ bwc_set_tiles(bwc_codec *const codec, uint64 tilesX, uint64 tilesY, uint64 tiles
|
|||
\*--------------------------------------------------------*/
|
||||
if(((double)num_tiles_X * num_tiles_Y * num_tiles_Z * num_tiles_TS) > 0xFFFFFFFFFFFFFFFF)
|
||||
{
|
||||
fprintf(stderr,"o==========================================================o\n"\
|
||||
"| WARNING: Invalid Tile Dimensions |\n"\
|
||||
"| |\n"\
|
||||
"| The number of tiles exceeds its maxmum allowa- |\n"\
|
||||
"| ble value. Please adjust all tile dimension so |\n"\
|
||||
"| that the number of tiles falls within the range |\n"\
|
||||
"| of: |\n"\
|
||||
"| Number_of_Tiles < 2^64 |\n"\
|
||||
"| |\n"\
|
||||
"o==========================================================o\n");
|
||||
fprintf(stderr,">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"\
|
||||
" WARNING: Invalid Tile Dimensions \n"\
|
||||
" \n"\
|
||||
" The number of tiles exceeds its maxmum allowa- \n"\
|
||||
" ble value. Please adjust all tile dimension so \n"\
|
||||
" that the number of tiles falls within the range \n"\
|
||||
" of: \n"\
|
||||
" Number_of_Tiles < 2^64 \n"\
|
||||
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Reset the tile sizes to their standard values. !
|
||||
|
@ -3285,15 +3280,14 @@ bwc_set_tiles(bwc_codec *const codec, uint64 tilesX, uint64 tilesY, uint64 tiles
|
|||
\*--------------------------------------------------------*/
|
||||
if(((double)tilesX * tilesY * tilesZ * tilesTS) > 0xFFFFFFFFFFFFFFFF)
|
||||
{
|
||||
fprintf(stderr,"o==========================================================o\n"\
|
||||
"| WARNING: Invalid Number Of Tiles |\n"\
|
||||
"| |\n"\
|
||||
"| The number of tiles exceeds its maxmum allowa- |\n"\
|
||||
"| ble value of: |\n"\
|
||||
"| |\n"\
|
||||
"| Number_of_Tiles < 2^64 |\n"\
|
||||
"| |\n"\
|
||||
"o==========================================================o\n");
|
||||
fprintf(stderr,">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"\
|
||||
" WARNING: Invalid Number Of Tiles \n"\
|
||||
" \n"\
|
||||
" The number of tiles exceeds its maxmum allowa- \n"\
|
||||
" ble value of: \n"\
|
||||
" \n"\
|
||||
" Number_of_Tiles < 2^64 \n"\
|
||||
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -3318,18 +3312,17 @@ bwc_set_tiles(bwc_codec *const codec, uint64 tilesX, uint64 tilesY, uint64 tiles
|
|||
(control->tileSizeZ < 16 && control->tileSizeZ > info->nZ)||
|
||||
(control->tileSizeTS < 16 && control->tileSizeTS > info->nTS))
|
||||
{
|
||||
fprintf(stderr,"o==========================================================o\n"\
|
||||
"| WARNING: Invalid Number Of Tiles |\n"\
|
||||
"| |\n"\
|
||||
"| One or more of the tile dimensions has a value |\n"\
|
||||
"| that falls outside of its valid range. Please |\n"\
|
||||
"| verify that the number of tiles for all dimen- |\n"\
|
||||
"| sions are set so that the corresponding tile |\n"\
|
||||
"| sizes fall within the range of: |\n"\
|
||||
"| |\n"\
|
||||
"| 16 ≤ Tile_Size_Xi ≤ Grid_Points_Xi |\n"\
|
||||
"| |\n"\
|
||||
"o==========================================================o\n");
|
||||
fprintf(stderr,">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"\
|
||||
" WARNING: Invalid Number Of Tiles \n"\
|
||||
" \n"\
|
||||
" One or more of the tile dimensions has a value \n"\
|
||||
" that falls outside of its valid range. Please \n"\
|
||||
" verify that the number of tiles for all dimen- \n"\
|
||||
" sions are set so that the corresponding tile \n"\
|
||||
" sizes fall within the range of: \n"\
|
||||
" \n"\
|
||||
" 16 ≤ Tile_Size_Xi ≤ Grid_Points_Xi \n"\
|
||||
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Reset the tile sizes to their standard values. !
|
||||
|
@ -3359,6 +3352,98 @@ bwc_set_tiles(bwc_codec *const codec, uint64 tilesX, uint64 tilesY, uint64 tiles
|
|||
control->CSsgc |= (0x01 << 9);
|
||||
}
|
||||
|
||||
/*================================================================================================*/
|
||||
/**
|
||||
* @details This function opens the header of a compressed data set and parses it into an
|
||||
* instance of type bwc_header.
|
||||
*
|
||||
* @param[in] inpbuf Pointer to compressed data set.
|
||||
*
|
||||
* @retval bwc_header*
|
||||
*/
|
||||
/*================================================================================================*/
|
||||
bwc_header* bwc_open_header(void *const inpbuf)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE STRUCTS: !
|
||||
\*-----------------------*/
|
||||
bwc_codec* codec;
|
||||
bwc_stream* data;
|
||||
bitstream* stream;
|
||||
bwc_header* header;
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Initialize a codec, stream, and bitstream for parsing. !
|
||||
\*--------------------------------------------------------*/
|
||||
data = bwc_init_stream(inpbuf, NULL, decomp);
|
||||
codec = bwc_alloc_decoder();
|
||||
stream = init_bitstream(data->inp, 10, 'd');
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Parse the main header into the codec structure. !
|
||||
\*--------------------------------------------------------*/
|
||||
parse_main_header(codec, data, stream);
|
||||
if(!codec)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Allocate header and copy info and control structures. !
|
||||
\*--------------------------------------------------------*/
|
||||
header = calloc(1, sizeof(bwc_header));
|
||||
header->info = codec->info;
|
||||
header->control = codec->control;
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Shallow copy aux data to span. !
|
||||
\*--------------------------------------------------------*/
|
||||
if (data->codestream.aux)
|
||||
{
|
||||
header->aux.memory = data->codestream.aux->memory;
|
||||
header->aux.size = data->codestream.aux->size;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Shallow copy com data to span. !
|
||||
\*--------------------------------------------------------*/
|
||||
if (data->codestream.com)
|
||||
{
|
||||
header->com.memory = data->codestream.com->memory;
|
||||
header->com.size = data->codestream.com->size;
|
||||
}
|
||||
|
||||
free(stream);
|
||||
free(data);
|
||||
free(codec);
|
||||
|
||||
return header;
|
||||
}
|
||||
|
||||
/*================================================================================================*/
|
||||
/**
|
||||
* @details This function closes the header information in the bwc_header pointer.
|
||||
*
|
||||
* @param[in] header Instance of type bwc_header.
|
||||
*/
|
||||
/*================================================================================================*/
|
||||
void bwc_close_header(bwc_header *const header)
|
||||
{
|
||||
if (header)
|
||||
{
|
||||
if (header->aux.memory)
|
||||
{
|
||||
free(header->aux.memory);
|
||||
}
|
||||
if (header->com.memory)
|
||||
{
|
||||
free(header->com.memory);
|
||||
}
|
||||
free(header);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: void bwc_create_compression(bwc_codec *codec, char *rate_control) !
|
||||
! -------------- !
|
||||
|
|
1636
src/tools/bwccmdl.c
1636
src/tools/bwccmdl.c
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue