AWARE [SYSTEMS] Imaging expertise for the Delphi developer
AWare Systems, Imaging expertise for the Delphi developer, Home TIFF and LibTiff Mailing List Archive

LibTiff Mailing List

TIFF and LibTiff Mailing List Archive
January 2011

Previous Thread
Next Thread

Previous by Thread
Next by Thread

Previous by Date
Next by Date

Contact

The TIFF Mailing List Homepage
This list is run by Frank Warmerdam
Archive maintained by AWare Systems



Valid HTML 4.01!



Thread

2011.01.21 00:51 "Cannot read YCbCr JPEG-compressed images", by Craig Bruce
2011.01.21 12:11 "Re: Cannot read YCbCr JPEG-compressed images", by <jcupitt@gmail.com>
2011.01.23 03:30 "Re: Cannot read YCbCr JPEG-compressed images", by Charles Auer
2011.01.23 16:01 "Re: Cannot read YCbCr JPEG-compressed images", by Bob Friesenhahn
2011.01.25 01:02 "Re: Cannot read YCbCr JPEG-compressed images", by Craig Bruce
2011.01.25 02:00 "Re: Cannot read YCbCr JPEG-compressed images", by Olivier Paquet
2011.01.26 02:40 "Re: Cannot read YCbCr JPEG-compressed images", by Craig Bruce
2011.01.26 04:50 "Re: Cannot read YCbCr JPEG-compressed images", by Bob Friesenhahn

2011.01.25 01:02 "Re: Cannot read YCbCr JPEG-compressed images", by Craig Bruce

Charles Auer <bumble731@msn.com> wrote:

> Using TIFFReadEncodedTile, I was able to decode all 7 images in the
> sample file without any errors.

I put together the following test program:

#include <stdio.h>
#include <stdlib.h>
#include <tiffio.h>

main()
{
    TIFF *tiff;
    ttile_t tileNum;
    tsize_t tileSize;
    int readSize;
    tdata_t buf;

    tiff = TIFFOpen( "Q09050_006_NIR.tif", "r" );
    if (tiff == NULL) goto ERROR;
    tileNum = TIFFComputeTile( tiff, 0, 0, 0, 0 );
    tileSize = TIFFTileSize( tiff );
    buf = malloc( tileSize );
    printf( "tileNum=%ld, tileSize=%ld, buf=%p\n", (long) tileNum,
             (long) tileSize, (long) buf );
    readSize = TIFFReadEncodedTile( tiff, tileNum, buf, tileSize );
    if (readSize == -1) goto ERROR;
    printf("successful read, size=%d\n", readSize );
    exit( 0 );

ERROR:
    printf( "ERROR!\n" );
    exit( 1 );
}

If I build it using the system libraries on my computer (Linux x86_64,
Fedora 13, libtiff 3.9.4), it works:

$ gcc tile.c -ltiff -ljpeg -lz -lm -o tile_test
$ ./tile_test 
TIFFReadDirectory: Warning, Q09050_006_NIR.tif: unknown field with tag 50742
(0xc636) encountered.
tileNum=0, tileSize=98304, buf=0x2124a60
successful read, size=98304

However, if I build and link with my own libtiff 4.0.0beta6 with the
default configuration, I get the buffer error:

$ gcc -I ~/tiff-4.0.0beta6/libtiff tile.c
~/tiff-4.0.0beta6/libtiff/.libs/libtiff.a -ljpeg -lz -lm -o tile_test
$ ./tile_test 
TIFFReadDirectory: Warning, Unknown field with tag 50742 (0xc636)
encountered.
TIFFFetchNormalTag: Warning, ASCII value for tag "ImageDescription" does not
end in null byte.
TIFFFetchNormalTag: Warning, ASCII value for tag "Software" does not end in
null byte.
tileNum=0, tileSize=98304, buf=0x22092b0
JPEGDecodeRaw: application buffer not large enough for all data..
ERROR!

The behaviour is consistent across a couple different versions of Fedora-
built and personally-build libtiffs.  Is there some special libtiff
configuration needed to make YCbCr/JPEG reading work properly?  I need
to use a custom-built libtiff.

--------------------------+----------------------+--------------------------
Dr. Craig S. Bruce        | Ph 819-771-8303 x205 |             CubeWerx Inc.
Senior Software Developer |   Fax 819-771-8388   |  Gatineau, Québec,
Canada
csbruce@cubewerx.com      |  http://csbruce.com/ |  http://www.cubewerx.com/
--------------------------+----------------------+--------------------------
The Free Market is why Canadian flags are made in China instead of
Singapore.
_______________________________________________
Tiff mailing list: Tiff@lists.maptools.org
http://lists.maptools.org/mailman/listinfo/tiff
http://www.remotesensing.org/libtiff/