• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

src/processing/TIFFTags.h

00001 #ifndef FCAM_TIFFTAGS_H
00002 #define FCAM_TIFFTAGS_H
00003 
00004 #include "string.h"
00005 #include <string>
00006 #include <vector>
00007 #include <stdint.h>
00008 
00009 namespace FCam {
00010 
00011     // TIFF basic structures
00012     enum TiffType {
00013         TIFF_BYTE = 1,
00014         TIFF_ASCII = 2,
00015         TIFF_SHORT = 3,
00016         TIFF_LONG = 4,
00017         TIFF_RATIONAL = 5,
00018         TIFF_SBYTE = 6,
00019         TIFF_UNDEFINED = 7,
00020         TIFF_SSHORT = 8,
00021         TIFF_SLONG = 9,
00022         TIFF_SRATIONAL = 10,
00023         TIFF_FLOAT = 11,
00024         TIFF_DOUBLE=12,
00025         TIFF_IFD=13
00026     };
00027 
00028     struct TiffEntryInfo {
00029         const char *name;
00030         uint16_t tag;
00031         TiffType type;
00032     };
00033 
00034     struct TiffRational {
00035         uint32_t numerator;
00036         uint32_t denominator;
00037     };
00038 
00039     struct RawTiffIfdEntry {
00040         uint16_t tag;
00041         uint16_t type;
00042         uint32_t count;
00043         uint32_t offset;
00044     };
00045 
00046     // TIFF header constants
00047     const uint32_t headerBytes = 8;
00048     const uint16_t littleEndianMarker = 0x4949;
00049     const uint16_t bigEndianMarker = 0x4D4D;
00050     const uint16_t tiffMagicNumber = 42;
00051 
00052     // TIFF IFD entry information table and fast lookup functions
00053     extern const TiffEntryInfo tiffEntryTypes[];
00054     const TiffEntryInfo *tiffEntryLookup(uint16_t tag);
00055     const TiffEntryInfo *tiffEntryLookup(const std::string &entryName);
00056 
00057     // Hard-coded tag values for various TIFF tags, for faster parsing/filtering
00058     const uint16_t        TIFF_TAG_NewSubFileType                      = 254;
00059     const uint16_t        TIFF_TAG_ImageWidth                          = 256;
00060     const uint16_t        TIFF_TAG_ImageLength                         = 257;
00061     const uint16_t        TIFF_TAG_BitsPerSample                       = 258;
00062     const uint16_t        TIFF_TAG_Compression                         = 259;
00063     const uint16_t        TIFF_TAG_PhotometricInterpretation           = 262;
00064     const uint16_t        TIFF_TAG_Make                                = 271;
00065     const uint16_t        TIFF_TAG_Model                               = 272;
00066     const uint16_t        TIFF_TAG_StripOffsets                        = 273;
00067     const uint16_t        TIFF_TAG_Orientation                         = 274;
00068     const uint16_t        TIFF_TAG_SamplesPerPixel                     = 277;
00069     const uint16_t        TIFF_TAG_RowsPerStrip                        = 278;
00070     const uint16_t        TIFF_TAG_StripByteCounts                     = 279;
00071     const uint16_t        TIFF_TAG_PlanarConfiguration                 = 284;
00072     const uint16_t        TIFF_TAG_ResolutionUnit                      = 296;
00073     const uint16_t        TIFF_TAG_Software                            = 305;
00074     const uint16_t        TIFF_TAG_DateTime                            = 306;
00075 
00076     const uint16_t        TIFFEP_TAG_CFARepeatPatternDim               = 33421;
00077     const uint16_t        TIFFEP_TAG_CFAPattern                        = 33422;
00078     const uint16_t        TIFFEP_TAG_Flash                             = 37385;
00079     const uint16_t        TIFFEP_TAG_TIFFEPStandardID                  = 37398;
00080 
00081     // tags from first TIFF supplement
00082     const uint16_t        TIFF_TAG_SubIFDs                             = 330;
00083 
00084     // DNG tags
00085     const uint16_t        DNG_TAG_DNGVersion                           = 50706;
00086     const uint16_t        DNG_TAG_DNGBackwardVersion                   = 50707;
00087     const uint16_t        DNG_TAG_UniqueCameraModel                    = 50708;
00088     const uint16_t        DNG_TAG_LocalizedCameraModel                 = 50709;
00089     const uint16_t        DNG_TAG_CFAPlaneColor                        = 50710;
00090     const uint16_t        DNG_TAG_CFALayout                            = 50711;
00091     const uint16_t        DNG_TAG_BlackLevelRepeatDim                  = 50713;
00092     const uint16_t        DNG_TAG_BlackLevel                           = 50714;
00093     const uint16_t        DNG_TAG_BlackLevelDeltaH                     = 50715;
00094     const uint16_t        DNG_TAG_BlackLevelDeltaV                     = 50716;
00095     const uint16_t        DNG_TAG_WhiteLevel                           = 50717;
00096     const uint16_t        DNG_TAG_DefaultScale                         = 50718;
00097     const uint16_t        DNG_TAG_DefaultCropOrigin                    = 50719;
00098     const uint16_t        DNG_TAG_DefaultCropSize                      = 50720;
00099     const uint16_t        DNG_TAG_ColorMatrix1                         = 50721;
00100     const uint16_t        DNG_TAG_ColorMatrix2                         = 50722;
00101     const uint16_t        DNG_TAG_CameraCalibration1                   = 50723;
00102     const uint16_t        DNG_TAG_CameraCalibration2                   = 50724;
00103     const uint16_t        DNG_TAG_ReductionMatrix1                     = 50725;
00104     const uint16_t        DNG_TAG_ReductionMatrix2                     = 50726;
00105     const uint16_t        DNG_TAG_AnalogBalance                        = 50727;
00106     const uint16_t        DNG_TAG_AsShotNeutral                        = 50728;
00107     const uint16_t        DNG_TAG_AsShotWhiteXY                        = 50729;
00108     const uint16_t        DNG_TAG_BaselineExposure                     = 50730;
00109     const uint16_t        DNG_TAG_BaselineNoise                        = 50731;
00110     const uint16_t        DNG_TAG_BaselineSharpness                    = 50732;
00111     const uint16_t        DNG_TAG_BayerGreenSplit                      = 50733;
00112     const uint16_t        DNG_TAG_LinearResponseLimit                  = 50734;
00113     const uint16_t        DNG_TAG_LensInfo                             = 50736;
00114     const uint16_t        DNG_TAG_ChromaBlurRadius                     = 50737;
00115     const uint16_t        DNG_TAG_AntiAliasStrength                    = 50738;
00116     const uint16_t        DNG_TAG_ShadowScale                          = 50739;
00117     const uint16_t        DNG_TAG_DNGPrivateData                       = 50740;
00118     const uint16_t        DNG_TAG_MakerNoteSafety                      = 50741;
00119     const uint16_t        DNG_TAG_CalibrationIlluminant1               = 50778;
00120     const uint16_t        DNG_TAG_CalibrationIlluminant2               = 50779;
00121     const uint16_t        DNG_TAG_BestQualityScale                     = 50780;
00122     const uint16_t        DNG_TAG_ActiveArea                           = 50829;
00123     const uint16_t        DNG_TAG_MaskedAreas                          = 50830;
00124 
00125     // tags from version 1.3.0.0
00126     const uint16_t        DNG_TAG_NoiseProfile                         = 51041;
00127 
00128     // EXIF tags
00129     const uint16_t        EXIF_TAG_ExifIfd                             = 34665;
00130     const uint16_t        EXIF_TAG_ExposureTime                        = 33434;
00131     const uint16_t        EXIF_TAG_FNumber                             = 33437;
00132     const uint16_t        EXIF_TAG_FocalLength                         = 37386;
00133     const uint16_t        EXIF_TAG_SubsecTime                          = 37520;
00134     const uint16_t        EXIF_TAG_ISOSpeedRatings                     = 34855;
00135     const uint16_t        EXIF_TAG_SensitivityType                     = 34864;
00136 
00137     // Various values for the above fields
00138 
00139     const uint32_t TIFF_NewSubfileType_FullRAW = 0;
00140     const uint32_t TIFF_NewSubfileType_MainPreview = 1;
00141     const uint32_t TIFF_NewSubfileType_OtherPreview = 0x10001;
00142     const uint32_t TIFF_NewSubfileType_DEFAULT = 0;
00143 
00144     const uint16_t TIFF_PhotometricInterpretation_WhiteIsZero = 0;
00145     const uint16_t TIFF_PhotometricInterpretation_BlackIsZero = 1;
00146     const uint16_t TIFF_PhotometricInterpretation_RGB = 2;
00147     const uint16_t TIFF_PhotometricInterpretation_PaletteRGB = 3;
00148     const uint16_t TIFF_PhotometricInterpretation_TransparencyMask = 4;
00149     const uint16_t TIFF_PhotometricInterpretation_CMYK = 5;
00150     const uint16_t TIFF_PhotometricInterpretation_YCbCr = 6;
00151     const uint16_t TIFF_PhotometricInterpretation_CIELAB = 8;
00152     const uint16_t TIFF_PhotometricInterpretation_ICCLAB = 9;
00153     const uint16_t TIFF_PhotometricInterpretation_ITULAB = 10;
00154     const uint16_t TIFF_PhotometricInterpretation_CFA = 32803;
00155     const uint16_t TIFF_PhotometricInterpretation_LinearRaw = 34892;
00156 
00157     const uint16_t TIFF_Compression_Uncompressed = 1;
00158     const uint16_t TIFF_Compression_LZW = 5;
00159     const uint16_t TIFF_Compression_JPEG_old = 6;
00160     const uint16_t TIFF_Compression_JPEG = 7;
00161     const uint16_t TIFF_Compression_DEFAULT = TIFF_Compression_Uncompressed;
00162 
00163     // First term is what 0th row represents, the second is what 0th column represents
00164     const uint16_t TIFF_Orientation_TopLeft = 1;
00165     const uint16_t TIFF_Orientation_TopRight = 2;
00166     const uint16_t TIFF_Orientation_BottomLeft = 3;
00167     const uint16_t TIFF_Orientation_BottomRight = 4;
00168     const uint16_t TIFF_Orientation_LeftTop = 5;
00169     const uint16_t TIFF_Orientation_RightTop = 6;
00170     const uint16_t TIFF_Orientation_LeftBottom = 7;
00171     const uint16_t TIFF_Orientation_RightBottom = 8;
00172 
00173     const uint16_t TIFF_SamplesPerPixel_DEFAULT = 1;
00174 
00175     const uint32_t TIFF_RowsPerStrip_DEFAULT = 0xFFFFFFFF;
00176 
00177     const char TIFFEP_CFAPattern_RGGB[] = {00,01,01,02};
00178     const char TIFFEP_CFAPattern_BGGR[] = {02,01,01,00};
00179     const char TIFFEP_CFAPattern_GRBG[] = {01,00,02,01};
00180     const char TIFFEP_CFAPattern_GBRG[] = {01,02,00,01};
00181 
00182     // Table of calibration illuminant color temperatures
00183     const unsigned int DNG_CalibrationIlluminant_Values = 26;
00184     const unsigned int DNG_CalibrationIlluminant_Temp[] = {
00185         0, // 0 = Unknown
00186         // Values below from personal preference, less
00187         // known internet sources.
00188         6500, // 1 = Daylight
00189         5000, // 2 = Fluorescent
00190         3200, // 3 = Tungsten (incandescent light)
00191         5600, // 4 = Flash
00192         0,    // 5 = invalid
00193         0,    // 6 = invalid
00194         0,    // 7 = invalid
00195         0,    // 8 = invalid
00196         6500, // 9 = Fine weather
00197         6000, // 10 = Cloudy weather
00198         8000, // 11 = Shade
00199         // Values below from Wikipedia
00200         6430, // 12 = Daylight fluorescent (D 5700 - 7100K)
00201         6350, // 13 = Day white fluorescent (N 4600 - 5400K)
00202         4230, // 14 = Cool white fluorescent (W 3900 - 4500K)
00203         3450, // 15 = White fluorescent (WW 3200 - 3700K)
00204         0,    // 16 = Invalid
00205         2856, // 17 = Standard light A
00206         4874, // 18 = Standard light B
00207         6774, // 19 = Standard light C
00208         5503, // 20 = D55
00209         6504, // 21 = D65
00210         7504, // 22 = D75
00211         5003, // 23 = D50
00212         // Value from random internet searching
00213         3200, // 24 = ISO studio tungsten
00214         0     // > 25 = Other light source
00215     };
00216     const uint16_t DNG_TAG_CalibrationIlluminant_StdA = 17;
00217     const uint16_t DNG_TAG_CalibrationIlluminant_D65 = 21;
00218 
00219     const uint16_t EXIF_TAG_SensitivityType_Unknown = 0;
00220     const uint16_t EXIF_TAG_SensitivityType_SOS = 1;
00221     const uint16_t EXIF_TAG_SensitivityType_REI = 2;
00222     const uint16_t EXIF_TAG_SensitivityType_ISO = 3;
00223     const uint16_t EXIF_TAG_SensitivityType_SOS_REI = 4;
00224     const uint16_t EXIF_TAG_SensitivityType_SOS_ISO = 5;
00225     const uint16_t EXIF_TAG_SensitivityType_REI_ISO = 6;
00226     const uint16_t EXIF_TAG_SensitivityType_SOS_REI_ISO = 7;
00227 
00228 }
00229 
00230 #endif

Generated on Fri Sep 24 2010 15:53:00 for FCam by  doxygen 1.7.1