X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fbin%2Fjp2%2Fopj_decompress.c;h=848167babe15a1003d1e959cc93864bfe96c7c50;hb=af760007711bf93041d3eba3a41b9a48d365f303;hp=397e637080d48e2683cd808afc62363d308a8051;hpb=28d2eabca79d06378843d1e94fecfb4a5e22178d;p=openjpeg.git diff --git a/src/bin/jp2/opj_decompress.c b/src/bin/jp2/opj_decompress.c index 397e6370..848167ba 100644 --- a/src/bin/jp2/opj_decompress.c +++ b/src/bin/jp2/opj_decompress.c @@ -150,6 +150,8 @@ typedef struct opj_decompress_params { int split_pnm; /** number of threads */ int num_threads; + /* Quiet */ + int quiet; } opj_decompress_parameters; /* -------------------------------------------------------------------------- */ @@ -235,6 +237,8 @@ static void decode_help_display(void) fprintf(stdout, " -threads \n" " Number of threads to use for decoding.\n"); } + fprintf(stdout, " -quiet\n" + " Disable output from the library and other output.\n"); /* UniPG>> */ #ifdef USE_JPWL fprintf(stdout, " -W \n" @@ -552,7 +556,8 @@ int parse_cmdline_decoder(int argc, char **argv, {"force-rgb", NO_ARG, NULL, 1}, {"upsample", NO_ARG, NULL, 1}, {"split-pnm", NO_ARG, NULL, 1}, - {"threads", REQ_ARG, NULL, 'T'} + {"threads", REQ_ARG, NULL, 'T'}, + {"quiet", NO_ARG, NULL, 1}, }; const char optlist[] = "i:o:r:l:x:d:t:p:" @@ -567,6 +572,7 @@ int parse_cmdline_decoder(int argc, char **argv, long_option[2].flag = &(parameters->force_rgb); long_option[3].flag = &(parameters->upsample); long_option[4].flag = &(parameters->split_pnm); + long_option[6].flag = &(parameters->quiet); totlen = sizeof(long_option); opj_reset_options_reading(); img_fol->set_out_format = 0; @@ -830,8 +836,10 @@ int parse_cmdline_decoder(int argc, char **argv, token = strtok(NULL, ","); }; parameters->jpwl_correct = OPJ_TRUE; - fprintf(stdout, "JPWL correction capability activated\n"); - fprintf(stdout, "- expecting %d components\n", parameters->jpwl_exp_comps); + if (!(parameter->quiet)) { + fprintf(stdout, "JPWL correction capability activated\n"); + fprintf(stdout, "- expecting %d components\n", parameters->jpwl_exp_comps); + } } break; #endif /* USE_JPWL */ @@ -929,7 +937,8 @@ OPJ_FLOAT64 opj_clock(void) /* cout << "freq = " << ((double) freq.QuadPart) << endl; */ /* t is the high resolution performance counter (see MSDN) */ QueryPerformanceCounter(& t) ; - return freq.QuadPart ? (t.QuadPart / (OPJ_FLOAT64)freq.QuadPart) : 0; + return freq.QuadPart ? ((OPJ_FLOAT64)t.QuadPart / (OPJ_FLOAT64)freq.QuadPart) : + 0; #elif defined(__linux) struct timespec ts; clock_gettime(CLOCK_REALTIME, &ts); @@ -976,6 +985,14 @@ static void info_callback(const char *msg, void *client_data) (void)client_data; fprintf(stdout, "[INFO] %s", msg); } +/** +sample quiet callback expecting no client object +*/ +static void quiet_callback(const char *msg, void *client_data) +{ + (void)msg; + (void)client_data; +} static void set_default_parameters(opj_decompress_parameters* parameters) { @@ -1293,6 +1310,7 @@ int main(int argc, char **argv) goto fin; } + /* Initialize reading of directory */ if (img_fol.set_imgdir == 1) { int it_image; @@ -1325,7 +1343,7 @@ int main(int argc, char **argv) goto fin; } if (num_images == 0) { - fprintf(stdout, "Folder is empty\n"); + fprintf(stderr, "Folder is empty\n"); failed = 1; goto fin; } @@ -1336,7 +1354,9 @@ int main(int argc, char **argv) /*Decoding image one by one*/ for (imageno = 0; imageno < num_images ; imageno++) { - fprintf(stderr, "\n"); + if (!parameters.quiet) { + fprintf(stderr, "\n"); + } if (img_fol.set_imgdir == 1) { if (get_next_file(imageno, dirptr, &img_fol, ¶meters)) { @@ -1383,10 +1403,18 @@ int main(int argc, char **argv) continue; } - /* catch events using our callbacks and give a local context */ - opj_set_info_handler(l_codec, info_callback, 00); - opj_set_warning_handler(l_codec, warning_callback, 00); - opj_set_error_handler(l_codec, error_callback, 00); + if (parameters.quiet) { + /* Set all callbacks to quiet */ + opj_set_info_handler(l_codec, quiet_callback, 00); + opj_set_warning_handler(l_codec, quiet_callback, 00); + opj_set_error_handler(l_codec, quiet_callback, 00); + } else { + /* catch events using our callbacks and give a local context */ + opj_set_info_handler(l_codec, info_callback, 00); + opj_set_warning_handler(l_codec, warning_callback, 00); + opj_set_error_handler(l_codec, error_callback, 00); + } + t = opj_clock(); @@ -1460,7 +1488,20 @@ int main(int argc, char **argv) failed = 1; goto fin; } - fprintf(stdout, "tile %d is decoded!\n\n", parameters.tile_index); + if (!(parameters.quiet)) { + fprintf(stdout, "tile %d is decoded!\n\n", parameters.tile_index); + } + } + + /* FIXME? Shouldn't that situation be considered as an error of */ + /* opj_decode() / opj_get_decoded_tile() ? */ + if (image->comps[0].data == NULL) { + fprintf(stderr, "ERROR -> opj_decompress: no image data!\n"); + opj_destroy_codec(l_codec); + opj_stream_destroy(l_stream); + opj_image_destroy(image); + failed = 1; + goto fin; } tCumulative += opj_clock() - t; @@ -1574,7 +1615,7 @@ int main(int argc, char **argv) if (imagetopnm(image, parameters.outfile, parameters.split_pnm)) { fprintf(stderr, "[ERROR] Outfile %s not generated\n", parameters.outfile); failed = 1; - } else { + } else if (!(parameters.quiet)) { fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile); } break; @@ -1583,7 +1624,7 @@ int main(int argc, char **argv) if (imagetopgx(image, parameters.outfile)) { fprintf(stderr, "[ERROR] Outfile %s not generated\n", parameters.outfile); failed = 1; - } else { + } else if (!(parameters.quiet)) { fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile); } break; @@ -1592,7 +1633,7 @@ int main(int argc, char **argv) if (imagetobmp(image, parameters.outfile)) { fprintf(stderr, "[ERROR] Outfile %s not generated\n", parameters.outfile); failed = 1; - } else { + } else if (!(parameters.quiet)) { fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile); } break; @@ -1601,7 +1642,7 @@ int main(int argc, char **argv) if (imagetotif(image, parameters.outfile)) { fprintf(stderr, "[ERROR] Outfile %s not generated\n", parameters.outfile); failed = 1; - } else { + } else if (!(parameters.quiet)) { fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile); } break; @@ -1611,7 +1652,7 @@ int main(int argc, char **argv) fprintf(stderr, "[ERROR] Error generating raw file. Outfile %s not generated\n", parameters.outfile); failed = 1; - } else { + } else if (!(parameters.quiet)) { fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile); } break; @@ -1622,7 +1663,7 @@ int main(int argc, char **argv) "[ERROR] Error generating rawl file. Outfile %s not generated\n", parameters.outfile); failed = 1; - } else { + } else if (!(parameters.quiet)) { fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile); } break; @@ -1632,7 +1673,7 @@ int main(int argc, char **argv) fprintf(stderr, "[ERROR] Error generating tga file. Outfile %s not generated\n", parameters.outfile); failed = 1; - } else { + } else if (!(parameters.quiet)) { fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile); } break; @@ -1642,7 +1683,7 @@ int main(int argc, char **argv) fprintf(stderr, "[ERROR] Error generating png file. Outfile %s not generated\n", parameters.outfile); failed = 1; - } else { + } else if (!(parameters.quiet)) { fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile); } break; @@ -1685,7 +1726,7 @@ fin: } free(dirptr); } - if (numDecompressedImages) { + if (numDecompressedImages && !failed && !(parameters.quiet)) { fprintf(stdout, "decode time: %d ms\n", (int)((tCumulative * 1000.0) / (OPJ_FLOAT64)numDecompressedImages)); }