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  3 
  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
; 
 116  * Field flags used to indicate fields that have 
 117  * been set in a directory, and to reference fields 
 118  * when manipulating a directory. 
 122  * FIELD_IGNORE is used to signify tags that are to 
 123  * be processed but otherwise ignored.  This permits 
 124  * antiquated tags to be quietly read and discarded. 
 125  * Note that a bit *is* allocated for ignored tags; 
 126  * this is understood by the directory reading logic 
 127  * which uses this fact to avoid special-case handling 
 129 #define FIELD_IGNORE                    0 
 131 /* multi-item fields */ 
 132 #define FIELD_IMAGEDIMENSIONS           1 
 133 #define FIELD_TILEDIMENSIONS            2 
 134 #define FIELD_RESOLUTION                3 
 135 #define FIELD_POSITION                  4 
 137 /* single-item fields */ 
 138 #define FIELD_SUBFILETYPE               5 
 139 #define FIELD_BITSPERSAMPLE             6 
 140 #define FIELD_COMPRESSION               7 
 141 #define FIELD_PHOTOMETRIC               8 
 142 #define FIELD_THRESHHOLDING             9 
 143 #define FIELD_FILLORDER                 10 
 144 #define FIELD_DOCUMENTNAME              11 
 145 #define FIELD_IMAGEDESCRIPTION          12 
 146 #define FIELD_MAKE                      13 
 147 #define FIELD_MODEL                     14 
 148 #define FIELD_ORIENTATION               15 
 149 #define FIELD_SAMPLESPERPIXEL           16 
 150 #define FIELD_ROWSPERSTRIP              17 
 151 #define FIELD_MINSAMPLEVALUE            18 
 152 #define FIELD_MAXSAMPLEVALUE            19 
 153 #define FIELD_PLANARCONFIG              20 
 154 #define FIELD_PAGENAME                  21 
 155 #define FIELD_RESOLUTIONUNIT            22 
 156 #define FIELD_PAGENUMBER                23 
 157 #define FIELD_STRIPBYTECOUNTS           24 
 158 #define FIELD_STRIPOFFSETS              25 
 159 #define FIELD_COLORMAP                  26 
 160 #define FIELD_ARTIST                    27 
 161 #define FIELD_DATETIME                  28 
 162 #define FIELD_HOSTCOMPUTER              29 
 163 #define FIELD_SOFTWARE                  30 
 164 #define FIELD_EXTRASAMPLES              31 
 165 #define FIELD_SAMPLEFORMAT              32 
 166 #define FIELD_SMINSAMPLEVALUE           33 
 167 #define FIELD_SMAXSAMPLEVALUE           34 
 168 #define FIELD_IMAGEDEPTH                35 
 169 #define FIELD_TILEDEPTH                 36 
 170 #define FIELD_HALFTONEHINTS             37 
 171 #define FIELD_YCBCRCOEFFICIENTS         38 
 172 #define FIELD_YCBCRSUBSAMPLING          39 
 173 #define FIELD_YCBCRPOSITIONING          40 
 174 #define FIELD_REFBLACKWHITE             41 
 175 #define FIELD_WHITEPOINT                42 
 176 #define FIELD_PRIMARYCHROMAS            43 
 177 #define FIELD_TRANSFERFUNCTION          44 
 178 #define FIELD_INKSET                    45 
 179 #define FIELD_INKNAMES                  46 
 180 #define FIELD_DOTRANGE                  47 
 181 #define FIELD_TARGETPRINTER             48 
 182 #define FIELD_SUBIFD                    49 
 183 #define FIELD_NUMBEROFINKS              50 
 184 #define FIELD_ICCPROFILE                51 
 185 #define FIELD_PHOTOSHOP                 52 
 186 #define FIELD_RICHTIFFIPTC              53 
 187 #define FIELD_STONITS                   54 
 188 /* end of support for well-known tags; codec-private tags follow */ 
 189 #define FIELD_CODEC                     55      /* base of codec-private tags */ 
 191  * Pseudo-tags don't normally need field bits since they 
 192  * are not written to an output file (by definition). 
 193  * The library also has express logic to always query a 
 194  * codec for a pseudo-tag so allocating a field bit for 
 195  * one is a waste.   If codec wants to promote the notion 
 196  * of a pseudo-tag being ``set'' or ``unset'' then it can 
 197  * do using internal state flags without polluting the 
 198  * field bit space defined for real tags. 
 200 #define FIELD_PSEUDO                    0 
 202 #define FIELD_LAST                      (32*FIELD_SETLONGS-1) 
 204 #define TIFFExtractData(tif, type, v) \ 
 205     ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \ 
 206         ((v) >> (tif)->tif_typeshift[type]) & (tif)->tif_typemask[type] : \ 
 207         (v) & (tif)->tif_typemask[type])) 
 208 #define TIFFInsertData(tif, type, v) \ 
 209     ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \ 
 210         ((v) & (tif)->tif_typemask[type]) << (tif)->tif_typeshift[type] : \ 
 211         (v) & (tif)->tif_typemask[type])) 
 214         ttag_t  field_tag
;              /* field's tag */ 
 215         short   field_readcount
;        /* read count/TIFF_VARIABLE/TIFF_SPP */ 
 216         short   field_writecount
;       /* write count/TIFF_VARIABLE */ 
 217         TIFFDataType field_type
;        /* type of associated data */ 
 218         u_short field_bit
;              /* bit in fieldsset bit vector */ 
 219         u_char  field_oktochange
;       /* if true, can change while writing */ 
 220         u_char  field_passcount
;        /* if true, pass dir count on set */ 
 221         char    *field_name
;            /* ASCII name */ 
 224 #define TIFF_ANY        TIFF_NOTYPE     /* for field descriptor searching */ 
 225 #define TIFF_VARIABLE   -1              /* marker for variable length tags */ 
 226 #define TIFF_SPP        -2              /* marker for SamplesPerPixel tags */ 
 227 #define TIFF_VARIABLE2  -3              /* marker for uint32 var-length tags */ 
 229 extern  const int tiffDataWidth
[];      /* table of tag datatype widths */ 
 231 #define BITn(n)                         (((u_long)1L)<<((n)&0x1f))  
 232 #define BITFIELDn(tif, n)               ((tif)->tif_dir.td_fieldsset[(n)/32])  
 233 #define TIFFFieldSet(tif, field)        (BITFIELDn(tif, field) & BITn(field))  
 234 #define TIFFSetFieldBit(tif, field)     (BITFIELDn(tif, field) |= BITn(field)) 
 235 #define TIFFClrFieldBit(tif, field)     (BITFIELDn(tif, field) &= ~BITn(field)) 
 237 #define FieldSet(fields, f)             (fields[(f)/32] & BITn(f)) 
 238 #define ResetFieldBit(fields, f)        (fields[(f)/32] &= ~BITn(f)) 
 240 #if defined(__cplusplus) 
 243 extern  void _TIFFSetupFieldInfo(TIFF
*); 
 244 extern  void _TIFFMergeFieldInfo(TIFF
*, const TIFFFieldInfo
[], int); 
 245 extern  void _TIFFPrintFieldInfo(TIFF
*, FILE*); 
 246 extern  const TIFFFieldInfo
* _TIFFFindFieldInfo(TIFF
*, ttag_t
, TIFFDataType
); 
 247 extern  const TIFFFieldInfo
* _TIFFFieldWithTag(TIFF
*, ttag_t
); 
 248 extern  TIFFDataType 
_TIFFSampleToTagType(TIFF
*); 
 249 #if defined(__cplusplus) 
 252 #endif /* _TIFFDIR_ */