1 /* Id */ 2 3 /* 4 * Copyright (c) 1988-1997 Sam Leffler 5 * Copyright (c) 1991-1997 Silicon Graphics, Inc. 6 * 7 * Permission to use, copy, modify, distribute, and sell this software and 8 * its documentation for any purpose is hereby granted without fee, provided 9 * that (i) the above copyright notices and this permission notice appear in 10 * all copies of the software and related documentation, and (ii) the names of 11 * Sam Leffler and Silicon Graphics may not be used in any advertising or 12 * publicity relating to the software without the specific, prior written 13 * permission of Sam Leffler and Silicon Graphics. 14 * 15 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 16 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 17 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 18 * 19 * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR 20 * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, 21 * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 22 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 23 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 24 * OF THIS SOFTWARE. 25 */ 26 27 #ifndef _TIFFDIR_ 28 #define _TIFFDIR_ 29 /* 30 * ``Library-private'' Directory-related Definitions. 31 */ 32 33 /* 34 * Internal format of a TIFF directory entry. 35 */ 36 typedef struct { 37 #define FIELD_SETLONGS 4 38 /* bit vector of fields that are set */ 39 unsigned long td_fieldsset[FIELD_SETLONGS]; 40 41 uint32 td_imagewidth, td_imagelength, td_imagedepth; 42 uint32 td_tilewidth, td_tilelength, td_tiledepth; 43 uint32 td_subfiletype; 44 uint16 td_bitspersample; 45 uint16 td_sampleformat; 46 uint16 td_compression; 47 uint16 td_photometric; 48 uint16 td_threshholding; 49 uint16 td_fillorder; 50 uint16 td_orientation; 51 uint16 td_samplesperpixel; 52 uint32 td_rowsperstrip; 53 uint16 td_minsamplevalue, td_maxsamplevalue; 54 double td_sminsamplevalue, td_smaxsamplevalue; 55 float td_xresolution, td_yresolution; 56 uint16 td_resolutionunit; 57 uint16 td_planarconfig; 58 float td_xposition, td_yposition; 59 uint16 td_pagenumber[2]; 60 uint16* td_colormap[3]; 61 uint16 td_halftonehints[2]; 62 uint16 td_extrasamples; 63 uint16* td_sampleinfo; 64 tstrip_t td_stripsperimage; 65 tstrip_t td_nstrips; /* size of offset & bytecount arrays */ 66 uint32* td_stripoffset; 67 uint32* td_stripbytecount; 68 int td_stripbytecountsorted; /* is the bytecount array sorted ascending? */ 69 uint16 td_nsubifd; 70 uint32* td_subifd; 71 /* YCbCr parameters */ 72 uint16 td_ycbcrsubsampling[2]; 73 uint16 td_ycbcrpositioning; 74 /* Colorimetry parameters */ 75 uint16* td_transferfunction[3]; 76 /* CMYK parameters */ 77 int td_inknameslen; 78 char* td_inknames; 79 80 int td_customValueCount; 81 TIFFTagValue *td_customValues; 82 } TIFFDirectory; 83 84 /* 85 * Field flags used to indicate fields that have 86 * been set in a directory, and to reference fields 87 * when manipulating a directory. 88 */ 89 90 /* 91 * FIELD_IGNORE is used to signify tags that are to 92 * be processed but otherwise ignored. This permits 93 * antiquated tags to be quietly read and discarded. 94 * Note that a bit *is* allocated for ignored tags; 95 * this is understood by the directory reading logic 96 * which uses this fact to avoid special-case handling 97 */ 98 #define FIELD_IGNORE 0 99 100 /* multi-item fields */ 101 #define FIELD_IMAGEDIMENSIONS 1 102 #define FIELD_TILEDIMENSIONS 2 103 #define FIELD_RESOLUTION 3 104 #define FIELD_POSITION 4 105 106 /* single-item fields */ 107 #define FIELD_SUBFILETYPE 5 108 #define FIELD_BITSPERSAMPLE 6 109 #define FIELD_COMPRESSION 7 110 #define FIELD_PHOTOMETRIC 8 111 #define FIELD_THRESHHOLDING 9 112 #define FIELD_FILLORDER 10 113 #define FIELD_ORIENTATION 15 114 #define FIELD_SAMPLESPERPIXEL 16 115 #define FIELD_ROWSPERSTRIP 17 116 #define FIELD_MINSAMPLEVALUE 18 117 #define FIELD_MAXSAMPLEVALUE 19 118 #define FIELD_PLANARCONFIG 20 119 #define FIELD_RESOLUTIONUNIT 22 120 #define FIELD_PAGENUMBER 23 121 #define FIELD_STRIPBYTECOUNTS 24 122 #define FIELD_STRIPOFFSETS 25 123 #define FIELD_COLORMAP 26 124 #define FIELD_EXTRASAMPLES 31 125 #define FIELD_SAMPLEFORMAT 32 126 #define FIELD_SMINSAMPLEVALUE 33 127 #define FIELD_SMAXSAMPLEVALUE 34 128 #define FIELD_IMAGEDEPTH 35 129 #define FIELD_TILEDEPTH 36 130 #define FIELD_HALFTONEHINTS 37 131 #define FIELD_YCBCRSUBSAMPLING 39 132 #define FIELD_YCBCRPOSITIONING 40 133 #define FIELD_TRANSFERFUNCTION 44 134 #define FIELD_INKNAMES 46 135 #define FIELD_SUBIFD 49 136 /* FIELD_CUSTOM (see tiffio.h) 65 */ 137 /* end of support for well-known tags; codec-private tags follow */ 138 #define FIELD_CODEC 66 /* base of codec-private tags */ 139 140 141 /* 142 * Pseudo-tags don't normally need field bits since they 143 * are not written to an output file (by definition). 144 * The library also has express logic to always query a 145 * codec for a pseudo-tag so allocating a field bit for 146 * one is a waste. If codec wants to promote the notion 147 * of a pseudo-tag being ``set'' or ``unset'' then it can 148 * do using internal state flags without polluting the 149 * field bit space defined for real tags. 150 */ 151 #define FIELD_PSEUDO 0 152 153 #define FIELD_LAST (32*FIELD_SETLONGS-1) 154 155 #define TIFFExtractData(tif, type, v) \ 156 ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \ 157 ((v) >> (tif)->tif_typeshift[type]) & (tif)->tif_typemask[type] : \ 158 (v) & (tif)->tif_typemask[type])) 159 #define TIFFInsertData(tif, type, v) \ 160 ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \ 161 ((v) & (tif)->tif_typemask[type]) << (tif)->tif_typeshift[type] : \ 162 (v) & (tif)->tif_typemask[type])) 163 164 165 #define BITn(n) (((unsigned long)1L)<<((n)&0x1f)) 166 #define BITFIELDn(tif, n) ((tif)->tif_dir.td_fieldsset[(n)/32]) 167 #define TIFFFieldSet(tif, field) (BITFIELDn(tif, field) & BITn(field)) 168 #define TIFFSetFieldBit(tif, field) (BITFIELDn(tif, field) |= BITn(field)) 169 #define TIFFClrFieldBit(tif, field) (BITFIELDn(tif, field) &= ~BITn(field)) 170 171 #define FieldSet(fields, f) (fields[(f)/32] & BITn(f)) 172 #define ResetFieldBit(fields, f) (fields[(f)/32] &= ~BITn(f)) 173 174 #if defined(__cplusplus) 175 extern "C" { 176 #endif 177 extern const TIFFFieldInfo *_TIFFGetFieldInfo(size_t *); 178 extern const TIFFFieldInfo *_TIFFGetExifFieldInfo(size_t *); 179 extern void _TIFFSetupFieldInfo(TIFF*, const TIFFFieldInfo[], size_t); 180 extern void _TIFFPrintFieldInfo(TIFF*, FILE*); 181 extern TIFFDataType _TIFFSampleToTagType(TIFF*); 182 extern const TIFFFieldInfo* _TIFFFindOrRegisterFieldInfo( TIFF *tif, 183 ttag_t tag, 184 TIFFDataType dt ); 185 extern TIFFFieldInfo* _TIFFCreateAnonFieldInfo( TIFF *tif, ttag_t tag, 186 TIFFDataType dt ); 187 188 #define _TIFFMergeFieldInfo vtk_TIFFMergeFieldInfo 189 #define _TIFFFindFieldInfo vtk_TIFFFindFieldInfo 190 #define _TIFFFindFieldInfoByName vtk_TIFFFindFieldInfoByName 191 #define _TIFFFieldWithTag vtk_TIFFFieldWithTag 192 #define _TIFFFieldWithName vtk_TIFFFieldWithName 193 194 #if defined(__cplusplus) 195 } 196 #endif 197 #endif /* _TIFFDIR_ */ 198 199 /* vim: set ts=8 sts=8 sw=8 noet: */ 200