summaryrefslogtreecommitdiffstats
path: root/tools/h52jpeg/h52jpegtst.c
diff options
context:
space:
mode:
authorPedro Vicente Nunes <pvn@hdfgroup.org>2008-06-27 19:15:53 (GMT)
committerPedro Vicente Nunes <pvn@hdfgroup.org>2008-06-27 19:15:53 (GMT)
commite31678c3a2407951de3bca57578a5347abd45cbd (patch)
treee52e8f34eba11a2b9a8731ae2e221ab310b5f76f /tools/h52jpeg/h52jpegtst.c
parent8776008f6648362656cf5a9208e67382137cc40b (diff)
downloadhdf5-e31678c3a2407951de3bca57578a5347abd45cbd.zip
hdf5-e31678c3a2407951de3bca57578a5347abd45cbd.tar.gz
hdf5-e31678c3a2407951de3bca57578a5347abd45cbd.tar.bz2
[svn-r15291] Implementation of generating more use cases (datasets of several types) for the test generator program and file
Implementation of transforming 2D datasets with integer and float classes to 8bit acceptable by the jpeg library. tested: windows, linux
Diffstat (limited to 'tools/h52jpeg/h52jpegtst.c')
-rw-r--r--tools/h52jpeg/h52jpegtst.c176
1 files changed, 159 insertions, 17 deletions
diff --git a/tools/h52jpeg/h52jpegtst.c b/tools/h52jpeg/h52jpegtst.c
index 3a4b277..b420168 100644
--- a/tools/h52jpeg/h52jpegtst.c
+++ b/tools/h52jpeg/h52jpegtst.c
@@ -15,6 +15,7 @@
#include "hdf5.h"
#include "hdf5_hl.h"
+#include "H5private.h"
#include <stdlib.h>
#include <string.h>
@@ -24,23 +25,72 @@
#define IMAGE2_NAME "image24bitpixel"
#define PAL_NAME "palette"
#define PAL_ENTRIES 256
+#define RANK 2
+#define HEIGHT 200
+#define WIDTH 300
-static int read_data(const char* file_name, hsize_t *width, hsize_t *height );
+
+static int make_datasets( hid_t fid );
+static int make_images( hid_t fid );
+static int read_data(const char* file_name, hsize_t *width, hsize_t *height );
unsigned char *gbuf = 0; /* global buffer for image data */
+
+/*-------------------------------------------------------------------------
+ * Function: main
+ *
+ * Purpose: h52jpegtst main program. Generate images and datasets to be used
+ * by h52jpeg tests
+ *
+ * Programmer: Pedro Vicente, pvn@hdfgroup.org
+ *
+ * Date: May 30, 2008
+ *
+ *-------------------------------------------------------------------------
+ */
int main( void )
{
- hid_t fid; /* HDF5 file identifier */
+ hid_t fid; /* HDF5 file identifier */
+
+ /* create a new HDF5 file using default properties. */
+ if (( fid = H5Fcreate( "h52jpegtst.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT )) < 0 )
+ return 1;
+
+ /* make images */
+ if ( make_images( fid ) < 0 )
+ goto out;
+
+ /* make images */
+ if ( make_datasets( fid ) < 0 )
+ goto out;
+
+ /* close the file. */
+ H5Fclose( fid );
+
+ return 0;
+
+out:
+ printf("Error on return function...Exiting\n");
+ H5Fclose( fid );
+ return 1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: make_images
+ *
+ * Purpose: generate images
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static int make_images( hid_t fid )
+{
hsize_t width; /* width of image */
hsize_t height; /* height of image */
unsigned char pal[ PAL_ENTRIES * 3 ]; /* palette array */
hsize_t pal_dims[2] = {PAL_ENTRIES,3}; /* palette dimensions */
int i, n;
- /* create a new HDF5 file using default properties. */
- if (( fid = H5Fcreate( "h52jpegtst.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT )) < 0 )
- return 1;
-
/* read first data file */
if ( read_data( DATA_FILE1, &width, &height ) < 0 )
goto out;
@@ -50,9 +100,9 @@ int main( void )
goto out;
/*-------------------------------------------------------------------------
- * define a palette, blue to red tones
- *-------------------------------------------------------------------------
- */
+ * define a palette, blue to red tones
+ *-------------------------------------------------------------------------
+ */
for ( i=0, n=0; i<PAL_ENTRIES*3; i+=3, n++)
{
pal[i] =n; /* red */
@@ -69,9 +119,9 @@ int main( void )
goto out;
/*-------------------------------------------------------------------------
- * true color image example with pixel interlace in RGB type
- *-------------------------------------------------------------------------
- */
+ * true color image example with pixel interlace in RGB type
+ *-------------------------------------------------------------------------
+ */
/* read second data file */
if ( read_data( DATA_FILE2, &width, &height ) < 0 )
@@ -80,16 +130,108 @@ int main( void )
/* make dataset */
if ( H5IMmake_image_24bit( fid, IMAGE2_NAME, width, height, "INTERLACE_PIXEL", gbuf ) < 0 )
goto out;
+
+ return 0;
- /* close the file. */
- H5Fclose( fid );
+out:
+ printf("Error on return function...Exiting\n");
+ return -1;
+}
+
+
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: make_datasets
+ *
+ * Purpose: generate datasets
+ *
+ *-------------------------------------------------------------------------
+ */
+static int make_datasets( hid_t fid )
+{
+ hsize_t width; /* width of image */
+ hsize_t height; /* height of image */
+ hid_t sid;
+ hid_t did;
+ hsize_t dims[2];
+ unsigned char *buf;
+ hsize_t i;
+
+ /* read a data file with 8bit data */
+ if ( read_data( DATA_FILE1, &width, &height ) < 0 )
+ goto out;
+
+ dims[0] = height;
+ dims[1] = width;
+
+ if ((sid = H5Screate_simple(RANK, dims, NULL)) < 0)
+ {
+ goto out;
+ }
+
+ /*-------------------------------------------------------------------------
+ * H5T_NATIVE_SHORT
+ *-------------------------------------------------------------------------
+ */
+ if (NULL == (buf = HDmalloc( (size_t)width * (size_t)height * sizeof(short) )))
+ goto out;
+
+ for ( i = 0; i < height * width; i++)
+ {
+ buf[i] = gbuf[i];
+ }
+
+ if ((did = H5Dcreate2(fid, "short", H5T_NATIVE_SHORT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+ goto out;
+ if (H5Dwrite(did, H5T_NATIVE_SHORT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0)
+ goto out;
+ if (H5Dclose(did)< 0)
+ goto out;
+
+ free( buf );
+
+ /*-------------------------------------------------------------------------
+ * H5T_NATIVE_INT
+ *-------------------------------------------------------------------------
+ */
+ if (NULL == (buf = HDmalloc( (size_t)width * (size_t)height * sizeof(int) )))
+ goto out;
+
+ for ( i = 0; i < height * width; i++)
+ {
+ buf[i] = gbuf[i];
+ }
+
+ if ((did = H5Dcreate2(fid, "int", H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+ goto out;
+ if (H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0)
+ goto out;
+ if (H5Dclose(did)< 0)
+ goto out;
+
+ free( buf );
+
+
+
+
+ /* close */
+ H5Sclose(sid);
return 0;
out:
- printf("Error on return function...Exiting\n");
- H5Fclose( fid );
- return 1;
+ H5E_BEGIN_TRY
+ {
+
+ H5Sclose(sid);
+ H5Dclose(did);
+
+ } H5E_END_TRY;
+
+ return -1;
+
}