1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* $Id: tif_dir.h,v 1.54 2011-02-18 20:53:05 fwarmerdam Exp $ */ 2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* 4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Copyright (c) 1988-1997 Sam Leffler 5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Copyright (c) 1991-1997 Silicon Graphics, Inc. 6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * 7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Permission to use, copy, modify, distribute, and sell this software and 8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * its documentation for any purpose is hereby granted without fee, provided 9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * that (i) the above copyright notices and this permission notice appear in 10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * all copies of the software and related documentation, and (ii) the names of 11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Sam Leffler and Silicon Graphics may not be used in any advertising or 12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * publicity relating to the software without the specific, prior written 13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * permission of Sam Leffler and Silicon Graphics. 14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * 15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR 20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, 21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * OF THIS SOFTWARE. 25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann */ 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef _TIFFDIR_ 28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define _TIFFDIR_ 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * ``Library-private'' Directory-related Definitions. 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann */ 32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef struct { 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const TIFFField *info; 35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int count; 36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void *value; 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} TIFFTagValue; 38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* 40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * TIFF Image File Directories are comprised of a table of field 41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * descriptors of the form shown below. The table is sorted in 42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * ascending order by tag. The values associated with each entry are 43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * disjoint and may appear anywhere in the file (so long as they are 44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * placed on a word boundary). 45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * 46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * If the value is 4 bytes or less, in ClassicTIFF, or 8 bytes or less in 47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * BigTIFF, then it is placed in the offset field to save space. If so, 48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * it is left-justified in the offset field. 49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann */ 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef struct { 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 tdir_tag; /* see below */ 52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 tdir_type; /* data type; see below */ 53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint64 tdir_count; /* number of items; length in spec */ 54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann union { 55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 toff_short; 56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint32 toff_long; 57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint64 toff_long8; 58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } tdir_offset; /* either offset or the data itself if fits */ 59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} TIFFDirEntry; 60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* 62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Internal format of a TIFF directory entry. 63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann */ 64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef struct { 65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_SETLONGS 4 66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann /* bit vector of fields that are set */ 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann unsigned long td_fieldsset[FIELD_SETLONGS]; 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint32 td_imagewidth, td_imagelength, td_imagedepth; 70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint32 td_tilewidth, td_tilelength, td_tiledepth; 71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint32 td_subfiletype; 72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 td_bitspersample; 73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 td_sampleformat; 74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 td_compression; 75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 td_photometric; 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 td_threshholding; 77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 td_fillorder; 78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 td_orientation; 79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 td_samplesperpixel; 80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint32 td_rowsperstrip; 81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 td_minsamplevalue, td_maxsamplevalue; 82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann double* td_sminsamplevalue; 83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann double* td_smaxsamplevalue; 84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann float td_xresolution, td_yresolution; 85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 td_resolutionunit; 86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 td_planarconfig; 87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann float td_xposition, td_yposition; 88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 td_pagenumber[2]; 89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16* td_colormap[3]; 90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 td_halftonehints[2]; 91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 td_extrasamples; 92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16* td_sampleinfo; 93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann /* even though the name is misleading, td_stripsperimage is the number 94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * of striles (=strips or tiles) per plane, and td_nstrips the total 95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * number of striles */ 96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint32 td_stripsperimage; 97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint32 td_nstrips; /* size of offset & bytecount arrays */ 98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint64* td_stripoffset; 99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint64* td_stripbytecount; 100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int td_stripbytecountsorted; /* is the bytecount array sorted ascending? */ 101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#if defined(DEFER_STRILE_LOAD) 102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFFDirEntry td_stripoffset_entry; /* for deferred loading */ 103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFFDirEntry td_stripbytecount_entry; /* for deferred loading */ 104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif 105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 td_nsubifd; 106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint64* td_subifd; 107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann /* YCbCr parameters */ 108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 td_ycbcrsubsampling[2]; 109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16 td_ycbcrpositioning; 110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann /* Colorimetry parameters */ 111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint16* td_transferfunction[3]; 112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann float* td_refblackwhite; 113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann /* CMYK parameters */ 114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int td_inknameslen; 115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann char* td_inknames; 116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int td_customValueCount; 118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFFTagValue *td_customValues; 119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} TIFFDirectory; 120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* 122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Field flags used to indicate fields that have been set in a directory, and 123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * to reference fields when manipulating a directory. 124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann */ 125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* 127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * FIELD_IGNORE is used to signify tags that are to be processed but otherwise 128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * ignored. This permits antiquated tags to be quietly read and discarded. 129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Note that a bit *is* allocated for ignored tags; this is understood by the 130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * directory reading logic which uses this fact to avoid special-case handling 131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann */ 132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_IGNORE 0 133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* multi-item fields */ 135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_IMAGEDIMENSIONS 1 136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_TILEDIMENSIONS 2 137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_RESOLUTION 3 138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_POSITION 4 139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* single-item fields */ 141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_SUBFILETYPE 5 142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_BITSPERSAMPLE 6 143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_COMPRESSION 7 144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_PHOTOMETRIC 8 145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_THRESHHOLDING 9 146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_FILLORDER 10 147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_ORIENTATION 15 148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_SAMPLESPERPIXEL 16 149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_ROWSPERSTRIP 17 150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_MINSAMPLEVALUE 18 151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_MAXSAMPLEVALUE 19 152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_PLANARCONFIG 20 153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_RESOLUTIONUNIT 22 154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_PAGENUMBER 23 155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_STRIPBYTECOUNTS 24 156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_STRIPOFFSETS 25 157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_COLORMAP 26 158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_EXTRASAMPLES 31 159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_SAMPLEFORMAT 32 160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_SMINSAMPLEVALUE 33 161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_SMAXSAMPLEVALUE 34 162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_IMAGEDEPTH 35 163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_TILEDEPTH 36 164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_HALFTONEHINTS 37 165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_YCBCRSUBSAMPLING 39 166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_YCBCRPOSITIONING 40 167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_REFBLACKWHITE 41 168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_TRANSFERFUNCTION 44 169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_INKNAMES 46 170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_SUBIFD 49 171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* FIELD_CUSTOM (see tiffio.h) 65 */ 172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* end of support for well-known tags; codec-private tags follow */ 173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_CODEC 66 /* base of codec-private tags */ 174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* 177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Pseudo-tags don't normally need field bits since they are not written to an 178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * output file (by definition). The library also has express logic to always 179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * query a codec for a pseudo-tag so allocating a field bit for one is a 180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * waste. If codec wants to promote the notion of a pseudo-tag being ``set'' 181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * or ``unset'' then it can do using internal state flags without polluting 182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * the field bit space defined for real tags. 183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann */ 184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_PSEUDO 0 185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELD_LAST (32*FIELD_SETLONGS-1) 187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define BITn(n) (((unsigned long)1L)<<((n)&0x1f)) 189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define BITFIELDn(tif, n) ((tif)->tif_dir.td_fieldsset[(n)/32]) 190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define TIFFFieldSet(tif, field) (BITFIELDn(tif, field) & BITn(field)) 191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define TIFFSetFieldBit(tif, field) (BITFIELDn(tif, field) |= BITn(field)) 192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define TIFFClrFieldBit(tif, field) (BITFIELDn(tif, field) &= ~BITn(field)) 193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FieldSet(fields, f) (fields[(f)/32] & BITn(f)) 195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define ResetFieldBit(fields, f) (fields[(f)/32] &= ~BITn(f)) 196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef enum { 198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_UNDEFINED = 0, 199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_ASCII = 1, 200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_UINT8 = 2, 201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_SINT8 = 3, 202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_UINT16 = 4, 203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_SINT16 = 5, 204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_UINT32 = 6, 205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_SINT32 = 7, 206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_UINT64 = 8, 207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_SINT64 = 9, 208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_FLOAT = 10, 209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_DOUBLE = 11, 210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_IFD8 = 12, 211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_INT = 13, 212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_UINT16_PAIR = 14, 213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C0_ASCII = 15, 214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C0_UINT8 = 16, 215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C0_SINT8 = 17, 216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C0_UINT16 = 18, 217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C0_SINT16 = 19, 218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C0_UINT32 = 20, 219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C0_SINT32 = 21, 220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C0_UINT64 = 22, 221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C0_SINT64 = 23, 222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C0_FLOAT = 24, 223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C0_DOUBLE = 25, 224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C0_IFD8 = 26, 225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C16_ASCII = 27, 226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C16_UINT8 = 28, 227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C16_SINT8 = 29, 228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C16_UINT16 = 30, 229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C16_SINT16 = 31, 230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C16_UINT32 = 32, 231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C16_SINT32 = 33, 232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C16_UINT64 = 34, 233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C16_SINT64 = 35, 234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C16_FLOAT = 36, 235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C16_DOUBLE = 37, 236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C16_IFD8 = 38, 237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C32_ASCII = 39, 238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C32_UINT8 = 40, 239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C32_SINT8 = 41, 240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C32_UINT16 = 42, 241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C32_SINT16 = 43, 242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C32_UINT32 = 44, 243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C32_SINT32 = 45, 244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C32_UINT64 = 46, 245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C32_SINT64 = 47, 246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C32_FLOAT = 48, 247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C32_DOUBLE = 49, 248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_C32_IFD8 = 50, 249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFF_SETGET_OTHER = 51 250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} TIFFSetGetFieldType; 251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#if defined(__cplusplus) 253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannextern "C" { 254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif 255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannextern const TIFFFieldArray* _TIFFGetFields(void); 257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannextern const TIFFFieldArray* _TIFFGetExifFields(void); 258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannextern void _TIFFSetupFields(TIFF* tif, const TIFFFieldArray* infoarray); 259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannextern void _TIFFPrintFieldInfo(TIFF*, FILE*); 260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannextern int _TIFFFillStriles(TIFF*); 262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef enum { 264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tfiatImage, 265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tfiatExif, 266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tfiatOther 267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} TIFFFieldArrayType; 268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstruct _TIFFFieldArray { 270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFFFieldArrayType type; /* array type, will be used to determine if IFD is image and such */ 271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint32 allocated_size; /* 0 if array is constant, other if modified by future definition extension support */ 272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint32 count; /* number of elements in fields array */ 273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFFField* fields; /* actual field info */ 274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstruct _TIFFField { 277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint32 field_tag; /* field's tag */ 278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann short field_readcount; /* read count/TIFF_VARIABLE/TIFF_SPP */ 279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann short field_writecount; /* write count/TIFF_VARIABLE */ 280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFFDataType field_type; /* type of associated data */ 281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint32 reserved; /* reserved for future extension */ 282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFFSetGetFieldType set_field_type; /* type to be passed to TIFFSetField */ 283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFFSetGetFieldType get_field_type; /* type to be passed to TIFFGetField */ 284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann unsigned short field_bit; /* bit in fieldsset bit vector */ 285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann unsigned char field_oktochange; /* if true, can change while writing */ 286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann unsigned char field_passcount; /* if true, pass dir count on set */ 287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann char* field_name; /* ASCII name */ 288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFFFieldArray* field_subfields; /* if field points to child ifds, child ifd field definition array */ 289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannextern int _TIFFMergeFields(TIFF*, const TIFFField[], uint32); 292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannextern const TIFFField* _TIFFFindOrRegisterField(TIFF *, uint32, TIFFDataType); 293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannextern TIFFField* _TIFFCreateAnonField(TIFF *, uint32, TIFFDataType); 294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#if defined(__cplusplus) 296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif 298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif /* _TIFFDIR_ */ 299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* vim: set ts=8 sts=8 sw=8 noet: */ 301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 302ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* 303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Local Variables: 304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * mode: c 305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * c-basic-offset: 8 306ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * fill-column: 78 307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * End: 308ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann */ 309