Compare commits
No commits in common. "feat/api" and "main" have entirely different histories.
16 changed files with 1160 additions and 699 deletions
|
@ -92,7 +92,7 @@
|
|||
\************************************************************************************************/
|
||||
uint64 bytes_used (bitstream const *const stream);
|
||||
//==========|==========================|======================|======|======|=====================
|
||||
bitstream* init_bitstream (uchar *const memory,
|
||||
bitstream* init_stream (uchar *const memory,
|
||||
uint32 const size,
|
||||
char const instr);
|
||||
//==========|==========================|======================|======|======|=====================
|
||||
|
@ -117,10 +117,8 @@
|
|||
//==========|==========================|======================|======|======|=====================
|
||||
uchar get_bit (bitstream *const stream);
|
||||
//==========|==========================|======================|======|======|=====================
|
||||
uchar shrink_to_fit (bitstream *const stream);
|
||||
uchar terminate_stream (bitstream *stream,
|
||||
bwc_stream *const packed_stream);
|
||||
//==========|==========================|======================|======|======|=====================
|
||||
uchar transfer_to_span (bitstream *const stream,
|
||||
bwc_span *const span);
|
||||
//==========|==========================|======================|======|======|=====================
|
||||
void release_packed_stream (bwc_span *const stream);
|
||||
void release_packed_stream (bwc_stream *const stream);
|
||||
#endif
|
||||
|
|
|
@ -89,18 +89,16 @@
|
|||
|| | |__| |__] |___ | |___ | |__| | \| |___ | | |__| | \| ___] ||
|
||||
|| ||
|
||||
\************************************************************************************************/
|
||||
uchar assemble_main_header (bwc_codec *const field);
|
||||
uchar assemble_main_header (bwc_field *const field);
|
||||
//==========|==========================|======================|======|======|=====================
|
||||
uchar codestream_write_aux (bwc_span *const header,
|
||||
bwc_span *const aux);
|
||||
uchar codestream_write_aux (bwc_stream *const header,
|
||||
bwc_stream *const aux);
|
||||
//==========|==========================|======================|======|======|=====================
|
||||
uchar codestream_write_com (bwc_span *const header,
|
||||
bwc_span *const com);
|
||||
uchar codestream_write_com (bwc_stream *const header,
|
||||
bwc_stream *const com);
|
||||
//==========|==========================|======================|======|======|=====================
|
||||
size_t assemble_codestream (bwc_codec *const codec,
|
||||
bwc_stream *const stream);
|
||||
bwc_stream* assemble_codestream (bwc_field *const field);
|
||||
//==========|==========================|======================|======|======|=====================
|
||||
bwc_codec* parse_codestream (bwc_codec *const codec,
|
||||
bwc_stream *const stream,
|
||||
bwc_field* parse_codestream (bwc_data *const data,
|
||||
uint8 const layer);
|
||||
#endif
|
|
@ -114,14 +114,8 @@
|
|||
\*----------------------------------------------------------------------------------------------*/
|
||||
typedef enum
|
||||
{
|
||||
bwc_precision_half = 2,
|
||||
bwc_precision_single = 4,
|
||||
bwc_precision_double = 8,
|
||||
} bwc_precision;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
comp,
|
||||
decomp,
|
||||
} bwc_mode;
|
||||
bwc_type_half,
|
||||
bwc_type_single,
|
||||
bwc_type_double,
|
||||
} bwc_type;
|
||||
#endif
|
|
@ -157,13 +157,13 @@
|
|||
\************************************************************************************************/
|
||||
uchar initialize_gain_lut ();
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
bwc_float get_dwt_energy_gain (bwc_codec *const field,
|
||||
bwc_float get_dwt_energy_gain (bwc_field *const field,
|
||||
uchar const highband_flag,
|
||||
uint16 const level);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
uchar forward_wavelet_transform (bwc_codec *const field,
|
||||
uchar forward_wavelet_transform (bwc_field *const field,
|
||||
bwc_parameter *const parameter);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
uchar inverse_wavelet_transform (bwc_codec *const field,
|
||||
uchar inverse_wavelet_transform (bwc_field *const field,
|
||||
bwc_parameter *const parameter);
|
||||
#endif
|
|
@ -64,98 +64,92 @@
|
|||
|| ||
|
||||
\************************************************************************************************/
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
bwc_stream* bwc_init_stream (void *const inpbuf,
|
||||
void *const outbuf,
|
||||
bwc_mode const mode);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
uchar bwc_set_com (bwc_stream *const stream,
|
||||
char const *const com,
|
||||
uint16 const size);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
uchar bwc_set_aux (bwc_stream *const stream,
|
||||
char const *const aux,
|
||||
uint32 const size);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
// TODO: remove
|
||||
void bwc_free_data (bwc_stream *const data);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
uchar create_field (bwc_codec *const codec);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
bwc_codec* configure_codec (bwc_codec *const codec,
|
||||
bwc_data* bwc_initialize_data (double *const field,
|
||||
uint64 const nX,
|
||||
uint64 const nY,
|
||||
uint64 const nZ,
|
||||
uint64 const nTS,
|
||||
uint16 const nTS,
|
||||
uint8 const nPar,
|
||||
bwc_precision const prec);
|
||||
char *const file_extension);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
bwc_codec* bwc_alloc_coder (uint64 const nX,
|
||||
uint64 const nY,
|
||||
uint64 const nZ,
|
||||
uint64 const nTS,
|
||||
uint8 const nPar,
|
||||
bwc_precision const prec);
|
||||
uchar bwc_set_com (bwc_data *const data,
|
||||
char const *const com,
|
||||
uint16 const size);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
bwc_codec* bwc_alloc_decoder ();
|
||||
uchar bwc_set_aux (bwc_data *const data,
|
||||
char const *const aux,
|
||||
uint32 const size);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
void bwc_free_codec (bwc_codec *const codec);
|
||||
void bwc_add_param (bwc_data *const data,
|
||||
char *const name,
|
||||
uint8 const precision);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
void bwc_set_error_resilience (bwc_codec *const field);
|
||||
void bwc_get_data (bwc_data *const data,
|
||||
uchar *const buffer,
|
||||
uint64 const size);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
void set_quant_style (bwc_codec *const field,
|
||||
void bwc_free_data (bwc_data *const data);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
uchar create_field (bwc_field *const field);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
void bwc_kill_compression (bwc_field *const field);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
bwc_field* bwc_initialize_field (bwc_data *const data);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
void bwc_set_error_resilience (bwc_field *const field);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
void set_quant_style (bwc_field *const field,
|
||||
bwc_quant_st const quantization_style);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
void set_quant_step_size (bwc_codec *const field,
|
||||
void set_quant_step_size (bwc_field *const field,
|
||||
double const delta);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
void set_progression (bwc_codec *const field,
|
||||
void set_progression (bwc_field *const field,
|
||||
bwc_prog_ord const progression);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
void set_kernels (bwc_codec *const field,
|
||||
void set_kernels (bwc_field *const field,
|
||||
bwc_dwt_filter const KernelX,
|
||||
bwc_dwt_filter const KernelY,
|
||||
bwc_dwt_filter const KernelZ,
|
||||
bwc_dwt_filter const KernelTS);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
void bwc_set_decomp (bwc_codec *const field,
|
||||
void bwc_set_decomp (bwc_field *const field,
|
||||
uint8 const decompX,
|
||||
uint8 const decompY,
|
||||
uint8 const decompZ,
|
||||
uint8 const decompTS);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
void bwc_set_precincts (bwc_codec *const field,
|
||||
void bwc_set_precincts (bwc_field *const field,
|
||||
uint8 const pX,
|
||||
uint8 const pY,
|
||||
uint8 const pZ,
|
||||
uint8 const pTS);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
void bwc_set_codeblocks (bwc_codec *const field,
|
||||
void bwc_set_codeblocks (bwc_field *const field,
|
||||
uint8 const cbX,
|
||||
uint8 const cbY,
|
||||
uint8 const cbZ,
|
||||
uint8 const cbTS);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
void bwc_set_qm (bwc_codec *const field,
|
||||
void bwc_set_qm (bwc_field *const field,
|
||||
uint8 const Qm);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
void bwc_set_tiles (bwc_codec *const field,
|
||||
void bwc_set_tiles (bwc_field *const field,
|
||||
uint64 const tilesX,
|
||||
uint64 const tilesY,
|
||||
uint64 const tilesZ,
|
||||
uint64 const tilesTS,
|
||||
bwc_tile_instr const instr);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
uchar bwc_create_compression (bwc_codec *const codec,
|
||||
bwc_stream *const data,
|
||||
uchar bwc_create_compression (bwc_field *const field,
|
||||
char *const rate_control);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
size_t bwc_compress (bwc_codec *const field,
|
||||
bwc_stream *const data);
|
||||
uchar bwc_compress (bwc_field *const field,
|
||||
bwc_data *const data);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
uchar bwc_create_decompression (bwc_codec *const codec,
|
||||
bwc_stream *const stream,
|
||||
bwc_field* bwc_create_decompression (bwc_data *const data,
|
||||
uint8 const layer);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
uchar bwc_decompress (bwc_codec *const codec,
|
||||
bwc_stream *const stream);
|
||||
uchar bwc_decompress (bwc_field *const field,
|
||||
bwc_data *const data);
|
||||
#endif
|
|
@ -16,7 +16,7 @@
|
|||
|| ------------ ||
|
||||
|| ||
|
||||
|| This file describes a set of functions that can be used to de-/encode bwc ||
|
||||
|| codeblocks described by the bwc_codec structure according to the embedded block ||
|
||||
|| codeblocks described by the bwc_field structure according to the embedded block ||
|
||||
|| coding paradigm described by the JPEG 2000 standard. For more information please ||
|
||||
|| refere to JPEG2000 by D. S. Taubman and M. W. Marcellin. ||
|
||||
|| ||
|
||||
|
@ -156,11 +156,11 @@
|
|||
|| | |__| |__] |___ | |___ | |__| | \| |___ | | |__| | \| ___] ||
|
||||
|| ||
|
||||
\************************************************************************************************/
|
||||
uchar t1_encode (bwc_codec *const field,
|
||||
uchar t1_encode (bwc_field *const field,
|
||||
bwc_tile *const tile,
|
||||
bwc_parameter *const parameter);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
uchar t1_decode (bwc_codec *const field,
|
||||
uchar t1_decode (bwc_field *const field,
|
||||
bwc_tile *const tile,
|
||||
bwc_parameter *const parameter);
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|| ------------ ||
|
||||
|| ||
|
||||
|| This file describes a set of functions that can be used to de-/encode bwc ||
|
||||
|| codeblocks described by the bwc_codec structure according to the embedded block ||
|
||||
|| codeblocks described by the bwc_field structure according to the embedded block ||
|
||||
|| coding paradigm described by the JPEG 2000 standard. For more information please ||
|
||||
|| refere to JPEG2000 by D. S. Taubman and M. W. Marcellin. ||
|
||||
|| ||
|
||||
|
@ -76,10 +76,10 @@
|
|||
|| | |__| |__] |___ | |___ | |__| | \| |___ | | |__| | \| ___] ||
|
||||
|| ||
|
||||
\************************************************************************************************/
|
||||
uchar t2_encode (bwc_codec *const field,
|
||||
uchar t2_encode (bwc_field *const field,
|
||||
bwc_tile *const tile);
|
||||
//==========|==========================|======================|======|=======|====================
|
||||
uchar parse_packet (bwc_codec *const field,
|
||||
uchar parse_packet (bwc_field *const field,
|
||||
bwc_tile *const tile,
|
||||
bwc_packet *const packet,
|
||||
uint64 const body_size);
|
||||
|
|
|
@ -99,7 +99,7 @@
|
|||
|
||||
uchar *access; // Pointer used to parse packed stream.
|
||||
uchar *memory; // Memory handle for the packed stream.
|
||||
} bwc_span;
|
||||
} bwc_stream;
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*\
|
||||
! !
|
||||
|
@ -138,6 +138,29 @@
|
|||
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: !
|
||||
|
@ -155,8 +178,12 @@
|
|||
|
||||
uint8 nPar; // Number of parameters.
|
||||
|
||||
bwc_precision data_prec; // Data type of uncompressed field data.
|
||||
bwc_precision codec_prec; // Encoder/decoder bit precision.
|
||||
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;
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*\
|
||||
|
@ -170,17 +197,22 @@
|
|||
\*----------------------------------------------------------------------------------------------*/
|
||||
typedef struct
|
||||
{
|
||||
bwc_gl_inf info; // Gloabal info structure.
|
||||
FILE *fp; // File point to (un)compr. data-set.
|
||||
|
||||
struct codestream
|
||||
{
|
||||
bwc_span *aux; // Auxiliary info. codestream block.
|
||||
bwc_span *com; // Comment codestream block.
|
||||
bwc_stream *data; // Data codestream block.
|
||||
bwc_stream *aux; // Auxiliary info. codestream block.
|
||||
bwc_stream *com; // Comment codestream block.
|
||||
}codestream;
|
||||
|
||||
void *inp; // User managed buffer for input
|
||||
void *out; // User managed buffer for output
|
||||
|
||||
bwc_mode mode; // Flag to signal (de-)compression
|
||||
} bwc_stream;
|
||||
struct field
|
||||
{
|
||||
double *d; // Double precision numerical data-set.
|
||||
float *f; // Single precision numerical data-set.
|
||||
}field;
|
||||
} bwc_data;
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*\
|
||||
! !
|
||||
|
@ -388,8 +420,8 @@
|
|||
\*----------------------------------------------------------------------------------------------*/
|
||||
typedef struct
|
||||
{
|
||||
bwc_span header; // Packed stream header.
|
||||
bwc_span body; // Packed stream body.
|
||||
bwc_stream header; // Packed stream header.
|
||||
bwc_stream body; // Packed stream body.
|
||||
uint8 e; // Indicator for packet cb. contributions.
|
||||
|
||||
uint32 size; // Codestream packet size.
|
||||
|
@ -496,9 +528,14 @@
|
|||
\*----------------------------------------------------------------------------------------------*/
|
||||
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;
|
||||
|
@ -673,11 +710,12 @@
|
|||
\*----------------------------------------------------------------------------------------------*/
|
||||
typedef struct
|
||||
{
|
||||
bwc_gl_inf info; // Global info structure
|
||||
bwc_gl_inf *info; // Gloabal info structure
|
||||
bwc_gl_ctrl control; // Global control structure
|
||||
|
||||
bwc_tile *tile; // Structure defining bwc tile.
|
||||
|
||||
bwc_mode mode; // Flag to signal (de-)compression
|
||||
} bwc_codec;
|
||||
bwc_stream *aux; // Auxiliary info. codestream block.
|
||||
bwc_stream *com; // Comment codestream block.
|
||||
} bwc_field;
|
||||
#endif
|
|
@ -107,6 +107,42 @@ module bwc
|
|||
CHARACTER(KIND=C_CHAR) :: file_extension(*)
|
||||
end function initialize_data_f
|
||||
!*============================================================================================*!
|
||||
subroutine add_param_f(data, name, sample, dim, precision) &
|
||||
BIND(C, NAME="bwc_add_param")
|
||||
IMPORT
|
||||
!*-----------------------*!
|
||||
! DEFINE POINTERS: !
|
||||
!*-----------------------*!
|
||||
TYPE(C_PTR), VALUE :: data
|
||||
|
||||
!*-----------------------*!
|
||||
! DEFINE INT VARIABLES: !
|
||||
!*-----------------------*!
|
||||
INTEGER(KIND=C_INT16_T), VALUE :: sample
|
||||
INTEGER(KIND=C_INT8_T), VALUE :: precision
|
||||
INTEGER(KIND=C_SIGNED_CHAR), VALUE :: dim
|
||||
|
||||
!*-----------------------*!
|
||||
! DEFINE CHAR VARIABLES: !
|
||||
!*-----------------------*!
|
||||
CHARACTER(KIND=C_CHAR) :: name(*)
|
||||
end subroutine add_param_f
|
||||
!*============================================================================================*!
|
||||
subroutine get_data_f(data, buffer, size) &
|
||||
BIND(C, NAME="bwc_get_data")
|
||||
IMPORT
|
||||
!*-----------------------*!
|
||||
! DEFINE POINTERS: !
|
||||
!*-----------------------*!
|
||||
TYPE(C_PTR), VALUE :: data
|
||||
TYPE(C_PTR), VALUE :: buffer
|
||||
|
||||
!*-----------------------*!
|
||||
! DEFINE INT VARIABLES: !
|
||||
!*-----------------------*!
|
||||
INTEGER(KIND=C_INT64_T), Value :: size
|
||||
end subroutine get_data_f
|
||||
!*============================================================================================*!
|
||||
subroutine free_data_f(data) &
|
||||
BIND(C, NAME="bwc_free_data")
|
||||
IMPORT
|
||||
|
@ -360,9 +396,11 @@ module bwc
|
|||
bwc_tile_numbof
|
||||
|
||||
public :: bwc_initialize_data, &
|
||||
bwc_get_data, &
|
||||
bwc_free_data
|
||||
|
||||
public :: bwc_initialize_field, &
|
||||
bwc_add_param, &
|
||||
bwc_kill_compression
|
||||
|
||||
public :: bwc_set_error_resilience, &
|
||||
|
|
|
@ -97,11 +97,29 @@ def initialize_data(data, nX, nY, nZ, nTS, nPar, file_extension):
|
|||
ctypes.c_uint64,
|
||||
ctypes.c_uint64,
|
||||
ctypes.c_uint64,
|
||||
ctypes.c_uint64,
|
||||
ctypes.c_uint16,
|
||||
ctypes.c_uint8,
|
||||
ctypes.c_char_p]
|
||||
return ctypes.c_void_p(fun(data, nX, nY, nZ, nTS, nPar, file_extension.encode('utf-8')))
|
||||
#==================================================================================================#
|
||||
def get_data(data, buffer, size):
|
||||
fun = libbwc.bwc_get_data
|
||||
fun.restype = None
|
||||
fun.argtypes = [ctypes.c_void_p,
|
||||
ndpointer(ctypes.c_double, flags="C_CONTIGUOUS"),
|
||||
ctypes.c_uint64]
|
||||
fun(data, buffer, size)
|
||||
#==================================================================================================#
|
||||
def add_param(data, name, sample, dim, precision):
|
||||
fun = libbwc.bwc_add_param
|
||||
fun.restype = None
|
||||
fun.argtypes = [ctypes.c_void_p,
|
||||
ctypes.c_char_p,
|
||||
ctypes.c_uint16,
|
||||
ctypes.c_uint8,
|
||||
ctypes.c_uint8]
|
||||
fun(data, name.encode('utf-8'), sample, dim, precision)
|
||||
#==================================================================================================#
|
||||
def kill_compression(field):
|
||||
fun = libbwc.bwc_kill_compression
|
||||
fun.restype = None
|
||||
|
|
|
@ -107,6 +107,8 @@ bytes_used(bitstream const *const stream)
|
|||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: bitstream* bwc_init_stream(uchar* memory, uint32 size, char instr) !
|
||||
! -------------- !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
! ------------ !
|
||||
|
@ -143,7 +145,7 @@ bytes_used(bitstream const *const stream)
|
|||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
bitstream*
|
||||
init_bitstream(uchar* memory, uint32 size, char instr)
|
||||
init_stream(uchar* memory, uint32 size, char instr)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE STRUCTS: !
|
||||
|
@ -153,7 +155,6 @@ init_bitstream(uchar* memory, uint32 size, char instr)
|
|||
/*-----------------------*\
|
||||
! DEFINE ASSERTIONS: !
|
||||
\*-----------------------*/
|
||||
assert(memory);
|
||||
assert(instr == 'c' || instr == 'd');
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
|
@ -167,11 +168,37 @@ init_bitstream(uchar* memory, uint32 size, char instr)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Evaluate if a valid memory handle has been passed by the !
|
||||
! function caller. !
|
||||
\*--------------------------------------------------------*/
|
||||
if(!memory)
|
||||
{
|
||||
/*--------------------------------------------------------*\
|
||||
! If no valid memory handle has been passed, allocate a !
|
||||
! memory block with the specifiec stream size. !
|
||||
\*--------------------------------------------------------*/
|
||||
stream->memory = calloc(size, sizeof(uchar));
|
||||
if(!stream->memory)
|
||||
{
|
||||
// memory allocation error
|
||||
fprintf(stderr, MEMERROR);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*--------------------------------------------------------*\
|
||||
! If a valid memory handle has been passed for decoding, !
|
||||
! save the memory handle in the bwc stream structure. !
|
||||
\*--------------------------------------------------------*/
|
||||
stream->memory = memory;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Initialize the byte buffer counter, stream size and size !
|
||||
! increment for the current stream. !
|
||||
\*--------------------------------------------------------*/
|
||||
stream->memory = memory;
|
||||
stream->t = (instr == 'c') ? 8 : 0;
|
||||
stream->Lmax = size;
|
||||
stream->size_incr = (uint64)(size / 2);
|
||||
|
@ -220,6 +247,11 @@ init_bitstream(uchar* memory, uint32 size, char instr)
|
|||
void
|
||||
emit_chunck(bitstream *const stream, const uchar* chunck, const uint64 size)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
\*-----------------------*/
|
||||
uint64 Lreq;
|
||||
|
||||
/*-----------------------*\
|
||||
! DEFINE ASSERTIONS: !
|
||||
\*-----------------------*/
|
||||
|
@ -227,30 +259,54 @@ emit_chunck(bitstream *const stream, const uchar* chunck, const uint64 size)
|
|||
assert(chunck);
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Check if an error was encountered in a previous writing !
|
||||
! operation !
|
||||
! Evaluate the memory block size if the current chunck of !
|
||||
! data is written to the stream. !
|
||||
\*--------------------------------------------------------*/
|
||||
if(!stream->error)
|
||||
Lreq = (bytes_used(stream) + size);
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Check if the enough memory has been allocated for the !
|
||||
! stream to store the additional data chunck. !
|
||||
\*--------------------------------------------------------*/
|
||||
if(Lreq > stream->Lmax)
|
||||
{
|
||||
/*--------------------------------------------------------*\
|
||||
! Check if the enough memory has been allocated for the !
|
||||
! stream to store the additional symbol. !
|
||||
! If the stream is not large enough, check if this is due !
|
||||
! to an error encountered in a previous writing operation !
|
||||
\*--------------------------------------------------------*/
|
||||
if((bytes_used(stream) + size) > stream->Lmax)
|
||||
if(!stream->error)
|
||||
{
|
||||
// memory allocation error
|
||||
stream->error |= 1;
|
||||
stream->Lmax = 0;
|
||||
/*--------------------------------------------------------*\
|
||||
! If the error flag is not set, increase the stream size !
|
||||
! until it is large enough to store the additional data !
|
||||
! chunck. !
|
||||
\*--------------------------------------------------------*/
|
||||
while(Lreq > stream->Lmax)
|
||||
{
|
||||
stream->Lmax += stream->size_incr + size;
|
||||
stream->size_incr = (uint64)(stream->Lmax / 2);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Reallocate the stream data block. !
|
||||
\*--------------------------------------------------------*/
|
||||
stream->memory = realloc(stream->memory, stream->Lmax);
|
||||
if(!stream->memory)
|
||||
{
|
||||
// memory allocation error
|
||||
stream->error |= 1;
|
||||
stream->Lmax = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*--------------------------------------------------------*\
|
||||
! Exit to function caller if error flag has been set. !
|
||||
\*--------------------------------------------------------*/
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*--------------------------------------------------------*\
|
||||
! Exit to function caller if error flag has been set. !
|
||||
\*--------------------------------------------------------*/
|
||||
return;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Copy the additional data to the stream memory block. !
|
||||
|
@ -314,30 +370,44 @@ emit_symbol(bitstream *const stream, const uint64 symbol, const uint8 size)
|
|||
assert(stream);
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Check if an error was encountered in a previous writing !
|
||||
! operation !
|
||||
! Check if the enough memory has been allocated for the !
|
||||
! stream to store the additional symbol. !
|
||||
\*--------------------------------------------------------*/
|
||||
if(!stream->error)
|
||||
if((bytes_used(stream) + size) > stream->Lmax)
|
||||
{
|
||||
/*--------------------------------------------------------*\
|
||||
! Check if the enough memory has been allocated for the !
|
||||
! stream to store the additional symbol. !
|
||||
! If the stream is not large enough, check if this is due !
|
||||
! to an error encountered in a previous writing operation !
|
||||
\*--------------------------------------------------------*/
|
||||
if((bytes_used(stream) + size) > stream->Lmax)
|
||||
if(!stream->error)
|
||||
{
|
||||
// memory allocation error
|
||||
stream->error |= 1;
|
||||
stream->Lmax = 0;
|
||||
/*--------------------------------------------------------*\
|
||||
! If the error flag is not set, increment the stream size !
|
||||
! to store the additional symbol. !
|
||||
\*--------------------------------------------------------*/
|
||||
stream->Lmax += stream->size_incr;
|
||||
stream->size_incr = (uint64)(stream->Lmax / 2);
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Reallocate the stream data block. !
|
||||
\*--------------------------------------------------------*/
|
||||
stream->memory = realloc(stream->memory, stream->Lmax);
|
||||
if(!stream->memory)
|
||||
{
|
||||
// memory allocation error
|
||||
stream->error |= 1;
|
||||
stream->Lmax = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*--------------------------------------------------------*\
|
||||
! Exit to function caller if error flag has been set. !
|
||||
\*--------------------------------------------------------*/
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*--------------------------------------------------------*\
|
||||
! Exit to function caller if error flag has been set. !
|
||||
\*--------------------------------------------------------*/
|
||||
return;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Copy the additional symbol to the stream memory block !
|
||||
|
@ -798,79 +868,76 @@ flush_stream(bitstream *const stream)
|
|||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: void *test(void) !
|
||||
! -------------- !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
! ------------ !
|
||||
! Shrinks the bitstream memory to the actually filled range. !
|
||||
! DESCRIPTION NEEDED !
|
||||
! !
|
||||
! PARAMETERS: !
|
||||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! - - - !
|
||||
! !
|
||||
! RETURN VALUE: !
|
||||
! ------------- !
|
||||
! Returns 0 if successfull and 1 if memory could not be resized. !
|
||||
! Type Description !
|
||||
! ---- ----------- !
|
||||
! - - !
|
||||
! !
|
||||
! DEVELOPMENT HISTORY: !
|
||||
! -------------------- !
|
||||
! !
|
||||
! Date Author Change Id Release Description Of Change !
|
||||
! ---- ------ --------- ------- --------------------- !
|
||||
! - Patrick Vogler B87D120 V 0.1.0 function created !
|
||||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
uchar
|
||||
shrink_to_fit(bitstream *const stream)
|
||||
terminate_stream(bitstream *stream, bwc_stream *const packed_stream)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE ASSERTIONS: !
|
||||
\*-----------------------*/
|
||||
assert(stream);
|
||||
|
||||
if(stream->error)
|
||||
if(packed_stream)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else if(stream->L > stream->Lmax)
|
||||
{
|
||||
stream->Lmax = stream->L;
|
||||
stream->memory = realloc(stream->memory, stream->Lmax);
|
||||
if(!stream->memory)
|
||||
if(stream->error)
|
||||
{
|
||||
// memory allocation error
|
||||
fprintf(stderr, MEMERROR);
|
||||
stream->Lmax = 0;
|
||||
return 1;
|
||||
}
|
||||
else if(stream->L != stream->Lmax)
|
||||
{
|
||||
stream->Lmax = stream->L;
|
||||
stream->memory = realloc(stream->memory, stream->Lmax);
|
||||
if(!stream->memory)
|
||||
{
|
||||
// memory allocation error
|
||||
fprintf(stderr, MEMERROR);
|
||||
stream->Lmax = 0;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
packed_stream->memory = stream->memory;
|
||||
packed_stream->access = stream->memory;
|
||||
packed_stream->size = stream->L;
|
||||
packed_stream->position = 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! DESCRIPTION: !
|
||||
! ------------ !
|
||||
! Swap memory pointer and size to span. Invalidates stream pointers. !
|
||||
! !
|
||||
! RETURN VALUE: !
|
||||
! ------------- !
|
||||
! Returns 0 if successfull and 1 if stream had previous memory error. !
|
||||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
uchar
|
||||
transfer_to_span(bitstream *const stream, bwc_span *const span)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE ASSERTIONS: !
|
||||
\*-----------------------*/
|
||||
assert(stream);
|
||||
assert(span);
|
||||
|
||||
if(stream->error)
|
||||
else
|
||||
{
|
||||
return 1;
|
||||
free(stream->memory);
|
||||
}
|
||||
|
||||
span->memory = stream->memory;
|
||||
span->access = stream->memory;
|
||||
span->size = stream->L;
|
||||
span->position = 0;
|
||||
|
||||
stream->memory = NULL;
|
||||
stream->L = 0;
|
||||
|
||||
free(stream);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: void release_packed_stream(bwc_span *stream) !
|
||||
! FUNCTION NAME: void release_packed_stream(bwc_stream *stream) !
|
||||
! -------------- !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
|
@ -882,7 +949,7 @@ transfer_to_span(bitstream *const stream, bwc_span *const span)
|
|||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! stream bwc_span - Packed bitstream used to store parts of !
|
||||
! stream bwc_stream - Packed bitstream used to store parts of !
|
||||
! the bwc codestream. !
|
||||
! !
|
||||
! RETURN VALUE: !
|
||||
|
@ -900,7 +967,7 @@ transfer_to_span(bitstream *const stream, bwc_span *const span)
|
|||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
void
|
||||
release_packed_stream(bwc_span *stream)
|
||||
release_packed_stream(bwc_stream *stream)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE ASSERTIONS: !
|
||||
|
|
|
@ -104,7 +104,7 @@ can_read(bitstream *const stream, const uint64 length)
|
|||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: void codestream_write_header(bitstream *const stream, bwc_codec *const field) !
|
||||
! FUNCTION NAME: void codestream_write_header(bitstream *const stream, bwc_field *const field) !
|
||||
! -------------- !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
|
@ -116,7 +116,7 @@ can_read(bitstream *const stream, const uint64 length)
|
|||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! field bwc_codec* - Structure defining the compression/ !
|
||||
! field bwc_field* - Structure defining the compression/ !
|
||||
! decompression stage. !
|
||||
! !
|
||||
! stream bitstream* - Structure used to assemble a bwc bit- !
|
||||
|
@ -138,8 +138,7 @@ can_read(bitstream *const stream, const uint64 length)
|
|||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
static void
|
||||
codestream_write_header(bitstream *const stream,
|
||||
bwc_codec *const field,
|
||||
bwc_stream *const data)
|
||||
bwc_field *const field)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
|
@ -156,8 +155,10 @@ codestream_write_header(bitstream *const stream,
|
|||
\*-----------------------*/
|
||||
bwc_gl_ctrl *control;
|
||||
bwc_gl_inf *info;
|
||||
bwc_span *aux;
|
||||
bwc_span *com;
|
||||
bwc_tile *tile;
|
||||
bwc_parameter *parameter;
|
||||
bwc_stream *aux;
|
||||
bwc_stream *com;
|
||||
|
||||
/*-----------------------*\
|
||||
! DEFINE ASSERTIONS: !
|
||||
|
@ -170,13 +171,17 @@ codestream_write_header(bitstream *const stream,
|
|||
! structure to temporary variables to make the code more !
|
||||
! readable. !
|
||||
\*--------------------------------------------------------*/
|
||||
info = &field->info;
|
||||
info = field->info;
|
||||
control = &field->control;
|
||||
|
||||
aux = data->codestream.aux;
|
||||
com = data->codestream.com;
|
||||
tile = &field->tile[0];
|
||||
|
||||
Linf = 31;
|
||||
parameter = &tile->parameter[0];
|
||||
|
||||
aux = field->aux;
|
||||
com = field->com;
|
||||
|
||||
Linf = 40 + info->nPar * 25;
|
||||
Lctr = 50 + control->nLayers * 4;
|
||||
Leoh = info->nPar * control->nTiles * 2 * PREC_BYTE;
|
||||
Lcss = control->codestreamSize;
|
||||
|
@ -188,10 +193,16 @@ codestream_write_header(bitstream *const stream,
|
|||
emit_symbol(stream, info->nX, 8);
|
||||
emit_symbol(stream, info->nY, 8);
|
||||
emit_symbol(stream, info->nZ, 8);
|
||||
emit_symbol(stream, info->nTS, 8);
|
||||
emit_symbol(stream, info->nTS, 2);
|
||||
emit_symbol(stream, info->nPar, 1);
|
||||
emit_symbol(stream, (uint8)info->data_prec, 1);
|
||||
emit_symbol(stream, (uint8)info->codec_prec, 1);
|
||||
emit_symbol(stream, info->precision, 1);
|
||||
emit_chunck(stream, (uchar*)info->f_ext, 10);
|
||||
|
||||
for(p = 0; p < info->nPar; ++p)
|
||||
{
|
||||
emit_chunck(stream, (uchar*)parameter[p].info.name, 24);
|
||||
emit_symbol(stream, parameter[p].info.precision, 1);
|
||||
}
|
||||
|
||||
emit_symbol(stream, SGC, 2);
|
||||
emit_symbol(stream, Lctr, 2);
|
||||
|
@ -228,7 +239,7 @@ codestream_write_header(bitstream *const stream,
|
|||
emit_symbol(stream, control->tileSizeX, 8);
|
||||
emit_symbol(stream, control->tileSizeY, 8);
|
||||
emit_symbol(stream, control->tileSizeZ, 8);
|
||||
emit_symbol(stream, control->tileSizeTS, 8);
|
||||
emit_symbol(stream, control->tileSizeTS, 2);
|
||||
|
||||
emit_symbol(stream, control->nLayers, 1);
|
||||
|
||||
|
@ -277,7 +288,7 @@ codestream_write_header(bitstream *const stream,
|
|||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: uchar sequence_packets(bwc_codec *const field, bwc_codec *const field) !
|
||||
! FUNCTION NAME: uchar sequence_packets(bwc_field *const field, bwc_field *const field) !
|
||||
! -------------- !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
|
@ -288,7 +299,7 @@ codestream_write_header(bitstream *const stream,
|
|||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! field bwc_codec* - Structure defining the compression/ !
|
||||
! field bwc_field* - Structure defining the compression/ !
|
||||
! decompression stage. !
|
||||
! !
|
||||
! tile bwc_tile* - Structure defining a bwc tile. !
|
||||
|
@ -308,7 +319,7 @@ codestream_write_header(bitstream *const stream,
|
|||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
static uchar
|
||||
sequence_packets(bwc_codec *const field, bwc_tile *const tile)
|
||||
sequence_packets(bwc_field *const field, bwc_tile *const tile)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
|
@ -337,7 +348,7 @@ sequence_packets(bwc_codec *const field, bwc_tile *const tile)
|
|||
! code more readable. !
|
||||
\*--------------------------------------------------------*/
|
||||
control = &field->control;
|
||||
info = &field->info;
|
||||
info = field->info;
|
||||
|
||||
packet_sequence = tile->packet_sequence;
|
||||
|
||||
|
@ -479,7 +490,7 @@ sequence_packets(bwc_codec *const field, bwc_tile *const tile)
|
|||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: uchar sequence_packets(bwc_codec *const field, bwc_codec *const field) !
|
||||
! FUNCTION NAME: uchar sequence_packets(bwc_field *const field, bwc_field *const field) !
|
||||
! -------------- !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
|
@ -490,7 +501,7 @@ sequence_packets(bwc_codec *const field, bwc_tile *const tile)
|
|||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! field bwc_codec* - Structure defining the compression/ !
|
||||
! field bwc_field* - Structure defining the compression/ !
|
||||
! decompression stage. !
|
||||
! !
|
||||
! tile bwc_tile* - Structure defining a bwc tile. !
|
||||
|
@ -510,7 +521,7 @@ sequence_packets(bwc_codec *const field, bwc_tile *const tile)
|
|||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
static void
|
||||
assemble_tile(bwc_codec *const field, bwc_tile *const tile, bitstream *const stream)
|
||||
assemble_tile(bwc_field *const field, bwc_tile *const tile, bitstream *const stream)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
|
@ -602,14 +613,14 @@ assemble_tile(bwc_codec *const field, bwc_tile *const tile, bitstream *const str
|
|||
! - Patrick Vogler B87D120 V 0.1.0 function created !
|
||||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
bwc_codec*
|
||||
parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *const stream)
|
||||
bwc_field*
|
||||
parse_main_header(bwc_data *const data,bitstream *const stream)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
\*-----------------------*/
|
||||
uint64 buff_long, buffX, buffY, buffZ, buffTS;
|
||||
uint64 nX, nY, nZ, nTS;
|
||||
uint64 nX, nY, nZ;
|
||||
uint32 buff;
|
||||
uint32 bitrate;
|
||||
uint32 Lsax;
|
||||
|
@ -618,34 +629,35 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
uint16 CSsgc;
|
||||
uint16 Linf, Lctr, Lcom, Leoh, Lunk;
|
||||
uint16 marker;
|
||||
uint16 nTS;
|
||||
uint8 index, l;
|
||||
uint8 nPar, p;
|
||||
bwc_precision data_prec, codec_prec;
|
||||
uint8 codec_prec, precision;
|
||||
|
||||
/*-----------------------*\
|
||||
! DEFINE CHAR VARIABLES: !
|
||||
\*-----------------------*/
|
||||
char* buffer_char;
|
||||
char status;
|
||||
|
||||
/*-----------------------*\
|
||||
! DEFINE STRUCTS: !
|
||||
\*-----------------------*/
|
||||
bwc_field *field;
|
||||
bwc_gl_ctrl *control;
|
||||
bwc_gl_inf *info;
|
||||
|
||||
/*-----------------------*\
|
||||
! DEFINE ASSERTIONS: !
|
||||
\*-----------------------*/
|
||||
assert(codec);
|
||||
assert(data);
|
||||
assert(stream);
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Save the global control and info structure to temporary !
|
||||
! variables to make the code more readable. !
|
||||
! Save the data info structure to a temporary variable to !
|
||||
! make the code more readable. !
|
||||
\*--------------------------------------------------------*/
|
||||
info = &codec->info;
|
||||
control = &codec->control;
|
||||
info = &data->info;
|
||||
|
||||
status = CODESTREAM_OK;
|
||||
index = 0;
|
||||
|
@ -696,23 +708,41 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
break;
|
||||
}
|
||||
|
||||
nX = get_symbol(stream, 8);
|
||||
nY = get_symbol(stream, 8);
|
||||
nZ = get_symbol(stream, 8);
|
||||
nTS = get_symbol(stream, 8);
|
||||
nPar = (uint8)get_symbol(stream, 1);
|
||||
data_prec = (bwc_precision)get_symbol(stream, 1);
|
||||
codec_prec = (bwc_precision)get_symbol(stream, 1);
|
||||
info->nX = nX = get_symbol(stream, 8);
|
||||
info->nY = nY = get_symbol(stream, 8);
|
||||
info->nZ = nZ = get_symbol(stream, 8);
|
||||
info->nTS = nTS = (uint16)get_symbol(stream, 2);
|
||||
info->nPar = nPar = (uint8)get_symbol(stream, 1);
|
||||
info->precision = codec_prec = (uint8)get_symbol(stream, 1);
|
||||
|
||||
info->codec_prec = codec_prec;
|
||||
buffer_char = (char*)get_chunck(stream, 10);
|
||||
strncpy(info->f_ext, buffer_char, sizeof(buffer_char)/sizeof(*buffer_char));
|
||||
free(buffer_char);
|
||||
|
||||
configure_codec(codec, nX, nY, nZ, nTS, nPar, data_prec);
|
||||
if(!codec)
|
||||
for(p = 0; p < nPar; ++p)
|
||||
{
|
||||
buffer_char = (char*)get_chunck(stream, 24);
|
||||
precision = (uint8)get_symbol(stream, 1);
|
||||
|
||||
bwc_add_param(data, buffer_char, precision);
|
||||
|
||||
free(buffer_char);
|
||||
}
|
||||
|
||||
field = bwc_initialize_field(data);
|
||||
if(!field)
|
||||
{
|
||||
status |= CODESTREAM_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Save the global control and info structure to temporary !
|
||||
! variables to make the code more readable. !
|
||||
\*--------------------------------------------------------*/
|
||||
info = field->info = &data->info;
|
||||
control = &field->control;
|
||||
|
||||
control->codestreamSize = stream->Lmax;
|
||||
|
||||
status |= CODESTREAM_SGI_READ;
|
||||
|
@ -725,7 +755,7 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
{
|
||||
// Invalid Codestream
|
||||
fprintf(stderr, CSERROR);
|
||||
bwc_free_codec(codec);
|
||||
bwc_kill_compression(field);
|
||||
status |= CODESTREAM_ERROR;
|
||||
break;
|
||||
}
|
||||
|
@ -736,7 +766,7 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
{
|
||||
// Invalid Codestream
|
||||
fprintf(stderr, CSERROR);
|
||||
bwc_free_codec(codec);
|
||||
bwc_kill_compression(field);
|
||||
status |= CODESTREAM_ERROR;
|
||||
break;
|
||||
}
|
||||
|
@ -747,14 +777,14 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
buff_long = get_symbol(stream, 1);
|
||||
if(CSsgc & (0x01 << 0))
|
||||
{
|
||||
bwc_set_error_resilience(codec);
|
||||
bwc_set_error_resilience(field);
|
||||
}
|
||||
|
||||
buff_long = get_symbol(stream, 1);
|
||||
|
||||
if(CSsgc & (0x01 << 1))
|
||||
{
|
||||
set_quant_style(codec, (bwc_quant_st)buff_long);
|
||||
set_quant_style(field, (bwc_quant_st)buff_long);
|
||||
}
|
||||
|
||||
buff_long = get_symbol(stream, 1);
|
||||
|
@ -770,50 +800,50 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
buff_long = get_symbol(stream, 1);
|
||||
if(CSsgc & (0x01 << 3))
|
||||
{
|
||||
set_progression(codec, (uint8)buff_long);
|
||||
set_progression(field, (uint8)buff_long);
|
||||
}
|
||||
|
||||
buff_long = get_symbol(stream, 1);
|
||||
if(CSsgc & (0x01 << 4))
|
||||
{
|
||||
set_kernels(codec, (uint8)(0x03 & (buff_long >> 6)), (uint8)(0x03 & (buff_long >> 4)),
|
||||
set_kernels(field, (uint8)(0x03 & (buff_long >> 6)), (uint8)(0x03 & (buff_long >> 4)),
|
||||
(uint8)(0x03 & (buff_long >> 2)), (uint8)(0x03 & buff_long));
|
||||
}
|
||||
|
||||
buff_long = get_symbol(stream, 4);
|
||||
if(CSsgc & (0x01 << 5))
|
||||
{
|
||||
bwc_set_decomp(codec, (uint8)(0xFF & (buff_long >> 24)), (uint8)(0xFF & (buff_long >> 16)),
|
||||
bwc_set_decomp(field, (uint8)(0xFF & (buff_long >> 24)), (uint8)(0xFF & (buff_long >> 16)),
|
||||
(uint8)(0xFF & (buff_long >> 8)), (uint8)(0xFF & buff_long));
|
||||
}
|
||||
|
||||
buff_long = get_symbol(stream, 2);
|
||||
if(CSsgc & (0x01 << 6))
|
||||
{
|
||||
bwc_set_precincts(codec, (uint8)(0x0F & (buff_long >> 8)), (uint8)(0x0F & (buff_long >> 12)),
|
||||
bwc_set_precincts(field, (uint8)(0x0F & (buff_long >> 8)), (uint8)(0x0F & (buff_long >> 12)),
|
||||
(uint8)(0x0F & buff_long), (uint8)(0x0F & (buff_long >> 4)));
|
||||
}
|
||||
|
||||
buff_long = get_symbol(stream, 4);
|
||||
if(CSsgc & (0x01 << 7))
|
||||
{
|
||||
bwc_set_codeblocks(codec, (uint8)(0xFF & (buff_long >> 24)), (uint8)(0xFF & (buff_long >> 16)),
|
||||
bwc_set_codeblocks(field, (uint8)(0xFF & (buff_long >> 24)), (uint8)(0xFF & (buff_long >> 16)),
|
||||
(uint8)(0xFF & (buff_long >> 8)), (uint8)(0xFF & buff_long));
|
||||
}
|
||||
|
||||
buff_long = get_symbol(stream, 1);
|
||||
if(CSsgc & (0x01 << 8))
|
||||
{
|
||||
bwc_set_qm(codec, (uint8)buff_long);
|
||||
bwc_set_qm(field, (uint8)buff_long);
|
||||
}
|
||||
|
||||
buffX = get_symbol(stream, 8);
|
||||
buffY = get_symbol(stream, 8);
|
||||
buffZ = get_symbol(stream, 8);
|
||||
buffTS = get_symbol(stream, 8);
|
||||
buffTS = get_symbol(stream, 2);
|
||||
if(CSsgc & (0x01 << 9))
|
||||
{
|
||||
bwc_set_tiles(codec, buffX, buffY, buffZ, buffTS, bwc_tile_sizeof);
|
||||
bwc_set_tiles(field, buffX, buffY, buffZ, (uint16)buffTS, bwc_tile_sizeof);
|
||||
}
|
||||
|
||||
control->nLayers = get_symbol(stream, 1);
|
||||
|
@ -822,7 +852,7 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
{
|
||||
// memory allocation error
|
||||
fprintf(stderr, MEMERROR);
|
||||
bwc_free_codec(codec);
|
||||
bwc_kill_compression(field);
|
||||
status|= CODESTREAM_ERROR;
|
||||
break;
|
||||
}
|
||||
|
@ -833,10 +863,10 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
control->bitrate[l] = *(float *)&bitrate;
|
||||
}
|
||||
|
||||
create_field(codec);
|
||||
if(!codec)
|
||||
create_field(field);
|
||||
if(!field)
|
||||
{
|
||||
bwc_free_codec(codec);
|
||||
bwc_kill_compression(field);
|
||||
status |= CODESTREAM_ERROR;
|
||||
break;
|
||||
}
|
||||
|
@ -851,7 +881,7 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
{
|
||||
// Invalid Codestream
|
||||
fprintf(stderr, CSERROR);
|
||||
bwc_free_codec(codec);
|
||||
bwc_kill_compression(field);
|
||||
status |= CODESTREAM_ERROR;
|
||||
break;
|
||||
}
|
||||
|
@ -861,17 +891,17 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
{
|
||||
// Invalid Codestream
|
||||
fprintf(stderr, CSERROR);
|
||||
bwc_free_codec(codec);
|
||||
bwc_kill_compression(field);
|
||||
status |= CODESTREAM_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
data->codestream.aux = calloc(1, sizeof(bwc_span));
|
||||
data->codestream.aux = calloc(1, sizeof(bwc_stream));
|
||||
if(!data->codestream.aux)
|
||||
{
|
||||
// memory allocation error
|
||||
fprintf(stderr, MEMERROR);
|
||||
bwc_free_codec(codec);
|
||||
bwc_kill_compression(field);
|
||||
status |= CODESTREAM_ERROR;
|
||||
break;
|
||||
}
|
||||
|
@ -889,7 +919,7 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
{
|
||||
// Invalid Codestream
|
||||
fprintf(stderr, CSERROR);
|
||||
bwc_free_codec(codec);
|
||||
bwc_kill_compression(field);
|
||||
status |= CODESTREAM_ERROR;
|
||||
break;
|
||||
}
|
||||
|
@ -899,17 +929,17 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
{
|
||||
// Invalid Codestream
|
||||
fprintf(stderr, CSERROR);
|
||||
bwc_free_codec(codec);
|
||||
bwc_kill_compression(field);
|
||||
status |= CODESTREAM_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
data->codestream.com = calloc(1, sizeof(bwc_span));
|
||||
data->codestream.com = calloc(1, sizeof(bwc_stream));
|
||||
if(!data->codestream.com)
|
||||
{
|
||||
// memory allocation error
|
||||
fprintf(stderr, MEMERROR);
|
||||
bwc_free_codec(codec);
|
||||
bwc_kill_compression(field);
|
||||
status |= CODESTREAM_ERROR;
|
||||
break;
|
||||
}
|
||||
|
@ -929,7 +959,7 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
{
|
||||
// Invalid Codestream
|
||||
fprintf(stderr, CSERROR);
|
||||
bwc_free_codec(codec);
|
||||
bwc_kill_compression(field);
|
||||
status |= CODESTREAM_ERROR;
|
||||
break;
|
||||
}
|
||||
|
@ -939,12 +969,12 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
{
|
||||
// Invalid Codestream
|
||||
fprintf(stderr, CSERROR);
|
||||
bwc_free_codec(codec);
|
||||
bwc_kill_compression(field);
|
||||
status |= CODESTREAM_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
if(codec_prec == bwc_precision_double)
|
||||
if(codec_prec == 8)
|
||||
{
|
||||
/*--------------------------------------------------------*\
|
||||
! Loop through all tile parameters and... !
|
||||
|
@ -958,14 +988,14 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
! header stream. !
|
||||
\*--------------------------------------------------------*/
|
||||
buff_long = get_symbol(stream, sizeof(double));
|
||||
codec->tile[t].parameter[p].info.parameter_min = (bwc_float)*(double*)&buff_long;
|
||||
field->tile[t].parameter[p].info.parameter_min = (bwc_float)*(double*)&buff_long;
|
||||
|
||||
buff_long = get_symbol(stream, sizeof(double));
|
||||
codec->tile[t].parameter[p].info.parameter_max = (bwc_float)*(double*)&buff_long;
|
||||
field->tile[t].parameter[p].info.parameter_max = (bwc_float)*(double*)&buff_long;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(codec_prec == bwc_precision_single)
|
||||
else if(codec_prec == 4)
|
||||
{
|
||||
/*--------------------------------------------------------*\
|
||||
! Loop through all tile parameters and... !
|
||||
|
@ -979,20 +1009,20 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
! header stream. !
|
||||
\*--------------------------------------------------------*/
|
||||
buff = get_symbol(stream, sizeof(float));
|
||||
codec->tile[t].parameter[p].info.parameter_min = (bwc_float)*(float*)&buff;
|
||||
field->tile[t].parameter[p].info.parameter_min = (bwc_float)*(float*)&buff;
|
||||
|
||||
buff = get_symbol(stream, sizeof(float));
|
||||
codec->tile[t].parameter[p].info.parameter_max = (bwc_float)*(float*)&buff;
|
||||
field->tile[t].parameter[p].info.parameter_max = (bwc_float)*(float*)&buff;
|
||||
}
|
||||
}
|
||||
}
|
||||
return codec;
|
||||
return field;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Invalid Codestream
|
||||
fprintf(stderr, CSERROR);
|
||||
bwc_free_codec(codec);
|
||||
bwc_kill_compression(field);
|
||||
status |= CODESTREAM_ERROR;
|
||||
}
|
||||
break;
|
||||
|
@ -1004,7 +1034,7 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
{
|
||||
// Invalid Codestream
|
||||
fprintf(stderr, CSERROR);
|
||||
bwc_free_codec(codec);
|
||||
bwc_kill_compression(field);
|
||||
status |= CODESTREAM_ERROR;
|
||||
break;
|
||||
}
|
||||
|
@ -1014,7 +1044,7 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
{
|
||||
// Invalid Codestream
|
||||
fprintf(stderr, CSERROR);
|
||||
bwc_free_codec(codec);
|
||||
bwc_kill_compression(field);
|
||||
status |= CODESTREAM_ERROR;
|
||||
break;
|
||||
}
|
||||
|
@ -1029,7 +1059,7 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: uchar sequence_packets(bwc_codec *const field, bwc_codec *const field) !
|
||||
! FUNCTION NAME: uchar sequence_packets(bwc_field *const field, bwc_field *const field) !
|
||||
! -------------- !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
|
@ -1040,7 +1070,7 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! field bwc_codec* - Structure defining the compression/ !
|
||||
! field bwc_field* - Structure defining the compression/ !
|
||||
! decompression stage. !
|
||||
! !
|
||||
! tile bwc_tile* - Structure defining a bwc tile. !
|
||||
|
@ -1060,7 +1090,7 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
|
|||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
static uchar
|
||||
parse_tile(bwc_codec *const field, bitstream *const stream)
|
||||
parse_tile(bwc_field *const field, bitstream *const stream)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
|
@ -1210,7 +1240,7 @@ parse_tile(bwc_codec *const field, bitstream *const stream)
|
|||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
static uchar
|
||||
parse_body(bwc_codec *const field, bitstream *const stream)
|
||||
parse_body(bwc_field *const field, bitstream *const stream)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
|
@ -1277,7 +1307,7 @@ parse_body(bwc_codec *const field, bitstream *const stream)
|
|||
{
|
||||
// Invalid Codestream
|
||||
fprintf(stderr, CSERROR);
|
||||
bwc_free_codec(field);
|
||||
bwc_kill_compression(field);
|
||||
status |= CODESTREAM_ERROR;
|
||||
break;
|
||||
}
|
||||
|
@ -1287,7 +1317,7 @@ parse_body(bwc_codec *const field, bitstream *const stream)
|
|||
{
|
||||
// Invalid Codestream
|
||||
fprintf(stderr, CSERROR);
|
||||
bwc_free_codec(field);
|
||||
bwc_kill_compression(field);
|
||||
status |= CODESTREAM_ERROR;
|
||||
break;
|
||||
}
|
||||
|
@ -1306,7 +1336,7 @@ parse_body(bwc_codec *const field, bitstream *const stream)
|
|||
|| ||
|
||||
\************************************************************************************************************/
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: bwc_span* assemble_codestream(bwc_codec *const field) !
|
||||
! FUNCTION NAME: bwc_stream* assemble_codestream(bwc_field *const field) !
|
||||
! -------------- !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
|
@ -1317,14 +1347,14 @@ parse_body(bwc_codec *const field, bitstream *const stream)
|
|||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! field bwc_codec* - Structure defining the compression/ !
|
||||
! field bwc_field* - Structure defining the compression/ !
|
||||
! decompression stage. !
|
||||
! !
|
||||
! RETURN VALUE: !
|
||||
! ------------- !
|
||||
! Type Description !
|
||||
! ---- ----------- !
|
||||
! bwc_span* - Packed stream containing the compressed data set. !
|
||||
! bwc_stream* - Packed stream containing the compressed data set. !
|
||||
! !
|
||||
! DEVELOPMENT HISTORY: !
|
||||
! -------------------- !
|
||||
|
@ -1334,13 +1364,12 @@ parse_body(bwc_codec *const field, bitstream *const stream)
|
|||
! 13.06.2019 Patrick Vogler B87D120 V 0.1.0 function created !
|
||||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
size_t
|
||||
assemble_codestream(bwc_codec *const field, bwc_stream *const data)
|
||||
bwc_stream*
|
||||
assemble_codestream(bwc_field *const field)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
\*-----------------------*/
|
||||
size_t compressed_size;
|
||||
uint64 i;
|
||||
|
||||
/*-----------------------*\
|
||||
|
@ -1349,12 +1378,12 @@ assemble_codestream(bwc_codec *const field, bwc_stream *const data)
|
|||
bwc_gl_ctrl *control;
|
||||
bwc_tile *tile;
|
||||
bitstream *stream;
|
||||
bwc_stream *packed_stream;
|
||||
|
||||
/*-----------------------*\
|
||||
! DEFINE ASSERTIONS: !
|
||||
\*-----------------------*/
|
||||
assert(field);
|
||||
assert(data);
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Save the global control and info structure to temporary !
|
||||
|
@ -1384,7 +1413,7 @@ assemble_codestream(bwc_codec *const field, bwc_stream *const data)
|
|||
\*--------------------------------------------------------*/
|
||||
if(sequence_packets(field, tile))
|
||||
{
|
||||
return 0;
|
||||
return NULL;
|
||||
}
|
||||
control->codestreamSize += tile->control.header_size +
|
||||
tile->control.body_size;
|
||||
|
@ -1394,8 +1423,8 @@ assemble_codestream(bwc_codec *const field, bwc_stream *const data)
|
|||
! Initialize the final codestream and emit the header !
|
||||
! bytes. !
|
||||
\*--------------------------------------------------------*/
|
||||
stream = init_bitstream(data->out, control->codestreamSize, 'c');
|
||||
codestream_write_header(stream, field, data);
|
||||
stream = init_stream(NULL, control->codestreamSize, 'c');
|
||||
codestream_write_header(stream, field);
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Walk through the tile structure and assemble the packed !
|
||||
|
@ -1415,14 +1444,26 @@ assemble_codestream(bwc_codec *const field, bwc_stream *const data)
|
|||
|
||||
emit_symbol(stream, EOC, 2);
|
||||
|
||||
compressed_size = stream->L;
|
||||
free(stream);
|
||||
packed_stream = calloc(1, sizeof(bwc_stream));
|
||||
if(!packed_stream)
|
||||
{
|
||||
// memory allocation error
|
||||
fprintf(stderr, MEMERROR);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return compressed_size;
|
||||
if(terminate_stream(stream, packed_stream))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
return packed_stream;
|
||||
}
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: uchar parse_codestream(bwc_codec *const field, bitstream *const stream) !
|
||||
! FUNCTION NAME: uchar parse_codestream(bwc_field *const field, bitstream *const stream) !
|
||||
! -------------- !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
|
@ -1433,7 +1474,7 @@ assemble_codestream(bwc_codec *const field, bwc_stream *const data)
|
|||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! field bwc_codec* - Structure defining the compression/ !
|
||||
! field bwc_field* - Structure defining the compression/ !
|
||||
! decompression stage. !
|
||||
! !
|
||||
! stream bitstream* - Structure used to assemble a bwc bit- !
|
||||
|
@ -1453,32 +1494,32 @@ assemble_codestream(bwc_codec *const field, bwc_stream *const data)
|
|||
! 05.08.2019 Patrick Vogler B87D120 V 0.1.0 function created !
|
||||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
bwc_codec*
|
||||
parse_codestream(bwc_codec *const codec, bwc_stream *const data, uint8 const layer)
|
||||
bwc_field*
|
||||
parse_codestream(bwc_data *const data, uint8 const layer)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE STRUCTS: !
|
||||
\*-----------------------*/
|
||||
bwc_field *field;
|
||||
bitstream *stream;
|
||||
|
||||
/*-----------------------*\
|
||||
! DEFINE ASSERTIONS: !
|
||||
\*-----------------------*/
|
||||
assert(data);
|
||||
assert(codec);
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Initialize a bitstream used to parse the packed code- !
|
||||
! stream. !
|
||||
\*--------------------------------------------------------*/
|
||||
stream = init_bitstream(data->inp, 10, 'd');
|
||||
stream = init_stream(data->codestream.data->memory, 10, 'd');
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Parse the main header and set up the codec structure for !
|
||||
! Parse the main header and set up the field structure for !
|
||||
! the current decompression run. !
|
||||
\*--------------------------------------------------------*/
|
||||
parse_main_header(codec, data, stream);
|
||||
if(!codec)
|
||||
field = parse_main_header(data, stream);
|
||||
if(!field)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
@ -1487,36 +1528,36 @@ parse_codestream(bwc_codec *const codec, bwc_stream *const data, uint8 const lay
|
|||
! Initialize the useLayer option to decompress the entire !
|
||||
! codestream. !
|
||||
\*--------------------------------------------------------*/
|
||||
codec->control.useLayer = codec->control.nLayers - 1;
|
||||
field->control.useLayer = field->control.nLayers - 1;
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Check if the layer index supplied by the function caller !
|
||||
! is valid. !
|
||||
\*--------------------------------------------------------*/
|
||||
if(layer < codec->control.nLayers && layer > 0)
|
||||
if(layer < field->control.nLayers && layer > 0)
|
||||
{
|
||||
/*--------------------------------------------------------*\
|
||||
! Amend the use layer variable in the global control struc-!
|
||||
! ture. !
|
||||
\*--------------------------------------------------------*/
|
||||
codec->control.useLayer = layer;
|
||||
field->control.useLayer = layer;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Parse the rest of the compressed codestream and load the !
|
||||
! body into the codec structure. !
|
||||
! body into the field structure. !
|
||||
\*--------------------------------------------------------*/
|
||||
if(parse_body(codec, stream))
|
||||
if(parse_body(field, stream))
|
||||
{
|
||||
bwc_free_codec(codec);
|
||||
bwc_kill_compression(field);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Free the bitstream used to parse the codestream and re- !
|
||||
! turn the codec structure to the function caller. !
|
||||
! turn the field structure to the function caller. !
|
||||
\*--------------------------------------------------------*/
|
||||
free(stream);
|
||||
|
||||
return codec;
|
||||
return field;
|
||||
}
|
|
@ -1421,7 +1421,7 @@ initialize_gain_lut()
|
|||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: bwc_float get_dwt_energy_gain(bwc_codec *const field, uchar highband_flag, uint16 level) !
|
||||
! FUNCTION NAME: bwc_float get_dwt_energy_gain(bwc_field *const field, uchar highband_flag, uint16 level) !
|
||||
! -------------- !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
|
@ -1434,7 +1434,7 @@ initialize_gain_lut()
|
|||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! field bwc_codec* - Structure defining the compression/ !
|
||||
! field bwc_field* - Structure defining the compression/ !
|
||||
! decompression stage. !
|
||||
! !
|
||||
! highband_flag uchar - Defines the subband for which Gb is !
|
||||
|
@ -1459,7 +1459,7 @@ initialize_gain_lut()
|
|||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
bwc_float
|
||||
get_dwt_energy_gain(bwc_codec *const field, uchar highband_flag, uint16 level)
|
||||
get_dwt_energy_gain(bwc_field *const field, uchar highband_flag, uint16 level)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
|
@ -1576,7 +1576,7 @@ get_dwt_energy_gain(bwc_codec *const field, uchar highband_flag, uint16 level)
|
|||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: uchar forward_discrete_wavelet_transform(bwc_codec *const field, !
|
||||
! FUNCTION NAME: uchar forward_discrete_wavelet_transform(bwc_field *const field, !
|
||||
! -------------- bwc_parameter *const parameter) !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
|
@ -1594,7 +1594,7 @@ get_dwt_energy_gain(bwc_codec *const field, uchar highband_flag, uint16 level)
|
|||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! field bwc_codec* - Structure defining the compression/ !
|
||||
! field bwc_field* - Structure defining the compression/ !
|
||||
! decompression stage. !
|
||||
! !
|
||||
! parameter bwc_parameter* - Structure defining a bwc parameter. !
|
||||
|
@ -1614,22 +1614,28 @@ get_dwt_energy_gain(bwc_codec *const field, uchar highband_flag, uint16 level)
|
|||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
uchar
|
||||
forward_wavelet_transform(bwc_codec *const field, bwc_parameter *const parameter)
|
||||
forward_wavelet_transform(bwc_field *const field, bwc_parameter *const parameter)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
\*-----------------------*/
|
||||
uint64 incr_X, incr_Y, incr_Z, incr_TS;
|
||||
uint64 rX0, rY0, rZ0, rTS0;
|
||||
uint64 rX1, rY1, rZ1, rTS1;
|
||||
uint64 width, height, depth, dt;
|
||||
uint64 x, y, z, t;
|
||||
uint64 incr_X, incr_Y, incr_Z;
|
||||
uint64 rX0, rY0, rZ0;
|
||||
uint64 rX1, rY1, rZ1;
|
||||
uint64 width, height, depth;
|
||||
uint64 x, y, z;
|
||||
|
||||
int64 nThreads;
|
||||
int16 i;
|
||||
|
||||
uint32 buff_size;
|
||||
|
||||
uint16 incr_TS;
|
||||
uint16 rTS0;
|
||||
uint16 rTS1;
|
||||
uint16 dt;
|
||||
uint16 t;
|
||||
|
||||
uint8 id;
|
||||
uint8 filter_tapsX, filter_tapsY, filter_tapsZ;
|
||||
uint8 filter_tapsTS;
|
||||
|
@ -1771,8 +1777,8 @@ forward_wavelet_transform(bwc_codec *const field, bwc_parameter *const parameter
|
|||
rY1 = (uint64)parameter->resolution[control->nDecomp - level].info.Y1;
|
||||
rZ0 = (uint64)parameter->resolution[control->nDecomp - level].info.Z0;
|
||||
rZ1 = (uint64)parameter->resolution[control->nDecomp - level].info.Z1;
|
||||
rTS0 = (uint64)parameter->resolution[control->nDecomp - level].info.TS0;
|
||||
rTS1 = (uint64)parameter->resolution[control->nDecomp - level].info.TS1;
|
||||
rTS0 = (uint16)parameter->resolution[control->nDecomp - level].info.TS0;
|
||||
rTS1 = (uint16)parameter->resolution[control->nDecomp - level].info.TS1;
|
||||
|
||||
if(level < control->decompX && (rX1 - rX0) > 1)
|
||||
{
|
||||
|
@ -2111,7 +2117,7 @@ forward_wavelet_transform(bwc_codec *const field, bwc_parameter *const parameter
|
|||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: uchar inverse_discrete_wavelet_transform(bwc_codec *const field, !
|
||||
! FUNCTION NAME: uchar inverse_discrete_wavelet_transform(bwc_field *const field, !
|
||||
! -------------- bwc_parameter *const parameter) !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
|
@ -2129,7 +2135,7 @@ forward_wavelet_transform(bwc_codec *const field, bwc_parameter *const parameter
|
|||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! field bwc_codec* - Structure defining the compression/ !
|
||||
! field bwc_field* - Structure defining the compression/ !
|
||||
! decompression stage. !
|
||||
! !
|
||||
! parameter bwc_parameter* - Structure defining a bwc parameter. !
|
||||
|
@ -2149,22 +2155,28 @@ forward_wavelet_transform(bwc_codec *const field, bwc_parameter *const parameter
|
|||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
uchar
|
||||
inverse_wavelet_transform(bwc_codec *const field, bwc_parameter *const parameter)
|
||||
inverse_wavelet_transform(bwc_field *const field, bwc_parameter *const parameter)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
\*-----------------------*/
|
||||
uint64 incr_X, incr_Y, incr_Z, incr_TS;
|
||||
uint64 rX0, rY0, rZ0, rTS0;
|
||||
uint64 rX1, rY1, rZ1, rTS1;
|
||||
uint64 width, height, depth, dt;
|
||||
uint64 x, y, z, t;
|
||||
uint64 incr_X, incr_Y, incr_Z;
|
||||
uint64 rX0, rY0, rZ0;
|
||||
uint64 rX1, rY1, rZ1;
|
||||
uint64 width, height, depth;
|
||||
uint64 x, y, z;
|
||||
|
||||
int64 nThreads;
|
||||
int64 i;
|
||||
|
||||
uint32 buff_size;
|
||||
|
||||
uint16 incr_TS;
|
||||
uint16 rTS0;
|
||||
uint16 rTS1;
|
||||
uint16 dt;
|
||||
uint16 t;
|
||||
|
||||
uint8 id;
|
||||
uint8 filter_tapsX, filter_tapsY, filter_tapsZ;
|
||||
uint8 filter_tapsTS;
|
||||
|
@ -2306,8 +2318,8 @@ inverse_wavelet_transform(bwc_codec *const field, bwc_parameter *const parameter
|
|||
rY1 = (uint64)parameter->resolution[control->nDecomp - level].info.Y1;
|
||||
rZ0 = (uint64)parameter->resolution[control->nDecomp - level].info.Z0;
|
||||
rZ1 = (uint64)parameter->resolution[control->nDecomp - level].info.Z1;
|
||||
rTS0 = (uint64)parameter->resolution[control->nDecomp - level].info.TS0;
|
||||
rTS1 = (uint64)parameter->resolution[control->nDecomp - level].info.TS1;
|
||||
rTS0 = (uint16)parameter->resolution[control->nDecomp - level].info.TS0;
|
||||
rTS1 = (uint16)parameter->resolution[control->nDecomp - level].info.TS1;
|
||||
|
||||
if(level < control->decompTS && (rTS1 - rTS0) > 1)
|
||||
{
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -16,7 +16,7 @@
|
|||
|| ------------ ||
|
||||
|| ||
|
||||
|| This file describes a set of functions that can be used to de-/encode bwc ||
|
||||
|| codeblocks described by the bwc_codec structure according to the embedded block ||
|
||||
|| codeblocks described by the bwc_field structure according to the embedded block ||
|
||||
|| coding paradigm described by the JPEG 2000 standard. For more information please ||
|
||||
|| refere to JPEG2000 by D. S. Taubman and M. W. Marcellin. ||
|
||||
|| ||
|
||||
|
@ -398,8 +398,9 @@ cblkreset_inv(bwc_coder_stripe *const cblk, const uint64 width, const uint64 hei
|
|||
uint64 i;
|
||||
uint64 limit;
|
||||
uint64 cblk_stripe;
|
||||
uint64 x, y, z, t;
|
||||
uint64 x, y, z;
|
||||
int64 idx_u, idx_r, idx_d, idx_l;
|
||||
uint16 t;
|
||||
uint8 s;
|
||||
|
||||
/*-----------------------*\
|
||||
|
@ -532,12 +533,15 @@ cblkcopy_forward(bwc_coder_stripe *const destination, bwc_sample *const source,
|
|||
\*-----------------------*/
|
||||
bwc_raw buff, sign_mask;
|
||||
uint64 bit_mask, limit;
|
||||
uint64 cblk_width, cblk_height, cblk_depth, cblk_dt, cblk_stripe;
|
||||
uint64 cblk_width, cblk_height, cblk_depth, cblk_stripe;
|
||||
uint64 incrX, incrY, incrZ;
|
||||
uint64 i, x, y, z, t;
|
||||
uint64 X0, Y0, Z0, TS0;
|
||||
uint64 X1, Y1, Z1, TS1;
|
||||
uint64 i, x, y, z;
|
||||
uint64 X0, Y0, Z0;
|
||||
uint64 X1, Y1, Z1;
|
||||
int64 idx_u, idx_r, idx_d, idx_l;
|
||||
uint16 TS0, TS1;
|
||||
uint16 cblk_dt;
|
||||
uint16 t;
|
||||
uint8 b, Kmax, s;
|
||||
|
||||
/*-----------------------*\
|
||||
|
@ -771,12 +775,15 @@ cblkcopy_inverse(bwc_coder_stripe *const source, bwc_sample *const destinat
|
|||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
\*-----------------------*/
|
||||
uint64 cblk_width, cblk_height, cblk_depth, cblk_dt, cblk_stripe;
|
||||
uint64 cblk_width, cblk_height, cblk_depth, cblk_stripe;
|
||||
uint64 bit_shift, buff, limit;
|
||||
uint64 incrX, incrY, incrZ;
|
||||
uint64 i, x, y, z, t;
|
||||
uint64 X0, Y0, Z0, TS0;
|
||||
uint64 X1, Y1, Z1, TS1;
|
||||
uint64 i, x, y, z;
|
||||
uint64 X0, Y0, Z0;
|
||||
uint64 X1, Y1, Z1;
|
||||
uint16 TS0, TS1;
|
||||
uint16 cblk_dt;
|
||||
uint16 t;
|
||||
uint8 bitplane;
|
||||
uint8 codingpass;
|
||||
uint8 s;
|
||||
|
@ -2267,12 +2274,12 @@ compute_convex_hull(bwc_encoded_cblk *const encoded_codeblock, double *const mse
|
|||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: bwc_encoded_cblk* encode_codeblock(bwc_codec *const field, bwc_cblk_access *const access, !
|
||||
! FUNCTION NAME: bwc_encoded_cblk* encode_codeblock(bwc_field *const field, bwc_cblk_access *const access, !
|
||||
! -------------- bwc_coder_stripe *const codeblock, !
|
||||
! const uint64 width, !
|
||||
! const uint64 height, !
|
||||
! const uint64 depth, !
|
||||
! const uint64 dt) !
|
||||
! const uint16 dt) !
|
||||
! !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
|
@ -2300,12 +2307,12 @@ compute_convex_hull(bwc_encoded_cblk *const encoded_codeblock, double *const mse
|
|||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
static void
|
||||
encode_codeblock(bwc_codec *const field, bwc_cblk_access *const access,
|
||||
encode_codeblock(bwc_field *const field, bwc_cblk_access *const access,
|
||||
bwc_coder_stripe *const codeblock,
|
||||
const uint64 width,
|
||||
const uint64 height,
|
||||
const uint64 depth,
|
||||
const uint64 dt)
|
||||
const uint16 dt)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
|
@ -2588,12 +2595,12 @@ encode_codeblock(bwc_codec *const field, bwc_cblk_access *const access,
|
|||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: bwc_encoded_cblk* encode_codeblock(bwc_codec *const field, bwc_cblk_access *const access, !
|
||||
! FUNCTION NAME: bwc_encoded_cblk* encode_codeblock(bwc_field *const field, bwc_cblk_access *const access, !
|
||||
! bwc_coder_stripe *const codeblock, !
|
||||
! const uint64 width, !
|
||||
! const uint64 height, !
|
||||
! const uint64 depth, !
|
||||
! const uint64 dt) !
|
||||
! const uint16 dt) !
|
||||
! -------------- !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
|
@ -2621,12 +2628,12 @@ encode_codeblock(bwc_codec *const field, bwc_cblk_access *const access,
|
|||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
static void
|
||||
decode_codeblock(bwc_codec *const field, bwc_cblk_access *const access,
|
||||
decode_codeblock(bwc_field *const field, bwc_cblk_access *const access,
|
||||
bwc_coder_stripe *const codeblock,
|
||||
const uint64 width,
|
||||
const uint64 height,
|
||||
const uint64 depth,
|
||||
const uint64 dt)
|
||||
const uint16 dt)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
|
@ -2821,19 +2828,20 @@ decode_codeblock(bwc_codec *const field, bwc_cblk_access *const access,
|
|||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
uchar
|
||||
t1_encode(bwc_codec *const field, bwc_tile *const tile, bwc_parameter *const parameter)
|
||||
t1_encode(bwc_field *const field, bwc_tile *const tile, bwc_parameter *const parameter)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
\*-----------------------*/
|
||||
uint64 c;
|
||||
uint64 cbSizeX, cbSizeY, cbSizeZ, cbSizeTS;
|
||||
uint64 cbSizeX, cbSizeY, cbSizeZ;
|
||||
uint64 width, height, depth;
|
||||
|
||||
int64 buff_size;
|
||||
int64 i, j;
|
||||
int64 nThreads;
|
||||
|
||||
uint16 cbSizeTS;
|
||||
uint16 slope_max, slope_min;
|
||||
int16 z;
|
||||
|
||||
|
@ -3123,19 +3131,21 @@ t1_encode(bwc_codec *const field, bwc_tile *const tile, bwc_parameter *const par
|
|||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
uchar
|
||||
t1_decode(bwc_codec *const field, bwc_tile *const tile, bwc_parameter *const parameter)
|
||||
t1_decode(bwc_field *const field, bwc_tile *const tile, bwc_parameter *const parameter)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
\*-----------------------*/
|
||||
uint64 c;
|
||||
uint64 cbSizeX, cbSizeY, cbSizeZ, cbSizeTS;
|
||||
uint64 cbSizeX, cbSizeY, cbSizeZ;
|
||||
uint64 width, height, depth;
|
||||
|
||||
int64 buff_size;
|
||||
int64 i, j;
|
||||
int64 nThreads;
|
||||
|
||||
uint16 cbSizeTS;
|
||||
|
||||
/*-----------------------*\
|
||||
! DEFINE STRUCTS: !
|
||||
\*-----------------------*/
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|| ------------ ||
|
||||
|| ||
|
||||
|| This file describes a set of functions that can be used to de-/encode bwc ||
|
||||
|| codeblocks described by the bwc_codec structure according to the embedded block ||
|
||||
|| codeblocks described by the bwc_field structure according to the embedded block ||
|
||||
|| coding paradigm described by the JPEG 2000 standard. For more information please ||
|
||||
|| refere to JPEG2000 by D. S. Taubman and M. W. Marcellin. ||
|
||||
|| ||
|
||||
|
@ -312,7 +312,7 @@ encode_length(bitstream *const header, bwc_codeblock *const codeblock,
|
|||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: void create_quality_layers(bwc_codec *const field, bwc_tile *const tile) !
|
||||
! FUNCTION NAME: void create_quality_layers(bwc_field *const field, bwc_tile *const tile) !
|
||||
! -------------- !
|
||||
! !
|
||||
! !
|
||||
|
@ -385,7 +385,7 @@ decode_length(bitstream *const header, bwc_codeblock *const codeblock, int8 cons
|
|||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: int64 create_packet(bwc_codec *const field, bwc_tile *const tile, !
|
||||
! FUNCTION NAME: int64 create_packet(bwc_field *const field, bwc_tile *const tile, !
|
||||
! -------------- bwc_resolution *const resolution, !
|
||||
! uint32 const prec_idx, !
|
||||
! int8 const q_layer, !
|
||||
|
@ -403,7 +403,7 @@ decode_length(bitstream *const header, bwc_codeblock *const codeblock, int8 cons
|
|||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! field bwc_codec* - Structure defining the compression/ !
|
||||
! field bwc_field* - Structure defining the compression/ !
|
||||
! decompression stage. !
|
||||
! !
|
||||
! tile bwc_tile* - Structure defining a bwc tile. !
|
||||
|
@ -435,7 +435,7 @@ decode_length(bitstream *const header, bwc_codeblock *const codeblock, int8 cons
|
|||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
static int32
|
||||
create_packet(bwc_codec *const field, bwc_tile *const tile,
|
||||
create_packet(bwc_field *const field, bwc_tile *const tile,
|
||||
bwc_resolution *const resolution,
|
||||
uint32 const prec_idx,
|
||||
int16 const q_layer,
|
||||
|
@ -450,7 +450,6 @@ create_packet(bwc_codec *const field, bwc_tile *const tile,
|
|||
int16 *cp_contr;
|
||||
int16 delta_z;
|
||||
int8 m;
|
||||
uchar *memory;
|
||||
|
||||
/*-----------------------*\
|
||||
! DEFINE STRUCTS: !
|
||||
|
@ -483,14 +482,7 @@ create_packet(bwc_codec *const field, bwc_tile *const tile,
|
|||
! Initialize the stream that is used to assemble the pack- !
|
||||
! et header. !
|
||||
\*--------------------------------------------------------*/
|
||||
memory = calloc(PACKET_HEADER_SIZE, sizeof(uchar));
|
||||
if(!memory)
|
||||
{
|
||||
// memory allocation error
|
||||
fprintf(stderr, MEMERROR);
|
||||
return -1;
|
||||
}
|
||||
header = init_bitstream(memory, PACKET_HEADER_SIZE, 'c');
|
||||
header = init_stream(NULL, PACKET_HEADER_SIZE, 'c');
|
||||
if(!header)
|
||||
{
|
||||
// memory allocation error
|
||||
|
@ -506,7 +498,7 @@ create_packet(bwc_codec *const field, bwc_tile *const tile,
|
|||
if(!est)
|
||||
{
|
||||
packet->body.access =
|
||||
packet->body.memory = calloc(packet->body.size, sizeof(bwc_span));
|
||||
packet->body.memory = calloc(packet->body.size, sizeof(bwc_stream));
|
||||
if(!packet->body.memory)
|
||||
{
|
||||
// memory allocation error
|
||||
|
@ -652,8 +644,7 @@ create_packet(bwc_codec *const field, bwc_tile *const tile,
|
|||
}
|
||||
|
||||
k = header->L;
|
||||
free(header->memory);
|
||||
free(header);
|
||||
terminate_stream(header, NULL);
|
||||
return k;
|
||||
}
|
||||
/*--------------------------------------------------------*\
|
||||
|
@ -664,13 +655,11 @@ create_packet(bwc_codec *const field, bwc_tile *const tile,
|
|||
\*--------------------------------------------------------*/
|
||||
else
|
||||
{
|
||||
if(shrink_to_fit(header))
|
||||
if(terminate_stream(header, &packet->header))
|
||||
{
|
||||
// memory allocation error
|
||||
return -1;
|
||||
}
|
||||
transfer_to_span(header, &packet->header);
|
||||
free(header);
|
||||
|
||||
packet->size = packet->body.size + packet->header.size;
|
||||
|
||||
|
@ -717,7 +706,7 @@ create_packet(bwc_codec *const field, bwc_tile *const tile,
|
|||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: uchar create_packets(bwc_codec *const field, bwc_tile *const tile) !
|
||||
! FUNCTION NAME: uchar create_packets(bwc_field *const field, bwc_tile *const tile) !
|
||||
! -------------- !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
|
@ -734,7 +723,7 @@ create_packet(bwc_codec *const field, bwc_tile *const tile,
|
|||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! field bwc_codec* - Structure defining the compression/ !
|
||||
! field bwc_field* - Structure defining the compression/ !
|
||||
! decompression stage. !
|
||||
! !
|
||||
! tile bwc_tile* - Structure defining a bwc tile. !
|
||||
|
@ -754,7 +743,7 @@ create_packet(bwc_codec *const field, bwc_tile *const tile,
|
|||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
static uchar
|
||||
create_packets(bwc_codec *const field, bwc_tile *const tile)
|
||||
create_packets(bwc_field *const field, bwc_tile *const tile)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
|
@ -783,7 +772,7 @@ create_packets(bwc_codec *const field, bwc_tile *const tile)
|
|||
! variables to make the code more readable. !
|
||||
\*--------------------------------------------------------*/
|
||||
control = &field->control;
|
||||
info = &field->info;
|
||||
info = field->info;
|
||||
|
||||
/*--------------------------------------------------------*\
|
||||
! Iterate overall quality layers for every precinct in all !
|
||||
|
@ -856,7 +845,7 @@ create_packets(bwc_codec *const field, bwc_tile *const tile)
|
|||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: int64 create_quality_layer(bwc_codec *const field, bwc_tile *const tile, !
|
||||
! FUNCTION NAME: int64 create_quality_layer(bwc_field *const field, bwc_tile *const tile, !
|
||||
! -------------- uint16 const threshold, !
|
||||
! int16 const q_layer, !
|
||||
! uchar const est) !
|
||||
|
@ -871,7 +860,7 @@ create_packets(bwc_codec *const field, bwc_tile *const tile)
|
|||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! field bwc_codec* - Structure defining the compression/ !
|
||||
! field bwc_field* - Structure defining the compression/ !
|
||||
! decompression stage. !
|
||||
! !
|
||||
! tile bwc_tile* - Structure defining a bwc tile. !
|
||||
|
@ -899,7 +888,7 @@ create_packets(bwc_codec *const field, bwc_tile *const tile)
|
|||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
static int64
|
||||
create_quality_layer(bwc_codec *const field, bwc_tile *const tile,
|
||||
create_quality_layer(bwc_field *const field, bwc_tile *const tile,
|
||||
uint16 const threshold,
|
||||
int16 const q_layer,
|
||||
uchar const est)
|
||||
|
@ -935,7 +924,7 @@ create_quality_layer(bwc_codec *const field, bwc_tile *const tile,
|
|||
! variables to make the code more readable. !
|
||||
\*--------------------------------------------------------*/
|
||||
control = &field->control;
|
||||
info = &field->info;
|
||||
info = field->info;
|
||||
|
||||
for(j = 0, estimated_ql_size = 0; j < info->nPar; ++j)
|
||||
{
|
||||
|
@ -1086,7 +1075,7 @@ create_quality_layer(bwc_codec *const field, bwc_tile *const tile,
|
|||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: void create_quality_layers(bwc_codec *const field, bwc_tile *const tile) !
|
||||
! FUNCTION NAME: void create_quality_layers(bwc_field *const field, bwc_tile *const tile) !
|
||||
! -------------- !
|
||||
! !
|
||||
! !
|
||||
|
@ -1098,7 +1087,7 @@ create_quality_layer(bwc_codec *const field, bwc_tile *const tile,
|
|||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! field bwc_codec* - Structure defining the compression/ !
|
||||
! field bwc_field* - Structure defining the compression/ !
|
||||
! decompression stage. !
|
||||
! !
|
||||
! tile bwc_tile* - Structure defining a bwc tile. !
|
||||
|
@ -1118,7 +1107,7 @@ create_quality_layer(bwc_codec *const field, bwc_tile *const tile,
|
|||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
static uchar
|
||||
create_quality_layers(bwc_codec *const field, bwc_tile *const tile)
|
||||
create_quality_layers(bwc_field *const field, bwc_tile *const tile)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE INT VARIABLES: !
|
||||
|
@ -1150,7 +1139,7 @@ create_quality_layers(bwc_codec *const field, bwc_tile *const tile)
|
|||
! temporary variables to make the code more readable. !
|
||||
\*--------------------------------------------------------*/
|
||||
control = &field->control;
|
||||
info = &field->info;
|
||||
info = field->info;
|
||||
|
||||
tile_control = &tile->control;
|
||||
tile_info = &tile->info;
|
||||
|
@ -1266,7 +1255,7 @@ create_quality_layers(bwc_codec *const field, bwc_tile *const tile)
|
|||
|| ||
|
||||
\************************************************************************************************************/
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: uchar t2_encode(bwc_codec *const field, bwc_tile *const tile) !
|
||||
! FUNCTION NAME: uchar t2_encode(bwc_field *const field, bwc_tile *const tile) !
|
||||
! -------------- !
|
||||
! !
|
||||
! DESCRIPTION: !
|
||||
|
@ -1280,7 +1269,7 @@ create_quality_layers(bwc_codec *const field, bwc_tile *const tile)
|
|||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! field bwc_codec* - Structure defining the compression/ !
|
||||
! field bwc_field* - Structure defining the compression/ !
|
||||
! decompression stage. !
|
||||
! !
|
||||
! tile bwc_tile* - Structure defining a bwc tile. !
|
||||
|
@ -1300,7 +1289,7 @@ create_quality_layers(bwc_codec *const field, bwc_tile *const tile)
|
|||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
uchar
|
||||
t2_encode(bwc_codec *const field, bwc_tile *const tile)
|
||||
t2_encode(bwc_field *const field, bwc_tile *const tile)
|
||||
{
|
||||
/*-----------------------*\
|
||||
! DEFINE ASSERTIONS: !
|
||||
|
@ -1330,7 +1319,7 @@ t2_encode(bwc_codec *const field, bwc_tile *const tile)
|
|||
}
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------*\
|
||||
! FUNCTION NAME: uchar parse_packet(bwc_codec *const field, bwc_tile *const tile, !
|
||||
! FUNCTION NAME: uchar parse_packet(bwc_field *const field, bwc_tile *const tile, !
|
||||
! -------------- bwc_packet *const packet, !
|
||||
! uint64 const body_size) !
|
||||
! !
|
||||
|
@ -1343,7 +1332,7 @@ t2_encode(bwc_codec *const field, bwc_tile *const tile)
|
|||
! ----------- !
|
||||
! Variable Type Description !
|
||||
! -------- ---- ----------- !
|
||||
! field bwc_codec* - Structure defining the compression/ !
|
||||
! field bwc_field* - Structure defining the compression/ !
|
||||
! decompression stage. !
|
||||
! !
|
||||
! tile bwc_tile* - Structure defining a bwc tile. !
|
||||
|
@ -1367,7 +1356,7 @@ t2_encode(bwc_codec *const field, bwc_tile *const tile)
|
|||
! !
|
||||
\*----------------------------------------------------------------------------------------------------------*/
|
||||
uchar
|
||||
parse_packet(bwc_codec *const field, bwc_tile *const tile,
|
||||
parse_packet(bwc_field *const field, bwc_tile *const tile,
|
||||
bwc_packet *const packet,
|
||||
uint64 const body_size)
|
||||
{
|
||||
|
@ -1403,7 +1392,7 @@ parse_packet(bwc_codec *const field, bwc_tile *const tile,
|
|||
! Initialize the stream that is used to parse the packet !
|
||||
! codestream. !
|
||||
\*--------------------------------------------------------*/
|
||||
header = init_bitstream(packet->header.memory, body_size, 'd');
|
||||
header = init_stream(packet->header.memory, body_size, 'd');
|
||||
if(!header)
|
||||
{
|
||||
// memory allocation error
|
||||
|
|
Loading…
Reference in a new issue