summaryrefslogtreecommitdiffstats
path: root/tools/h5repack/h5repack_filters.c
diff options
context:
space:
mode:
authorPedro Vicente Nunes <pvn@hdfgroup.org>2004-08-19 19:09:13 (GMT)
committerPedro Vicente Nunes <pvn@hdfgroup.org>2004-08-19 19:09:13 (GMT)
commit8f6f6fee060ff172befafacd68f5236b11ca2776 (patch)
tree190d63d53a8db97641021747a320dbbb1c93cc25 /tools/h5repack/h5repack_filters.c
parent2f7d90c0da893606e8225261aec91949d51efd4a (diff)
downloadhdf5-8f6f6fee060ff172befafacd68f5236b11ca2776.zip
hdf5-8f6f6fee060ff172befafacd68f5236b11ca2776.tar.gz
hdf5-8f6f6fee060ff172befafacd68f5236b11ca2776.tar.bz2
[svn-r9121] Purpose:
new feature Description: added a check that the chunk size must be smaller than pixels per block in SZIP request prints a message and exits, if not met Solution: Platforms tested: linux aix solaris Misc. update:
Diffstat (limited to 'tools/h5repack/h5repack_filters.c')
-rw-r--r--tools/h5repack/h5repack_filters.c249
1 files changed, 0 insertions, 249 deletions
diff --git a/tools/h5repack/h5repack_filters.c b/tools/h5repack/h5repack_filters.c
index 2536ced..b506b16 100644
--- a/tools/h5repack/h5repack_filters.c
+++ b/tools/h5repack/h5repack_filters.c
@@ -212,17 +212,6 @@ int apply_filters(const char* name, /* object name from traverse list */
options_mask=H5_SZIP_NN_OPTION_MASK;
else
options_mask=H5_SZIP_EC_OPTION_MASK;
-
-#if defined (CHECK_SZIP)
- /* check szip parameters */
- if (check_szip(type_id,
- obj->chunk.rank,
- obj->chunk.chunk_lengths,
- options_mask,
- &pixels_per_block,
- options)==1)
- {
-#endif
/* set up for szip data */
if(H5Pset_chunk(dcpl_id,obj->chunk.rank,obj->chunk.chunk_lengths)<0)
@@ -230,17 +219,6 @@ int apply_filters(const char* name, /* object name from traverse list */
if (H5Pset_szip(dcpl_id,options_mask,pixels_per_block)<0)
return -1;
-
-#if defined (CHECK_SZIP)
- }
- else
- {
- if (options->verbose)
- printf("Warning: SZIP filter cannot be applied to <%s>\n",name);
- }
-#endif
-
-
}
break;
@@ -345,231 +323,4 @@ int print_filters(hid_t dcpl_id)
}
-#if defined (CHECK_SZIP)
-
-
-/*-------------------------------------------------------------------------
- * Function: check_szip
- *
- * Purpose: utility to check SZIP parameters
- *
- * SZIP compresses data block by block, with a user-tunable block size.
- * This block size is passed in the parameter pixels_per_block and must be even,
- * with typical values being 8, 10, 16, and 32. The more pixel values vary,
- * the smaller this number should be. For optimal performance, the number of
- * pixels per scan line (i.e., the size of the fastest-changing dimension in the chunk)
- * should be an even multiple of the number of pixels per block.
- *
- * Return: 1=can apply the filter
- * 0=cannot apply the filter
- *
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
- *
- * Date: December 23, 2003
- *
- *-------------------------------------------------------------------------
- */
-
-int check_szip(hid_t type_id, /* dataset datatype */
- int rank, /* chunk rank */
- hsize_t *dims, /* chunk dims */
- unsigned szip_options_mask /*IN*/,
- unsigned *szip_pixels_per_block /*IN,OUT*/,
- pack_opt_t *options)
-{
- size_t size=0; /* size of datatype in bytes */
- szip_comp_t szip;
- int i;
- unsigned ppb=*szip_pixels_per_block;
-
- if (type_id)
- {
- if ((size=H5Tget_size(type_id))==0)
- return 0;
-
- switch (H5Tget_class(type_id))
- {
- default:
- return 0;
- case H5T_INTEGER:
- case H5T_FLOAT:
- break;
- }
- }
-
-
- /*
- pixels_per_scanline = size of the fastest-changing dimension
- Must be <= MAX_PIXELS_PER_SCANLINE and <= pixels
- */
- szip.pixels_per_scanline = (unsigned)dims[rank-1];
- szip.pixels = 1;
- for ( i = 0; i < rank; i++)
- {
- szip.pixels *= dims[i];
- }
-
- if (szip.pixels_per_scanline > MAX_PIXELS_PER_SCANLINE)
- {
- printf("Warning: in SZIP setting, pixels per scanline was set to <%d>, \
- MAX_PIXELS_PER_SCANLINE\n",MAX_PIXELS_PER_SCANLINE);
- szip.pixels_per_scanline = MAX_PIXELS_PER_SCANLINE;
- }
-
- /*
- pixels_per_block must be an even number, and <= pixels_per_scanline
- and <= MAX_PIXELS_PER_BLOCK
- */
-
- if (ppb > szip.pixels_per_scanline)
- {
- /* set ppb to pixels per scanline and try to make it an even number */
- ppb=szip.pixels_per_scanline;
- if (ppb%2!=0)
- ppb--;
- if (ppb<=1 )
- {
- printf("Warning: in SZIP settings, pixels per block <%d>,\
- cannot be set with pixels per scanline <%d>\n",
- ppb, szip.pixels_per_scanline);
- return 0;
- }
- else
- {
- if (options->verbose)
- printf("Warning: In SZIP settings, pixels per block was set to <%d>\n", ppb);
- }
- }
- szip.pixels_per_block = ppb;
- *szip_pixels_per_block = ppb;
-
- szip.options_mask = szip_options_mask;
- szip.compression_mode = NN_MODE;
-
- /*
- bits_per_pixel
- Must be in range 1..24,32,64
- */
- szip.bits_per_pixel = 0;
- if (type_id) {
- switch(size)
- {
- case 1:
- szip.bits_per_pixel = 8;
- break;
- case 2:
- szip.bits_per_pixel = 16;
- break;
- case 4:
- szip.bits_per_pixel = 32;
- break;
- case 8:
- szip.bits_per_pixel = 64;
- break;
- default:
- printf("Warning: Invalid numeric type of size <%u> for SZIP\n",(unsigned)size);
- return 0;
- }}
-
- return check_szip_params( szip.bits_per_pixel,
- szip.pixels_per_block,
- szip.pixels_per_scanline,
- szip.pixels);
-
-}
-
-
-/*-------------------------------------------------------------------------
- * Function: check_szip_params
- *
- * Purpose: Adapted from rice.c. Checks the SZIP parameters
- *
- * Return: 1=can apply the filter
- * 0=cannot apply the filter
- *
- *-------------------------------------------------------------------------
- */
-
-int check_szip_params( unsigned bits_per_pixel,
- unsigned pixels_per_block,
- unsigned pixels_per_scanline,
- hsize_t image_pixels)
-{
-
- if (pixels_per_block & 1)
- {
- printf("Pixels per block must be even.\n");
- return 0;
- }
-
- if (pixels_per_block > pixels_per_scanline)
- {
- printf("Pixels per block is greater than pixels per scanline.\n");
- return 0;
- }
-
- if (bits_per_pixel) /* if provided for test */
- {
- if (bits_per_pixel >= 1 && bits_per_pixel <= 24)
- ;
- else if (bits_per_pixel == 32 || bits_per_pixel == 64)
- ;
- else
- {
- printf("bits per pixel must be in range 1..24,32,64");
- return 0;
- }
- }
-
- if (pixels_per_block > MAX_PIXELS_PER_BLOCK)
- {
- printf("maximum pixels per block exceeded");
- return 0;
- }
-
- if (pixels_per_block & 1)
- {
- printf("pixels per block must be even");
- return 0;
- }
-
- if (pixels_per_block > pixels_per_scanline)
- {
- printf("pixels per block > pixels per scanline");
- return 0;
- }
-
- if (pixels_per_scanline > MAX_PIXELS_PER_SCANLINE)
- {
- printf("maximum pixels per scanline exceeded");
- return 0;
- }
-
- if (image_pixels < pixels_per_scanline)
- {
- printf("image pixels less than pixels per scanline");
- return 0;
- }
-
- if (image_pixels % pixels_per_scanline)
- {
- printf("Pixels (%d) must be integer multiple of pixels per scanline (%d)\n",
- (unsigned)image_pixels,pixels_per_scanline);
- return 0;
- }
-
-#if 0
- if (pixels_per_scanline % pixels_per_block)
- {
- printf("Pixels per scanline (%d) must be an integer multiple of pixels per block (%d)\n",
- pixels_per_scanline, pixels_per_block);
- return 0;
- }
-#endif
-
- return 1;
-}
-
-#endif /* CHECK_SZIP */
-