4  * Copyright (c) 1988-1997 Sam Leffler 
   5  * Copyright (c) 1991-1997 Silicon Graphics, Inc. 
   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. 
  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.   
  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  
  30  * ``Library-private'' Directory-related Definitions. 
  34  * Internal format of a TIFF directory entry. 
  37 #define FIELD_SETLONGS  4 
  38         /* bit vector of fields that are set */ 
  39         u_long  td_fieldsset
[FIELD_SETLONGS
]; 
  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
; 
  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
; 
  65         char*   td_documentname
; 
  68         char*   td_hostcomputer
; 
  69         char*   td_imagedescription
; 
  74         tstrip_t td_stripsperimage
; 
  75         tstrip_t td_nstrips
;            /* size of offset & bytecount arrays */ 
  76         uint32
* td_stripoffset
; 
  77         uint32
* td_stripbytecount
; 
  83         float*  td_ycbcrcoeffs
; 
  84         uint16  td_ycbcrsubsampling
[2]; 
  85         uint16  td_ycbcrpositioning
; 
  87 #ifdef COLORIMETRY_SUPPORT 
  89         float*  td_primarychromas
; 
  90         float*  td_refblackwhite
; 
  91         uint16
* td_transferfunction
[3]; 
  96         uint16  td_dotrange
[2]; 
  99         char*   td_targetprinter
; 
 102         uint32  td_profileLength
; 
 103         void    *td_profileData
; 
 105 #ifdef PHOTOSHOP_SUPPORT 
 106         uint32  td_photoshopLength
; 
 107         void    *td_photoshopData
; 
 110         uint32  td_richtiffiptcLength
; 
 111         void    *td_richtiffiptcData
; 
 113         /* Begin Pixar Tag values. */ 
 114         uint32  td_imagefullwidth
, td_imagefulllength
; 
 115         char*   td_textureformat
; 
 118         float*  td_matrixWorldToScreen
; 
 119         float*  td_matrixWorldToCamera
; 
 120         /* End Pixar Tag Values. */ 
 121         uint32  td_xmlpacketLength
; 
 122         void    *td_xmlpacketData
; 
 123                 int     td_customValueCount
; 
 124         TIFFTagValue 
