open and close header with new header structure

This commit is contained in:
Gregor Weiss 2024-11-04 13:57:33 +01:00
parent 92a646b5e0
commit 12f937ecac
Signed by: Gregor Weiss
GPG key ID: 61E170A8BBFE5756
6 changed files with 127 additions and 14 deletions

View file

@ -100,6 +100,10 @@
size_t assemble_codestream (bwc_codec *const codec,
bwc_stream *const stream);
//==========|==========================|======================|======|======|=====================
bwc_codec* parse_main_header (bwc_codec *const codec,
bwc_stream *const data,
bitstream *const stream);
//==========|==========================|======================|======|======|=====================
bwc_codec* parse_codestream (bwc_codec *const codec,
bwc_stream *const stream,
uint8 const layer);

View file

@ -142,6 +142,10 @@
uint64 const tilesTS,
bwc_tile_instr const instr);
//==========|==========================|======================|======|=======|====================
bwc_header* bwc_open_header (void *const inpbuf);
//==========|==========================|======================|======|=======|====================
void bwc_close_header (bwc_header *const header);
//==========|==========================|======================|======|=======|====================
uchar bwc_create_compression (bwc_codec *const codec,
bwc_stream *const data,
char *const rate_control);

View file

@ -659,6 +659,19 @@
bwc_prog_ord progression; // Packet progression order.
} bwc_gl_ctrl;
/*================================================================================================*/
/**
* @details Structure that is used to probe header information from a compressed data set.
*/
/*================================================================================================*/
typedef struct
{
bwc_gl_inf info; // Global info structure
bwc_gl_ctrl control; // Global control structure
bwc_span aux; // Auxiliary info. codestream block.
bwc_span com; // Comment codestream block.
} bwc_header;
/*----------------------------------------------------------------------------------------------*\
! !
! DESCRIPTION: !

View file

@ -912,7 +912,7 @@ parse_main_header(bwc_codec *const codec, bwc_stream *const data, bitstream *con
data->codestream.com->memory = get_chunck(stream, Lcom - 2);
data->codestream.com->size = Lcom -2;
status |= CODESTREAM_ERROR;
status |= CODESTREAM_COM_READ;
break;
}

View file

@ -3350,6 +3350,98 @@ bwc_set_tiles(bwc_codec *const codec, uint64 tilesX, uint64 tilesY, uint64 tiles
control->CSsgc |= (0x01 << 9);
}
/*================================================================================================*/
/**
* @details This function opens the header of a compressed data set and parses it into an
* instance of type bwc_header.
*
* @param[in] inpbuf Pointer to compressed data set.
*
* @retval bwc_header*
*/
/*================================================================================================*/
bwc_header* bwc_open_header(void *const inpbuf)
{
/*-----------------------*\
! DEFINE STRUCTS: !
\*-----------------------*/
bwc_codec* codec;
bwc_stream* data;
bitstream* stream;
bwc_header* header;
/*--------------------------------------------------------*\
! Initialize a codec, stream, and bitstream for parsing. !
\*--------------------------------------------------------*/
data = bwc_init_stream(inpbuf, NULL, decomp);
codec = bwc_alloc_decoder();
stream = init_bitstream(data->inp, 10, 'd');
/*--------------------------------------------------------*\
! Parse the main header into the codec structure. !
\*--------------------------------------------------------*/
parse_main_header(codec, data, stream);
if(!codec)
{
return NULL;
}
/*--------------------------------------------------------*\
! Allocate header and copy info and control structures. !
\*--------------------------------------------------------*/
header = calloc(1, sizeof(bwc_header));
header->info = codec->info;
header->control = codec->control;
/*--------------------------------------------------------*\
! Shallow copy aux data to span. !
\*--------------------------------------------------------*/
if (data->codestream.aux)
{
header->aux.memory = data->codestream.aux->memory;
header->aux.size = data->codestream.aux->size;
}
/*--------------------------------------------------------*\
! Shallow copy com data to span. !
\*--------------------------------------------------------*/
if (data->codestream.com)
{
header->com.memory = data->codestream.com->memory;
header->com.size = data->codestream.com->size;
}
free(stream);
free(data);
free(codec);
return header;
}
/*================================================================================================*/
/**
* @details This function closes the header information in the bwc_header pointer.
*
* @param[in] header Instance of type bwc_header.
*/
/*================================================================================================*/
void bwc_close_header(bwc_header *const header)
{
if (header)
{
if (header->aux.memory)
{
free(header->aux.memory);
}
if (header->com.memory)
{
free(header->com.memory);
}
free(header);
}
}
/*----------------------------------------------------------------------------------------------------------*\
! FUNCTION NAME: void bwc_create_compression(bwc_codec *codec, char *rate_control) !
! -------------- !

View file

@ -134,7 +134,7 @@
* @details String containing the header used for the cli output.
*/
/*================================================================================================*/
static char bwc_header[] = "==============================================================\n"\
static char bwc_header_art[] = "==============================================================\n"\
" \n"\
" .:-------------: .:-------------: \n"\
" .+++++++++++++++= :+++++++++++++++- \n"\
@ -1153,7 +1153,7 @@ int main(int argc, char *argv[])
}
if (arguments.verbose == true)
{
strcat(cli_verbose, bwc_header);
strcat(cli_verbose, bwc_header_art);
strcat(cli_verbose, "--------------------------- I/O --------------------------\n\n");
sprintf(cli_buffer," Input: %s \n", arguments.in);