2010.12.14 17:55 "[Tiff] patch to tif_jpeg.c", by Dwight Kelly

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

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.