fprintf(stdout, " -threads <num_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 <options>\n"
int failed = 0;
OPJ_FLOAT64 t, tCumulative = 0;
OPJ_UINT32 numDecompressedImages = 0;
+ OPJ_UINT32 cp_reduce;
/* set decoding parameters to default values */
set_default_parameters(¶meters);
goto fin;
}
+ cp_reduce = parameters.core.cp_reduce;
+ if (getenv("USE_OPJ_SET_DECODED_RESOLUTION_FACTOR") != NULL) {
+ /* For debugging/testing purposes, do not set the cp_reduce member */
+ /* if USE_OPJ_SET_DECODED_RESOLUTION_FACTOR is defined, but used */
+ /* the opj_set_decoded_resolution_factor() API instead */
+ parameters.core.cp_reduce = 0;
+ }
+
/* Initialize reading of directory */
if (img_fol.set_imgdir == 1) {
/*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)) {
goto fin;
}
+ if (getenv("USE_OPJ_SET_DECODED_RESOLUTION_FACTOR") != NULL) {
+ /* For debugging/testing purposes, and also an illustration on how to */
+ /* use the alternative API opj_set_decoded_resolution_factor() instead */
+ /* of setting parameters.cp_reduce */
+ if (! opj_set_decoded_resolution_factor(l_codec, cp_reduce)) {
+ fprintf(stderr,
+ "ERROR -> opj_decompress: failed to set the resolution factor tile!\n");
+ opj_destroy_codec(l_codec);
+ opj_stream_destroy(l_stream);
+ opj_image_destroy(image);
+ failed = 1;
+ goto fin;
+ }
+ }
+
if (!parameters.nb_tile_to_decode) {
+ if (getenv("SKIP_OPJ_SET_DECODE_AREA") != NULL &&
+ parameters.DA_x0 == 0 &&
+ parameters.DA_y0 == 0 &&
+ parameters.DA_x1 == 0 &&
+ parameters.DA_y1 == 0) {
+ /* For debugging/testing purposes, */
+ /* do nothing if SKIP_OPJ_SET_DECODE_AREA env variable */
+ /* is defined and no decoded area has been set */
+ }
/* Optional if you want decode the entire image */
- if (!opj_set_decode_area(l_codec, image, (OPJ_INT32)parameters.DA_x0,
- (OPJ_INT32)parameters.DA_y0, (OPJ_INT32)parameters.DA_x1,
- (OPJ_INT32)parameters.DA_y1)) {
+ else if (!opj_set_decode_area(l_codec, image, (OPJ_INT32)parameters.DA_x0,
+ (OPJ_INT32)parameters.DA_y0, (OPJ_INT32)parameters.DA_x1,
+ (OPJ_INT32)parameters.DA_y1)) {
fprintf(stderr, "ERROR -> opj_decompress: failed to set the decoded area\n");
opj_stream_destroy(l_stream);
opj_destroy_codec(l_codec);
}
} else {
- /* It is just here to illustrate how to use the resolution after set parameters */
- /*if (!opj_set_decoded_resolution_factor(l_codec, 5)) {
- fprintf(stderr, "ERROR -> opj_decompress: failed to set the resolution factor tile!\n");
- opj_destroy_codec(l_codec);
- opj_stream_destroy(l_stream);
- opj_image_destroy(image);
- failed = 1; goto fin;
- }*/
-
if (!opj_get_decoded_tile(l_codec, l_stream, image, parameters.tile_index)) {
fprintf(stderr, "ERROR -> opj_decompress: failed to decode tile!\n");
opj_destroy_codec(l_codec);
}
free(dirptr);
}
- if (numDecompressedImages && !(parameters.quiet)) {
+ if (numDecompressedImages && !failed && !(parameters.quiet)) {
fprintf(stdout, "decode time: %d ms\n",
(int)((tCumulative * 1000.0) / (OPJ_FLOAT64)numDecompressedImages));
}