2005.03.04 22:36 "[Tiff] Advice on replacing use of tiffiop.h internals with public APIs", by Jon Leech
I'm porting some old software to current versions of libtiff, and trying to eliminate use of libtiff non-public data structures and APIs in tiffiop.h, so there's no dependency on a specific version of libtiff being installed (it was written more than a decade ago, and at the time, was built and bundled with its own copy of libtiff). I've been browsing the libtiff code, but would appreciate sanity-checking and advice.
Right now when writing TIFF images this software constructs a lot of the TIFF and TIFFDirectory header information itself. For starters, there are a bunch of reads and writes of TIFFDirectory members, which I think can almost all be replaced with TIFFSetField/GetField. Is the member / tag mapping below accurate (for libtiff 3.5.7 and earlier, anyway)?
TIFFDirectory member Corresponding tag
tif_dir.td_extrasamples TIFFTAG_EXTRASAMPLES (first value)
tif_dir.td_sampleinfo TIFFTAG_EXTRASAMPLES (second value)
tif_dif.td_stripsperimage (does this have a tag? It appears to
be derived from tag data in some
There is also some use of internal macros, functions, and TIFF members, which will be harder to fix. I'd appreciate any help in understanding what the following internals mean, and how they are initialized or used by libtiff itself. The following code fragment is used when preparing to write a TIFF image, either the first image in a file after opening it, or appending a new image to an existing file, in which case a TIFFWriteDirectory() preceded. It's obviously performing some initialization of the directory for the new image, but I'm not clear if any of this is actually needed under the circumstances?
/* either TIFFOpen() or TIFFWriteDirectory(), followed by: */
tiff->tif_flags &= ~TIFF_ISTILED;
tiff->tif_diroff = 0;
That's followed by setting a whole bunch of the tags listed above, and also some setting or querying of TIFF struct members including:
tiff->tif_curoff = 0;
tiff->tif_scanlinesize = TIFFScanlineSize(tiff);
tiff->tif_mode (replaceable by TIFFGetMode()?)
And finally, there's repeated use of the macro
which is used to control how some of those members are initialized.
Thanks for any advice you can offer!
P.S. Yes, that reply address works.