diff options
| author | Mathieu Malaterre <mathieu.malaterre@gmail.com> | 2014-03-07 17:18:13 +0000 |
|---|---|---|
| committer | Mathieu Malaterre <mathieu.malaterre@gmail.com> | 2014-03-07 17:18:13 +0000 |
| commit | fa1c2454e6d57685f58f1ce3c198945d5d5fe324 (patch) | |
| tree | 211b4f150621bec8d5ebb989d5cc6c9758c1eae9 /tests/compare_images.c | |
| parent | 6b942376798af17e198b395167f895afc61f306c (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.c | 109 |
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(¶meters); + 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, ¶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((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); |
