Changeset: c81781356c64 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c81781356c64
Modified Files:
        sql/backends/monet5/vaults/geotiff/geotiff.c
Branch: sciql
Log Message:

applied Holger's fix for the GeoTIFF loadimage code with a bit clean up.

Note that this code is only tested with GeoTIFF image with BPS=8.  Most
probably it does not work if BPS=16, but a sample image is needed to correct
it.


diffs (50 lines):

diff --git a/sql/backends/monet5/vaults/geotiff/geotiff.c 
b/sql/backends/monet5/vaults/geotiff/geotiff.c
--- a/sql/backends/monet5/vaults/geotiff/geotiff.c
+++ b/sql/backends/monet5/vaults/geotiff/geotiff.c
@@ -128,10 +128,10 @@ GTIFFloadImage(bat *result, str *fname)
 {
        TIFF *tif = (TIFF*)0;
        int  wid = 0, len = 0;
-       BUN pixels = BUN_NONE, strsize = BUN_NONE, sz = BUN_NONE;
+       BUN pixels = BUN_NONE;
        sht photoint, bps;
-       tsize_t strcnt, i;
-       void *data = NULL;
+       tsize_t i, j;
+       void *data = NULL, *linebuf = NULL;
        BAT *res;
 
 
@@ -170,19 +170,12 @@ GTIFFloadImage(bat *result, str *fname)
 
 
        /* read data */
-       strsize = TIFFStripSize(tif);
-       strcnt = TIFFNumberOfStrips(tif);
+       linebuf = GDKmalloc(wid); /* buffer for one line of image */
        data = (void *) Tloc(res, BUNfirst(res));
-       for( i = 0; i < strcnt; i++){
-               sz = TIFFReadEncodedStrip(tif, i, data, strsize);
-               if ( sz == strsize )
-                       data = (void *)((char *)data + strsize);
-               else if (( i < strcnt - 1 ) ||          /* interm. strip not 
full */ 
-                       (( i == strcnt - 1 ) && (pixels * bps/8 != strsize * i 
+ sz))){  /* last strip not full */
-                       XTIFFClose(tif);
-                       BBPreclaim(res);
-                       res = NULL;
-                       return createException(MAL, "geotiff.loadimage", 
"Stripsize mismatch");
+       for( i = 0; i < len; i++){
+               if (TIFFReadScanline(tif, linebuf, i, 0) != -1) {
+                       for (j = 0; j < wid; j++)
+                               ((unsigned char*)data)[j*len+i] = ((unsigned 
char*)linebuf)[j];
                }
        }
 
@@ -196,6 +189,7 @@ GTIFFloadImage(bat *result, str *fname)
 
        BBPkeepref(*result = res->batCacheid);
        XTIFFClose(tif);
+       GDKfree(linebuf);
        return MAL_SUCCEED;
 }
 
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to