From a84768bbec408dea09442487589b41b1eb09b2ce Mon Sep 17 00:00:00 2001 From: Gregor Weiss Date: Thu, 7 Nov 2024 16:26:20 +0100 Subject: [PATCH] refactor; print (verbose) header, I/O, and control parameters --- src/tools/bwccmdl.c | 405 +++++++++++++++++--------------------------- 1 file changed, 154 insertions(+), 251 deletions(-) diff --git a/src/tools/bwccmdl.c b/src/tools/bwccmdl.c index 85b139c..a5bd7b2 100644 --- a/src/tools/bwccmdl.c +++ b/src/tools/bwccmdl.c @@ -1067,6 +1067,121 @@ parse_opt(int key, return EXIT_SUCCESS; } +void +printheaderIO(char const *input, char const *output, char const *reference) +{ + /*-----------------------*\ + ! DEFINE CHAR VARIABLES: ! + \*-----------------------*/ + char cli_buffer[1024] = {0}; + char cli_verbose[4096] = {0}; + + strcat(cli_verbose, bwc_header_art); + strcat(cli_verbose, "--------------------------- I/O --------------------------\n\n"); + + sprintf(cli_buffer," Input: %s \n", input); + strcat(cli_verbose, cli_buffer); + memset(cli_buffer, '0', sizeof(char) * 1024); + + sprintf(cli_buffer," Output: %s \n", output); + strcat(cli_verbose, cli_buffer); + memset(cli_buffer, '0', sizeof(char) * 1024); + + sprintf(cli_buffer," Reference: %s \n", reference); + strcat(cli_verbose, cli_buffer); + memset(cli_buffer, '0', sizeof(char) * 1024); + printf("%s", cli_verbose); +} + +void +printctrl(bwc_gl_ctrl *const control) +{ + /*-----------------------*\ + ! DEFINE INT VARIABLES: ! + \*-----------------------*/ + uint8_t i; + + /*-----------------------*\ + ! DEFINE CHAR VARIABLES: ! + \*-----------------------*/ + char cli_buffer[1024] = {0}; + char cli_verbose[4096] = {0}; + + strcat(cli_verbose, "\n"); + strcat(cli_verbose, "----------------- Compression Parameters -----------------\n"); + strcat(cli_verbose, "\n"); + + strcat(cli_verbose," Tile Size: \n"); + sprintf(cli_buffer," - Samples in 1.D: %27ld\n"\ + " - Samples in 2.D: %27ld\n"\ + " - Samples in 3.D: %27ld\n"\ + " - Samples in 4.D: %27ld\n", control->tileSizeX, + control->tileSizeY, + control->tileSizeZ, + control->tileSizeTS); + strcat(cli_verbose, cli_buffer); + memset(cli_buffer, '0', sizeof(char) * 1024); + + strcat(cli_verbose, " __________________________________________________________\n"); + strcat(cli_verbose, "\n"); + strcat(cli_verbose, " 1.D | 2.D | 3.D | 4.D\n"); + sprintf(cli_buffer, " Decomposition Levels: %18d |%4d |%4d |%4d\n", + control->decompX, + control->decompY, + control->decompZ, + control->decompTS); + strcat(cli_verbose, cli_buffer); + memset(cli_buffer, '0', sizeof(char) * 1024); + + sprintf(cli_buffer, " Precincts [log2]: %18d |%4d |%4d |%4d\n", + control->precSizeX, + control->precSizeY, + control->precSizeZ, + control->precSizeTS); + strcat(cli_verbose, cli_buffer); + memset(cli_buffer, '0', sizeof(char) * 1024); + + sprintf(cli_buffer, " Codeblocks [log2]: %18d |%4d |%4d |%4d\n", + control->cbX, + control->cbY, + control->cbZ, + control->cbTS); + strcat(cli_verbose, cli_buffer); + memset(cli_buffer, '0', sizeof(char) * 1024); + + strcat(cli_verbose, " __________________________________________________________\n"); + strcat(cli_verbose, "\n"); + + sprintf(cli_buffer, " Q Number Format: %27d\n", control->Qm); + strcat(cli_verbose, cli_buffer); + memset(cli_buffer, '0', sizeof(char) * 1024); + + if (control->error_resilience) + { + sprintf(cli_buffer, " Error Resilience: %27s\n", "true"); + } + else + { + sprintf(cli_buffer, " Error Resilience: %27s\n", "false"); + } + strcat(cli_verbose, cli_buffer); + memset(cli_buffer, '0', sizeof(char) * 1024); + + strcat(cli_verbose, " __________________________________________________________\n"); + strcat(cli_verbose, "\n"); + + for(i = 0; i < control->nLayers; ++i) + { + sprintf(cli_buffer, " Quality Layer Nr. %d: %33.2f bpd\n", i, + control->bitrate[i]); + strcat(cli_verbose, cli_buffer); + } + + memset(cli_buffer, '0', sizeof(char) * 1024); + strcat(cli_verbose, "\n==============================================================\n"); + printf("%s", cli_verbose); +} + static uchar output_analysis(eas3_data *const ref_data, eas3_data *const org_data) { @@ -1209,8 +1324,6 @@ int main(int argc, char *argv[]) ! DEFINE CHAR VARIABLES: ! \*-----------------------*/ char rate[200] = {0}; - char cli_buffer[1024] = {0}; - char cli_verbose[4096] = {0}; char *cli_output = NULL; char *buffer = NULL; @@ -1255,30 +1368,9 @@ int main(int argc, char *argv[]) /* Compress the user supplied data set. */ if (arguments.mode == cli_cmp) { - - /* Ingest the bwccmdl input and set the appropriate cli_ * - * verbose message if the option is set. */ - // TODO: Define a universal data structure and implement a reader - // that ingests different file formats - if ((data = read_eas3(arguments.in)) == NULL) - { - error_handle = EXIT_FAILURE; - goto OUT; - } - if (arguments.verbose == true) - { - strcat(cli_verbose, bwc_header_art); - strcat(cli_verbose, "--------------------------- I/O --------------------------\n\n"); - - sprintf(cli_buffer," Input: %s \n", arguments.in); - strcat(cli_verbose, cli_buffer); - memset(cli_buffer, '0', sizeof(char) * 1024); - } - /* Evaluate the appropriate output file. */ if ((arguments.optSet & FLOUT) == 0) arguments.out = arguments.in; - if ((buffer = strrchr(arguments.out, '.')) == NULL) { error_handle = EXIT_FAILURE; @@ -1296,9 +1388,15 @@ int main(int argc, char *argv[]) if (arguments.verbose == true) { - sprintf(cli_buffer," Output: %s \n", cli_output); - strcat(cli_verbose, cli_buffer); - memset(cli_buffer, '0', sizeof(char) * 1024); + printheaderIO(arguments.in, cli_output, arguments.ref); + } + + // TODO: Define a universal data structure and implement a reader + // that ingests different file formats + if ((data = read_eas3(arguments.in)) == NULL) + { + error_handle = EXIT_FAILURE; + goto OUT; } /* Evaluate the input and output buffer size and initial- * @@ -1329,15 +1427,6 @@ int main(int argc, char *argv[]) precision); bwc_set_aux(stream, (char*)data->aux.ptr, data->aux.len); - /* Apply the user supplied compression options using the * - * appropriate setter functions. */ - if (arguments.verbose == true) - { - strcat(cli_verbose, "\n"); - strcat(cli_verbose, "----------------- Compression Parameters -----------------\n"); - strcat(cli_verbose, "\n"); - } - if ((arguments.optSet & TILES) != 0) { bwc_set_tiles(coder, arguments.tileSize[0], @@ -1345,20 +1434,6 @@ int main(int argc, char *argv[]) arguments.tileSize[2], arguments.tileSize[3], bwc_tile_sizeof); - if (arguments.verbose == true) - { - strcat(cli_verbose," Tile Size: \n"); - sprintf(cli_buffer," - Samples in 1.D: %27ld\n"\ - " - Samples in 2.D: %27ld\n"\ - " - Samples in 3.D: %27ld\n"\ - " - Samples in 4.D: %27ld\n", arguments.tileSize[0], - arguments.tileSize[1], - arguments.tileSize[2], - arguments.tileSize[3]); - strcat(cli_verbose, cli_buffer); - memset(cli_buffer, '0', sizeof(char) * 1024); - delim = true; - } } // TODO: Implement the kernel setter as a global function @@ -1371,35 +1446,12 @@ int main(int argc, char *argv[]) arguments.dwtKernel[3]); }*/ - if ((arguments.verbose == true) && - ((arguments.optSet & (DCLVL | PRECS | CBLKS)) != 0)) - { - if (delim == true) - { - strcat(cli_verbose, " __________________________________________________________\n"); - strcat(cli_verbose, "\n"); - } - strcat(cli_verbose, " 1.D | 2.D | 3.D | 4.D\n"); - delim = true; - } - if ((arguments.optSet & DCLVL) != 0) { bwc_set_decomp(coder, arguments.decompLevel[0], arguments.decompLevel[1], arguments.decompLevel[2], arguments.decompLevel[3]); - - if (arguments.verbose == true) - { - sprintf(cli_buffer, " Decomposition Levels: %18d |%4d |%4d |%4d\n", - arguments.decompLevel[0], - arguments.decompLevel[1], - arguments.decompLevel[2], - arguments.decompLevel[3]); - strcat(cli_verbose, cli_buffer); - memset(cli_buffer, '0', sizeof(char) * 1024); - } } if ((arguments.optSet & PRECS) != 0) @@ -1408,17 +1460,6 @@ int main(int argc, char *argv[]) arguments.precSize[1], arguments.precSize[2], arguments.precSize[3]); - - if (arguments.verbose == true) - { - sprintf(cli_buffer, " Precincts [log2]: %18d |%4d |%4d |%4d\n", - arguments.precSize[0], - arguments.precSize[1], - arguments.precSize[2], - arguments.precSize[3]); - strcat(cli_verbose, cli_buffer); - memset(cli_buffer, '0', sizeof(char) * 1024); - } } if ((arguments.optSet & CBLKS) != 0) @@ -1427,64 +1468,21 @@ int main(int argc, char *argv[]) arguments.cblkSize[1], arguments.cblkSize[2], arguments.cblkSize[3]); - - if (arguments.verbose == true) - { - sprintf(cli_buffer, " Codeblocks [log2]: %18d |%4d |%4d |%4d\n", - arguments.cblkSize[0], - arguments.cblkSize[1], - arguments.cblkSize[2], - arguments.cblkSize[3]); - strcat(cli_verbose, cli_buffer); - memset(cli_buffer, '0', sizeof(char) * 1024); - } - } - - if ((arguments.verbose == true) && - (delim == true) && - (((arguments.optSet & QFRMT) != 0) || arguments.erresilience == true)) - { - - strcat(cli_verbose, " __________________________________________________________\n"); - strcat(cli_verbose, "\n"); } if ((arguments.optSet & QFRMT) != 0) { bwc_set_qm(coder, arguments.Qm); - - if (arguments.verbose == true) - { - sprintf(cli_buffer, " Q Number Format: %27d\n", arguments.Qm); - strcat(cli_verbose, cli_buffer); - memset(cli_buffer, '0', sizeof(char) * 1024); - delim = true; - } } if (arguments.erresilience == true) { bwc_set_error_resilience(coder); - if (arguments.verbose == true) - { - sprintf(cli_buffer, " Error Resilience: %27s\n", "true"); - strcat(cli_verbose, cli_buffer); - memset(cli_buffer, '0', sizeof(char) * 1024); - delim = true; - } } /* Initialize the rate control string according to the * * specified bit rate/compression ratio. */ - if ((arguments.verbose == true) && - (delim == true)) - { - - strcat(cli_verbose, " __________________________________________________________\n"); - strcat(cli_verbose, "\n"); - } - if ((arguments.optSet & BITRT) != 0) { rtype = 1.0; @@ -1507,32 +1505,21 @@ int main(int argc, char *argv[]) if (arguments.rate[i] > 0) { sprintf(rate + strlen(rate), "%05.3f,", pow(arguments.rate[i]/rtype, exp)); - - if (arguments.verbose == true) - { - sprintf(cli_buffer, " Quality Layer Nr. %d: %33.2f bpd\n", i, - pow(arguments.rate[i]/rtype, exp)); - strcat(cli_verbose, cli_buffer); - } } } rate[strlen(rate) - 1] = '0'; - if (arguments.verbose == true) - { - memset(cli_buffer, '0', sizeof(char) * 1024); - strcat(cli_verbose, "\n==============================================================\n"); - printf("%s", cli_verbose); - } - - /* Initialize the rate control string according to the * - * specified bit rate/compression ratio. */ if (bwc_create_compression(coder, stream, rate) == EXIT_FAILURE) { error_handle = EXIT_FAILURE; goto OUT; } + if(arguments.verbose == true) + { + printctrl(&coder->control); + } + size = bwc_compress(coder, stream); /* Write the codestream to the speicifed file. */ @@ -1553,32 +1540,9 @@ int main(int argc, char *argv[]) } else if (arguments.mode == cli_dcp) { - if ((fp = fopen(arguments.in, "r")) == NULL) - { - error_handle = EXIT_FAILURE; - printf(FINERROR); - goto OUT; - } - - root = ftell(fp); - fseek(fp, 0L, SEEK_END); - Lfield = ftell(fp) - root; - fseek(fp, root, SEEK_SET); - - if (arguments.verbose == true) - { - strcat(cli_verbose, bwc_header_art); - strcat(cli_verbose, "--------------------------- I/O --------------------------\n\n"); - - sprintf(cli_buffer," Input: %s \n", arguments.in); - strcat(cli_verbose, cli_buffer); - memset(cli_buffer, '0', sizeof(char) * 1024); - } - /* Evaluate the appropriate output file. */ if ((arguments.optSet & FLOUT) == 0) arguments.out = arguments.in; - if ((buffer = strrchr(arguments.out, '.')) == NULL) { error_handle = EXIT_FAILURE; @@ -1596,18 +1560,21 @@ int main(int argc, char *argv[]) if (arguments.verbose == true) { - sprintf(cli_buffer," Output: %s \n", cli_output); - strcat(cli_verbose, cli_buffer); - memset(cli_buffer, '0', sizeof(char) * 1024); + printheaderIO(arguments.in, cli_output, arguments.ref); } - if (arguments.verbose == true) + if ((fp = fopen(arguments.in, "r")) == NULL) { - memset(cli_buffer, '0', sizeof(char) * 1024); - strcat(cli_verbose, "\n==============================================================\n"); - printf("%s", cli_verbose); + error_handle = EXIT_FAILURE; + printf(FINERROR); + goto OUT; } + root = ftell(fp); + fseek(fp, 0L, SEEK_END); + Lfield = ftell(fp) - root; + fseek(fp, root, SEEK_SET); + /* Read the compressed data from the input file. */ input = calloc(Lfield, sizeof(uchar)); if (fread(input, sizeof(uchar), Lfield, fp) != Lfield) @@ -1631,6 +1598,8 @@ int main(int argc, char *argv[]) } bwc_close_header(header); + printctrl(&header->control); + /* Initialize and run the decompression. */ stream = bwc_init_stream(input, output, comp); coder = bwc_alloc_decoder(); @@ -1651,6 +1620,11 @@ int main(int argc, char *argv[]) } else if (arguments.mode == cli_anl) { + if (arguments.verbose == true) + { + printheaderIO(arguments.in, cli_output, arguments.ref); + } + /* Ingest the reference data input. */ if ((ref_data = read_eas3(arguments.ref)) == NULL) { @@ -1694,6 +1668,11 @@ int main(int argc, char *argv[]) } bwc_close_header(header); + if(arguments.verbose == true) + { + printctrl(&header->control); + } + /* Initialize and run the decompression. */ stream = bwc_init_stream(input, output, comp); coder = bwc_alloc_decoder(); @@ -1715,11 +1694,7 @@ int main(int argc, char *argv[]) } else if (arguments.mode == cli_inf) { - strcat(cli_verbose, bwc_header_art); - strcat(cli_verbose, "--------------------------- I/O --------------------------\n\n"); - sprintf(cli_buffer," Input: %s \n", arguments.in); - strcat(cli_verbose, cli_buffer); - memset(cli_buffer, '0', sizeof(char) * 1024); + printheaderIO(arguments.in, cli_output, arguments.ref); if ((fp = fopen(arguments.in, "r")) == NULL) { @@ -1742,7 +1717,7 @@ int main(int argc, char *argv[]) goto OUT; } - /* Retrieve header information and allocate output buffer. */ + /* Retrieve header information. */ header = bwc_open_header(input); size = header->info.nX * header->info.nY * header->info.nZ * header->info.nTS * header->info.nPar; @@ -1756,79 +1731,7 @@ int main(int argc, char *argv[]) } bwc_close_header(header); - strcat(cli_verbose, "\n"); - strcat(cli_verbose, "----------------- Compression Parameters -----------------\n"); - strcat(cli_verbose, "\n"); - - strcat(cli_verbose," Tile Size: \n"); - sprintf(cli_buffer," - Samples in 1.D: %27ld\n"\ - " - Samples in 2.D: %27ld\n"\ - " - Samples in 3.D: %27ld\n"\ - " - Samples in 4.D: %27ld\n", header->control.tileSizeX, - header->control.tileSizeY, - header->control.tileSizeZ, - header->control.tileSizeTS); - strcat(cli_verbose, cli_buffer); - memset(cli_buffer, '0', sizeof(char) * 1024); - - strcat(cli_verbose, " __________________________________________________________\n"); - strcat(cli_verbose, "\n"); - strcat(cli_verbose, " 1.D | 2.D | 3.D | 4.D\n"); - sprintf(cli_buffer, " Decomposition Levels: %18d |%4d |%4d |%4d\n", - header->control.decompX, - header->control.decompY, - header->control.decompZ, - header->control.decompTS); - strcat(cli_verbose, cli_buffer); - memset(cli_buffer, '0', sizeof(char) * 1024); - - sprintf(cli_buffer, " Precincts [log2]: %18d |%4d |%4d |%4d\n", - header->control.precSizeX, - header->control.precSizeY, - header->control.precSizeZ, - header->control.precSizeTS); - strcat(cli_verbose, cli_buffer); - memset(cli_buffer, '0', sizeof(char) * 1024); - - sprintf(cli_buffer, " Codeblocks [log2]: %18d |%4d |%4d |%4d\n", - header->control.cbX, - header->control.cbY, - header->control.cbZ, - header->control.cbTS); - strcat(cli_verbose, cli_buffer); - memset(cli_buffer, '0', sizeof(char) * 1024); - - strcat(cli_verbose, " __________________________________________________________\n"); - strcat(cli_verbose, "\n"); - - sprintf(cli_buffer, " Q Number Format: %27d\n", header->control.Qm); - strcat(cli_verbose, cli_buffer); - memset(cli_buffer, '0', sizeof(char) * 1024); - - if (header->control.error_resilience) - { - sprintf(cli_buffer, " Error Resilience: %27s\n", "true"); - } - else - { - sprintf(cli_buffer, " Error Resilience: %27s\n", "false"); - } - strcat(cli_verbose, cli_buffer); - memset(cli_buffer, '0', sizeof(char) * 1024); - - strcat(cli_verbose, " __________________________________________________________\n"); - strcat(cli_verbose, "\n"); - - for(i = 0; i < header->control.nLayers; ++i) - { - sprintf(cli_buffer, " Quality Layer Nr. %d: %33.2f bpd\n", i, - header->control.bitrate[i]); - strcat(cli_verbose, cli_buffer); - } - - memset(cli_buffer, '0', sizeof(char) * 1024); - strcat(cli_verbose, "\n==============================================================\n"); - printf("%s", cli_verbose); + printctrl(&header->control); } else {