]> granicus.if.org Git - openjpeg/commitdiff
[trunk] Add new test suite that run on kakadu conformance images
authorMathieu Malaterre <mathieu.malaterre@gmail.com>
Fri, 7 Mar 2014 17:18:13 +0000 (17:18 +0000)
committerMathieu Malaterre <mathieu.malaterre@gmail.com>
Fri, 7 Mar 2014 17:18:13 +0000 (17:18 +0000)
tests/compare_images.c
tests/conformance/CMakeLists.txt

index 9f15f04de9b3dd80df35dba67d523cede9b0dbba..fba897107615639054223db04fa1ae28d0305f35 100644 (file)
@@ -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);
index e47002f19c2274835b633b595df2fcfa9761d564..358a3f353c4f64363c1bd0f366353c7b2931c721 100644 (file)
@@ -472,6 +472,78 @@ foreach(numFileJP2 RANGE 1 9)
 
 endforeach()
 
+#--------------------------------------------------------------------------
+# Tests about Kakadu/J2K file
+# try to decode
+# compare to ref file
+# non regression comparison
+
+# Tolerances given by ???
+
+set(kdu_j2k_conf_files
+  a1_mono
+  a2_colr
+  a3_mono
+  a4_colr
+  a5_mono
+  a6_mono_colr
+  b1_mono
+  b2_mono
+  b3_mono
+  c1_mono
+  c2_mono
+  d1_colr
+  d2_colr
+  e1_colr
+  e2_colr
+  f1_mono
+  f2_mono
+  g1_colr
+  g2_colr
+  g3_colr
+  g4_colr
+)
+
+foreach(kdu_file ${kdu_j2k_conf_files})
+
+  # Build filenames
+  set( filenameInput "${kdu_file}.j2c" )
+  set( filenameRef   "${kdu_file}.ppm" )
+
+  add_test(NAME ETS-KDU-${filenameInput}-decode
+    COMMAND opj_decompress
+    -i ${INPUT_CONF}/${filenameInput}
+    -o ${TEMP}/${filenameInput}.ppm
+  )
+
+  add_test(NAME ETS-KDU-${filenameInput}-compare2ref
+    COMMAND compare_images
+    -b ${BASELINE_CONF}/${filenameRef}
+    -t ${TEMP}/${filenameInput}.ppm
+    -n 3
+    -p 4:4:4
+    -m 4:4:4
+    -s b_t_
+  )
+
+  set_tests_properties(ETS-KDU-${filenameInput}-compare2ref
+    PROPERTIES DEPENDS
+    ETS-KDU-${filenameInput}-decode)
+
+  add_test(NAME NR-KDU-${filenameInput}-compare2base
+    COMMAND compare_images
+    -b ${BASELINE_NR}/opj_${filenameRef}
+    -t ${TEMP}/${filenameInput}.ppm
+    -n 3
+    -d
+    -s b_t_
+  )
+
+  set_tests_properties(NR-KDU-${filenameInput}-compare2base
+    PROPERTIES DEPENDS
+    ETS-KDU-${filenameInput}-decode)
+endforeach()
+
 #--------------------------------------------------------------------------#
 #--------------------------------------------------------------------------#
 #--------------------------------------------------------------------------#