2010-05-12 01:44:00 +08:00
/*
* Copyright ( c ) 1988 - 1997 Sam Leffler
* Copyright ( c ) 1991 - 1997 Silicon Graphics , Inc .
*
2012-02-29 23:01:28 +08:00
* Permission to use , copy , modify , distribute , and sell this software and
2010-05-12 01:44:00 +08:00
* its documentation for any purpose is hereby granted without fee , provided
* that ( i ) the above copyright notices and this permission notice appear in
* all copies of the software and related documentation , and ( ii ) the names of
* Sam Leffler and Silicon Graphics may not be used in any advertising or
* publicity relating to the software without the specific , prior written
* permission of Sam Leffler and Silicon Graphics .
2012-02-29 23:01:28 +08:00
*
* THE SOFTWARE IS PROVIDED " AS-IS " AND WITHOUT WARRANTY OF ANY KIND ,
* EXPRESS , IMPLIED OR OTHERWISE , INCLUDING WITHOUT LIMITATION , ANY
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE .
*
2010-05-12 01:44:00 +08:00
* IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
* ANY SPECIAL , INCIDENTAL , INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND ,
* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE , DATA OR PROFITS ,
2012-02-29 23:01:28 +08:00
* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE , AND ON ANY THEORY OF
* LIABILITY , ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
2010-05-12 01:44:00 +08:00
* OF THIS SOFTWARE .
*/
/*
* TIFF Library .
*
* Core Directory Tag Support .
*/
# include "tiffiop.h"
# include <stdlib.h>
/*
2012-02-29 23:01:28 +08:00
* NOTE : THIS ARRAY IS ASSUMED TO BE SORTED BY TAG .
2010-05-12 01:44:00 +08:00
*
* NOTE : The second field ( field_readcount ) and third field ( field_writecount )
* sometimes use the values TIFF_VARIABLE ( - 1 ) , TIFF_VARIABLE2 ( - 3 )
2017-12-08 20:47:54 +08:00
* and TIFF_SPP ( - 2 ) . The macros should be used but would throw off
* the formatting of the code , so please interpret the - 1 , - 2 and - 3
2010-05-12 01:44:00 +08:00
* values accordingly .
*/
2012-02-29 23:01:28 +08:00
2017-12-08 20:47:54 +08:00
/* const object should be initialized */
# ifdef _MSC_VER
2024-03-22 09:08:16 +08:00
# pragma warning(push)
# pragma warning(disable : 4132)
2017-12-08 20:47:54 +08:00
# endif
static const TIFFFieldArray tiffFieldArray ;
static const TIFFFieldArray exifFieldArray ;
2021-03-02 07:17:30 +08:00
static const TIFFFieldArray gpsFieldArray ;
2017-12-08 20:47:54 +08:00
# ifdef _MSC_VER
2024-03-22 09:08:16 +08:00
# pragma warning(pop)
2017-12-08 20:47:54 +08:00
# endif
2021-03-02 07:17:30 +08:00
/*--: Rational2Double: --
2024-03-22 09:08:16 +08:00
* The Rational2Double upgraded libtiff functionality allows the definition and
* achievement of true double - precision accuracy for TIFF tags of RATIONAL type
* and field_bit = FIELD_CUSTOM using the set_field_type = TIFF_SETGET_DOUBLE .
2021-03-02 07:17:30 +08:00
* Unfortunately , that changes the old implemented interface for TIFFGetField ( ) .
2024-03-22 09:08:16 +08:00
* In order to keep the old TIFFGetField ( ) interface behavior those tags have to
* be redefined with set_field_type = TIFF_SETGET_FLOAT !
2021-03-02 07:17:30 +08:00
*
* Rational custom arrays are already defined as _Cxx_FLOAT , thus can stay .
*
*/
2017-12-08 20:47:54 +08:00
2024-03-22 09:08:16 +08:00
/* clang-format off */ /* for better readability of tag comments */
static const TIFFField tiffFields [ ] = {
{ TIFFTAG_SUBFILETYPE , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_SUBFILETYPE , 1 , 0 , " SubfileType " , NULL } ,
{ TIFFTAG_OSUBFILETYPE , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UNDEFINED , TIFF_SETGET_UNDEFINED , FIELD_IGNORE , 1 , 0 , " OldSubfileType " , NULL } ,
{ TIFFTAG_IMAGEWIDTH , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_IMAGEDIMENSIONS , 0 , 0 , " ImageWidth " , NULL } ,
{ TIFFTAG_IMAGELENGTH , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_IMAGEDIMENSIONS , 1 , 0 , " ImageLength " , NULL } ,
{ TIFFTAG_BITSPERSAMPLE , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_BITSPERSAMPLE , 0 , 0 , " BitsPerSample " , NULL } ,
{ TIFFTAG_COMPRESSION , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_COMPRESSION , 0 , 0 , " Compression " , NULL } ,
{ TIFFTAG_PHOTOMETRIC , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_PHOTOMETRIC , 0 , 0 , " PhotometricInterpretation " , NULL } ,
{ TIFFTAG_THRESHHOLDING , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_THRESHHOLDING , 1 , 0 , " Threshholding " , NULL } ,
{ TIFFTAG_CELLWIDTH , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " CellWidth " , NULL } ,
{ TIFFTAG_CELLLENGTH , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " CellLength " , NULL } ,
{ TIFFTAG_FILLORDER , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_FILLORDER , 0 , 0 , " FillOrder " , NULL } ,
{ TIFFTAG_DOCUMENTNAME , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DocumentName " , NULL } ,
{ TIFFTAG_IMAGEDESCRIPTION , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ImageDescription " , NULL } ,
{ TIFFTAG_MAKE , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Make " , NULL } ,
{ TIFFTAG_MODEL , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Model " , NULL } ,
{ TIFFTAG_STRIPOFFSETS , - 1 , - 1 , TIFF_LONG8 , 0 , TIFF_SETGET_UNDEFINED , TIFF_SETGET_UNDEFINED , FIELD_STRIPOFFSETS , 0 , 0 , " StripOffsets " , NULL } ,
{ TIFFTAG_ORIENTATION , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_ORIENTATION , 0 , 0 , " Orientation " , NULL } ,
{ TIFFTAG_SAMPLESPERPIXEL , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_SAMPLESPERPIXEL , 0 , 0 , " SamplesPerPixel " , NULL } ,
{ TIFFTAG_ROWSPERSTRIP , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_ROWSPERSTRIP , 0 , 0 , " RowsPerStrip " , NULL } ,
{ TIFFTAG_STRIPBYTECOUNTS , - 1 , - 1 , TIFF_LONG8 , 0 , TIFF_SETGET_UNDEFINED , TIFF_SETGET_UNDEFINED , FIELD_STRIPBYTECOUNTS , 0 , 0 , " StripByteCounts " , NULL } ,
{ TIFFTAG_MINSAMPLEVALUE , - 2 , - 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_MINSAMPLEVALUE , 1 , 0 , " MinSampleValue " , NULL } ,
{ TIFFTAG_MAXSAMPLEVALUE , - 2 , - 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_MAXSAMPLEVALUE , 1 , 0 , " MaxSampleValue " , NULL } ,
{ TIFFTAG_XRESOLUTION , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_RESOLUTION , 1 , 0 , " XResolution " , NULL } ,
{ TIFFTAG_YRESOLUTION , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_RESOLUTION , 1 , 0 , " YResolution " , NULL } ,
{ TIFFTAG_PLANARCONFIG , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_PLANARCONFIG , 0 , 0 , " PlanarConfiguration " , NULL } ,
{ TIFFTAG_PAGENAME , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " PageName " , NULL } ,
{ TIFFTAG_XPOSITION , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_POSITION , 1 , 0 , " XPosition " , NULL } ,
{ TIFFTAG_YPOSITION , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_POSITION , 1 , 0 , " YPosition " , NULL } ,
{ TIFFTAG_FREEOFFSETS , - 1 , - 1 , TIFF_LONG8 , 0 , TIFF_SETGET_UNDEFINED , TIFF_SETGET_UNDEFINED , FIELD_IGNORE , 0 , 0 , " FreeOffsets " , NULL } ,
{ TIFFTAG_FREEBYTECOUNTS , - 1 , - 1 , TIFF_LONG8 , 0 , TIFF_SETGET_UNDEFINED , TIFF_SETGET_UNDEFINED , FIELD_IGNORE , 0 , 0 , " FreeByteCounts " , NULL } ,
{ TIFFTAG_GRAYRESPONSEUNIT , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UNDEFINED , TIFF_SETGET_UNDEFINED , FIELD_IGNORE , 1 , 0 , " GrayResponseUnit " , NULL } ,
{ TIFFTAG_GRAYRESPONSECURVE , - 1 , - 1 , TIFF_SHORT , 0 , TIFF_SETGET_UNDEFINED , TIFF_SETGET_UNDEFINED , FIELD_IGNORE , 1 , 0 , " GrayResponseCurve " , NULL } ,
{ TIFFTAG_RESOLUTIONUNIT , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_RESOLUTIONUNIT , 1 , 0 , " ResolutionUnit " , NULL } ,
{ TIFFTAG_PAGENUMBER , 2 , 2 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16_PAIR , TIFF_SETGET_UNDEFINED , FIELD_PAGENUMBER , 1 , 0 , " PageNumber " , NULL } ,
{ TIFFTAG_COLORRESPONSEUNIT , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UNDEFINED , TIFF_SETGET_UNDEFINED , FIELD_IGNORE , 1 , 0 , " ColorResponseUnit " , NULL } ,
{ TIFFTAG_TRANSFERFUNCTION , - 1 , - 1 , TIFF_SHORT , 0 , TIFF_SETGET_OTHER , TIFF_SETGET_UNDEFINED , FIELD_TRANSFERFUNCTION , 1 , 0 , " TransferFunction " , NULL } ,
{ TIFFTAG_SOFTWARE , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Software " , NULL } ,
{ TIFFTAG_DATETIME , 20 , 20 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DateTime " , NULL } ,
{ TIFFTAG_ARTIST , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Artist " , NULL } ,
{ TIFFTAG_HOSTCOMPUTER , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " HostComputer " , NULL } ,
{ TIFFTAG_WHITEPOINT , 2 , 2 , TIFF_RATIONAL , 0 , TIFF_SETGET_C0_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " WhitePoint " , NULL } ,
{ TIFFTAG_PRIMARYCHROMATICITIES , 6 , 6 , TIFF_RATIONAL , 0 , TIFF_SETGET_C0_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " PrimaryChromaticities " , NULL } ,
{ TIFFTAG_COLORMAP , - 1 , - 1 , TIFF_SHORT , 0 , TIFF_SETGET_OTHER , TIFF_SETGET_UNDEFINED , FIELD_COLORMAP , 1 , 0 , " ColorMap " , NULL } ,
{ TIFFTAG_HALFTONEHINTS , 2 , 2 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16_PAIR , TIFF_SETGET_UNDEFINED , FIELD_HALFTONEHINTS , 1 , 0 , " HalftoneHints " , NULL } ,
{ TIFFTAG_TILEWIDTH , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_TILEDIMENSIONS , 0 , 0 , " TileWidth " , NULL } ,
{ TIFFTAG_TILELENGTH , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_TILEDIMENSIONS , 0 , 0 , " TileLength " , NULL } ,
{ TIFFTAG_TILEOFFSETS , - 1 , 1 , TIFF_LONG8 , 0 , TIFF_SETGET_UNDEFINED , TIFF_SETGET_UNDEFINED , FIELD_STRIPOFFSETS , 0 , 0 , " TileOffsets " , NULL } ,
{ TIFFTAG_TILEBYTECOUNTS , - 1 , 1 , TIFF_LONG8 , 0 , TIFF_SETGET_UNDEFINED , TIFF_SETGET_UNDEFINED , FIELD_STRIPBYTECOUNTS , 0 , 0 , " TileByteCounts " , NULL } ,
{ TIFFTAG_SUBIFD , - 1 , - 1 , TIFF_IFD8 , 0 , TIFF_SETGET_C16_IFD8 , TIFF_SETGET_UNDEFINED , FIELD_SUBIFD , 1 , 1 , " SubIFD " , ( TIFFFieldArray * ) & tiffFieldArray } ,
{ TIFFTAG_INKSET , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 0 , 0 , " InkSet " , NULL } ,
{ TIFFTAG_INKNAMES , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_C16_ASCII , TIFF_SETGET_UNDEFINED , FIELD_INKNAMES , 1 , 1 , " InkNames " , NULL } ,
{ TIFFTAG_NUMBEROFINKS , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_NUMBEROFINKS , 1 , 0 , " NumberOfInks " , NULL } ,
{ TIFFTAG_DOTRANGE , 2 , 2 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16_PAIR , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 0 , 0 , " DotRange " , NULL } ,
{ TIFFTAG_TARGETPRINTER , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " TargetPrinter " , NULL } ,
{ TIFFTAG_EXTRASAMPLES , - 1 , - 1 , TIFF_SHORT , 0 , TIFF_SETGET_C16_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_EXTRASAMPLES , 0 , 1 , " ExtraSamples " , NULL } ,
{ TIFFTAG_SAMPLEFORMAT , - 1 , - 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_SAMPLEFORMAT , 0 , 0 , " SampleFormat " , NULL } ,
{ TIFFTAG_SMINSAMPLEVALUE , - 2 , - 1 , TIFF_ANY , 0 , TIFF_SETGET_DOUBLE , TIFF_SETGET_UNDEFINED , FIELD_SMINSAMPLEVALUE , 1 , 0 , " SMinSampleValue " , NULL } ,
{ TIFFTAG_SMAXSAMPLEVALUE , - 2 , - 1 , TIFF_ANY , 0 , TIFF_SETGET_DOUBLE , TIFF_SETGET_UNDEFINED , FIELD_SMAXSAMPLEVALUE , 1 , 0 , " SMaxSampleValue " , NULL } ,
{ TIFFTAG_CLIPPATH , - 3 , - 3 , TIFF_BYTE , 0 , TIFF_SETGET_C32_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 0 , 1 , " ClipPath " , NULL } ,
{ TIFFTAG_XCLIPPATHUNITS , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 0 , 0 , " XClipPathUnits " , NULL } ,
{ TIFFTAG_YCLIPPATHUNITS , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 0 , 0 , " YClipPathUnits " , NULL } ,
{ TIFFTAG_YCBCRCOEFFICIENTS , 3 , 3 , TIFF_RATIONAL , 0 , TIFF_SETGET_C0_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 0 , 0 , " YCbCrCoefficients " , NULL } ,
{ TIFFTAG_YCBCRSUBSAMPLING , 2 , 2 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16_PAIR , TIFF_SETGET_UNDEFINED , FIELD_YCBCRSUBSAMPLING , 0 , 0 , " YCbCrSubsampling " , NULL } ,
{ TIFFTAG_YCBCRPOSITIONING , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_YCBCRPOSITIONING , 0 , 0 , " YCbCrPositioning " , NULL } ,
{ TIFFTAG_REFERENCEBLACKWHITE , 6 , 6 , TIFF_RATIONAL , 0 , TIFF_SETGET_C0_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_REFBLACKWHITE , 1 , 0 , " ReferenceBlackWhite " , NULL } ,
{ TIFFTAG_XMLPACKET , - 3 , - 3 , TIFF_BYTE , 0 , TIFF_SETGET_C32_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " XMLPacket " , NULL } ,
/* begin SGI tags */
{ TIFFTAG_MATTEING , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_EXTRASAMPLES , 0 , 0 , " Matteing " , NULL } ,
{ TIFFTAG_DATATYPE , - 2 , - 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_SAMPLEFORMAT , 0 , 0 , " DataType " , NULL } ,
{ TIFFTAG_IMAGEDEPTH , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_IMAGEDEPTH , 0 , 0 , " ImageDepth " , NULL } ,
{ TIFFTAG_TILEDEPTH , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_TILEDEPTH , 0 , 0 , " TileDepth " , NULL } ,
/* end SGI tags */
/* begin Pixar tags */
{ TIFFTAG_PIXAR_IMAGEFULLWIDTH , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ImageFullWidth " , NULL } ,
{ TIFFTAG_PIXAR_IMAGEFULLLENGTH , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ImageFullLength " , NULL } ,
{ TIFFTAG_PIXAR_TEXTUREFORMAT , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " TextureFormat " , NULL } ,
{ TIFFTAG_PIXAR_WRAPMODES , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " TextureWrapModes " , NULL } ,
{ TIFFTAG_PIXAR_FOVCOT , 1 , 1 , TIFF_FLOAT , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " FieldOfViewCotangent " , NULL } ,
{ TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN , 16 , 16 , TIFF_FLOAT , 0 , TIFF_SETGET_C0_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " MatrixWorldToScreen " , NULL } ,
{ TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA , 16 , 16 , TIFF_FLOAT , 0 , TIFF_SETGET_C0_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " MatrixWorldToCamera " , NULL } ,
{ TIFFTAG_COPYRIGHT , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Copyright " , NULL } ,
/* end Pixar tags */
{ TIFFTAG_RICHTIFFIPTC , - 3 , - 3 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C32_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " RichTIFFIPTC " , NULL } ,
{ TIFFTAG_PHOTOSHOP , - 3 , - 3 , TIFF_BYTE , 0 , TIFF_SETGET_C32_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " Photoshop " , NULL } ,
/*--: EXIFIFD and GPSIFD specified as TIFF_LONG by Aware-Systems and not TIFF_IFD8 as in original LibTiff. However, for IFD-like tags,
* libtiff uses the data type TIFF_IFD8 in tiffFields [ ] - tag definition combined with a special handling procedure in order to write either
* a 32 - bit value and the TIFF_IFD type - id into ClassicTIFF files or a 64 - bit value and the TIFF_IFD8 type - id into BigTIFF files . */
{ TIFFTAG_EXIFIFD , 1 , 1 , TIFF_IFD8 , 0 , TIFF_SETGET_IFD8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EXIFIFDOffset " , ( TIFFFieldArray * ) & exifFieldArray } ,
{ TIFFTAG_ICCPROFILE , - 3 , - 3 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C32_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ICC Profile " , NULL } ,
{ TIFFTAG_GPSIFD , 1 , 1 , TIFF_IFD8 , 0 , TIFF_SETGET_IFD8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " GPSIFDOffset " , ( TIFFFieldArray * ) & gpsFieldArray } ,
{ TIFFTAG_FAXRECVPARAMS , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UINT32 , FIELD_CUSTOM , TRUE , FALSE , " FaxRecvParams " , NULL } ,
{ TIFFTAG_FAXSUBADDRESS , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_ASCII , FIELD_CUSTOM , TRUE , FALSE , " FaxSubAddress " , NULL } ,
{ TIFFTAG_FAXRECVTIME , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UINT32 , FIELD_CUSTOM , TRUE , FALSE , " FaxRecvTime " , NULL } ,
{ TIFFTAG_FAXDCS , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_ASCII , FIELD_CUSTOM , TRUE , FALSE , " FaxDcs " , NULL } ,
{ TIFFTAG_STONITS , 1 , 1 , TIFF_DOUBLE , 0 , TIFF_SETGET_DOUBLE , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 0 , 0 , " StoNits " , NULL } ,
{ TIFFTAG_IMAGESOURCEDATA , - 3 , - 3 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C32_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " Adobe Photoshop Document Data Block " , NULL } ,
{ TIFFTAG_INTEROPERABILITYIFD , 1 , 1 , TIFF_IFD8 , 0 , TIFF_SETGET_IFD8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 0 , 0 , " InteroperabilityIFDOffset " , NULL } ,
/* begin DNG tags */
{ TIFFTAG_DNGVERSION , 4 , 4 , TIFF_BYTE , 0 , TIFF_SETGET_C0_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DNGVersion " , NULL } ,
{ TIFFTAG_DNGBACKWARDVERSION , 4 , 4 , TIFF_BYTE , 0 , TIFF_SETGET_C0_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DNGBackwardVersion " , NULL } ,
{ TIFFTAG_UNIQUECAMERAMODEL , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " UniqueCameraModel " , NULL } ,
{ TIFFTAG_LOCALIZEDCAMERAMODEL , - 1 , - 1 , TIFF_BYTE , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " LocalizedCameraModel " , NULL } ,
{ TIFFTAG_CFAPLANECOLOR , - 1 , - 1 , TIFF_BYTE , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " CFAPlaneColor " , NULL } ,
{ TIFFTAG_CFALAYOUT , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " CFALayout " , NULL } ,
{ TIFFTAG_LINEARIZATIONTABLE , - 1 , - 1 , TIFF_SHORT , 0 , TIFF_SETGET_C16_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " LinearizationTable " , NULL } ,
{ TIFFTAG_BLACKLEVELREPEATDIM , 2 , 2 , TIFF_SHORT , 0 , TIFF_SETGET_C0_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " BlackLevelRepeatDim " , NULL } ,
{ TIFFTAG_BLACKLEVEL , - 1 , - 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " BlackLevel " , NULL } ,
{ TIFFTAG_BLACKLEVELDELTAH , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " BlackLevelDeltaH " , NULL } ,
{ TIFFTAG_BLACKLEVELDELTAV , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " BlackLevelDeltaV " , NULL } ,
{ TIFFTAG_WHITELEVEL , - 1 , - 1 , TIFF_LONG , 0 , TIFF_SETGET_C16_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " WhiteLevel " , NULL } ,
{ TIFFTAG_DEFAULTSCALE , 2 , 2 , TIFF_RATIONAL , 0 , TIFF_SETGET_C0_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DefaultScale " , NULL } ,
{ TIFFTAG_BESTQUALITYSCALE , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " BestQualityScale " , NULL } ,
{ TIFFTAG_DEFAULTCROPORIGIN , 2 , 2 , TIFF_RATIONAL , 0 , TIFF_SETGET_C0_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DefaultCropOrigin " , NULL } ,
{ TIFFTAG_DEFAULTCROPSIZE , 2 , 2 , TIFF_RATIONAL , 0 , TIFF_SETGET_C0_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DefaultCropSize " , NULL } ,
{ TIFFTAG_COLORMATRIX1 , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ColorMatrix1 " , NULL } ,
{ TIFFTAG_COLORMATRIX2 , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ColorMatrix2 " , NULL } ,
{ TIFFTAG_CAMERACALIBRATION1 , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " CameraCalibration1 " , NULL } ,
{ TIFFTAG_CAMERACALIBRATION2 , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " CameraCalibration2 " , NULL } ,
{ TIFFTAG_REDUCTIONMATRIX1 , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ReductionMatrix1 " , NULL } ,
{ TIFFTAG_REDUCTIONMATRIX2 , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ReductionMatrix2 " , NULL } ,
{ TIFFTAG_ANALOGBALANCE , - 1 , - 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " AnalogBalance " , NULL } ,
{ TIFFTAG_ASSHOTNEUTRAL , - 1 , - 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " AsShotNeutral " , NULL } ,
{ TIFFTAG_ASSHOTWHITEXY , 2 , 2 , TIFF_RATIONAL , 0 , TIFF_SETGET_C0_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " AsShotWhiteXY " , NULL } ,
{ TIFFTAG_BASELINEEXPOSURE , 1 , 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " BaselineExposure " , NULL } ,
{ TIFFTAG_BASELINENOISE , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " BaselineNoise " , NULL } ,
{ TIFFTAG_BASELINESHARPNESS , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " BaselineSharpness " , NULL } ,
{ TIFFTAG_BAYERGREENSPLIT , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " BayerGreenSplit " , NULL } ,
{ TIFFTAG_LINEARRESPONSELIMIT , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " LinearResponseLimit " , NULL } ,
{ TIFFTAG_CAMERASERIALNUMBER , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " CameraSerialNumber " , NULL } ,
{ TIFFTAG_LENSINFO , 4 , 4 , TIFF_RATIONAL , 0 , TIFF_SETGET_C0_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " LensInfo " , NULL } ,
{ TIFFTAG_CHROMABLURRADIUS , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ChromaBlurRadius " , NULL } ,
{ TIFFTAG_ANTIALIASSTRENGTH , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " AntiAliasStrength " , NULL } ,
{ TIFFTAG_SHADOWSCALE , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ShadowScale " , NULL } ,
{ TIFFTAG_DNGPRIVATEDATA , - 1 , - 1 , TIFF_BYTE , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " DNGPrivateData " , NULL } ,
{ TIFFTAG_MAKERNOTESAFETY , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " MakerNoteSafety " , NULL } ,
{ TIFFTAG_CALIBRATIONILLUMINANT1 , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " CalibrationIlluminant1 " , NULL } ,
{ TIFFTAG_CALIBRATIONILLUMINANT2 , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " CalibrationIlluminant2 " , NULL } ,
{ TIFFTAG_RAWDATAUNIQUEID , 16 , 16 , TIFF_BYTE , 0 , TIFF_SETGET_C0_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " RawDataUniqueID " , NULL } ,
{ TIFFTAG_ORIGINALRAWFILENAME , - 1 , - 1 , TIFF_BYTE , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " OriginalRawFileName " , NULL } ,
{ TIFFTAG_ORIGINALRAWFILEDATA , - 1 , - 1 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " OriginalRawFileData " , NULL } ,
{ TIFFTAG_ACTIVEAREA , 4 , 4 , TIFF_LONG , 0 , TIFF_SETGET_C0_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ActiveArea " , NULL } ,
{ TIFFTAG_MASKEDAREAS , - 1 , - 1 , TIFF_LONG , 0 , TIFF_SETGET_C16_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " MaskedAreas " , NULL } ,
{ TIFFTAG_ASSHOTICCPROFILE , - 1 , - 1 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " AsShotICCProfile " , NULL } ,
{ TIFFTAG_ASSHOTPREPROFILEMATRIX , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " AsShotPreProfileMatrix " , NULL } ,
{ TIFFTAG_CURRENTICCPROFILE , - 1 , - 1 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " CurrentICCProfile " , NULL } ,
{ TIFFTAG_CURRENTPREPROFILEMATRIX , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " CurrentPreProfileMatrix " , NULL } ,
{ TIFFTAG_PERSAMPLE , 0 , 0 , TIFF_SHORT , 0 , TIFF_SETGET_UNDEFINED , TIFF_SETGET_UNDEFINED , FIELD_PSEUDO , TRUE , FALSE , " PerSample " , NULL } ,
#if 0
/* TODO: revert above #if 0 for TIFF 4.6.0 */
/* begin DNG 1.2.0.0 tags */
{ TIFFTAG_COLORIMETRICREFERENCE , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ColorimetricReference " , NULL } ,
{ TIFFTAG_CAMERACALIBRATIONSIGNATURE , - 1 , - 1 , TIFF_BYTE , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " CameraCalibrationSignature " , NULL } ,
{ TIFFTAG_PROFILECALIBRATIONSIGNATURE , - 1 , - 1 , TIFF_BYTE , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ProfileCalibrationSignature " , NULL } ,
{ TIFFTAG_EXTRACAMERAPROFILES , - 1 , - 1 , TIFF_IFD8 , 0 , TIFF_SETGET_C16_IFD8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ExtraCameraProfiles " , NULL } ,
{ TIFFTAG_ASSHOTPROFILENAME , - 1 , - 1 , TIFF_BYTE , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " AsShotProfileName " , NULL } ,
{ TIFFTAG_NOISEREDUCTIONAPPLIED , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " NoiseReductionApplied " , NULL } ,
{ TIFFTAG_PROFILENAME , - 1 , - 1 , TIFF_BYTE , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ProfileName " , NULL } ,
{ TIFFTAG_PROFILEHUESATMAPDIMS , 3 , 3 , TIFF_LONG , 0 , TIFF_SETGET_C0_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ProfileHueSatMapDims " , NULL } ,
{ TIFFTAG_PROFILEHUESATMAPDATA1 , - 1 , - 1 , TIFF_FLOAT , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ProfileHueSatMapData1 " , NULL } ,
{ TIFFTAG_PROFILEHUESATMAPDATA2 , - 1 , - 1 , TIFF_FLOAT , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ProfileHueSatMapData2 " , NULL } ,
{ TIFFTAG_PROFILETONECURVE , - 1 , - 1 , TIFF_FLOAT , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ProfileToneCurve " , NULL } ,
{ TIFFTAG_PROFILEEMBEDPOLICY , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ProfileEmbedPolicy " , NULL } ,
{ TIFFTAG_PROFILECOPYRIGHT , - 1 , - 1 , TIFF_BYTE , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ProfileCopyright " , NULL } ,
{ TIFFTAG_FORWARDMATRIX1 , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ForwardMatrix1 " , NULL } ,
{ TIFFTAG_FORWARDMATRIX2 , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ForwardMatrix2 " , NULL } ,
{ TIFFTAG_PREVIEWAPPLICATIONNAME , - 1 , - 1 , TIFF_BYTE , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " PreviewApplicationName " , NULL } ,
{ TIFFTAG_PREVIEWAPPLICATIONVERSION , - 1 , - 1 , TIFF_BYTE , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " PreviewApplicationVersion " , NULL } ,
{ TIFFTAG_PREVIEWSETTINGSNAME , - 1 , - 1 , TIFF_BYTE , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " PreviewSettingsName " , NULL } ,
{ TIFFTAG_PREVIEWSETTINGSDIGEST , 16 , 16 , TIFF_BYTE , 0 , TIFF_SETGET_C0_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " PreviewSettingsDigest " , NULL } ,
{ TIFFTAG_PREVIEWCOLORSPACE , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " PreviewColorSpace " , NULL } ,
{ TIFFTAG_PREVIEWDATETIME , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " PreviewDateTime " , NULL } ,
{ TIFFTAG_RAWIMAGEDIGEST , 16 , 16 , TIFF_BYTE , 0 , TIFF_SETGET_C0_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " RawImageDigest " , NULL } ,
{ TIFFTAG_ORIGINALRAWFILEDIGEST , 16 , 16 , TIFF_BYTE , 0 , TIFF_SETGET_C0_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " OriginalRawFileDigest " , NULL } ,
{ TIFFTAG_SUBTILEBLOCKSIZE , 2 , 2 , TIFF_LONG , 0 , TIFF_SETGET_C0_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " SubTileBlockSize " , NULL } ,
{ TIFFTAG_ROWINTERLEAVEFACTOR , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " RowInterleaveFactor " , NULL } ,
{ TIFFTAG_PROFILELOOKTABLEDIMS , 3 , 3 , TIFF_LONG , 0 , TIFF_SETGET_C0_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ProfileLookTableDims " , NULL } ,
{ TIFFTAG_PROFILELOOKTABLEDATA , - 1 , - 1 , TIFF_FLOAT , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ProfileLookTableData " , NULL } ,
/* begin DNG 1.3.0.0 tags */
{ TIFFTAG_OPCODELIST1 , - 3 , - 3 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C32_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " OpcodeList1 " , NULL } ,
{ TIFFTAG_OPCODELIST2 , - 3 , - 3 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C32_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " OpcodeList2 " , NULL } ,
{ TIFFTAG_OPCODELIST3 , - 3 , - 3 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C32_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " OpcodeList3 " , NULL } ,
{ TIFFTAG_NOISEPROFILE , - 1 , - 1 , TIFF_DOUBLE , 0 , TIFF_SETGET_C16_DOUBLE , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " NoiseProfile " , NULL } ,
/* begin DNG 1.4.0.0 tags */
{ TIFFTAG_DEFAULTUSERCROP , 4 , 4 , TIFF_RATIONAL , 0 , TIFF_SETGET_C0_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DefaultUserCrop " , NULL } ,
{ TIFFTAG_DEFAULTBLACKRENDER , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DefaultBlackRender " , NULL } ,
{ TIFFTAG_BASELINEEXPOSUREOFFSET , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " BaselineExposureOffset " , NULL } ,
{ TIFFTAG_PROFILELOOKTABLEENCODING , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ProfileLookTableEncoding " , NULL } ,
{ TIFFTAG_PROFILEHUESATMAPENCODING , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ProfileHueSatMapEncoding " , NULL } ,
{ TIFFTAG_ORIGINALDEFAULTFINALSIZE , 2 , 2 , TIFF_LONG , 0 , TIFF_SETGET_C0_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " OriginalDefaultFinalSize " , NULL } ,
{ TIFFTAG_ORIGINALBESTQUALITYFINALSIZE , 2 , 2 , TIFF_LONG , 0 , TIFF_SETGET_C0_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " OriginalBestQualityFinalSize " , NULL } ,
{ TIFFTAG_ORIGINALDEFAULTCROPSIZE , 2 , 2 , TIFF_RATIONAL , 0 , TIFF_SETGET_C0_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " OriginalDefaultCropSize " , NULL } , /* could also be rational */
{ TIFFTAG_NEWRAWIMAGEDIGEST , 16 , 16 , TIFF_BYTE , 0 , TIFF_SETGET_C0_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " NewRawImageDigest " , NULL } ,
{ TIFFTAG_RAWTOPREVIEWGAIN , 1 , 1 , TIFF_DOUBLE , 0 , TIFF_SETGET_DOUBLE , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " RawToPreviewGain " , NULL } ,
/* begin DNG 1.5.0.0 tags */
{ TIFFTAG_DEPTHFORMAT , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DepthFormat " , NULL } ,
{ TIFFTAG_DEPTHNEAR , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DepthNear " , NULL } ,
{ TIFFTAG_DEPTHFAR , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DepthFar " , NULL } ,
{ TIFFTAG_DEPTHUNITS , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DepthUnits " , NULL } ,
{ TIFFTAG_DEPTHMEASURETYPE , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DepthMeasureType " , NULL } ,
{ TIFFTAG_ENHANCEPARAMS , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EnhanceParams " , NULL } ,
/* begin DNG 1.6.0.0 tags */
{ TIFFTAG_PROFILEGAINTABLEMAP , - 3 , - 3 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C32_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ProfileGainTableMap " , NULL } ,
{ TIFFTAG_SEMANTICNAME , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " SemanticName " , NULL } ,
{ TIFFTAG_SEMANTICINSTANCEID , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " SemanticInstanceID " , NULL } ,
{ TIFFTAG_MASKSUBAREA , 4 , 4 , TIFF_LONG , 0 , TIFF_SETGET_C0_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " MaskSubArea " , NULL } ,
{ TIFFTAG_RGBTABLES , - 3 , - 3 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C32_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " RGBTables " , NULL } ,
{ TIFFTAG_CALIBRATIONILLUMINANT3 , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " CalibrationIlluminant3 " , NULL } ,
{ TIFFTAG_COLORMATRIX3 , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ColorMatrix3 " , NULL } ,
{ TIFFTAG_CAMERACALIBRATION3 , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " CameraCalibration3 " , NULL } ,
{ TIFFTAG_REDUCTIONMATRIX3 , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ReductionMatrix3 " , NULL } ,
{ TIFFTAG_PROFILEHUESATMAPDATA3 , - 1 , - 1 , TIFF_FLOAT , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ProfileHueSatMapData3 " , NULL } ,
{ TIFFTAG_FORWARDMATRIX3 , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ForwardMatrix3 " , NULL } ,
{ TIFFTAG_ILLUMINANTDATA1 , - 3 , - 3 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C32_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " IlluminantData1 " , NULL } ,
{ TIFFTAG_ILLUMINANTDATA2 , - 3 , - 3 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C32_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " IlluminantData2 " , NULL } ,
{ TIFFTAG_ILLUMINANTDATA3 , - 3 , - 3 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C32_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " IlluminantData3 " , NULL } ,
/* end DNG tags */
/* begin TIFF/EP tags */
{ TIFFTAG_EP_CFAREPEATPATTERNDIM , 2 , 2 , TIFF_SHORT , 0 , TIFF_SETGET_C0_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP CFARepeatPatternDim " , NULL } ,
{ TIFFTAG_EP_CFAPATTERN , - 1 , - 1 , TIFF_BYTE , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " EP CFAPattern " , NULL } ,
/* TIFFTAG_EP_BATTERYLEVEL can be RATIONAL or ASCII.
* LibTiff defines it as ASCII and converts RATIONAL to an ASCII string . */
{ TIFFTAG_EP_BATTERYLEVEL , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP BatteryLevel " , NULL } ,
{ TIFFTAG_EP_INTERLACE , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP Interlace " , NULL } ,
/* TIFFTAG_EP_IPTC_NAA and TIFFTAG_RICHTIFFIPTC share the same tag number (33723)
* LibTIFF type is UNDEFINED or BYTE , but often times incorrectly specified as LONG , because TIFF / EP ( ISO / DIS 12234 - 2 ) specifies type LONG or ASCII . */
{ TIFFTAG_EP_TIMEZONEOFFSET , - 1 , - 1 , TIFF_SSHORT , 0 , TIFF_SETGET_C16_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " EP TimeZoneOffset " , NULL } ,
{ TIFFTAG_EP_SELFTIMERMODE , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP SelfTimerMode " , NULL } ,
{ TIFFTAG_EP_FLASHENERGY , - 1 , - 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " EP FlashEnergy " , NULL } ,
{ TIFFTAG_EP_SPATIALFREQUENCYRESPONSE , - 3 , - 3 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C32_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " EP SpatialFrequencyResponse " , NULL } ,
{ TIFFTAG_EP_NOISE , - 3 , - 3 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C32_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " EP Noise " , NULL } ,
{ TIFFTAG_EP_FOCALPLANEXRESOLUTION , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP FocalPlaneXResolution " , NULL } ,
{ TIFFTAG_EP_FOCALPLANEYRESOLUTION , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP FocalPlaneYResolution " , NULL } ,
{ TIFFTAG_EP_FOCALPLANERESOLUTIONUNIT , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP FocalPlaneResolutionUnit " , NULL } ,
{ TIFFTAG_EP_IMAGENUMBER , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP ImageNumber " , NULL } , /* or SHORT */
{ TIFFTAG_EP_SECURITYCLASSIFICATION , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP SecurityClassification " , NULL } ,
{ TIFFTAG_EP_IMAGEHISTORY , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP ImageHistory " , NULL } ,
{ TIFFTAG_EP_EXPOSUREINDEX , - 1 , - 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " EP ExposureIndex " , NULL } ,
{ TIFFTAG_EP_STANDARDID , 4 , 4 , TIFF_BYTE , 0 , TIFF_SETGET_C0_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP StandardId " , NULL } ,
{ TIFFTAG_EP_SENSINGMETHOD , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP SensingMethod " , NULL } ,
/* TIFF/EP tags equivalent to EXIF tags, sometimes defined differently. */
{ TIFFTAG_EP_EXPOSURETIME , - 1 , - 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " EP ExposureTime " , NULL } , /*N=1 or 2 */
{ TIFFTAG_EP_FNUMBER , - 1 , - 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " EP FNumber " , NULL } ,
{ TIFFTAG_EP_EXPOSUREPROGRAM , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP ExposureProgram " , NULL } ,
{ TIFFTAG_EP_SPECTRALSENSITIVITY , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP SpectralSensitivity " , NULL } ,
{ TIFFTAG_EP_ISOSPEEDRATINGS , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP ISOSpeedRatings " , NULL } ,
{ TIFFTAG_EP_OECF , - 3 , - 3 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C32_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " EP OptoelectricConversionFactor " , NULL } ,
{ TIFFTAG_EP_DATETIMEORIGINAL , 20 , 20 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP DateTimeOriginal " , NULL } ,
{ TIFFTAG_EP_COMPRESSEDBITSPERPIXEL , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP CompressedBitsPerPixel " , NULL } ,
{ TIFFTAG_EP_SHUTTERSPEEDVALUE , 1 , 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP ShutterSpeedValue " , NULL } ,
{ TIFFTAG_EP_APERTUREVALUE , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP ApertureValue " , NULL } ,
{ TIFFTAG_EP_BRIGHTNESSVALUE , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " EP BrightnessValue " , NULL } ,
{ TIFFTAG_EP_EXPOSUREBIASVALUE , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " EP ExposureBiasValue " , NULL } , /*N=1 or 2 */
{ TIFFTAG_EP_MAXAPERTUREVALUE , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP MaxApertureValue " , NULL } ,
{ TIFFTAG_EP_SUBJECTDISTANCE , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " EP SubjectDistance " , NULL } ,
{ TIFFTAG_EP_METERINGMODE , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP MeteringMode " , NULL } ,
{ TIFFTAG_EP_LIGHTSOURCE , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP LightSource " , NULL } ,
{ TIFFTAG_EP_FLASH , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " EP Flash " , NULL } ,
{ TIFFTAG_EP_FOCALLENGTH , - 1 , - 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " EP FocalLength " , NULL } ,
{ TIFFTAG_EP_SUBJECTLOCATION , - 1 , - 1 , TIFF_SHORT , 0 , TIFF_SETGET_C16_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " EP SubjectLocation " , NULL } ,
/* end TIFF/EP tags */
# endif
/* begin TIFF/FX tags */
{ TIFFTAG_INDEXED , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Indexed " , NULL } ,
{ TIFFTAG_GLOBALPARAMETERSIFD , 1 , 1 , TIFF_IFD8 , 0 , TIFF_SETGET_IFD8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " GlobalParametersIFD " , NULL } ,
{ TIFFTAG_PROFILETYPE , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ProfileType " , NULL } ,
{ TIFFTAG_FAXPROFILE , 1 , 1 , TIFF_BYTE , 0 , TIFF_SETGET_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " FaxProfile " , NULL } ,
{ TIFFTAG_CODINGMETHODS , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " CodingMethods " , NULL } ,
{ TIFFTAG_VERSIONYEAR , 4 , 4 , TIFF_BYTE , 0 , TIFF_SETGET_C0_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " VersionYear " , NULL } ,
{ TIFFTAG_MODENUMBER , 1 , 1 , TIFF_BYTE , 0 , TIFF_SETGET_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ModeNumber " , NULL } ,
{ TIFFTAG_DECODE , - 1 , - 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_C16_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " Decode " , NULL } ,
{ TIFFTAG_IMAGEBASECOLOR , - 1 , - 1 , TIFF_SHORT , 0 , TIFF_SETGET_C16_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ImageBaseColor " , NULL } ,
{ TIFFTAG_T82OPTIONS , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " T82Options " , NULL } ,
{ TIFFTAG_STRIPROWCOUNTS , - 1 , - 1 , TIFF_LONG , 0 , TIFF_SETGET_C16_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " StripRowCounts " , NULL } ,
{ TIFFTAG_IMAGELAYER , 2 , 2 , TIFF_LONG , 0 , TIFF_SETGET_C0_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ImageLayer " , NULL } ,
/* end TIFF/FX tags */
/* begin pseudo tags */
2010-05-12 01:44:00 +08:00
} ;
2010-07-16 20:54:53 +08:00
2021-03-02 07:17:30 +08:00
/*
* EXIF tags ( Version 2.31 , July 2016 plus version 2.32 May 2019 )
*/
2024-03-22 09:08:16 +08:00
static const TIFFField exifFields [ ] = {
{ EXIFTAG_EXPOSURETIME , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ExposureTime " , NULL } ,
{ EXIFTAG_FNUMBER , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " FNumber " , NULL } ,
{ EXIFTAG_EXPOSUREPROGRAM , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ExposureProgram " , NULL } ,
{ EXIFTAG_SPECTRALSENSITIVITY , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " SpectralSensitivity " , NULL } ,
/* After EXIF 2.2.1 ISOSpeedRatings is named PhotographicSensitivity. In addition, while "Count=Any", only 1 count should be used. */
{ EXIFTAG_ISOSPEEDRATINGS , - 1 , - 1 , TIFF_SHORT , 0 , TIFF_SETGET_C16_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ISOSpeedRatings " , NULL } ,
{ EXIFTAG_OECF , - 1 , - 1 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " OptoelectricConversionFactor " , NULL } ,
{ EXIFTAG_SENSITIVITYTYPE , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " SensitivityType " , NULL } ,
{ EXIFTAG_STANDARDOUTPUTSENSITIVITY , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " StandardOutputSensitivity " , NULL } ,
{ EXIFTAG_RECOMMENDEDEXPOSUREINDEX , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " RecommendedExposureIndex " , NULL } ,
{ EXIFTAG_ISOSPEED , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ISOSpeed " , NULL } ,
{ EXIFTAG_ISOSPEEDLATITUDEYYY , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ISOSpeedLatitudeyyy " , NULL } ,
{ EXIFTAG_ISOSPEEDLATITUDEZZZ , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ISOSpeedLatitudezzz " , NULL } ,
{ EXIFTAG_EXIFVERSION , 4 , 4 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C0_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ExifVersion " , NULL } ,
{ EXIFTAG_DATETIMEORIGINAL , 20 , 20 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DateTimeOriginal " , NULL } ,
{ EXIFTAG_DATETIMEDIGITIZED , 20 , 20 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DateTimeDigitized " , NULL } ,
{ EXIFTAG_OFFSETTIME , 7 , 7 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " OffsetTime " , NULL } ,
{ EXIFTAG_OFFSETTIMEORIGINAL , 7 , 7 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " OffsetTimeOriginal " , NULL } ,
{ EXIFTAG_OFFSETTIMEDIGITIZED , 7 , 7 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " OffsetTimeDigitized " , NULL } ,
{ EXIFTAG_COMPONENTSCONFIGURATION , 4 , 4 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C0_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ComponentsConfiguration " , NULL } ,
{ EXIFTAG_COMPRESSEDBITSPERPIXEL , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " CompressedBitsPerPixel " , NULL } ,
{ EXIFTAG_SHUTTERSPEEDVALUE , 1 , 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ShutterSpeedValue " , NULL } ,
{ EXIFTAG_APERTUREVALUE , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ApertureValue " , NULL } ,
{ EXIFTAG_BRIGHTNESSVALUE , 1 , 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " BrightnessValue " , NULL } ,
{ EXIFTAG_EXPOSUREBIASVALUE , 1 , 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ExposureBiasValue " , NULL } ,
{ EXIFTAG_MAXAPERTUREVALUE , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " MaxApertureValue " , NULL } ,
/*--: EXIFTAG_SUBJECTDISTANCE: LibTiff returns value of "-1" if numerator equals 4294967295 (0xFFFFFFFF) to indicate infinite distance!
* However , there are two other EXIF tags where numerator indicates a special value and six other cases where the denominator indicates special values ,
* which are not treated within LibTiff ! ! */
{ EXIFTAG_SUBJECTDISTANCE , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " SubjectDistance " , NULL } ,
{ EXIFTAG_METERINGMODE , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " MeteringMode " , NULL } ,
{ EXIFTAG_LIGHTSOURCE , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " LightSource " , NULL } ,
{ EXIFTAG_FLASH , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Flash " , NULL } ,
{ EXIFTAG_FOCALLENGTH , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " FocalLength " , NULL } ,
{ EXIFTAG_SUBJECTAREA , - 1 , - 1 , TIFF_SHORT , 0 , TIFF_SETGET_C16_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " SubjectArea " , NULL } ,
{ EXIFTAG_MAKERNOTE , - 1 , - 1 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " MakerNote " , NULL } ,
{ EXIFTAG_USERCOMMENT , - 1 , - 1 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " UserComment " , NULL } ,
{ EXIFTAG_SUBSECTIME , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " SubSecTime " , NULL } ,
{ EXIFTAG_SUBSECTIMEORIGINAL , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " SubSecTimeOriginal " , NULL } ,
{ EXIFTAG_SUBSECTIMEDIGITIZED , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " SubSecTimeDigitized " , NULL } ,
{ EXIFTAG_TEMPERATURE , 1 , 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Temperature " , NULL } ,
{ EXIFTAG_HUMIDITY , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Humidity " , NULL } ,
{ EXIFTAG_PRESSURE , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Pressure " , NULL } ,
{ EXIFTAG_WATERDEPTH , 1 , 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " WaterDepth " , NULL } ,
{ EXIFTAG_ACCELERATION , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Acceleration " , NULL } ,
{ EXIFTAG_CAMERAELEVATIONANGLE , 1 , 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " CameraElevationAngle " , NULL } ,
{ EXIFTAG_FLASHPIXVERSION , 4 , 4 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C0_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " FlashpixVersion " , NULL } ,
{ EXIFTAG_COLORSPACE , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ColorSpace " , NULL } ,
{ EXIFTAG_PIXELXDIMENSION , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " PixelXDimension " , NULL } ,
{ EXIFTAG_PIXELYDIMENSION , 1 , 1 , TIFF_LONG , 0 , TIFF_SETGET_UINT32 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " PixelYDimension " , NULL } ,
{ EXIFTAG_RELATEDSOUNDFILE , 13 , 13 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " RelatedSoundFile " , NULL } ,
{ EXIFTAG_FLASHENERGY , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " FlashEnergy " , NULL } ,
{ EXIFTAG_SPATIALFREQUENCYRESPONSE , - 1 , - 1 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " SpatialFrequencyResponse " , NULL } ,
{ EXIFTAG_FOCALPLANEXRESOLUTION , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " FocalPlaneXResolution " , NULL } ,
{ EXIFTAG_FOCALPLANEYRESOLUTION , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " FocalPlaneYResolution " , NULL } ,
{ EXIFTAG_FOCALPLANERESOLUTIONUNIT , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " FocalPlaneResolutionUnit " , NULL } ,
{ EXIFTAG_SUBJECTLOCATION , 2 , 2 , TIFF_SHORT , 0 , TIFF_SETGET_C0_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " SubjectLocation " , NULL } ,
{ EXIFTAG_EXPOSUREINDEX , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ExposureIndex " , NULL } ,
{ EXIFTAG_SENSINGMETHOD , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " SensingMethod " , NULL } ,
{ EXIFTAG_FILESOURCE , 1 , 1 , TIFF_UNDEFINED , 0 , TIFF_SETGET_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " FileSource " , NULL } ,
{ EXIFTAG_SCENETYPE , 1 , 1 , TIFF_UNDEFINED , 0 , TIFF_SETGET_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " SceneType " , NULL } ,
{ EXIFTAG_CFAPATTERN , - 1 , - 1 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " CFAPattern " , NULL } ,
{ EXIFTAG_CUSTOMRENDERED , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " CustomRendered " , NULL } ,
{ EXIFTAG_EXPOSUREMODE , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ExposureMode " , NULL } ,
{ EXIFTAG_WHITEBALANCE , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " WhiteBalance " , NULL } ,
{ EXIFTAG_DIGITALZOOMRATIO , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DigitalZoomRatio " , NULL } ,
{ EXIFTAG_FOCALLENGTHIN35MMFILM , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " FocalLengthIn35mmFilm " , NULL } ,
{ EXIFTAG_SCENECAPTURETYPE , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " SceneCaptureType " , NULL } ,
{ EXIFTAG_GAINCONTROL , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " GainControl " , NULL } ,
{ EXIFTAG_CONTRAST , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Contrast " , NULL } ,
{ EXIFTAG_SATURATION , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Saturation " , NULL } ,
{ EXIFTAG_SHARPNESS , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Sharpness " , NULL } ,
{ EXIFTAG_DEVICESETTINGDESCRIPTION , - 1 , - 1 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " DeviceSettingDescription " , NULL } ,
{ EXIFTAG_SUBJECTDISTANCERANGE , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " SubjectDistanceRange " , NULL } ,
{ EXIFTAG_IMAGEUNIQUEID , 33 , 33 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ImageUniqueID " , NULL } ,
{ EXIFTAG_CAMERAOWNERNAME , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " CameraOwnerName " , NULL } ,
{ EXIFTAG_BODYSERIALNUMBER , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " BodySerialNumber " , NULL } ,
{ EXIFTAG_LENSSPECIFICATION , 4 , 4 , TIFF_RATIONAL , 0 , TIFF_SETGET_C0_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " LensSpecification " , NULL } ,
{ EXIFTAG_LENSMAKE , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " LensMake " , NULL } ,
{ EXIFTAG_LENSMODEL , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " LensModel " , NULL } ,
{ EXIFTAG_LENSSERIALNUMBER , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " LensSerialNumber " , NULL } ,
{ EXIFTAG_GAMMA , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Gamma " , NULL } ,
{ EXIFTAG_COMPOSITEIMAGE , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " CompositeImage " , NULL } ,
{ EXIFTAG_SOURCEIMAGENUMBEROFCOMPOSITEIMAGE , 2 , 2 , TIFF_SHORT , 0 , TIFF_SETGET_C0_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " SourceImageNumberOfCompositeImage " , NULL } ,
{ EXIFTAG_SOURCEEXPOSURETIMESOFCOMPOSITEIMAGE , - 1 , - 1 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 ,
" SourceExposureTimesOfCompositeImage " , NULL } } ;
2021-03-02 07:17:30 +08:00
/*
2024-03-22 09:08:16 +08:00
* EXIF - GPS tags ( Version 2.31 , July 2016 ; nothing changed for version 2.32 May
* 2019 )
2021-03-02 07:17:30 +08:00
*/
2024-03-22 09:08:16 +08:00
static const TIFFField gpsFields [ ] = {
/* For the GPS tag definitions in gpsFields[] the standard definition for Rationals is TIFF_SETGET_DOUBLE and TIFF_SETGET_C0_FLOAT.
* - - ATTENTION : After the upgrade with Rational2Double , the GPSTAG values can now be written and also read in double precision !
* In order to achieve double precision for GPS tags : Standard definitions for GPSTAG is kept to TIFF_SETGET_DOUBLE
* and TIFF_SETGET_C0_FLOAT is changed to TIFF_SETGET_C0_DOUBLE .
*/
{ GPSTAG_VERSIONID , 4 , 4 , TIFF_BYTE , 0 , TIFF_SETGET_C0_UINT8 , TIFF_SETGET_UINT8 , FIELD_CUSTOM , 1 , 0 , " VersionID " , NULL } ,
{ GPSTAG_LATITUDEREF , 2 , 2 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " LatitudeRef " , NULL } ,
{ GPSTAG_LATITUDE , 3 , 3 , TIFF_RATIONAL , 0 , TIFF_SETGET_C0_DOUBLE , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Latitude " , NULL } ,
{ GPSTAG_LONGITUDEREF , 2 , 2 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " LongitudeRef " , NULL } ,
{ GPSTAG_LONGITUDE , 3 , 3 , TIFF_RATIONAL , 0 , TIFF_SETGET_C0_DOUBLE , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Longitude " , NULL } ,
{ GPSTAG_ALTITUDEREF , 1 , 1 , TIFF_BYTE , 0 , TIFF_SETGET_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " AltitudeRef " , NULL } ,
{ GPSTAG_ALTITUDE , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_DOUBLE , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Altitude " , NULL } ,
{ GPSTAG_TIMESTAMP , 3 , 3 , TIFF_RATIONAL , 0 , TIFF_SETGET_C0_DOUBLE , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " TimeStamp " , NULL } ,
{ GPSTAG_SATELLITES , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Satellites " , NULL } ,
{ GPSTAG_STATUS , 2 , 2 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Status " , NULL } ,
{ GPSTAG_MEASUREMODE , 2 , 2 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " MeasureMode " , NULL } ,
{ GPSTAG_DOP , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_DOUBLE , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DOP " , NULL } ,
{ GPSTAG_SPEEDREF , 2 , 2 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " SpeedRef " , NULL } ,
{ GPSTAG_SPEED , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_DOUBLE , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Speed " , NULL } ,
{ GPSTAG_TRACKREF , 2 , 2 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " TrackRef " , NULL } ,
{ GPSTAG_TRACK , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_DOUBLE , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Track " , NULL } ,
{ GPSTAG_IMGDIRECTIONREF , 2 , 2 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ImgDirectionRef " , NULL } ,
{ GPSTAG_IMGDIRECTION , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_DOUBLE , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " ImgDirection " , NULL } ,
{ GPSTAG_MAPDATUM , - 1 , - 1 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " MapDatum " , NULL } ,
{ GPSTAG_DESTLATITUDEREF , 2 , 2 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DestLatitudeRef " , NULL } ,
{ GPSTAG_DESTLATITUDE , 3 , 3 , TIFF_RATIONAL , 0 , TIFF_SETGET_C0_DOUBLE , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DestLatitude " , NULL } ,
{ GPSTAG_DESTLONGITUDEREF , 2 , 2 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DestLongitudeRef " , NULL } ,
{ GPSTAG_DESTLONGITUDE , 3 , 3 , TIFF_RATIONAL , 0 , TIFF_SETGET_C0_DOUBLE , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DestLongitude " , NULL } ,
{ GPSTAG_DESTBEARINGREF , 2 , 2 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DestBearingRef " , NULL } ,
{ GPSTAG_DESTBEARING , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_DOUBLE , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DestBearing " , NULL } ,
{ GPSTAG_DESTDISTANCEREF , 2 , 2 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DestDistanceRef " , NULL } ,
{ GPSTAG_DESTDISTANCE , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_DOUBLE , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DestDistance " , NULL } ,
{ GPSTAG_PROCESSINGMETHOD , - 1 , - 1 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " ProcessingMethod " , NULL } ,
{ GPSTAG_AREAINFORMATION , - 1 , - 1 , TIFF_UNDEFINED , 0 , TIFF_SETGET_C16_UINT8 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 1 , " AreaInformation " , NULL } ,
{ GPSTAG_DATESTAMP , 11 , 11 , TIFF_ASCII , 0 , TIFF_SETGET_ASCII , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " DateStamp " , NULL } ,
{ GPSTAG_DIFFERENTIAL , 1 , 1 , TIFF_SHORT , 0 , TIFF_SETGET_UINT16 , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " Differential " , NULL } ,
{ GPSTAG_GPSHPOSITIONINGERROR , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_DOUBLE , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , " HorizontalPositioningError " , NULL } } ;
/* clang-format on */ /* was off for better readability of tag comments */
static const TIFFFieldArray tiffFieldArray = {
tfiatImage , 0 , TIFFArrayCount ( tiffFields ) , ( TIFFField * ) tiffFields } ;
static const TIFFFieldArray exifFieldArray = {
tfiatExif , 0 , TIFFArrayCount ( exifFields ) , ( TIFFField * ) exifFields } ;
static const TIFFFieldArray gpsFieldArray = {
tfiatGps , 0 , TIFFArrayCount ( gpsFields ) , ( TIFFField * ) gpsFields } ;
2012-02-29 23:01:28 +08:00
/*
2017-12-08 20:47:54 +08:00
* We have our own local lfind ( ) equivalent to avoid subtle differences
2024-03-22 09:08:16 +08:00
* in types passed to lfind ( ) on different systems .
2012-02-29 23:01:28 +08:00
*/
2024-03-22 09:08:16 +08:00
static void * td_lfind ( const void * key , const void * base , size_t * nmemb ,
size_t size , int ( * compar ) ( const void * , const void * ) )
2010-07-16 20:54:53 +08:00
{
2012-02-29 23:01:28 +08:00
char * element , * end ;
end = ( char * ) base + * nmemb * size ;
for ( element = ( char * ) base ; element < end ; element + = size )
2024-03-22 09:08:16 +08:00
if ( ! compar ( key , element ) ) /* key found */
2012-02-29 23:01:28 +08:00
return element ;
return NULL ;
2010-07-16 20:54:53 +08:00
}
2024-03-22 09:08:16 +08:00
const TIFFFieldArray * _TIFFGetFields ( void ) { return ( & tiffFieldArray ) ; }
2012-02-29 23:01:28 +08:00
2024-03-22 09:08:16 +08:00
const TIFFFieldArray * _TIFFGetExifFields ( void ) { return ( & exifFieldArray ) ; }
2010-05-12 01:44:00 +08:00
2024-03-22 09:08:16 +08:00
const TIFFFieldArray * _TIFFGetGpsFields ( void ) { return ( & gpsFieldArray ) ; }
2021-03-02 07:17:30 +08:00
2024-03-22 09:08:16 +08:00
void _TIFFSetupFields ( TIFF * tif , const TIFFFieldArray * fieldarray )
2010-05-12 01:44:00 +08:00
{
2024-03-22 09:08:16 +08:00
if ( tif - > tif_fields & & tif - > tif_nfields > 0 )
{
uint32_t i ;
for ( i = 0 ; i < tif - > tif_nfields ; i + + )
{
TIFFField * fld = tif - > tif_fields [ i ] ;
if ( fld - > field_name ! = NULL )
{
if ( fld - > field_bit = = FIELD_CUSTOM & & TIFFFieldIsAnonymous ( fld ) )
{
_TIFFfreeExt ( tif , fld - > field_name ) ;
/* caution: tif_fields[i] must not be the beginning of a
* fields - array . Otherwise the following tags are also freed
* with the first free ( ) .
*/
_TIFFfreeExt ( tif , fld ) ;
}
}
}
_TIFFfreeExt ( tif , tif - > tif_fields ) ;
tif - > tif_fields = NULL ;
tif - > tif_nfields = 0 ;
}
if ( ! _TIFFMergeFields ( tif , fieldarray - > fields , fieldarray - > count ) )
{
TIFFErrorExtR ( tif , " _TIFFSetupFields " , " Setting up field info failed " ) ;
}
2010-05-12 01:44:00 +08:00
}
2024-03-22 09:08:16 +08:00
static int tagCompare ( const void * a , const void * b )
2010-05-12 01:44:00 +08:00
{
2024-03-22 09:08:16 +08:00
const TIFFField * ta = * ( const TIFFField * * ) a ;
const TIFFField * tb = * ( const TIFFField * * ) b ;
/* NB: be careful of return values for 16-bit platforms */
if ( ta - > field_tag ! = tb - > field_tag )
return ( int ) ta - > field_tag - ( int ) tb - > field_tag ;
else
return ( ta - > field_type = = TIFF_ANY )
? 0
: ( ( int ) tb - > field_type - ( int ) ta - > field_type ) ;
2010-05-12 01:44:00 +08:00
}
2024-03-22 09:08:16 +08:00
static int tagNameCompare ( const void * a , const void * b )
2010-05-12 01:44:00 +08:00
{
2024-03-22 09:08:16 +08:00
const TIFFField * ta = * ( const TIFFField * * ) a ;
const TIFFField * tb = * ( const TIFFField * * ) b ;
int ret = strcmp ( ta - > field_name , tb - > field_name ) ;
if ( ret )
return ret ;
else
return ( ta - > field_type = = TIFF_ANY )
? 0
: ( ( int ) tb - > field_type - ( int ) ta - > field_type ) ;
2010-05-12 01:44:00 +08:00
}
2024-03-22 09:08:16 +08:00
int _TIFFMergeFields ( TIFF * tif , const TIFFField info [ ] , uint32_t n )
2010-05-12 01:44:00 +08:00
{
2024-03-22 09:08:16 +08:00
static const char module [ ] = " _TIFFMergeFields " ;
static const char reason [ ] = " for fields array " ;
/* TIFFField** tp; */
uint32_t i ;
tif - > tif_foundfield = NULL ;
if ( tif - > tif_fields & & tif - > tif_nfields > 0 )
{
tif - > tif_fields = ( TIFFField * * ) _TIFFCheckRealloc (
tif , tif - > tif_fields , ( tif - > tif_nfields + n ) , sizeof ( TIFFField * ) ,
reason ) ;
}
else
{
tif - > tif_fields =
( TIFFField * * ) _TIFFCheckMalloc ( tif , n , sizeof ( TIFFField * ) , reason ) ;
}
if ( ! tif - > tif_fields )
{
TIFFErrorExtR ( tif , module , " Failed to allocate fields array " ) ;
return 0 ;
}
/* tp = tif->tif_fields + tif->tif_nfields; */
for ( i = 0 ; i < n ; i + + )
{
const TIFFField * fip = TIFFFindField ( tif , info [ i ] . field_tag , TIFF_ANY ) ;
/* only add definitions that aren't already present */
if ( ! fip )
{
tif - > tif_fields [ tif - > tif_nfields ] = ( TIFFField * ) ( info + i ) ;
tif - > tif_nfields + + ;
}
}
/* Sort the field info by tag number */
qsort ( tif - > tif_fields , tif - > tif_nfields , sizeof ( TIFFField * ) , tagCompare ) ;
return n ;
2010-05-12 01:44:00 +08:00
}
2024-03-22 09:08:16 +08:00
void _TIFFPrintFieldInfo ( TIFF * tif , FILE * fd )
2010-05-12 01:44:00 +08:00
{
2024-03-22 09:08:16 +08:00
uint32_t i ;
fprintf ( fd , " %s: \n " , tif - > tif_name ) ;
for ( i = 0 ; i < tif - > tif_nfields ; i + + )
{
const TIFFField * fip = tif - > tif_fields [ i ] ;
fprintf ( fd , " field[%2d] %5lu, %2d, %2d, %d, %2d, %5s, %5s, %s \n " ,
( int ) i , ( unsigned long ) fip - > field_tag , fip - > field_readcount ,
fip - > field_writecount , fip - > field_type , fip - > field_bit ,
fip - > field_oktochange ? " TRUE " : " FALSE " ,
fip - > field_passcount ? " TRUE " : " FALSE " , fip - > field_name ) ;
}
2010-05-12 01:44:00 +08:00
}
/*
2024-03-22 09:08:16 +08:00
* Return size of TIFFDataType within TIFF - file in bytes
2010-05-12 01:44:00 +08:00
*/
2024-03-22 09:08:16 +08:00
int TIFFDataWidth ( TIFFDataType type )
2010-05-12 01:44:00 +08:00
{
2024-03-22 09:08:16 +08:00
switch ( type )
{
case 0 : /* nothing */
case TIFF_BYTE :
case TIFF_ASCII :
case TIFF_SBYTE :
case TIFF_UNDEFINED :
return 1 ;
case TIFF_SHORT :
case TIFF_SSHORT :
return 2 ;
case TIFF_LONG :
case TIFF_SLONG :
case TIFF_FLOAT :
case TIFF_IFD :
return 4 ;
case TIFF_RATIONAL :
case TIFF_SRATIONAL :
case TIFF_DOUBLE :
case TIFF_LONG8 :
case TIFF_SLONG8 :
case TIFF_IFD8 :
return 8 ;
default :
return 0 ; /* will return 0 for unknown types */
}
2010-05-12 01:44:00 +08:00
}
2010-07-16 20:54:53 +08:00
/*
2024-03-22 09:08:16 +08:00
* Return internal storage size of TIFFSetGetFieldType in bytes .
* TIFFSetField ( ) and TIFFGetField ( ) have to provide the parameter accordingly .
* Replaces internal functions _TIFFDataSize ( ) and _TIFFSetGetFieldSize ( )
* with now extern available function TIFFFieldSetGetSize ( ) .
2010-07-16 20:54:53 +08:00
*/
2024-03-22 09:08:16 +08:00
int TIFFFieldSetGetSize ( const TIFFField * fip )
2010-07-16 20:54:53 +08:00
{
2024-03-22 09:08:16 +08:00
/*
* TIFFSetField ( ) and TIFFGetField ( ) must provide the parameter accordingly
* to the definition of " set_field_type " of the tag definition in
* dir_info . c . This function returns the data size for that purpose .
*
* Furthermore , this data size is also used for the internal storage ,
* even for TIFF_RATIONAL values for FIELD_CUSTOM , which are stored
* internally as 4 - byte float , but some of them should be stored internally
* as 8 - byte double , depending on the " set_field_type " _FLOAT_ or _DOUBLE_ .
*/
if ( fip = = NULL )
return 0 ;
switch ( fip - > set_field_type )
{
case TIFF_SETGET_UNDEFINED :
case TIFF_SETGET_ASCII :
case TIFF_SETGET_C0_ASCII :
case TIFF_SETGET_C16_ASCII :
case TIFF_SETGET_C32_ASCII :
case TIFF_SETGET_OTHER :
return 1 ;
case TIFF_SETGET_UINT8 :
case TIFF_SETGET_SINT8 :
case TIFF_SETGET_C0_UINT8 :
case TIFF_SETGET_C0_SINT8 :
case TIFF_SETGET_C16_UINT8 :
case TIFF_SETGET_C16_SINT8 :
case TIFF_SETGET_C32_UINT8 :
case TIFF_SETGET_C32_SINT8 :
return 1 ;
case TIFF_SETGET_UINT16 :
case TIFF_SETGET_SINT16 :
case TIFF_SETGET_C0_UINT16 :
case TIFF_SETGET_C0_SINT16 :
case TIFF_SETGET_C16_UINT16 :
case TIFF_SETGET_C16_SINT16 :
case TIFF_SETGET_C32_UINT16 :
case TIFF_SETGET_C32_SINT16 :
return 2 ;
case TIFF_SETGET_INT :
case TIFF_SETGET_UINT32 :
case TIFF_SETGET_SINT32 :
case TIFF_SETGET_FLOAT :
case TIFF_SETGET_UINT16_PAIR :
case TIFF_SETGET_C0_UINT32 :
case TIFF_SETGET_C0_SINT32 :
case TIFF_SETGET_C0_FLOAT :
case TIFF_SETGET_C16_UINT32 :
case TIFF_SETGET_C16_SINT32 :
case TIFF_SETGET_C16_FLOAT :
case TIFF_SETGET_C32_UINT32 :
case TIFF_SETGET_C32_SINT32 :
case TIFF_SETGET_C32_FLOAT :
return 4 ;
case TIFF_SETGET_UINT64 :
case TIFF_SETGET_SINT64 :
case TIFF_SETGET_DOUBLE :
case TIFF_SETGET_IFD8 :
case TIFF_SETGET_C0_UINT64 :
case TIFF_SETGET_C0_SINT64 :
case TIFF_SETGET_C0_DOUBLE :
case TIFF_SETGET_C0_IFD8 :
case TIFF_SETGET_C16_UINT64 :
case TIFF_SETGET_C16_SINT64 :
case TIFF_SETGET_C16_DOUBLE :
case TIFF_SETGET_C16_IFD8 :
case TIFF_SETGET_C32_UINT64 :
case TIFF_SETGET_C32_SINT64 :
case TIFF_SETGET_C32_DOUBLE :
case TIFF_SETGET_C32_IFD8 :
return 8 ;
default :
return 0 ;
}
} /*-- TIFFFieldSetGetSize() --- */
2010-07-16 20:54:53 +08:00
2021-03-02 07:17:30 +08:00
/*
2024-03-22 09:08:16 +08:00
* Return size of count parameter of TIFFSetField ( ) and TIFFGetField ( )
* and also if it is required : 0 = none , 2 = uint16_t , 4 = uint32_t
2021-03-02 07:17:30 +08:00
*/
2024-03-22 09:08:16 +08:00
int TIFFFieldSetGetCountSize ( const TIFFField * fip )
2021-03-02 07:17:30 +08:00
{
2024-03-22 09:08:16 +08:00
if ( fip = = NULL )
return 0 ;
switch ( fip - > set_field_type )
{
case TIFF_SETGET_C16_ASCII :
case TIFF_SETGET_C16_UINT8 :
case TIFF_SETGET_C16_SINT8 :
case TIFF_SETGET_C16_UINT16 :
case TIFF_SETGET_C16_SINT16 :
case TIFF_SETGET_C16_UINT32 :
case TIFF_SETGET_C16_SINT32 :
case TIFF_SETGET_C16_FLOAT :
case TIFF_SETGET_C16_UINT64 :
case TIFF_SETGET_C16_SINT64 :
case TIFF_SETGET_C16_DOUBLE :
case TIFF_SETGET_C16_IFD8 :
return 2 ;
case TIFF_SETGET_C32_ASCII :
case TIFF_SETGET_C32_UINT8 :
case TIFF_SETGET_C32_SINT8 :
case TIFF_SETGET_C32_UINT16 :
case TIFF_SETGET_C32_SINT16 :
case TIFF_SETGET_C32_UINT32 :
case TIFF_SETGET_C32_SINT32 :
case TIFF_SETGET_C32_FLOAT :
case TIFF_SETGET_C32_UINT64 :
case TIFF_SETGET_C32_SINT64 :
case TIFF_SETGET_C32_DOUBLE :
case TIFF_SETGET_C32_IFD8 :
return 4 ;
default :
return 0 ;
}
} /*-- TIFFFieldSetGetCountSize() --- */
const TIFFField * TIFFFindField ( TIFF * tif , uint32_t tag , TIFFDataType dt )
2010-05-12 01:44:00 +08:00
{
2024-03-22 09:08:16 +08:00
TIFFField key = { 0 , 0 , 0 , TIFF_NOTYPE , 0 , 0 , 0 , 0 , 0 , 0 , NULL , NULL } ;
TIFFField * pkey = & key ;
const TIFFField * * ret ;
if ( tif - > tif_foundfield & & tif - > tif_foundfield - > field_tag = = tag & &
( dt = = TIFF_ANY | | dt = = tif - > tif_foundfield - > field_type ) )
return tif - > tif_foundfield ;
/* If we are invoked with no field information, then just return. */
if ( ! tif - > tif_fields )
return NULL ;
/* NB: use sorted search (e.g. binary search) */
key . field_tag = tag ;
key . field_type = dt ;
ret = ( const TIFFField * * ) bsearch ( & pkey , tif - > tif_fields , tif - > tif_nfields ,
sizeof ( TIFFField * ) , tagCompare ) ;
return tif - > tif_foundfield = ( ret ? * ret : NULL ) ;
2010-05-12 01:44:00 +08:00
}
2024-03-22 09:08:16 +08:00
static const TIFFField * _TIFFFindFieldByName ( TIFF * tif , const char * field_name ,
TIFFDataType dt )
2010-05-12 01:44:00 +08:00
{
2024-03-22 09:08:16 +08:00
TIFFField key = { 0 , 0 , 0 , TIFF_NOTYPE , 0 , 0 , 0 , 0 , 0 , 0 , NULL , NULL } ;
TIFFField * pkey = & key ;
const TIFFField * * ret ;
if ( tif - > tif_foundfield & &
streq ( tif - > tif_foundfield - > field_name , field_name ) & &
( dt = = TIFF_ANY | | dt = = tif - > tif_foundfield - > field_type ) )
return ( tif - > tif_foundfield ) ;
2010-07-16 20:54:53 +08:00
2024-03-22 09:08:16 +08:00
/* If we are invoked with no field information, then just return. */
if ( ! tif - > tif_fields )
return NULL ;
2010-07-16 20:54:53 +08:00
2024-03-22 09:08:16 +08:00
/* NB: use linear search since list is sorted by key#, not name */
2012-02-29 23:01:28 +08:00
2024-03-22 09:08:16 +08:00
key . field_name = ( char * ) field_name ;
key . field_type = dt ;
2012-02-29 23:01:28 +08:00
2024-03-22 09:08:16 +08:00
ret =
( const TIFFField * * ) td_lfind ( & pkey , tif - > tif_fields , & tif - > tif_nfields ,
sizeof ( TIFFField * ) , tagNameCompare ) ;
2012-02-29 23:01:28 +08:00
2024-03-22 09:08:16 +08:00
return tif - > tif_foundfield = ( ret ? * ret : NULL ) ;
2010-05-12 01:44:00 +08:00
}
2024-03-22 09:08:16 +08:00
const TIFFField * TIFFFieldWithTag ( TIFF * tif , uint32_t tag )
2010-05-12 01:44:00 +08:00
{
2024-03-22 09:08:16 +08:00
const TIFFField * fip = TIFFFindField ( tif , tag , TIFF_ANY ) ;
if ( ! fip )
{
TIFFWarningExtR ( tif , " TIFFFieldWithTag " , " Warning, unknown tag 0x%x " ,
( unsigned int ) tag ) ;
}
return ( fip ) ;
2010-05-12 01:44:00 +08:00
}
2024-03-22 09:08:16 +08:00
const TIFFField * TIFFFieldWithName ( TIFF * tif , const char * field_name )
2010-05-12 01:44:00 +08:00
{
2024-03-22 09:08:16 +08:00
const TIFFField * fip = _TIFFFindFieldByName ( tif , field_name , TIFF_ANY ) ;
if ( ! fip )
{
TIFFWarningExtR ( tif , " TIFFFieldWithName " , " Warning, unknown tag %s " ,
field_name ) ;
}
return ( fip ) ;
2017-12-08 20:47:54 +08:00
}
2024-03-22 09:08:16 +08:00
uint32_t TIFFFieldTag ( const TIFFField * fip ) { return fip - > field_tag ; }
2017-12-08 20:47:54 +08:00
2024-03-22 09:08:16 +08:00
const char * TIFFFieldName ( const TIFFField * fip ) { return fip - > field_name ; }
2017-12-08 20:47:54 +08:00
2024-03-22 09:08:16 +08:00
TIFFDataType TIFFFieldDataType ( const TIFFField * fip ) { return fip - > field_type ; }
2017-12-08 20:47:54 +08:00
2024-03-22 09:08:16 +08:00
int TIFFFieldPassCount ( const TIFFField * fip ) { return fip - > field_passcount ; }
2017-12-08 20:47:54 +08:00
2024-03-22 09:08:16 +08:00
int TIFFFieldReadCount ( const TIFFField * fip ) { return fip - > field_readcount ; }
2017-12-08 20:47:54 +08:00
2024-03-22 09:08:16 +08:00
int TIFFFieldWriteCount ( const TIFFField * fip ) { return fip - > field_writecount ; }
int TIFFFieldIsAnonymous ( const TIFFField * fip ) { return fip - > field_anonymous ; }
2010-05-12 01:44:00 +08:00
2024-03-22 09:08:16 +08:00
const TIFFField * _TIFFFindOrRegisterField ( TIFF * tif , uint32_t tag ,
TIFFDataType dt )
2010-05-12 01:44:00 +08:00
{
2024-03-22 09:08:16 +08:00
const TIFFField * fld ;
2010-05-12 01:44:00 +08:00
2024-03-22 09:08:16 +08:00
fld = TIFFFindField ( tif , tag , dt ) ;
if ( fld = = NULL )
{
fld = _TIFFCreateAnonField ( tif , tag , dt ) ;
if ( ! _TIFFMergeFields ( tif , fld , 1 ) )
return NULL ;
}
2010-05-12 01:44:00 +08:00
2024-03-22 09:08:16 +08:00
return fld ;
2010-05-12 01:44:00 +08:00
}
2024-03-22 09:08:16 +08:00
TIFFField * _TIFFCreateAnonField ( TIFF * tif , uint32_t tag ,
TIFFDataType field_type )
2010-05-12 01:44:00 +08:00
{
2024-03-22 09:08:16 +08:00
TIFFField * fld ;
( void ) tif ;
fld = ( TIFFField * ) _TIFFmallocExt ( tif , sizeof ( TIFFField ) ) ;
if ( fld = = NULL )
return NULL ;
_TIFFmemset ( fld , 0 , sizeof ( TIFFField ) ) ;
fld - > field_tag = tag ;
fld - > field_readcount = TIFF_VARIABLE2 ;
fld - > field_writecount = TIFF_VARIABLE2 ;
fld - > field_type = field_type ;
fld - > field_anonymous =
1 ; /* indicate that this is an anonymous / unknown tag */
switch ( field_type )
{
case TIFF_BYTE :
case TIFF_UNDEFINED :
fld - > set_field_type = TIFF_SETGET_C32_UINT8 ;
fld - > get_field_type = TIFF_SETGET_C32_UINT8 ;
break ;
case TIFF_ASCII :
fld - > set_field_type = TIFF_SETGET_C32_ASCII ;
fld - > get_field_type = TIFF_SETGET_C32_ASCII ;
break ;
case TIFF_SHORT :
fld - > set_field_type = TIFF_SETGET_C32_UINT16 ;
fld - > get_field_type = TIFF_SETGET_C32_UINT16 ;
break ;
case TIFF_LONG :
fld - > set_field_type = TIFF_SETGET_C32_UINT32 ;
fld - > get_field_type = TIFF_SETGET_C32_UINT32 ;
break ;
case TIFF_RATIONAL :
case TIFF_SRATIONAL :
case TIFF_FLOAT :
fld - > set_field_type = TIFF_SETGET_C32_FLOAT ;
fld - > get_field_type = TIFF_SETGET_C32_FLOAT ;
break ;
case TIFF_SBYTE :
fld - > set_field_type = TIFF_SETGET_C32_SINT8 ;
fld - > get_field_type = TIFF_SETGET_C32_SINT8 ;
break ;
case TIFF_SSHORT :
fld - > set_field_type = TIFF_SETGET_C32_SINT16 ;
fld - > get_field_type = TIFF_SETGET_C32_SINT16 ;
break ;
case TIFF_SLONG :
fld - > set_field_type = TIFF_SETGET_C32_SINT32 ;
fld - > get_field_type = TIFF_SETGET_C32_SINT32 ;
break ;
case TIFF_DOUBLE :
fld - > set_field_type = TIFF_SETGET_C32_DOUBLE ;
fld - > get_field_type = TIFF_SETGET_C32_DOUBLE ;
break ;
case TIFF_IFD :
case TIFF_IFD8 :
fld - > set_field_type = TIFF_SETGET_C32_IFD8 ;
fld - > get_field_type = TIFF_SETGET_C32_IFD8 ;
break ;
case TIFF_LONG8 :
fld - > set_field_type = TIFF_SETGET_C32_UINT64 ;
fld - > get_field_type = TIFF_SETGET_C32_UINT64 ;
break ;
case TIFF_SLONG8 :
fld - > set_field_type = TIFF_SETGET_C32_SINT64 ;
fld - > get_field_type = TIFF_SETGET_C32_SINT64 ;
break ;
default :
fld - > set_field_type = TIFF_SETGET_UNDEFINED ;
fld - > get_field_type = TIFF_SETGET_UNDEFINED ;
break ;
}
fld - > field_bit = FIELD_CUSTOM ;
fld - > field_oktochange = TRUE ;
fld - > field_passcount = TRUE ;
fld - > field_name = ( char * ) _TIFFmallocExt ( tif , 32 ) ;
if ( fld - > field_name = = NULL )
{
_TIFFfreeExt ( tif , fld ) ;
return NULL ;
}
fld - > field_subfields = NULL ;
/*
* note that this name is a special sign to TIFFClose ( ) and
* _TIFFSetupFields ( ) to free the field
* Update :
* This special sign is replaced by fld - > field_anonymous flag .
*/
( void ) snprintf ( fld - > field_name , 32 , " Tag %d " , ( int ) tag ) ;
return fld ;
2010-05-12 01:44:00 +08:00
}
2012-02-29 23:01:28 +08:00
/****************************************************************************
* O B S O L E T E D I N T E R F A C E S
*
* Don ' t use this stuff in your applications , it may be removed in the future
* libtiff versions .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2024-03-22 09:08:16 +08:00
static TIFFSetGetFieldType _TIFFSetGetType ( TIFFDataType type , short count ,
unsigned char passcount )
2012-02-29 23:01:28 +08:00
{
2024-03-22 09:08:16 +08:00
if ( type = = TIFF_ASCII & & count = = TIFF_VARIABLE & & passcount = = 0 )
return TIFF_SETGET_ASCII ;
else if ( count = = 1 & & passcount = = 0 )
{
switch ( type )
{
case TIFF_BYTE :
case TIFF_UNDEFINED :
return TIFF_SETGET_UINT8 ;
case TIFF_ASCII :
return TIFF_SETGET_ASCII ;
case TIFF_SHORT :
return TIFF_SETGET_UINT16 ;
case TIFF_LONG :
return TIFF_SETGET_UINT32 ;
case TIFF_RATIONAL :
case TIFF_SRATIONAL :
case TIFF_FLOAT :
return TIFF_SETGET_FLOAT ;
case TIFF_SBYTE :
return TIFF_SETGET_SINT8 ;
case TIFF_SSHORT :
return TIFF_SETGET_SINT16 ;
case TIFF_SLONG :
return TIFF_SETGET_SINT32 ;
case TIFF_DOUBLE :
return TIFF_SETGET_DOUBLE ;
case TIFF_IFD :
case TIFF_IFD8 :
return TIFF_SETGET_IFD8 ;
case TIFF_LONG8 :
return TIFF_SETGET_UINT64 ;
case TIFF_SLONG8 :
return TIFF_SETGET_SINT64 ;
default :
return TIFF_SETGET_UNDEFINED ;
}
}
else if ( count > = 1 & & passcount = = 0 )
{
switch ( type )
{
case TIFF_BYTE :
case TIFF_UNDEFINED :
return TIFF_SETGET_C0_UINT8 ;
case TIFF_ASCII :
return TIFF_SETGET_C0_ASCII ;
case TIFF_SHORT :
return TIFF_SETGET_C0_UINT16 ;
case TIFF_LONG :
return TIFF_SETGET_C0_UINT32 ;
case TIFF_RATIONAL :
case TIFF_SRATIONAL :
case TIFF_FLOAT :
return TIFF_SETGET_C0_FLOAT ;
case TIFF_SBYTE :
return TIFF_SETGET_C0_SINT8 ;
case TIFF_SSHORT :
return TIFF_SETGET_C0_SINT16 ;
case TIFF_SLONG :
return TIFF_SETGET_C0_SINT32 ;
case TIFF_DOUBLE :
return TIFF_SETGET_C0_DOUBLE ;
case TIFF_IFD :
case TIFF_IFD8 :
return TIFF_SETGET_C0_IFD8 ;
case TIFF_LONG8 :
return TIFF_SETGET_C0_UINT64 ;
case TIFF_SLONG8 :
return TIFF_SETGET_C0_SINT64 ;
default :
return TIFF_SETGET_UNDEFINED ;
}
}
else if ( count = = TIFF_VARIABLE & & passcount = = 1 )
{
switch ( type )
{
case TIFF_BYTE :
case TIFF_UNDEFINED :
return TIFF_SETGET_C16_UINT8 ;
case TIFF_ASCII :
return TIFF_SETGET_C16_ASCII ;
case TIFF_SHORT :
return TIFF_SETGET_C16_UINT16 ;
case TIFF_LONG :
return TIFF_SETGET_C16_UINT32 ;
case TIFF_RATIONAL :
case TIFF_SRATIONAL :
case TIFF_FLOAT :
return TIFF_SETGET_C16_FLOAT ;
case TIFF_SBYTE :
return TIFF_SETGET_C16_SINT8 ;
case TIFF_SSHORT :
return TIFF_SETGET_C16_SINT16 ;
case TIFF_SLONG :
return TIFF_SETGET_C16_SINT32 ;
case TIFF_DOUBLE :
return TIFF_SETGET_C16_DOUBLE ;
case TIFF_IFD :
case TIFF_IFD8 :
return TIFF_SETGET_C16_IFD8 ;
case TIFF_LONG8 :
return TIFF_SETGET_C16_UINT64 ;
case TIFF_SLONG8 :
return TIFF_SETGET_C16_SINT64 ;
default :
return TIFF_SETGET_UNDEFINED ;
}
}
else if ( count = = TIFF_VARIABLE2 & & passcount = = 1 )
{
switch ( type )
{
case TIFF_BYTE :
case TIFF_UNDEFINED :
return TIFF_SETGET_C32_UINT8 ;
case TIFF_ASCII :
return TIFF_SETGET_C32_ASCII ;
case TIFF_SHORT :
return TIFF_SETGET_C32_UINT16 ;
case TIFF_LONG :
return TIFF_SETGET_C32_UINT32 ;
case TIFF_RATIONAL :
case TIFF_SRATIONAL :
case TIFF_FLOAT :
return TIFF_SETGET_C32_FLOAT ;
case TIFF_SBYTE :
return TIFF_SETGET_C32_SINT8 ;
case TIFF_SSHORT :
return TIFF_SETGET_C32_SINT16 ;
case TIFF_SLONG :
return TIFF_SETGET_C32_SINT32 ;
case TIFF_DOUBLE :
return TIFF_SETGET_C32_DOUBLE ;
case TIFF_IFD :
case TIFF_IFD8 :
return TIFF_SETGET_C32_IFD8 ;
case TIFF_LONG8 :
return TIFF_SETGET_C32_UINT64 ;
case TIFF_SLONG8 :
return TIFF_SETGET_C32_SINT64 ;
default :
return TIFF_SETGET_UNDEFINED ;
}
}
return TIFF_SETGET_UNDEFINED ;
2012-02-29 23:01:28 +08:00
}
2024-03-22 09:08:16 +08:00
int TIFFMergeFieldInfo ( TIFF * tif , const TIFFFieldInfo info [ ] , uint32_t n )
2012-02-29 23:01:28 +08:00
{
2024-03-22 09:08:16 +08:00
static const char module [ ] = " TIFFMergeFieldInfo " ;
static const char reason [ ] = " for fields array " ;
TIFFField * tp ;
size_t nfields ;
uint32_t i ;
if ( tif - > tif_nfieldscompat > 0 )
{
tif - > tif_fieldscompat = ( TIFFFieldArray * ) _TIFFCheckRealloc (
tif , tif - > tif_fieldscompat , tif - > tif_nfieldscompat + 1 ,
sizeof ( TIFFFieldArray ) , reason ) ;
}
else
{
tif - > tif_fieldscompat = ( TIFFFieldArray * ) _TIFFCheckMalloc (
tif , 1 , sizeof ( TIFFFieldArray ) , reason ) ;
}
if ( ! tif - > tif_fieldscompat )
{
TIFFErrorExtR ( tif , module , " Failed to allocate fields array " ) ;
return - 1 ;
}
nfields = tif - > tif_nfieldscompat + + ;
tif - > tif_fieldscompat [ nfields ] . type = tfiatOther ;
tif - > tif_fieldscompat [ nfields ] . allocated_size = n ;
tif - > tif_fieldscompat [ nfields ] . count = n ;
tif - > tif_fieldscompat [ nfields ] . fields =
( TIFFField * ) _TIFFCheckMalloc ( tif , n , sizeof ( TIFFField ) , reason ) ;
if ( ! tif - > tif_fieldscompat [ nfields ] . fields )
{
TIFFErrorExtR ( tif , module , " Failed to allocate fields array " ) ;
return - 1 ;
}
tp = tif - > tif_fieldscompat [ nfields ] . fields ;
for ( i = 0 ; i < n ; i + + )
{
tp - > field_tag = info [ i ] . field_tag ;
tp - > field_readcount = info [ i ] . field_readcount ;
tp - > field_writecount = info [ i ] . field_writecount ;
tp - > field_type = info [ i ] . field_type ;
tp - > field_anonymous = 0 ;
tp - > set_field_type =
_TIFFSetGetType ( info [ i ] . field_type , info [ i ] . field_readcount ,
info [ i ] . field_passcount ) ;
tp - > get_field_type =
_TIFFSetGetType ( info [ i ] . field_type , info [ i ] . field_readcount ,
info [ i ] . field_passcount ) ;
tp - > field_bit = info [ i ] . field_bit ;
tp - > field_oktochange = info [ i ] . field_oktochange ;
tp - > field_passcount = info [ i ] . field_passcount ;
if ( info [ i ] . field_name = = NULL )
{
TIFFErrorExtR ( tif , module ,
" Field_name of %d.th allocation tag %d is NULL " , i ,
info [ i ] . field_tag ) ;
return - 1 ;
}
tp - > field_name = info [ i ] . field_name ;
tp - > field_subfields = NULL ;
tp + + ;
}
if ( ! _TIFFMergeFields ( tif , tif - > tif_fieldscompat [ nfields ] . fields , n ) )
{
TIFFErrorExtR ( tif , module , " Setting up field info failed " ) ;
return - 1 ;
}
return 0 ;
2017-12-08 20:47:54 +08:00
}
2024-03-22 09:08:16 +08:00
int _TIFFCheckFieldIsValidForCodec ( TIFF * tif , ttag_t tag )
2017-12-08 20:47:54 +08:00
{
2024-03-22 09:08:16 +08:00
/* Filter out non-codec specific tags */
switch ( tag )
{
/* Shared tags */
case TIFFTAG_PREDICTOR :
/* JPEG tags */
case TIFFTAG_JPEGTABLES :
/* OJPEG tags */
case TIFFTAG_JPEGIFOFFSET :
case TIFFTAG_JPEGIFBYTECOUNT :
case TIFFTAG_JPEGQTABLES :
case TIFFTAG_JPEGDCTABLES :
case TIFFTAG_JPEGACTABLES :
case TIFFTAG_JPEGPROC :
case TIFFTAG_JPEGRESTARTINTERVAL :
/* CCITT* */
case TIFFTAG_BADFAXLINES :
case TIFFTAG_CLEANFAXDATA :
case TIFFTAG_CONSECUTIVEBADFAXLINES :
case TIFFTAG_GROUP3OPTIONS :
case TIFFTAG_GROUP4OPTIONS :
/* LERC */
case TIFFTAG_LERC_PARAMETERS :
break ;
default :
return 1 ;
}
if ( ! TIFFIsCODECConfigured ( tif - > tif_dir . td_compression ) )
{
return 0 ;
}
/* Check if codec specific tags are allowed for the current
* compression scheme ( codec ) */
switch ( tif - > tif_dir . td_compression )
{
case COMPRESSION_LZW :
if ( tag = = TIFFTAG_PREDICTOR )
return 1 ;
break ;
case COMPRESSION_PACKBITS :
/* No codec-specific tags */
break ;
case COMPRESSION_THUNDERSCAN :
/* No codec-specific tags */
break ;
case COMPRESSION_NEXT :
/* No codec-specific tags */
break ;
case COMPRESSION_JPEG :
if ( tag = = TIFFTAG_JPEGTABLES )
return 1 ;
break ;
case COMPRESSION_OJPEG :
switch ( tag )
{
case TIFFTAG_JPEGIFOFFSET :
case TIFFTAG_JPEGIFBYTECOUNT :
case TIFFTAG_JPEGQTABLES :
case TIFFTAG_JPEGDCTABLES :
case TIFFTAG_JPEGACTABLES :
case TIFFTAG_JPEGPROC :
case TIFFTAG_JPEGRESTARTINTERVAL :
return 1 ;
}
break ;
case COMPRESSION_CCITTRLE :
case COMPRESSION_CCITTRLEW :
case COMPRESSION_CCITTFAX3 :
case COMPRESSION_CCITTFAX4 :
switch ( tag )
{
case TIFFTAG_BADFAXLINES :
case TIFFTAG_CLEANFAXDATA :
case TIFFTAG_CONSECUTIVEBADFAXLINES :
return 1 ;
case TIFFTAG_GROUP3OPTIONS :
if ( tif - > tif_dir . td_compression = = COMPRESSION_CCITTFAX3 )
return 1 ;
break ;
case TIFFTAG_GROUP4OPTIONS :
if ( tif - > tif_dir . td_compression = = COMPRESSION_CCITTFAX4 )
return 1 ;
break ;
}
break ;
case COMPRESSION_JBIG :
/* No codec-specific tags */
break ;
case COMPRESSION_DEFLATE :
case COMPRESSION_ADOBE_DEFLATE :
if ( tag = = TIFFTAG_PREDICTOR )
return 1 ;
break ;
case COMPRESSION_PIXARLOG :
if ( tag = = TIFFTAG_PREDICTOR )
return 1 ;
break ;
case COMPRESSION_SGILOG :
case COMPRESSION_SGILOG24 :
/* No codec-specific tags */
break ;
case COMPRESSION_LZMA :
if ( tag = = TIFFTAG_PREDICTOR )
return 1 ;
break ;
case COMPRESSION_ZSTD :
if ( tag = = TIFFTAG_PREDICTOR )
return 1 ;
break ;
case COMPRESSION_LERC :
if ( tag = = TIFFTAG_LERC_PARAMETERS )
return 1 ;
break ;
}
return 0 ;
2012-02-29 23:01:28 +08:00
}