*td_customValues
; 
 128  * Field flags used to indicate fields that have 
 129  * been set in a directory, and to reference fields 
 130  * when manipulating a directory. 
 134  * FIELD_IGNORE is used to signify tags that are to 
 135  * be processed but otherwise ignored.  This permits 
 136  * antiquated tags to be quietly read and discarded. 
 137  * Note that a bit *is* allocated for ignored tags; 
 138  * this is understood by the directory reading logic 
 139  * which uses this fact to avoid special-case handling 
 141 #define FIELD_IGNORE                    0 
 143 /* multi-item fields */ 
 144 #define FIELD_IMAGEDIMENSIONS           1 
 145 #define FIELD_TILEDIMENSIONS            2 
 146 #define FIELD_RESOLUTION                3 
 147 #define FIELD_POSITION                  4 
 149 /* single-item fields */ 
 150 #define FIELD_SUBFILETYPE               5 
 151 #define FIELD_BITSPERSAMPLE             6 
 152 #define FIELD_COMPRESSION               7 
 153 #define FIELD_PHOTOMETRIC               8 
 154 #define FIELD_THRESHHOLDING             9 
 155 #define FIELD_FILLORDER                 10 
 156 #define FIELD_DOCUMENTNAME              11 
 157 #define FIELD_IMAGEDESCRIPTION          12 
 158 #define FIELD_MAKE                      13 
 159 #define FIELD_MODEL                     14 
 160 #define FIELD_ORIENTATION               15 
 161 #define FIELD_SAMPLESPERPIXEL           16 
 162 #define FIELD_ROWSPERSTRIP              17 
 163 #define FIELD_MINSAMPLEVALUE            18 
 164 #define FIELD_MAXSAMPLEVALUE            19 
 165 #define FIELD_PLANARCONFIG              20 
 166 #define FIELD_PAGENAME                  21 
 167 #define FIELD_RESOLUTIONUNIT            22 
 168 #define FIELD_PAGENUMBER                23 
 169 #define FIELD_STRIPBYTECOUNTS           24 
 170 #define FIELD_STRIPOFFSETS              25 
 171 #define FIELD_COLORMAP                  26 
 172 #define FIELD_ARTIST                    27 
 173 #define FIELD_DATETIME                  28 
 174 #define FIELD_HOSTCOMPUTER              29 
 175 /* unused - was FIELD_SOFTWARE          30 */ 
 176 #define FIELD_EXTRASAMPLES              31 
 177 #define FIELD_SAMPLEFORMAT              32 
 178 #define FIELD_SMINSAMPLEVALUE           33 
 179 #define FIELD_SMAXSAMPLEVALUE           34 
 180 #define FIELD_IMAGEDEPTH                35 
 181 #define FIELD_TILEDEPTH                 36 
 182 #define FIELD_HALFTONEHINTS             37 
 183 #define FIELD_YCBCRCOEFFICIENTS         38 
 184 #define FIELD_YCBCRSUBSAMPLING          39 
 185 #define FIELD_YCBCRPOSITIONING          40 
 186 #define FIELD_REFBLACKWHITE             41 
 187 #define FIELD_WHITEPOINT                42 
 188 #define FIELD_PRIMARYCHROMAS            43 
 189 #define FIELD_TRANSFERFUNCTION          44 
 190 #define FIELD_INKSET                    45 
 191 #define FIELD_INKNAMES                  46 
 192 #define FIELD_DOTRANGE                  47 
 193 #define FIELD_TARGETPRINTER             48 
 194 #define FIELD_SUBIFD                    49 
 195 #define FIELD_NUMBEROFINKS              50 
 196 #define FIELD_ICCPROFILE                51 
 197 #define FIELD_PHOTOSHOP                 52 
 198 #define FIELD_RICHTIFFIPTC              53 
 199 #define FIELD_STONITS                   54 
 201 #define FIELD_IMAGEFULLWIDTH            55 
 202 #define FIELD_IMAGEFULLLENGTH           56 
 203 #define FIELD_TEXTUREFORMAT             57 
 204 #define FIELD_WRAPMODES                 58 
 205 #define FIELD_FOVCOT                    59 
 206 #define FIELD_MATRIX_WORLDTOSCREEN      60 
 207 #define FIELD_MATRIX_WORLDTOCAMERA      61 
 208 #define FIELD_COPYRIGHT                 62 
 209 #define FIELD_XMLPACKET                 63 
 210 /*      FIELD_CUSTOM (see tiffio.h)     65 */ 
 211 /* end of support for well-known tags; codec-private tags follow */ 
 212 #define FIELD_CODEC                     66      /* base of codec-private tags */ 
 216  * Pseudo-tags don't normally need field bits since they 
 217  * are not written to an output file (by definition). 
 218  * The library also has express logic to always query a 
 219  * codec for a pseudo-tag so allocating a field bit for 
 220  * one is a waste.   If codec wants to promote the notion 
 221  * of a pseudo-tag being ``set'' or ``unset'' then it can 
 222  * do using internal state flags without polluting the 
 223  * field bit space defined for real tags. 
 225 #define FIELD_PSEUDO                    0 
 227 #define FIELD_LAST                      (32*FIELD_SETLONGS-1) 
 229 #define TIFFExtractData(tif, type, v) \ 
 230     ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \ 
 231         ((v) >> (tif)->tif_typeshift[type]) & (tif)->tif_typemask[type] : \ 
 232         (v) & (tif)->tif_typemask[type])) 
 233 #define TIFFInsertData(tif, type, v) \ 
 234     ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \ 
 235         ((v) & (tif)->tif_typemask[type]) << (tif)->tif_typeshift[type] : \ 
 236         (v) & (tif)->tif_typemask[type])) 
 239 #define BITn(n)                         (((u_long)1L)<<((n)&0x1f))  
 240 #define BITFIELDn(tif, n)               ((tif)->tif_dir.td_fieldsset[(n)/32])  
 241 #define TIFFFieldSet(tif, field)        (BITFIELDn(tif, field) & BITn(field))  
 242 #define TIFFSetFieldBit(tif, field)     (BITFIELDn(tif, field) |= BITn(field)) 
 243 #define TIFFClrFieldBit(tif, field)     (BITFIELDn(tif, field) &= ~BITn(field)) 
 245 #define FieldSet(fields, f)             (fields[(f)/32] & BITn(f)) 
 246 #define ResetFieldBit(fields, f)        (fields[(f)/32] &= ~BITn(f)) 
 248 #if defined(__cplusplus) 
 251 extern  void _TIFFSetupFieldInfo(TIFF
*); 
 252 extern  void _TIFFPrintFieldInfo(TIFF
*, FILE*); 
 253 extern  TIFFDataType 
_TIFFSampleToTagType(TIFF
*); 
 254 extern  const TIFFFieldInfo
* _TIFFFindOrRegisterFieldInfo( TIFF 
*tif
, 
 257 extern  TIFFFieldInfo
* _TIFFCreateAnonFieldInfo( TIFF 
*tif
, ttag_t tag
, 
 260 #define _TIFFMergeFieldInfo TIFFMergeFieldInfo 
 261 #define _TIFFFindFieldInfo  TIFFFindFieldInfo 
 262 #define _TIFFFieldWithTag   TIFFFieldWithTag 
 264 #if defined(__cplusplus) 
 267 #endif /* _TIFFDIR_ */