From 816db977fd7bf70d61b95e179d47bf2e0050eed6 Mon Sep 17 00:00:00 2001 From: Mathieu Malaterre Date: Fri, 28 Feb 2014 13:19:03 +0000 Subject: [PATCH] [trunk] Remove a simple warning, and use static to detect unused functions. Simplify function declarations. --- tests/comparePGXimages.c | 422 +++++++++++++++++++-------------------- 1 file changed, 209 insertions(+), 213 deletions(-) diff --git a/tests/comparePGXimages.c b/tests/comparePGXimages.c index 425a66d9..e7b779e5 100644 --- a/tests/comparePGXimages.c +++ b/tests/comparePGXimages.c @@ -44,11 +44,214 @@ #include "format_defs.h" #include "convert.h" -double* parseToleranceValues( char* inArg, const int nbcomp); -void comparePGXimages_help_display(void); -opj_image_t* readImageFromFilePGX(char* filename, int nbFilenamePGX, char *separator); +/******************************************************************************* + * Parse MSE and PEAK input values ( + * separator = ":" + *******************************************************************************/ +static double* parseToleranceValues( char* inArg, const int nbcomp) +{ + double* outArgs= malloc(nbcomp * sizeof(double)); + int it_comp = 0; + char delims[] = ":"; + char *result = NULL; + result = strtok( inArg, delims ); + + while( (result != NULL) && (it_comp < nbcomp )) + { + outArgs[it_comp] = atof(result); + result = strtok( NULL, delims ); + it_comp++; + } + + if (it_comp != nbcomp) + { + free(outArgs); + return NULL; + } + else + return outArgs; +} + +/******************************************************************************* + * Command line help function + *******************************************************************************/ +static void comparePGXimages_help_display(void) { + fprintf(stdout,"\nList of parameters for the comparePGX function \n"); + fprintf(stdout,"\n"); + fprintf(stdout," -b \t REQUIRED \t filename to the reference/baseline PGX image \n"); + fprintf(stdout," -t \t REQUIRED \t filename to the test PGX image\n"); + fprintf(stdout," -n \t REQUIRED \t number of component of the image (used to generate correct filename)\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 image with different components, " + "please indicate b or t before separator to indicate respectively the separator " + "for ref/base file and for test file. \n"); + fprintf(stdout," -d \t OPTIONAL \t indicate if you want to run this function as conformance test or as non regression test\n"); + fprintf(stdout,"\n"); +} + +/******************************************************************************* + * Create filenames from a filename by used separator and nb components + * (begin to 0) + *******************************************************************************/ +static char* createMultiComponentsFilename(const char* inFilename, const int indexF, const char* separator) +{ + char s[255]; + char *outFilename, *ptr; + char token = '.'; + int posToken = 0; + + /*printf("inFilename = %s\n", inFilename);*/ + if ((ptr = strrchr(inFilename, token)) != NULL) + { + posToken = (int) (strlen(inFilename) - strlen(ptr)); + /*printf("Position of %c character inside inFilename = %d\n", token, posToken);*/ + } + else + { + /*printf("Token %c not found\n", token);*/ + outFilename = (char*)malloc(1); + outFilename[0] = '\0'; + return outFilename; + } + + 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); + + strcat(outFilename, ".pgx"); + + /*printf("outfilename: %s\n", outFilename);*/ + return outFilename; +} + +/******************************************************************************* + * + *******************************************************************************/ +static opj_image_t* readImageFromFilePGX(char* filename, int nbFilenamePGX, 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; + + /* If separator is empty => nb file to read is equal to one*/ + if ( strlen(separator) == 0 ) + nbFilenamePGX = 1; + + /* set encoding parameters to default values */ + opj_set_default_encoder_parameters(¶meters); + parameters.decod_format = PGX_DFMT; + strncpy(parameters.infile, filename, sizeof(parameters.infile)-1); + + /* Allocate memory*/ + param_image_read = malloc(nbFilenamePGX * sizeof(opj_image_cmptparm_t)); + data = malloc(nbFilenamePGX * sizeof(*data)); + + it_file = 0; + 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 pgx file corresponding to the component */ + image_read = pgxtoimage(filenameComponentPGX, ¶meters); + if (!image_read) + { + int it_free_data; + fprintf(stderr, "Unable to load pgx 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(nbFilenamePGX, param_image_read, OPJ_CLRSPC_UNSPECIFIED); + for (it_file = 0; it_file < nbFilenamePGX; it_file++) + { + /* 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]); + } + + /* Free memory*/ + free(param_image_read); + free(data); + + return image; +} + #ifdef OPJ_HAVE_LIBPNG -int imageToPNG(const opj_image_t* image, const char* filename, int num_comp_select); +/******************************************************************************* + * + *******************************************************************************/ +static int imageToPNG(const opj_image_t* image, const char* filename, int num_comp_select) +{ + opj_image_cmptparm_t param_image_write; + opj_image_t* image_write = NULL; + + param_image_write.x0 = 0; + param_image_write.y0 = 0; + param_image_write.dx = 0; + param_image_write.dy = 0; + param_image_write.h = image->comps[num_comp_select].h; + param_image_write.w = image->comps[num_comp_select].w; + param_image_write.bpp = image->comps[num_comp_select].bpp; + param_image_write.prec = image->comps[num_comp_select].prec; + param_image_write.sgnd = image->comps[num_comp_select].sgnd; + + image_write = opj_image_create(1, ¶m_image_write, OPJ_CLRSPC_GRAY); + memcpy(image_write->comps->data, image->comps[num_comp_select].data, param_image_write.h * param_image_write.w * sizeof(int)); + + imagetopng(image_write, filename); + + opj_image_destroy(image_write); + + return EXIT_SUCCESS; +} #endif typedef struct test_cmp_parameters @@ -72,24 +275,6 @@ typedef struct test_cmp_parameters } test_cmp_parameters; -/******************************************************************************* - * Command line help function - *******************************************************************************/ -void comparePGXimages_help_display(void) { - fprintf(stdout,"\nList of parameters for the comparePGX function \n"); - fprintf(stdout,"\n"); - fprintf(stdout," -b \t REQUIRED \t filename to the reference/baseline PGX image \n"); - fprintf(stdout," -t \t REQUIRED \t filename to the test PGX image\n"); - fprintf(stdout," -n \t REQUIRED \t number of component of the image (used to generate correct filename)\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 image with different components, " - "please indicate b or t before separator to indicate respectively the separator " - "for ref/base file and for test file. \n"); - fprintf(stdout," -d \t OPTIONAL \t indicate if you want to run this function as conformance test or as non regression test\n"); - fprintf(stdout,"\n"); -} - /******************************************************************************* * Parse command line *******************************************************************************/ @@ -301,196 +486,6 @@ static int parse_cmdline_cmp(int argc, char **argv, test_cmp_parameters* param) return EXIT_SUCCESS; } -/******************************************************************************* - * Parse MSE and PEAK input values ( - * separator = ":" - *******************************************************************************/ -double* parseToleranceValues( char* inArg, const int nbcomp) -{ - double* outArgs= malloc(nbcomp * sizeof(double)); - int it_comp = 0; - char delims[] = ":"; - char *result = NULL; - result = strtok( inArg, delims ); - - while( (result != NULL) && (it_comp < nbcomp )) - { - outArgs[it_comp] = atof(result); - result = strtok( NULL, delims ); - it_comp++; - } - - if (it_comp != nbcomp) - { - free(outArgs); - return NULL; - } - else - return outArgs; -} -/******************************************************************************* - * Create filenames from a filename by used separator and nb components - * (begin to 0) - *******************************************************************************/ -static char* createMultiComponentsFilename(const char* inFilename, const int indexF, const char* separator) -{ - char s[255]; - char *outFilename, *ptr; - char token = '.'; - int posToken = 0; - - /*printf("inFilename = %s\n", inFilename);*/ - if ((ptr = strrchr(inFilename, token)) != NULL) - { - posToken = (int) (strlen(inFilename) - strlen(ptr)); - /*printf("Position of %c character inside inFilename = %d\n", token, posToken);*/ - } - else - { - /*printf("Token %c not found\n", token);*/ - outFilename = (char*)malloc(1); - outFilename[0] = '\0'; - return outFilename; - } - - 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); - - strcat(outFilename, ".pgx"); - - /*printf("outfilename: %s\n", outFilename);*/ - return outFilename; -} -/******************************************************************************* - * - *******************************************************************************/ -opj_image_t* readImageFromFilePGX(char* filename, int nbFilenamePGX, 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; - - /* If separator is empty => nb file to read is equal to one*/ - if ( strlen(separator) == 0 ) - nbFilenamePGX = 1; - - /* set encoding parameters to default values */ - opj_set_default_encoder_parameters(¶meters); - parameters.decod_format = PGX_DFMT; - strncpy(parameters.infile, filename, sizeof(parameters.infile)-1); - - /* Allocate memory*/ - param_image_read = malloc(nbFilenamePGX * sizeof(opj_image_cmptparm_t)); - data = malloc(nbFilenamePGX * sizeof(*data)); - - it_file = 0; - 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 pgx file corresponding to the component */ - image_read = pgxtoimage(filenameComponentPGX, ¶meters); - if (!image_read) - { - int it_free_data; - fprintf(stderr, "Unable to load pgx 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(nbFilenamePGX, param_image_read, OPJ_CLRSPC_UNSPECIFIED); - for (it_file = 0; it_file < nbFilenamePGX; it_file++) - { - /* 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]); - } - - /* Free memory*/ - free(param_image_read); - free(data); - - return image; -} - -/******************************************************************************* - * - *******************************************************************************/ -#ifdef OPJ_HAVE_LIBPNG -int imageToPNG(const opj_image_t* image, const char* filename, int num_comp_select) -{ - opj_image_cmptparm_t param_image_write; - opj_image_t* image_write = NULL; - - param_image_write.x0 = 0; - param_image_write.y0 = 0; - param_image_write.dx = 0; - param_image_write.dy = 0; - param_image_write.h = image->comps[num_comp_select].h; - param_image_write.w = image->comps[num_comp_select].w; - param_image_write.bpp = image->comps[num_comp_select].bpp; - param_image_write.prec = image->comps[num_comp_select].prec; - param_image_write.sgnd = image->comps[num_comp_select].sgnd; - - image_write = opj_image_create(1, ¶m_image_write, OPJ_CLRSPC_GRAY); - memcpy(image_write->comps->data, image->comps[num_comp_select].data, param_image_write.h * param_image_write.w * sizeof(int)); - - imagetopng(image_write, filename); - - opj_image_destroy(image_write); - - return EXIT_SUCCESS; -} -#endif - /******************************************************************************* * MAIN *******************************************************************************/ @@ -501,7 +496,8 @@ int main(int argc, char **argv) int failed = 0; int nbFilenamePGXbase, nbFilenamePGXtest; char *filenamePNGtest= NULL, *filenamePNGbase = NULL, *filenamePNGdiff = NULL; - int memsizebasefilename, memsizetestfilename, memsizedifffilename; + int memsizebasefilename, memsizetestfilename; + size_t memsizedifffilename; int valueDiff = 0, nbPixelDiff = 0; double sumDiff = 0.0; /* Structures to store image parameters and data*/