X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=tests%2Fcompare_images.c;h=b2ef00db73b2b1cbe8105c1d8efe4d8110ee5d5e;hb=9c1cfb034a8cf24eb5e35fe9c7074fd079d14b80;hp=88d874bada6332d05e631927a20f2958c579cd53;hpb=836ec0592074daf8c7bcbb9495be02b4be1aae87;p=openjpeg.git diff --git a/tests/compare_images.c b/tests/compare_images.c index 88d874ba..b2ef00db 100644 --- a/tests/compare_images.c +++ b/tests/compare_images.c @@ -85,7 +85,7 @@ static void compare_images_help_display(void) fprintf(stdout,"\n"); fprintf(stdout," -b \t REQUIRED \t filename to the reference/baseline PGX/TIF/PNM image \n"); fprintf(stdout," -t \t REQUIRED \t filename to the test PGX/TIF/PNM image\n"); - fprintf(stdout," -n \t REQUIRED \t number of component of the image (used to generate correct filename)\n"); + fprintf(stdout," -n \t REQUIRED \t number of component of the image (used to generate correct filename, not used when both input files are TIF)\n"); fprintf(stdout," -m \t OPTIONAL \t list of MSE tolerances, separated by : (size must correspond to the number of component) of \n"); fprintf(stdout," -p \t OPTIONAL \t list of PEAK tolerances, separated by : (size must correspond to the number of component) \n"); fprintf(stdout," -s \t OPTIONAL \t 1 or 2 filename separator to take into account PGX/PNM image with different components, " @@ -115,13 +115,13 @@ static char* createMultiComponentsFilename(const char* inFilename, const int ind char s[255]; char *outFilename, *ptr; const char token = '.'; - int posToken = 0; + size_t posToken = 0; int decod_format; /*printf("inFilename = %s\n", inFilename);*/ if ((ptr = strrchr(inFilename, token)) != NULL) { - posToken = (int) (strlen(inFilename) - strlen(ptr)); + posToken = strlen(inFilename) - strlen(ptr); /*printf("Position of %c character inside inFilename = %d\n", token, posToken);*/ } else @@ -132,14 +132,11 @@ static char* createMultiComponentsFilename(const char* inFilename, const int ind return outFilename; } - outFilename = (char*)malloc((size_t)(posToken + 7) * sizeof(char)); /*6*/ - - strncpy(outFilename, inFilename, (size_t)posToken); + outFilename = (char*)malloc((posToken + 7) * sizeof(char)); /*6*/ + strncpy(outFilename, inFilename, posToken); outFilename[posToken] = '\0'; - strcat(outFilename, separator); - sprintf(s, "%i", indexF); strcat(outFilename, s); @@ -199,7 +196,7 @@ static opj_image_t* readImageFromFilePPM(const char* filename, int nbFilenamePGX if (!image_read) { int it_free_data; - fprintf(stderr, "Unable to load pgx file\n"); + fprintf(stderr, "Unable to load ppm file: %s\n", filenameComponentPGX); free(param_image_read); @@ -250,12 +247,10 @@ static opj_image_t* readImageFromFilePPM(const char* filename, int nbFilenamePGX static opj_image_t* readImageFromFileTIF(const char* filename, int nbFilenamePGX, const char *separator) { - int it_file; opj_image_t* image_read = NULL; - opj_image_t* image = NULL; opj_cparameters_t parameters; - opj_image_cmptparm_t* param_image_read; - int** data; + (void)nbFilenamePGX; + (void)separator; /* conformance test suite produce annoying warning/error: * TIFFReadDirectory: Warning, /.../data/baseline/conformance/jp2_1.tif: unknown field with tag 37724 (0x935c) encountered. @@ -267,85 +262,24 @@ static opj_image_t* readImageFromFileTIF(const char* filename, int nbFilenamePGX TIFFSetErrorHandler(NULL); #endif - /* If separator is empty => nb file to read is equal to one*/ - if ( strlen(separator) == 0 ) - nbFilenamePGX = 1; + if ( strlen(separator) != 0 ) return NULL; /* set encoding parameters to default values */ opj_set_default_encoder_parameters(¶meters); parameters.decod_format = TIF_DFMT; strcpy(parameters.infile, filename); - /* Allocate memory*/ - param_image_read = malloc((size_t)nbFilenamePGX * sizeof(opj_image_cmptparm_t)); - data = malloc((size_t)nbFilenamePGX * sizeof(*data)); - - for (it_file = 0; it_file < nbFilenamePGX; it_file++) - { - /* Create the right filename*/ - char *filenameComponentPGX; - if (strlen(separator) == 0) - { - filenameComponentPGX = malloc((strlen(filename) + 1) * sizeof(*filenameComponentPGX)); - strcpy(filenameComponentPGX, filename); - } - else - filenameComponentPGX = createMultiComponentsFilename(filename, it_file, separator); - - /* Read the tif file corresponding to the component */ + /* Read the tif file corresponding to the component */ #ifdef OPJ_HAVE_LIBTIFF - image_read = tiftoimage(filenameComponentPGX, ¶meters); + image_read = tiftoimage(filename, ¶meters); #endif - if (!image_read) - { - int it_free_data; - fprintf(stderr, "Unable to load TIF file\n"); - - free(param_image_read); - - for (it_free_data = 0; it_free_data < it_file; it_free_data++) { - free(data[it_free_data]); - } - free(data); - - free(filenameComponentPGX); - - return NULL; - } - - /* Set the image_read parameters*/ - param_image_read[it_file].x0 = 0; - param_image_read[it_file].y0 = 0; - param_image_read[it_file].dx = 0; - param_image_read[it_file].dy = 0; - param_image_read[it_file].h = image_read->comps->h; - param_image_read[it_file].w = image_read->comps->w; - param_image_read[it_file].bpp = image_read->comps->bpp; - param_image_read[it_file].prec = image_read->comps->prec; - param_image_read[it_file].sgnd = image_read->comps->sgnd; - - /* Copy data*/ - data[it_file] = malloc(param_image_read[it_file].h * param_image_read[it_file].w * sizeof(int)); - memcpy(data[it_file], image_read->comps->data, image_read->comps->h * image_read->comps->w * sizeof(int)); - - /* Free memory*/ - opj_image_destroy(image_read); - free(filenameComponentPGX); - } - - image = opj_image_create((OPJ_UINT32)nbFilenamePGX, param_image_read, OPJ_CLRSPC_UNSPECIFIED); - for (it_file = 0; it_file < nbFilenamePGX; it_file++) + if (!image_read) { - /* Copy data into output image and free memory*/ - memcpy(image->comps[it_file].data, data[it_file], image->comps[it_file].h * image->comps[it_file].w * sizeof(int)); - free(data[it_file]); + fprintf(stderr, "Unable to load TIF file\n"); + return NULL; } - /* Free memory*/ - free(param_image_read); - free(data); - - return image; + return image_read; } static opj_image_t* readImageFromFilePGX(const char* filename, int nbFilenamePGX, const char *separator) @@ -504,7 +438,7 @@ static int parse_cmdline_cmp(int argc, char **argv, test_cmp_parameters* param) { char *MSElistvalues = NULL; char *PEAKlistvalues= NULL; char *separatorList = NULL; - int sizemembasefile, sizememtestfile; + size_t sizemembasefile, sizememtestfile; int index, flagM=0, flagP=0; const char optlist[] = "b:t:n:m:p:s:d"; int c; @@ -525,19 +459,15 @@ static int parse_cmdline_cmp(int argc, char **argv, test_cmp_parameters* param) switch (c) { case 'b': - sizemembasefile = (int)strlen(opj_optarg)+1; - param->base_filename = (char*) malloc((size_t)sizemembasefile); - param->base_filename[0] = '\0'; - strncpy(param->base_filename, opj_optarg, strlen(opj_optarg)); - param->base_filename[strlen(opj_optarg)] = '\0'; + sizemembasefile = strlen(opj_optarg) + 1; + param->base_filename = (char*) malloc(sizemembasefile); + strcpy(param->base_filename, opj_optarg); /*printf("param->base_filename = %s [%d / %d]\n", param->base_filename, strlen(param->base_filename), sizemembasefile );*/ break; case 't': - sizememtestfile = (int) strlen(opj_optarg) + 1; - param->test_filename = (char*) malloc((size_t)sizememtestfile); - param->test_filename[0] = '\0'; - strncpy(param->test_filename, opj_optarg, strlen(opj_optarg)); - param->test_filename[strlen(opj_optarg)] = '\0'; + sizememtestfile = strlen(opj_optarg) + 1; + param->test_filename = (char*) malloc(sizememtestfile); + strcpy(param->test_filename, opj_optarg); /*printf("param->test_filename = %s [%d / %d]\n", param->test_filename, strlen(param->test_filename), sizememtestfile);*/ break; case 'n': @@ -600,11 +530,9 @@ static int parse_cmdline_cmp(int argc, char **argv, test_cmp_parameters* param) if( (strlen(separatorList) ==2) || (strlen(separatorList) ==4) ) { /* keep original string*/ - int sizeseplist = (int)strlen(separatorList)+1; - char* separatorList2 = (char*)malloc( (size_t)sizeseplist ); - separatorList2[0] = '\0'; - strncpy(separatorList2, separatorList, strlen(separatorList)); - separatorList2[strlen(separatorList)] = '\0'; + size_t sizeseplist = strlen(separatorList)+1; + char* separatorList2 = (char*)malloc( sizeseplist ); + strcpy(separatorList2, separatorList); /*printf("separatorList2 = %s [%d / %d]\n", separatorList2, strlen(separatorList2), sizeseplist);*/ if (strlen(separatorList) == 2) /* one separator behind b or t*/ @@ -720,7 +648,7 @@ int main(int argc, char **argv) int failed = 1; int nbFilenamePGXbase = 0, nbFilenamePGXtest = 0; char *filenamePNGtest= NULL, *filenamePNGbase = NULL, *filenamePNGdiff = NULL; - int memsizebasefilename, memsizetestfilename; + size_t memsizebasefilename, memsizetestfilename; size_t memsizedifffilename; int valueDiff = 0, nbPixelDiff = 0; double sumDiff = 0.0; @@ -772,8 +700,8 @@ int main(int argc, char **argv) printf("************************* \n"); /*----------BASELINE IMAGE--------*/ - memsizebasefilename = (int)strlen(inParam.test_filename) + 1 + 5 + 2 + 4; - memsizetestfilename = (int)strlen(inParam.test_filename) + 1 + 5 + 2 + 4; + memsizebasefilename = strlen(inParam.test_filename) + 1 + 5 + 2 + 4; + memsizetestfilename = strlen(inParam.test_filename) + 1 + 5 + 2 + 4; decod_format = get_decod_format(&inParam); if( decod_format == -1 ) @@ -802,7 +730,7 @@ int main(int argc, char **argv) goto cleanup; } - filenamePNGbase = (char*) malloc((size_t)memsizebasefilename); + filenamePNGbase = (char*) malloc(memsizebasefilename); strcpy(filenamePNGbase, inParam.test_filename); strcat(filenamePNGbase, ".base"); /*printf("filenamePNGbase = %s [%d / %d octets]\n",filenamePNGbase, strlen(filenamePNGbase),memsizebasefilename );*/ @@ -828,7 +756,7 @@ int main(int argc, char **argv) goto cleanup; } - filenamePNGtest = (char*) malloc((size_t)memsizetestfilename); + filenamePNGtest = (char*) malloc(memsizetestfilename); strcpy(filenamePNGtest, inParam.test_filename); strcat(filenamePNGtest, ".test"); /*printf("filenamePNGtest = %s [%d / %d octets]\n",filenamePNGtest, strlen(filenamePNGtest),memsizetestfilename );*/ @@ -841,6 +769,13 @@ int main(int argc, char **argv) /* Comparison of header parameters*/ printf("Step 1 -> Header comparison\n"); + /* check dimensions (issue 286)*/ + if(imageBase->numcomps != imageTest->numcomps ) + { + printf("ERROR: dim mismatch (%d><%d)\n", imageBase->numcomps, imageTest->numcomps); + goto cleanup; + } + for (it_comp = 0; it_comp < imageBase->numcomps; it_comp++) { param_image_diff[it_comp].x0 = 0; @@ -942,15 +877,17 @@ int main(int argc, char **argv) printf(" %d \n", it_comp, nbPixelDiff); printf(" %f \n", it_comp, sumDiff); + printf(" %f \n", it_comp, PEAK); + printf(" %f \n", it_comp, MSE); #ifdef OPJ_HAVE_LIBPNG { char *filenamePNGbase_it_comp, *filenamePNGtest_it_comp, *filenamePNGdiff_it_comp; - filenamePNGbase_it_comp = (char*) malloc((size_t)memsizebasefilename); + filenamePNGbase_it_comp = (char*) malloc(memsizebasefilename); strcpy(filenamePNGbase_it_comp,filenamePNGbase); - filenamePNGtest_it_comp = (char*) malloc((size_t)memsizetestfilename); + filenamePNGtest_it_comp = (char*) malloc(memsizetestfilename); strcpy(filenamePNGtest_it_comp,filenamePNGtest); filenamePNGdiff_it_comp = (char*) malloc(memsizedifffilename);