summaryrefslogtreecommitdiff
path: root/tests/compare_images.c
diff options
context:
space:
mode:
authorMathieu Malaterre <mathieu.malaterre@gmail.com>2014-03-07 17:18:13 +0000
committerMathieu Malaterre <mathieu.malaterre@gmail.com>2014-03-07 17:18:13 +0000
commitfa1c2454e6d57685f58f1ce3c198945d5d5fe324 (patch)
tree211b4f150621bec8d5ebb989d5cc6c9758c1eae9 /tests/compare_images.c
parent6b942376798af17e198b395167f895afc61f306c (diff)
[trunk] Add new test suite that run on kakadu conformance images
Diffstat (limited to 'tests/compare_images.c')
-rw-r--r--tests/compare_images.c109
1 files changed, 107 insertions, 2 deletions
diff --git a/tests/compare_images.c b/tests/compare_images.c
index 9f15f04d..fba89710 100644
--- a/tests/compare_images.c
+++ b/tests/compare_images.c
@@ -140,6 +140,94 @@ static char* createMultiComponentsFilename(const char* inFilename, const int ind
/*******************************************************************************
*
*******************************************************************************/
+static opj_image_t* readImageFromFilePPM(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;
+
+ /* 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(&parameters);
+ parameters.decod_format = PXM_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 */
+ image_read = pnmtoimage(filenameComponentPGX, &parameters);
+ 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((OPJ_UINT32)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;
+}
+
static opj_image_t* readImageFromFileTIF(const char* filename, int nbFilenamePGX, const char *separator)
{
int it_file;
@@ -385,6 +473,7 @@ static int get_decod_format(test_cmp_parameters* param)
if( strcmp(base_ext,test_ext) != 0 ) return -1;
if( strcmp(base_ext,".pgx") == 0 ) return PGX_DFMT;
if( strcmp(base_ext,".tif") == 0 ) return TIF_DFMT;
+ if( strcmp(base_ext,".ppm") == 0 ) return PXM_DFMT;
return -1;
}
@@ -667,8 +756,12 @@ int main(int argc, char **argv)
memsizetestfilename = (int)strlen(inParam.test_filename) + 1 + 5 + 2 + 4;
decod_format = get_decod_format(&inParam);
- if( decod_format == -1 ) goto cleanup;
- assert( decod_format == PGX_DFMT || decod_format == TIF_DFMT );
+ if( decod_format == -1 )
+ {
+ fprintf( stderr, "Unhandled file format\n" );
+ goto cleanup;
+ }
+ assert( decod_format == PGX_DFMT || decod_format == TIF_DFMT || decod_format == PXM_DFMT );
if( decod_format == PGX_DFMT )
{
@@ -682,6 +775,12 @@ int main(int argc, char **argv)
if ( imageBase == NULL )
goto cleanup;
}
+ else if( decod_format == PXM_DFMT )
+ {
+ imageBase = readImageFromFilePPM( inParam.base_filename, nbFilenamePGXbase, "");
+ if ( imageBase == NULL )
+ goto cleanup;
+ }
filenamePNGbase = (char*) malloc((size_t)memsizebasefilename);
strcpy(filenamePNGbase, inParam.test_filename);
@@ -702,6 +801,12 @@ int main(int argc, char **argv)
if ( imageTest == NULL )
goto cleanup;
}
+ else if( decod_format == PXM_DFMT )
+ {
+ imageTest = readImageFromFilePPM(inParam.test_filename, nbFilenamePGXtest, "");
+ if ( imageTest == NULL )
+ goto cleanup;
+ }
filenamePNGtest = (char*) malloc((size_t)memsizetestfilename);
strcpy(filenamePNGtest, inParam.test_filename);