- Main Page
- Related Pages
- Classes
- Files

- File List
- File Members

# gdalexif.h

    00001 /******************************************************************************
    00002  * $Id: gdalexif.h 24549 2012-06-09 20:14:14Z rouault $
    00003  *
    00004  * Project:  JPEG JFIF Driver
    00005  * Purpose:  Implement GDAL JPEG Support based on IJG libjpeg.
    00006  * Author:   Frank Warmerdam, warmerdam@pobox.com
    00007  *
    00008  ******************************************************************************
    00009  * Copyright (c) 2000, Frank Warmerdam
    00010  *
    00011  * Permission is hereby granted, free of charge, to any person obtaining a
    00012  * copy of this software and associated documentation files (the "Software"),
    00013  * to deal in the Software without restriction, including without limitation
    00014  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
    00015  * and/or sell copies of the Software, and to permit persons to whom the
    00016  * Software is furnished to do so, subject to the following conditions:
    00017  *
    00018  * The above copyright notice and this permission notice shall be included
    00019  * in all copies or substantial portions of the Software.
    00020  *
    00021  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    00022  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    00023  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
    00024  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    00025  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    00026  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
    00027  * DEALINGS IN THE SOFTWARE.
    00028  ****************************************************************************/
    00029
    00030 #define EXIFOFFSETTAG 0x8769
    00031 #define INTEROPERABILITYOFFSET 0xA005
    00032 #define GPSOFFSETTAG     0x8825
    00033 #define MAXSTRINGLENGTH 65535
    00034
    00035 #ifdef RENAME_INTERNAL_LIBTIFF_SYMBOLS
    00036 #include "../frmts/gtiff/libtiff/gdal_libtiff_symbol_rename.h"
    00037 #endif
    00038
    00039 static const struct gpsname {
    00040     GUInt16     tag;
    00041     const char* name;
    00042 } gpstags [] = {
    00043     { 0x00, "EXIF_GPSVersionID" },
    00044     { 0x01, "EXIF_GPSLatitudeRef" },
    00045     { 0x02, "EXIF_GPSLatitude" },
    00046     { 0x03, "EXIF_GPSLongitudeRef" },
    00047     { 0x04, "EXIF_GPSLongitude" },
    00048     { 0x05, "EXIF_GPSAltitudeRef" },
    00049     { 0x06, "EXIF_GPSAltitude" },
    00050     { 0x07, "EXIF_GPSTimeStamp" },
    00051     { 0x08, "EXIF_GPSSatellites" },
    00052     { 0x09, "EXIF_GPSStatus" },
    00053     { 0x0a, "EXIF_GPSMeasureMode" },
    00054     { 0x0b, "EXIF_GPSDOP" },
    00055     { 0x0c, "EXIF_GPSSpeedRef"},
    00056     { 0x0d, "EXIF_GPSSpeed"},
    00057     { 0x0e, "EXIF_GPSTrackRef"},
    00058     { 0x0f, "EXIF_GPSTrack"},
    00059     { 0x10, "EXIF_GPSImgDirectionRef"},
    00060     { 0x11, "EXIF_GPSImgDirection"},
    00061     { 0x12, "EXIF_GPSMapDatum"},
    00062     { 0x13, "EXIF_GPSDestLatitudeRef"},
    00063     { 0x14, "EXIF_GPSDestLatitude"},
    00064     { 0x15, "EXIF_GPSDestLongitudeRef"},
    00065     { 0x16, "EXIF_GPSDestLongitude"},
    00066     { 0x17, "EXIF_GPSDestBearingRef"},
    00067     { 0x18, "EXIF_GPSDestBearing"},
    00068     { 0x19, "EXIF_GPSDestDistanceRef"},
    00069     { 0x1a, "EXIF_GPSDestDistance"},
    00070     { 0x1b, "EXIF_GPSProcessingMethod"},
    00071     { 0x1c, "EXIF_GPSAreaInformation"},
    00072     { 0x1d, "EXIF_GPSDateStamp"},
    00073     { 0x1e, "EXIF_GPSDifferential"},
    00074     { 0xffff,       ""}
    00075 };
    00076
    00077 static const struct tagname {
    00078   GUInt16       tag;
    00079   const char*   name;
    00080 } tagnames [] = {
    00081
    00082 //    { 0x100,  "EXIF_Image_Width"},
    00083 //    { 0x101,  "EXIF_Image_Length"},
    00084     { 0x102,    "EXIF_BitsPerSample"},
    00085     { 0x103,    "EXIF_Compression"},
    00086     { 0x106,    "EXIF_PhotometricInterpretation"},
    00087     { 0x10A,    "EXIF_Fill_Order"},
    00088     { 0x10D,    "EXIF_Document_Name"},
    00089     { 0x10E,    "EXIF_ImageDescription"},
    00090     { 0x10F,    "EXIF_Make"},
    00091     { 0x110,    "EXIF_Model"},
    00092     { 0x111,    "EXIF_StripOffsets"},
    00093     { 0x112,    "EXIF_Orientation"},
    00094     { 0x115,    "EXIF_SamplesPerPixel"},
    00095     { 0x116,    "EXIF_RowsPerStrip"},
    00096     { 0x117,    "EXIF_StripByteCounts"},
    00097     { 0x11A,    "EXIF_XResolution"},
    00098     { 0x11B,    "EXIF_YResolution"},
    00099     { 0x11C,    "EXIF_PlanarConfiguration"},
    00100     { 0x128,    "EXIF_ResolutionUnit"},
    00101     { 0x12D,    "EXIF_TransferFunction"},
    00102     { 0x131,    "EXIF_Software"},
    00103     { 0x132,    "EXIF_DateTime"},
    00104     { 0x13B,    "EXIF_Artist"},
    00105     { 0x13E,    "EXIF_WhitePoint"},
    00106     { 0x13F,    "EXIF_PrimaryChromaticities"},
    00107     { 0x156,    "EXIF_Transfer_Range"},
    00108     { 0x200,    "EXIF_JPEG_Proc"},
    00109     { 0x201,    "EXIF_JPEGInterchangeFormat"},
    00110     { 0x202,    "EXIF_JPEGInterchangeFormatLength"},
    00111     { 0x211,    "EXIF_YCbCrCoefficients"},
    00112     { 0x212,    "EXIF_YCbCrSubSampling"},
    00113     { 0x213,    "EXIF_YCbCrPositioning"},
    00114     { 0x214,    "EXIF_ReferenceBlackWhite"},
    00115     { 0x828D,   "EXIF_CFA_Repeat_Pattern_Dim"},
    00116     { 0x828E,   "EXIF_CFA_Pattern"},
    00117     { 0x828F,   "EXIF_Battery_Level"},
    00118     { 0x8298,   "EXIF_Copyright"},
    00119     { 0x829A,   "EXIF_ExposureTime"},
    00120     { 0x829D,   "EXIF_FNumber"},
    00121     { 0x83BB,   "EXIF_IPTC/NAA"},
    00122 //      { 0x8769,       "EXIF_Offset"},
    00123     { 0x8773,   "EXIF_Inter_Color_Profile"},
    00124     { 0x8822,   "EXIF_ExposureProgram"},
    00125     { 0x8824,   "EXIF_SpectralSensitivity"},
    00126 //      { 0x8825,       "EXIF_GPSOffset"},
    00127     { 0x8827,   "EXIF_ISOSpeedRatings"},
    00128     { 0x8828,   "EXIF_OECF"},
    00129     { 0x9000,   "EXIF_ExifVersion"},
    00130     { 0x9003,   "EXIF_DateTimeOriginal"},
    00131     { 0x9004,   "EXIF_DateTimeDigitized"},
    00132     { 0x9101,   "EXIF_ComponentsConfiguration"},
    00133     { 0x9102,   "EXIF_CompressedBitsPerPixel"},
    00134     { 0x9201,   "EXIF_ShutterSpeedValue"},
    00135     { 0x9202,   "EXIF_ApertureValue"},
    00136     { 0x9203,   "EXIF_BrightnessValue"},
    00137     { 0x9204,   "EXIF_ExposureBiasValue"},
    00138     { 0x9205,   "EXIF_MaxApertureValue"},
    00139     { 0x9206,   "EXIF_SubjectDistance"},
    00140     { 0x9207,   "EXIF_MeteringMode"},
    00141     { 0x9208,   "EXIF_LightSource"},
    00142     { 0x9209,   "EXIF_Flash"},
    00143     { 0x920A,   "EXIF_FocalLength"},
    00144     { 0x9214,   "EXIF_SubjectArea"},
    00145     { 0x927C,   "EXIF_MakerNote"},
    00146     { 0x9286,   "EXIF_UserComment"},
    00147     { 0x9290,   "EXIF_SubSecTime"},
    00148     { 0x9291,   "EXIF_SubSecTime_Original"},
    00149     { 0x9292,   "EXIF_SubSecTime_Digitized"},
    00150     { 0xA000,   "EXIF_FlashpixVersion"},
    00151     { 0xA001,   "EXIF_ColorSpace"},
    00152     { 0xA002,   "EXIF_PixelXDimension"},
    00153     { 0xA003,   "EXIF_PixelYDimension"},
    00154     { 0xA004,       "EXIF_RelatedSoundFile"},
    00155 //      { 0xA005,       "EXIF_InteroperabilityOffset"},
    00156     { 0xA20B,   "EXIF_FlashEnergy"},      // 0x920B in TIFF/EP
    00157     { 0xA20C,   "EXIF_SpatialFrequencyResponse"},   // 0x920C    -  -
    00158     { 0xA20E,   "EXIF_FocalPlaneXResolution"},     // 0x920E    -  -
    00159     { 0xA20F,   "EXIF_FocalPlaneYResolution"},     // 0x920F    -  -
    00160     { 0xA210,   "EXIF_FocalPlaneResolutionUnit"},  // 0x9210    -  -
    00161     { 0xA214,   "EXIF_SubjectLocation"},        // 0x9214    -  -
    00162     { 0xA215,   "EXIF_ExposureIndex"},          // 0x9215    -  -
    00163     { 0xA217,   "EXIF_SensingMethod"},          // 0x9217    -  -
    00164     { 0xA300,   "EXIF_FileSource"},
    00165     { 0xA301,   "EXIF_SceneType"},
    00166     { 0xA302,   "EXIF_CFAPattern"},
    00167     { 0xA401,   "EXIF_CustomRendered"},
    00168     { 0xA402,   "EXIF_ExposureMode"},
    00169     { 0XA403,   "EXIF_WhiteBalance"},
    00170     { 0xA404,   "EXIF_DigitalZoomRatio"},
    00171     { 0xA405,   "EXIF_FocalLengthIn35mmFilm"},
    00172     { 0xA406,   "EXIF_SceneCaptureType"},
    00173     { 0xA407,   "EXIF_GainControl"},
    00174     { 0xA408,   "EXIF_Contrast"},
    00175     { 0xA409,   "EXIF_Saturation"},
    00176     { 0xA40A,   "EXIF_Sharpness"},
    00177     { 0xA40B,   "EXIF_DeviceSettingDescription"},
    00178     { 0xA40C,   "EXIF_SubjectDistanceRange"},
    00179     { 0xA420,   "EXIF_ImageUniqueID"},
    00180     { 0x0000,       ""}
    00181 };
    00182
    00183
    00184 static const struct intr_tag {
    00185   GInt16        tag;
    00186   const char*   name;
    00187 } intr_tags [] = {
    00188
    00189     { 0x1,      "EXIF_Interoperability_Index"},
    00190     { 0x2,      "EXIF_Interoperability_Version"},
    00191     { 0x1000,   "EXIF_Related_Image_File_Format"},
    00192     { 0x1001,   "EXIF_Related_Image_Width"},
    00193     { 0x1002,   "EXIF_Related_Image_Length"},
    00194     { 0x0000,       ""}
    00195 };
    00196
    00197 typedef enum {
    00198         TIFF_NOTYPE     = 0,    /* placeholder */
    00199         TIFF_BYTE       = 1,    /* 8-bit unsigned integer */
    00200         TIFF_ASCII      = 2,    /* 8-bit bytes w/ last byte null */
    00201         TIFF_SHORT      = 3,    /* 16-bit unsigned integer */
    00202         TIFF_LONG       = 4,    /* 32-bit unsigned integer */
    00203         TIFF_RATIONAL   = 5,    /* 64-bit unsigned fraction */
    00204         TIFF_SBYTE      = 6,    /* !8-bit signed integer */
    00205         TIFF_UNDEFINED  = 7,    /* !8-bit untyped data */
    00206         TIFF_SSHORT     = 8,    /* !16-bit signed integer */
    00207         TIFF_SLONG      = 9,    /* !32-bit signed integer */
    00208         TIFF_SRATIONAL  = 10,   /* !64-bit signed fraction */
    00209         TIFF_FLOAT      = 11,   /* !32-bit IEEE floating point */
    00210         TIFF_DOUBLE     = 12,   /* !64-bit IEEE floating point */
    00211         TIFF_IFD        = 13    /* %32-bit unsigned integer (offset) */
    00212 } TIFFDataType;
    00213
    00214 /*
    00215  * TIFF Image File Directories are comprised of a table of field
    00216  * descriptors of the form shown below.  The table is sorted in
    00217  * ascending order by tag.  The values associated with each entry are
    00218  * disjoint and may appear anywhere in the file (so long as they are
    00219  * placed on a word boundary).
    00220  *
    00221  * If the value is 4 bytes or less, then it is placed in the offset
    00222  * field to save space.  If the value is less than 4 bytes, it is
    00223  * left-justified in the offset field.
    00224  */
    00225 typedef struct {
    00226         GUInt16          tdir_tag;       /* see below */
    00227         GUInt16          tdir_type;      /* data type; see below */
    00228         GUInt32          tdir_count;     /* number of items; length in spec */
    00229         GUInt32          tdir_offset;    /* byte offset to field data */
    00230 } TIFFDirEntry;
    00231
    00232 CPL_C_START
    00233 extern  int TIFFDataWidth(TIFFDataType);    /* table of tag datatype widths */
    00234 extern  void TIFFSwabShort(GUInt16*);
    00235 extern  void TIFFSwabLong(GUInt32*);
    00236 extern  void TIFFSwabDouble(double*);
    00237 extern  void TIFFSwabArrayOfShort(GUInt16*, unsigned long);
    00238 extern  void TIFFSwabArrayOfLong(GUInt32*, unsigned long);
    00239 extern  void TIFFSwabArrayOfDouble(double*, unsigned long);
    00240 CPL_C_END
    00241

Generated for GDAL by 1.7.1.