/src/FreeImage/Source/Metadata/TagLib.cpp
C++ | 1617 lines | 1392 code | 83 blank | 142 comment | 29 complexity | d8f00f55a64e898973560be2b48bf29e MD5 | raw file
Large files files are truncated, but you can click here to view the full file
1// ========================================================== 2// Tag library 3// 4// Design and implementation by 5// - Hervé Drolon <drolon@infonie.fr> 6// 7// This file is part of FreeImage 3 8// 9// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY 10// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES 11// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE 12// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED 13// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT 14// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY 15// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL 16// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER 17// THIS DISCLAIMER. 18// 19// Use at your own risk! 20// ========================================================== 21 22// ========================================================== 23// Implementation notes : 24// ---------------------- 25// The tag info tables declared in this file should probably 26// be loaded from an XML file. 27// This would allow internationalization features and also 28// more extensibility. 29// Maybe in a future release ? 30// ========================================================== 31 32#ifdef _MSC_VER 33#pragma warning (disable : 4786) // identifier was truncated to 'number' characters 34#endif 35 36#include "FreeImage.h" 37#include "Utilities.h" 38#include "FreeImageTag.h" 39 40/** 41 HOW-TO : add a new TagInfo table 42 -------------------------------------------------------------------------- 43 1) add a table identifier in the TagLib class definition (see enum MDMODEL) 44 2) declare the tag table as static and use a 0/NULL value as last entry 45 3) initialize the table in TagLib::TagLib 46 4) provide a conversion in TagLib::getFreeImageModel 47*/ 48 49// -------------------------------------------------------------------------- 50// EXIF standard tags definition 51// -------------------------------------------------------------------------- 52 53static TagInfo 54 exif_exif_tag_table[] = 55 { 56 { 0x0100, (char *) "ImageWidth", (char *) "Image width"}, 57 { 0x0101, (char *) "ImageLength", (char *) "Image height"}, 58 { 0x0102, (char *) "BitsPerSample", (char *) "Number of bits per component"}, 59 { 0x0103, (char *) "Compression", (char *) "Compression scheme"}, 60 { 0x0106, (char *) "PhotometricInterpretation", (char *) "Pixel composition"}, 61 { 0x010A, (char *) "FillOrder", (char*) NULL}, 62 { 0x010D, (char *) "DocumentName", (char *) NULL}, 63 { 0x010E, (char *) "ImageDescription", (char *) "Image title"}, 64 { 0x010F, (char *) "Make", (char *) "Image input equipment manufacturer"}, 65 { 0x0110, (char *) "Model", (char *) "Image input equipment model"}, 66 { 0x0111, (char *) "StripOffsets", (char *) "Image data location"}, 67 { 0x0112, (char *) "Orientation", (char *) "Orientation of image"}, 68 { 0x0115, (char *) "SamplesPerPixel", (char *) "Number of components"}, 69 { 0x0116, (char *) "RowsPerStrip", (char *) "Number of rows per strip"}, 70 { 0x0117, (char *) "StripByteCounts", (char *) "Bytes per compressed strip"}, 71 { 0x011A, (char *) "XResolution", (char *) "Image resolution in width direction"}, 72 { 0x011B, (char *) "YResolution", (char *) "Image resolution in height direction"}, 73 { 0x011C, (char *) "PlanarConfiguration", (char *) "Image data arrangement"}, 74 { 0x011D, (char *) "PageName", (char *) "Name of the page"}, 75 { 0x011E, (char *) "XPosition", (char *) "X position of the image"}, 76 { 0x011F, (char *) "YPosition", (char *) "Y position of the image"}, 77 { 0x0128, (char *) "ResolutionUnit", (char *) "Unit of X and Y resolution"}, 78 { 0x0129, (char *) "PageNumber", (char *) "Page number"}, 79 { 0x012D, (char *) "TransferFunction", (char *) "Transfer function"}, 80 { 0x0131, (char *) "Software", (char *) "Software used"}, 81 { 0x0132, (char *) "DateTime", (char *) "File change date and time"}, 82 { 0x013B, (char *) "Artist", (char *) "Person who created the image"}, 83 { 0x013C, (char *) "HostComputer", (char *) "Host computer used to generate the image"}, 84 { 0x013E, (char *) "WhitePoint", (char *) "White point chromaticity"}, 85 { 0x013F, (char *) "PrimaryChromaticities", (char *) "Chromaticities of primaries"}, 86 { 0x0156, (char *) "TransferRange", (char *) NULL}, 87 { 0x0200, (char *) "JPEGProc", (char *) NULL}, 88 { 0x0201, (char *) "JPEGInterchangeFormat", (char *) "Offset to JPEG SOI"}, 89 { 0x0202, (char *) "JPEGInterchangeFormatLength", (char *) "Bytes of JPEG data"}, 90 { 0x0211, (char *) "YCbCrCoefficients", (char *) "Color space transformation matrix coefficients"}, 91 { 0x0212, (char *) "YCbCrSubSampling", (char *) "Subsampling ratio of Y to C"}, 92 { 0x0213, (char *) "YCbCrPositioning", (char *) "Y and C positioning"}, 93 { 0x0214, (char *) "ReferenceBlackWhite", (char *) "Pair of black and white reference values"}, 94 { 0x828D, (char *) "CFARepeatPatternDim", (char *) NULL}, 95 { 0x828E, (char *) "CFAPattern", (char *) NULL}, 96 { 0x828F, (char *) "BatteryLevel", (char *) NULL}, 97 { 0x8298, (char *) "Copyright", (char *) "Copyright holder"}, 98 { 0x829A, (char *) "ExposureTime", (char *) "Exposure time"}, 99 { 0x829D, (char *) "FNumber", (char *) "F number"}, 100 { 0x83BB, (char *) "IPTC/NAA", (char *) NULL}, 101 { 0x8773, (char *) "InterColorProfile", (char *) NULL}, 102 { 0x8822, (char *) "ExposureProgram", (char *) "Exposure program"}, 103 { 0x8824, (char *) "SpectralSensitivity", (char *) "Spectral sensitivity"}, 104 { 0x8825, (char *) "GPSInfo", (char *) NULL}, 105 { 0x8827, (char *) "ISOSpeedRatings", (char *) "ISO speed rating"}, 106 { 0x8828, (char *) "OECF", (char *) "Optoelectric conversion factor"}, 107 { 0x9000, (char *) "ExifVersion", (char *) "Exif version"}, 108 { 0x9003, (char *) "DateTimeOriginal", (char *) "Date and time of original data generation"}, 109 { 0x9004, (char *) "DateTimeDigitized", (char *) "Date and time of digital data generation"}, 110 { 0x9101, (char *) "ComponentsConfiguration", (char *) "Meaning of each component"}, 111 { 0x9102, (char *) "CompressedBitsPerPixel", (char *) "Image compression mode"}, 112 { 0x9201, (char *) "ShutterSpeedValue", (char *) "Shutter speed"}, 113 { 0x9202, (char *) "ApertureValue", (char *) "Aperture"}, 114 { 0x9203, (char *) "BrightnessValue", (char *) "Brightness"}, 115 { 0x9204, (char *) "ExposureBiasValue", (char *) "Exposure bias"}, 116 { 0x9205, (char *) "MaxApertureValue", (char *) "Maximum lens aperture"}, 117 { 0x9206, (char *) "SubjectDistance", (char *) "Subject distance"}, 118 { 0x9207, (char *) "MeteringMode", (char *) "Metering mode"}, 119 { 0x9208, (char *) "LightSource", (char *) "Light source"}, 120 { 0x9209, (char *) "Flash", (char *) "Flash"}, 121 { 0x920A, (char *) "FocalLength", (char *) "Lens focal length"}, 122 { 0x9214, (char *) "SubjectArea", (char *) "Subject area"}, 123 { 0x927C, (char *) "MakerNote", (char *) "Manufacturer notes"}, 124 { 0x9286, (char *) "UserComment", (char *) "User comments"}, 125 { 0x9290, (char *) "SubSecTime", (char *) "DateTime subseconds"}, 126 { 0x9291, (char *) "SubSecTimeOriginal", (char *) "DateTimeOriginal subseconds"}, 127 { 0x9292, (char *) "SubSecTimeDigitized", (char *) "DateTimeDigitized subseconds"}, 128 { 0xA000, (char *) "FlashPixVersion", (char *) "Supported Flashpix version"}, 129 { 0xA001, (char *) "ColorSpace", (char *) "Color space information"}, 130 { 0xA002, (char *) "PixelXDimension", (char *) "Valid image width"}, 131 { 0xA003, (char *) "PixelYDimension", (char *) "Valid image height"}, 132 { 0xA004, (char *) "RelatedSoundFile", (char *) "Related audio file"}, 133 { 0xA005, (char *) "InteroperabilityOffset", (char *) NULL}, 134 { 0xA20B, (char *) "FlashEnergy", (char *) "Flash energy"}, 135 { 0xA20C, (char *) "SpatialFrequencyResponse", (char *) "Spatial frequency response"}, 136 { 0xA20E, (char *) "FocalPlaneXResolution", (char *) "Focal plane X resolution"}, 137 { 0xA20F, (char *) "FocalPlaneYResolution", (char *) "Focal plane Y resolution"}, 138 { 0xA210, (char *) "FocalPlaneResolutionUnit", (char *) "Focal plane resolution unit"}, 139 { 0xA214, (char *) "SubjectLocation", (char *) "Subject location"}, 140 { 0xA215, (char *) "ExposureIndex", (char *) "Exposure index"}, 141 { 0xA217, (char *) "SensingMethod", (char *) "Sensing method"}, 142 { 0xA300, (char *) "FileSrc", (char *) "File source"}, 143 { 0xA301, (char *) "SceneType", (char *) "Scene type"}, 144 { 0xA302, (char *) "CFAPattern", (char *) "CFA pattern"}, 145 { 0xA401, (char *) "CustomRendered", (char *) "Custom image processing"}, 146 { 0xA402, (char *) "ExposureMode", (char *) "Exposure mode"}, 147 { 0xA403, (char *) "WhiteBalance", (char *) "White balance"}, 148 { 0xA404, (char *) "DigitalZoomRatio", (char *) "Digital zoom ratio"}, 149 { 0xA405, (char *) "FocalLengthIn35mmFilm", (char *) "Focal length in 35 mm film"}, 150 { 0xA406, (char *) "SceneCaptureType", (char *) "Scene capture type"}, 151 { 0xA407, (char *) "GainControl", (char *) "Gain control"}, 152 { 0xA408, (char *) "Contrast", (char *) "Contrast"}, 153 { 0xA409, (char *) "Saturation", (char *) "Saturation"}, 154 { 0xA40A, (char *) "Sharpness", (char *) "Sharpness"}, 155 { 0xA40B, (char *) "DeviceSettingDescription", (char *) "Device settings description"}, 156 { 0xA40C, (char *) "SubjectDistanceRange", (char *) "Subject distance range"}, 157 { 0xA420, (char *) "ImageUniqueID", (char *) "Unique image ID"}, 158 { 0xA430, (char *) "CameraOwnerName", (char *) "Camera owner name"}, 159 { 0xA431, (char *) "BodySerialNumber", (char *) "Body serial number"}, 160 { 0xA432, (char *) "LensSpecification", (char *) "Lens specification"}, 161 { 0xA433, (char *) "LensMake", (char *) "Lens make"}, 162 { 0xA434, (char *) "LensModel", (char *) "Lens model"}, 163 { 0xA435, (char *) "LensSerialNumber", (char *) "Lens serial number"}, 164 165 // These tags are not part of the Exiv v2.3 specifications but are often loaded by applications as Exif data 166 { 0x4746, (char *) "Rating", (char *) "Rating tag used by Windows"}, 167 { 0x4749, (char *) "RatingPercent", (char *) "Rating tag used by Windows, value in percent"}, 168 { 0x9C9B, (char *) "XPTitle", (char *) "Title tag used by Windows, encoded in UCS2"}, 169 { 0x9C9C, (char *) "XPComment", (char *) "Comment tag used by Windows, encoded in UCS2"}, 170 { 0x9C9D, (char *) "XPAuthor", (char *) "Author tag used by Windows, encoded in UCS2"}, 171 { 0x9C9E, (char *) "XPKeywords", (char *) "Keywords tag used by Windows, encoded in UCS2"}, 172 { 0x9C9F, (char *) "XPSubject", (char *) "Subject tag used by Windows, encoded in UCS2"}, 173 { 0x0000, (char *) NULL, (char *) NULL} 174 }; 175 176// -------------------------------------------------------------------------- 177// EXIF GPS tags definition 178// -------------------------------------------------------------------------- 179 180static TagInfo 181 exif_gps_tag_table[] = 182 { 183 { 0x0000, (char *) "GPSVersionID", (char *) "GPS tag version"}, 184 { 0x0001, (char *) "GPSLatitudeRef", (char *) "North or South Latitude"}, 185 { 0x0002, (char *) "GPSLatitude", (char *) "Latitude"}, 186 { 0x0003, (char *) "GPSLongitudeRef", (char *) "East or West Longitude"}, 187 { 0x0004, (char *) "GPSLongitude", (char *) "Longitude"}, 188 { 0x0005, (char *) "GPSAltitudeRef", (char *) "Altitude reference"}, 189 { 0x0006, (char *) "GPSAltitude", (char *) "Altitude"}, 190 { 0x0007, (char *) "GPSTimeStamp", (char *) "GPS time (atomic clock)"}, 191 { 0x0008, (char *) "GPSSatellites", (char *) "GPS satellites used for measurement"}, 192 { 0x0009, (char *) "GPSStatus", (char *) "GPS receiver status"}, 193 { 0x000A, (char *) "GPSMeasureMode", (char *) "GPS measurement mode"}, 194 { 0x000B, (char *) "GPSDOP", (char *) "Measurement precision"}, 195 { 0x000C, (char *) "GPSSpeedRef", (char *) "Speed unit"}, 196 { 0x000D, (char *) "GPSSpeed", (char *) "Speed of GPS receiver"}, 197 { 0x000E, (char *) "GPSTrackRef", (char *) "Reference for direction of movement"}, 198 { 0x000F, (char *) "GPSTrack", (char *) "Direction of movement"}, 199 { 0x0010, (char *) "GPSImgDirectionRef", (char *) "Reference for direction of image"}, 200 { 0x0011, (char *) "GPSImgDirection", (char *) "Direction of image"}, 201 { 0x0012, (char *) "GPSMapDatum", (char *) "Geodetic survey data used"}, 202 { 0x0013, (char *) "GPSDestLatitudeRef", (char *) "Reference for latitude of destination"}, 203 { 0x0014, (char *) "GPSDestLatitude", (char *) "Latitude of destination"}, 204 { 0x0015, (char *) "GPSDestLongitudeRef", (char *) "Reference for longitude of destination"}, 205 { 0x0016, (char *) "GPSDestLongitude", (char *) "Longitude of destination"}, 206 { 0x0017, (char *) "GPSDestBearingRef", (char *) "Reference for bearing of destination"}, 207 { 0x0018, (char *) "GPSDestBearing", (char *) "Bearing of destination"}, 208 { 0x0019, (char *) "GPSDestDistanceRef", (char *) "Reference for distance to destination"}, 209 { 0x001A, (char *) "GPSDestDistance", (char *) "Distance to destination"}, 210 { 0x001B, (char *) "GPSProcessingMethod", (char *) "Name of GPS processing method"}, 211 { 0x001C, (char *) "GPSAreaInformation", (char *) "Name of GPS area"}, 212 { 0x001D, (char *) "GPSDateStamp", (char *) "GPS date"}, 213 { 0x001E, (char *) "GPSDifferential", (char *) "GPS differential correction"}, 214 { 0x0000, (char *) NULL, (char *) NULL} 215 }; 216 217// -------------------------------------------------------------------------- 218// EXIF interoperability tags definition 219// -------------------------------------------------------------------------- 220 221static TagInfo 222 exif_interop_tag_table[] = 223 { 224 { 0x0001, (char *) "InteroperabilityIndex", (char *) "Interoperability Identification"}, 225 { 0x0002, (char *) "InteroperabilityVersion", (char *) "Interoperability version"}, 226 { 0x1000, (char *) "RelatedImageFileFormat", (char *) "File format of image file"}, 227 { 0x1001, (char *) "RelatedImageWidth", (char *) "Image width"}, 228 { 0x1002, (char *) "RelatedImageLength", (char *) "Image height"}, 229 { 0x0000, (char *) NULL, (char *) NULL} 230 }; 231 232// -------------------------------------------------------------------------- 233// EXIF maker note tags definition 234// -------------------------------------------------------------------------- 235 236/** 237Canon maker note 238*/ 239static TagInfo 240 exif_canon_tag_table[] = 241 { 242 { 0x0001, (char *) "CanonCameraSettings", (char *) "Canon CameraSettings Tags"}, 243 { 0x0002, (char *) "CanonFocalLength", (char *) "Canon FocalLength Tags"}, 244 { 0x0003, (char *) "CanonFlashInfo?", (char *) NULL}, 245 { 0x0004, (char *) "CanonShotInfo", (char *) "Canon ShotInfo Tags"}, 246 { 0x0005, (char *) "CanonPanorama", (char *) "Canon Panorama Tags"}, 247 { 0x0006, (char *) "CanonImageType", (char *) NULL}, 248 { 0x0007, (char *) "CanonFirmwareVersion", (char *) NULL}, 249 { 0x0008, (char *) "FileNumber", (char *) NULL}, 250 { 0x0009, (char *) "OwnerName", (char *) NULL}, 251 { 0x000A, (char *) "UnknownD30", (char *) "Canon UnknownD30 Tags"}, 252 { 0x000C, (char *) "SerialNumber", (char *) NULL}, 253 { 0x000D, (char *) "CanonCameraInfo", (char *) "Canon CameraInfo Tags"}, 254 { 0x000E, (char *) "CanonFileLength", (char *) NULL}, 255 { 0x000F, (char *) "CanonCustomFunctions", (char *) "Custom Functions"}, 256 { 0x0010, (char *) "CanonModelID", (char *) NULL}, 257 { 0x0012, (char *) "CanonAFInfo", (char *) "Canon AFInfo Tags"}, 258 { 0x0013, (char *) "ThumbnailImageValidArea", (char *) NULL}, 259 { 0x0015, (char *) "SerialNumberFormat", (char *) NULL}, 260 { 0x001A, (char *) "SuperMacro", (char *) NULL}, 261 { 0x001C, (char *) "DateStampMode", (char *) NULL}, 262 { 0x001D, (char *) "MyColors", (char *) NULL}, 263 { 0x001E, (char *) "FirmwareRevision", (char *) NULL}, 264 { 0x0023, (char *) "Categories", (char *) NULL}, 265 { 0x0024, (char *) "FaceDetect1", (char *) NULL}, 266 { 0x0025, (char *) "FaceDetect2", (char *) NULL}, 267 { 0x0026, (char *) "CanonAFInfo2", (char *) "Canon AFInfo2 Tags"}, 268 { 0x0028, (char *) "ImageUniqueID", (char *) NULL}, 269 { 0x0081, (char *) "RawDataOffset", (char *) NULL}, 270 { 0x0083, (char *) "OriginalDecisionDataOffset", (char *) NULL}, 271 { 0x0090, (char *) "CustomFunctions1D", (char *) "CanonCustom Functions1D Tags"}, 272 { 0x0091, (char *) "PersonalFunctions", (char *) "CanonCustom PersonalFuncs Tags"}, 273 { 0x0092, (char *) "PersonalFunctionValues", (char *) "CanonCustom PersonalFuncValues Tags"}, 274 { 0x0093, (char *) "CanonFileInfo", (char *) "Canon FileInfo Tags"}, 275 { 0x0094, (char *) "AFPointsInFocus1D", (char *) NULL}, 276 { 0x0095, (char *) "LensModel", (char *) NULL}, 277 { 0x0096, (char *) "SerialInfo", (char *) NULL}, 278 { 0x0097, (char *) "DustRemovalData", (char *) NULL}, 279 { 0x0098, (char *) "CropInfo", (char *) NULL}, 280 { 0x0099, (char *) "CustomFunctions2", (char *) NULL}, 281 { 0x009A, (char *) "AspectInfo", (char *) NULL}, 282 { 0x00A0, (char *) "ProcessingInfo", (char *) NULL}, 283 { 0x00A1, (char *) "ToneCurveTable", (char *) NULL}, 284 { 0x00A2, (char *) "SharpnessTable", (char *) NULL}, 285 { 0x00A3, (char *) "SharpnessFreqTable", (char *) NULL}, 286 { 0x00A4, (char *) "WhiteBalanceTable", (char *) NULL}, 287 { 0x00A9, (char *) "ColorBalance", (char *) NULL}, 288 { 0x00AA, (char *) "MeasuredColor", (char *) NULL}, 289 { 0x00AE, (char *) "ColorTemperature", (char *) NULL}, 290 { 0x00B0, (char *) "CanonFlags", (char *) NULL}, 291 { 0x00B1, (char *) "ModifiedInfo", (char *) NULL}, 292 { 0x00B2, (char *) "ToneCurveMatching", (char *) NULL}, 293 { 0x00B3, (char *) "WhiteBalanceMatching", (char *) NULL}, 294 { 0x00B4, (char *) "ColorSpace", (char *) NULL}, 295 { 0x00B6, (char *) "PreviewImageInfo", (char *) NULL}, 296 { 0x00D0, (char *) "VRDOffset", (char *) "Offset of VRD 'recipe data' if it exists"}, 297 { 0x00E0, (char *) "SensorInfo", (char *) NULL}, 298 { 0x4001, (char *) "ColorData", (char *) "Canon ColorData Tags"}, 299 { 0x4002, (char *) "CRWParam?", (char *) NULL}, 300 { 0x4003, (char *) "ColorInfo", (char *) NULL}, 301 { 0x4005, (char *) "Flavor?", (char *) NULL}, 302 { 0x4008, (char *) "BlackLevel?", (char *) NULL}, 303 { 0x4010, (char *) "CustomPictureStyleFileName", (char *) NULL}, 304 { 0x4013, (char *) "AFMicroAdj", (char *) NULL}, 305 { 0x4015, (char *) "VignettingCorr", (char *) NULL}, 306 { 0x4016, (char *) "VignettingCorr2", (char *) NULL}, 307 { 0x4018, (char *) "LightingOpt", (char *) NULL}, 308 { 0x4019, (char *) "LensInfo", (char *) NULL}, 309 { 0x4020, (char *) "AmbienceInfo", (char *) NULL}, 310 { 0x4024, (char *) "FilterInfo", (char *) NULL}, 311 312 // These 'sub'-tag values have been created for consistency -- they don't exist within the exif segment 313 314 // Fields under tag 0x0001 (we add 0xC100 to make unique tag id) 315 { 0xC100 + 1, (char *) "CameraSettings:MacroMode", (char *) NULL}, 316 { 0xC100 + 2, (char *) "CameraSettings:SelfTimer", (char *) NULL}, 317 { 0xC100 + 3, (char *) "CameraSettings:Quality", (char *) NULL}, 318 { 0xC100 + 4, (char *) "CameraSettings:CanonFlashMode", (char *) NULL}, 319 { 0xC100 + 5, (char *) "CameraSettings:ContinuousDrive", (char *) NULL}, 320 { 0xC100 + 6, (char *) "CameraSettings:0x0006", (char *) NULL}, 321 { 0xC100 + 7, (char *) "CameraSettings:FocusMode", (char *) NULL}, 322 { 0xC100 + 8, (char *) "CameraSettings:0x0008", (char *) NULL}, 323 { 0xC100 + 9, (char *) "CameraSettings:RecordMode", (char *) NULL}, 324 { 0xC100 + 10, (char *) "CameraSettings:CanonImageSize", (char *) NULL}, 325 { 0xC100 + 11, (char *) "CameraSettings:EasyMode", (char *) NULL}, 326 { 0xC100 + 12, (char *) "CameraSettings:DigitalZoom", (char *) NULL}, 327 { 0xC100 + 13, (char *) "CameraSettings:Contrast", (char *) NULL}, 328 { 0xC100 + 14, (char *) "CameraSettings:Saturation", (char *) NULL}, 329 { 0xC100 + 15, (char *) "CameraSettings:Sharpness", (char *) NULL}, 330 { 0xC100 + 16, (char *) "CameraSettings:CameraISO", (char *) NULL}, 331 { 0xC100 + 17, (char *) "CameraSettings:MeteringMode", (char *) NULL}, 332 { 0xC100 + 18, (char *) "CameraSettings:FocusRange", (char *) NULL}, 333 { 0xC100 + 19, (char *) "CameraSettings:AFPoint", (char *) NULL}, 334 { 0xC100 + 20, (char *) "CameraSettings:CanonExposureMode", (char *) NULL}, 335 { 0xC100 + 21, (char *) "CameraSettings:0x0015", (char *) NULL}, 336 { 0xC100 + 22, (char *) "CameraSettings:LensType", (char *) NULL}, 337 { 0xC100 + 23, (char *) "CameraSettings:LongFocal", (char *) NULL}, 338 { 0xC100 + 24, (char *) "CameraSettings:ShortFocal", (char *) NULL}, 339 { 0xC100 + 25, (char *) "CameraSettings:FocalUnits", (char *) "Focal Units per mm"}, 340 { 0xC100 + 26, (char *) "CameraSettings:MaxAperture", (char *) NULL}, 341 { 0xC100 + 27, (char *) "CameraSettings:MinAperture", (char *) NULL}, 342 { 0xC100 + 28, (char *) "CameraSettings:FlashActivity", (char *) NULL}, 343 { 0xC100 + 29, (char *) "CameraSettings:FlashBits", (char *) NULL}, 344 { 0xC100 + 30, (char *) "CameraSettings:0x001E", (char *) NULL}, 345 { 0xC100 + 31, (char *) "CameraSettings:0x001F", (char *) NULL}, 346 { 0xC100 + 32, (char *) "CameraSettings:FocusContinuous", (char *) NULL}, 347 { 0xC100 + 33, (char *) "CameraSettings:AESetting", (char *) NULL}, 348 { 0xC100 + 34, (char *) "CameraSettings:ImageStabilization", (char *) NULL}, 349 { 0xC100 + 35, (char *) "CameraSettings:DisplayAperture", (char *) NULL}, 350 { 0xC100 + 36, (char *) "CameraSettings:ZoomSourceWidth", (char *) NULL}, 351 { 0xC100 + 37, (char *) "CameraSettings:ZoomTargetWidth", (char *) NULL}, 352 { 0xC100 + 38, (char *) "CameraSettings:0x0026", (char *) NULL}, 353 { 0xC100 + 39, (char *) "CameraSettings:SpotMeteringMode", (char *) NULL}, 354 { 0xC100 + 40, (char *) "CameraSettings:PhotoEffect", (char *) NULL}, 355 { 0xC100 + 41, (char *) "CameraSettings:ManualFlashOutput", (char *) NULL}, 356 { 0xC100 + 42, (char *) "CameraSettings:ColorTone", (char *) NULL}, 357 { 0xC100 + 43, (char *) "CameraSettings:0x002B", (char *) NULL}, 358 { 0xC100 + 44, (char *) "CameraSettings:0x002C", (char *) NULL}, 359 { 0xC100 + 45, (char *) "CameraSettings:0x002D", (char *) NULL}, 360 { 0xC100 + 46, (char *) "CameraSettings:SRAWQuality", (char *) NULL}, 361 { 0xC100 + 47, (char *) "CameraSettings:0x002F", (char *) NULL}, 362 { 0xC100 + 48, (char *) "CameraSettings:0x0030", (char *) NULL}, 363 364 // Fields under tag 0x0002 (we add 0xC200 to make unique tag id) 365 { 0xC200 + 0, (char *) "FocalLength:FocalType", (char *) NULL}, 366 { 0xC200 + 1, (char *) "FocalLength:FocalLength", (char *) NULL}, 367 { 0xC200 + 2, (char *) "FocalLength:FocalPlaneXSize", (char *) NULL}, 368 { 0xC200 + 3, (char *) "FocalLength:FocalPlaneYSize", (char *) NULL}, 369 370 // Fields under tag 0x0004 (we add 0xC400 to make unique tag id) 371 { 0xC400 + 1, (char *) "ShotInfo:AutoISO", (char *) NULL}, 372 { 0xC400 + 2, (char *) "ShotInfo:BaseISO", (char *) NULL}, 373 { 0xC400 + 3, (char *) "ShotInfo:MeasuredEV", (char *) NULL}, 374 { 0xC400 + 4, (char *) "ShotInfo:TargetAperture", (char *) NULL}, 375 { 0xC400 + 5, (char *) "ShotInfo:TargetExposureTime", (char *) NULL}, 376 { 0xC400 + 6, (char *) "ShotInfo:ExposureCompensation", (char *) NULL}, 377 { 0xC400 + 7, (char *) "ShotInfo:WhiteBalance", (char *) NULL}, 378 { 0xC400 + 8, (char *) "ShotInfo:SlowShutter", (char *) NULL}, 379 { 0xC400 + 9, (char *) "ShotInfo:SequenceNumber", (char *) NULL}, 380 { 0xC400 + 10, (char *) "ShotInfo:OpticalZoomCode", (char *) NULL}, 381 { 0xC400 + 11, (char *) "ShotInfo:0x000B", (char *) NULL}, 382 { 0xC400 + 12, (char *) "ShotInfo:CameraTemperature", (char *) NULL}, 383 { 0xC400 + 13, (char *) "ShotInfo:FlashGuideNumber", (char *) NULL}, 384 { 0xC400 + 14, (char *) "ShotInfo:AFPointsInFocus", (char *) NULL}, 385 { 0xC400 + 15, (char *) "ShotInfo:FlashExposureComp", (char *) NULL}, 386 { 0xC400 + 16, (char *) "ShotInfo:AutoExposureBracketing", (char *) NULL}, 387 { 0xC400 + 17, (char *) "ShotInfo:AEBBracketValue", (char *) NULL}, 388 { 0xC400 + 18, (char *) "ShotInfo:ControlMode", (char *) NULL}, 389 { 0xC400 + 19, (char *) "ShotInfo:FocusDistanceUpper", (char *) NULL}, 390 { 0xC400 + 20, (char *) "ShotInfo:FocusDistanceLower", (char *) NULL}, 391 { 0xC400 + 21, (char *) "ShotInfo:FNumber", (char *) NULL}, 392 { 0xC400 + 22, (char *) "ShotInfo:ExposureTime", (char *) NULL}, 393 { 0xC400 + 23, (char *) "ShotInfo:MeasuredEV2", (char *) NULL}, 394 { 0xC400 + 24, (char *) "ShotInfo:BulbDuration", (char *) NULL}, 395 { 0xC400 + 25, (char *) "ShotInfo:0x0019", (char *) NULL}, 396 { 0xC400 + 26, (char *) "ShotInfo:CameraType", (char *) NULL}, 397 { 0xC400 + 27, (char *) "ShotInfo:AutoRotate", (char *) NULL}, 398 { 0xC400 + 28, (char *) "ShotInfo:NDFilter", (char *) NULL}, 399 { 0xC400 + 29, (char *) "ShotInfo:SelfTimer2", (char *) NULL}, 400 { 0xC400 + 30, (char *) "ShotInfo:0x001E", (char *) NULL}, 401 { 0xC400 + 31, (char *) "ShotInfo:0x001F", (char *) NULL}, 402 { 0xC400 + 32, (char *) "ShotInfo:0x0020", (char *) NULL}, 403 { 0xC400 + 33, (char *) "ShotInfo:FlashOutput", (char *) NULL}, 404 405 // Fields under tag 0x0012 (we add 0x1200 to make unique tag id) 406 { 0x1200 + 0, (char *) "AFInfo:NumAFPoints", (char *) NULL}, 407 { 0x1200 + 1, (char *) "AFInfo:ValidAFPoints", (char *) NULL}, 408 { 0x1200 + 2, (char *) "AFInfo:CanonImageWidth", (char *) NULL}, 409 { 0x1200 + 3, (char *) "AFInfo:CanonImageHeight", (char *) NULL}, 410 { 0x1200 + 4, (char *) "AFInfo:AFImageWidth", (char *) NULL}, 411 { 0x1200 + 5, (char *) "AFInfo:AFImageHeight", (char *) NULL}, 412 { 0x1200 + 6, (char *) "AFInfo:AFAreaWidth", (char *) NULL}, 413 { 0x1200 + 7, (char *) "AFInfo:AFAreaHeight", (char *) NULL}, 414 { 0x1200 + 8, (char *) "AFInfo:AFAreaXPositions", (char *) NULL}, 415 { 0x1200 + 9, (char *) "AFInfo:AFAreaYPositions", (char *) NULL}, 416 { 0x1200 + 10, (char *) "AFInfo:AFPointsInFocus", (char *) NULL}, 417 { 0x1200 + 11, (char *) "AFInfo:PrimaryAFPoint?", (char *) NULL}, 418 { 0x1200 + 12, (char *) "AFInfo:PrimaryAFPoint", (char *) NULL}, 419 { 0x1200 + 13, (char *) "AFInfo:0x000D", (char *) NULL}, 420 { 0x1200 + 14, (char *) "AFInfo:0x000E", (char *) NULL}, 421 { 0x1200 + 15, (char *) "AFInfo:0x000F", (char *) NULL}, 422 { 0x1200 + 16, (char *) "AFInfo:0x0010", (char *) NULL}, 423 { 0x1200 + 17, (char *) "AFInfo:0x0011", (char *) NULL}, 424 { 0x1200 + 18, (char *) "AFInfo:0x0012", (char *) NULL}, 425 { 0x1200 + 19, (char *) "AFInfo:0x0013", (char *) NULL}, 426 { 0x1200 + 20, (char *) "AFInfo:0x0014", (char *) NULL}, 427 { 0x1200 + 21, (char *) "AFInfo:0x0015", (char *) NULL}, 428 { 0x1200 + 22, (char *) "AFInfo:0x0016", (char *) NULL}, 429 { 0x1200 + 23, (char *) "AFInfo:0x0017", (char *) NULL}, 430 { 0x1200 + 24, (char *) "AFInfo:0x0018", (char *) NULL}, 431 { 0x1200 + 25, (char *) "AFInfo:0x0019", (char *) NULL}, 432 { 0x1200 + 26, (char *) "AFInfo:0x001A", (char *) NULL}, 433 { 0x1200 + 27, (char *) "AFInfo:0x001B", (char *) NULL}, 434 435 // Fields under tag 0x00A0 (we add 0xCA00 to make unique tag id) 436 { 0xCA00 + 1, (char *) "ProcessingInfo:ToneCurve", (char *) NULL}, 437 { 0xCA00 + 2, (char *) "ProcessingInfo:Sharpness", (char *) NULL}, 438 { 0xCA00 + 3, (char *) "ProcessingInfo:SharpnessFrequency", (char *) NULL}, 439 { 0xCA00 + 4, (char *) "ProcessingInfo:SensorRedLevel", (char *) NULL}, 440 { 0xCA00 + 5, (char *) "ProcessingInfo:SensorBlueLevel", (char *) NULL}, 441 { 0xCA00 + 6, (char *) "ProcessingInfo:WhiteBalanceRed", (char *) NULL}, 442 { 0xCA00 + 7, (char *) "ProcessingInfo:WhiteBalanceBlue", (char *) NULL}, 443 { 0xCA00 + 8, (char *) "ProcessingInfo:WhiteBalance", (char *) NULL}, 444 { 0xCA00 + 9, (char *) "ProcessingInfo:ColorTemperature", (char *) NULL}, 445 { 0xCA00 + 10, (char *) "ProcessingInfo:PictureStyle", (char *) NULL}, 446 { 0xCA00 + 11, (char *) "ProcessingInfo:DigitalGain", (char *) NULL}, 447 { 0xCA00 + 12, (char *) "ProcessingInfo:WBShiftAB", (char *) NULL}, 448 { 0xCA00 + 13, (char *) "ProcessingInfo:WBShiftGM", (char *) NULL}, 449 450 // Fields under tag 0x00E0 (we add 0xCE00 to make unique tag id) 451 { 0xCE00 + 1, (char *) "SensorInfo:SensorWidth", (char *) NULL}, 452 { 0xCE00 + 2, (char *) "SensorInfo:SensorHeight", (char *) NULL}, 453 { 0xCE00 + 3, (char *) "SensorInfo:0x0003", (char *) NULL}, 454 { 0xCE00 + 4, (char *) "SensorInfo:0x0004", (char *) NULL}, 455 { 0xCE00 + 5, (char *) "SensorInfo:SensorLeftBorder", (char *) NULL}, 456 { 0xCE00 + 6, (char *) "SensorInfo:SensorTopBorder", (char *) NULL}, 457 { 0xCE00 + 7, (char *) "SensorInfo:SensorRightBorder", (char *) NULL}, 458 { 0xCE00 + 8, (char *) "SensorInfo:SensorBottomBorder", (char *) NULL}, 459 { 0xCE00 + 9, (char *) "SensorInfo:BlackMaskLeftBorder", (char *) NULL}, 460 { 0xCE00 + 10, (char *) "SensorInfo:BlackMaskTopBorder", (char *) NULL}, 461 { 0xCE00 + 11, (char *) "SensorInfo:BlackMaskRightBorder", (char *) NULL}, 462 { 0xCE00 + 12, (char *) "SensorInfo:BlackMaskBottomBorder", (char *) NULL}, 463 { 0xCE00 + 13, (char *) "SensorInfo:0x000D", (char *) NULL}, 464 { 0xCE00 + 14, (char *) "SensorInfo:0x000E", (char *) NULL}, 465 { 0xCE00 + 15, (char *) "SensorInfo:0x000F", (char *) NULL}, 466 { 0xCE00 + 16, (char *) "SensorInfo:0x0010", (char *) NULL}, 467 468 { 0x0000, (char *) NULL, (char *) NULL} 469 }; 470 471/** 472Casio type 1 maker note 473*/ 474static TagInfo 475 exif_casio_type1_tag_table[] = 476 { 477 { 0x0001, (char *) "RecordingMode", (char *) NULL}, 478 { 0x0002, (char *) "Quality", (char *) NULL}, 479 { 0x0003, (char *) "FocusMode", (char *) NULL}, 480 { 0x0004, (char *) "FlashMode", (char *) NULL}, 481 { 0x0005, (char *) "FlashIntensity", (char *) NULL}, 482 { 0x0006, (char *) "ObjectDistance", (char *) NULL}, 483 { 0x0007, (char *) "WhiteBalance", (char *) NULL}, 484 { 0x000A, (char *) "DigitalZoom", (char *) NULL}, 485 { 0x000B, (char *) "Sharpness", (char *) NULL}, 486 { 0x000C, (char *) "Contrast", (char *) NULL}, 487 { 0x000D, (char *) "Saturation", (char *) NULL}, 488 { 0x0014, (char *) "ISO", (char *) NULL}, 489 { 0x0015, (char *) "FirmwareDate", (char *) NULL}, 490 { 0x0016, (char *) "Enhancement", (char *) NULL}, 491 { 0x0017, (char *) "ColorFilter", (char *) NULL}, 492 { 0x0018, (char *) "AFPoint", (char *) NULL}, 493 { 0x0019, (char *) "FlashIntensity", (char *) NULL}, 494 { 0x0E00, (char *) "PrintIM", (char *) NULL}, 495 { 0x0000, (char *) NULL, (char *) NULL} 496 }; 497 498/** 499Casio type 2 maker note 500*/ 501static TagInfo 502 exif_casio_type2_tag_table[] = 503 { 504 { 0x0002, (char *) "PreviewImageSize", (char *) NULL}, 505 { 0x0003, (char *) "PreviewImageLength", (char *) NULL}, 506 { 0x0004, (char *) "PreviewImageStart", (char *) NULL}, 507 { 0x0008, (char *) "QualityMode", (char *) NULL}, 508 { 0x0009, (char *) "CasioImageSize", (char *) NULL}, 509 { 0x000D, (char *) "FocusMode", (char *) NULL}, 510 { 0x0014, (char *) "ISO", (char *) NULL}, 511 { 0x0019, (char *) "WhiteBalance", (char *) NULL}, 512 { 0x001D, (char *) "FocalLength", (char *) NULL}, 513 { 0x001F, (char *) "Saturation", (char *) NULL}, 514 { 0x0020, (char *) "Contrast", (char *) NULL}, 515 { 0x0021, (char *) "Sharpness", (char *) NULL}, 516 { 0x0E00, (char *) "PrintIM", (char *) NULL}, 517 { 0x2000, (char *) "PreviewImage", (char *) NULL}, 518 { 0x2001, (char *) "FirmwareDate", (char *) NULL}, 519 { 0x2011, (char *) "WhiteBalanceBias", (char *) NULL}, 520 { 0x2012, (char *) "WhiteBalance", (char *) NULL}, 521 { 0x2021, (char *) "AFPointPosition", (char *) NULL}, 522 { 0x2022, (char *) "ObjectDistance", (char *) NULL}, 523 { 0x2034, (char *) "FlashDistance", (char *) NULL}, 524 { 0x2076, (char *) "SpecialEffectMode", (char *) NULL}, 525 { 0x3000, (char *) "RecordMode", (char *) NULL}, 526 { 0x3001, (char *) "ReleaseMode", (char *) NULL}, 527 { 0x3002, (char *) "Quality", (char *) NULL}, 528 { 0x3003, (char *) "FocusMode", (char *) NULL}, 529 { 0x3006, (char *) "HometownCity", (char *) NULL}, 530 { 0x3007, (char *) "BestShotMode", (char *) NULL}, 531 { 0x3008, (char *) "AutoISO", (char *) NULL}, 532 { 0x3009, (char *) "AFMode", (char *) NULL}, 533 { 0x3011, (char *) "Sharpness", (char *) NULL}, 534 { 0x3012, (char *) "Contrast", (char *) NULL}, 535 { 0x3013, (char *) "Saturation", (char *) NULL}, 536 { 0x3014, (char *) "ISO", (char *) NULL}, 537 { 0x3015, (char *) "ColorMode", (char *) NULL}, 538 { 0x3016, (char *) "Enhancement", (char *) NULL}, 539 { 0x3017, (char *) "ColorFilter", (char *) NULL}, 540 { 0x301C, (char *) "SequenceNumber", (char *) NULL}, 541 { 0x301D, (char *) "BracketSequence", (char *) NULL}, 542 { 0x3020, (char *) "ImageStabilization", (char *) NULL}, 543 { 0x302A, (char *) "LightingMode", (char *) NULL}, 544 { 0x302B, (char *) "PortraitRefiner", (char *) NULL}, 545 { 0x3030, (char *) "SpecialEffectLevel", (char *) NULL}, 546 { 0x3031, (char *) "SpecialEffectSetting", (char *) NULL}, 547 { 0x3103, (char *) "DriveMode", (char *) NULL}, 548 { 0x4001, (char *) "CaptureFrameRate", (char *) NULL}, 549 { 0x4003, (char *) "VideoQuality", (char *) NULL}, 550 { 0x0000, (char *) NULL, (char *) NULL} 551 }; 552 553/** 554FujiFilm maker note 555*/ 556static TagInfo 557 exif_fujifilm_tag_table[] = 558 { 559 { 0x0000, (char *) "Version", (char *) NULL}, 560 { 0x0010, (char *) "InternalSerialNumber", (char *) NULL}, 561 { 0x1000, (char *) "Quality", (char *) NULL}, 562 { 0x1001, (char *) "Sharpness", (char *) NULL}, 563 { 0x1002, (char *) "WhiteBalance", (char *) NULL}, 564 { 0x1003, (char *) "Saturation", (char *) NULL}, 565 { 0x1004, (char *) "Contrast", (char *) NULL}, 566 { 0x1005, (char *) "ColorTemperature", (char *) NULL}, 567 { 0x100A, (char *) "WhiteBalanceFineTune", (char *) NULL}, 568 { 0x100B, (char *) "NoiseReduction", (char *) NULL}, 569 { 0x1010, (char *) "FujiFlashMode", (char *) NULL}, 570 { 0x1011, (char *) "FlashExposureComp", (char *) NULL}, 571 { 0x1020, (char *) "Macro", (char *) NULL}, 572 { 0x1021, (char *) "FocusMode", (char *) NULL}, 573 { 0x1023, (char *) "FocusPixel", (char *) NULL}, 574 { 0x1030, (char *) "SlowSync", (char *) NULL}, 575 { 0x1031, (char *) "PictureMode", (char *) NULL}, 576 { 0x1033, (char *) "EXRAuto", (char *) NULL}, 577 { 0x1034, (char *) "EXRMode", (char *) NULL}, 578 { 0x1100, (char *) "AutoBracketting", (char *) NULL}, 579 { 0x1101, (char *) "SequenceNumber", (char *) NULL}, 580 { 0x1210, (char *) "ColorMode", (char *) NULL}, 581 { 0x1300, (char *) "BlurWarning", (char *) NULL}, 582 { 0x1301, (char *) "FocusWarning", (char *) NULL}, 583 { 0x1302, (char *) "ExposureWarning", (char *) NULL}, 584 { 0x1400, (char *) "DynamicRange", (char *) NULL}, 585 { 0x1401, (char *) "FilmMode", (char *) NULL}, 586 { 0x1402, (char *) "DynamicRangeSetting", (char *) NULL}, 587 { 0x1403, (char *) "DevelopmentDynamicRange", (char *) NULL}, 588 { 0x1404, (char *) "MinFocalLength", (char *) NULL}, 589 { 0x1405, (char *) "MaxFocalLength", (char *) NULL}, 590 { 0x1406, (char *) "MaxApertureAtMinFocal", (char *) NULL}, 591 { 0x1407, (char *) "MaxApertureAtMaxFocal", (char *) NULL}, 592 { 0x4100, (char *) "FacesDetected", (char *) NULL}, 593 { 0x4103, (char *) "FacePositions", (char *) NULL}, 594 { 0x8000, (char *) "FileSource", (char *) NULL}, 595 { 0x8002, (char *) "OrderNumber", (char *) NULL}, 596 { 0x8003, (char *) "FrameNumber", (char *) NULL}, 597 { 0xB211, (char *) "Parallax", (char *) NULL}, 598 { 0x0000, (char *) NULL, (char *) NULL} 599 }; 600 601/** 602Kyocera maker note 603*/ 604static TagInfo 605 exif_kyocera_tag_table[] = 606 { 607 { 0x0001, (char *) "ThumbnailImage", (char *) NULL}, 608 { 0x0E00, (char *) "PrintIM", (char *) "Print Image Matching Info"}, 609 { 0x0000, (char *) NULL, (char *) NULL} 610 }; 611 612/** 613Olympus Type 1 / Epson / Agfa maker note 614*/ 615static TagInfo 616 exif_olympus_type1_tag_table[] = 617 { 618 { 0x0000, (char *) "MakerNoteVersion", (char *) NULL}, 619 { 0x0001, (char *) "MinoltaCameraSettingsOld", (char *) NULL}, 620 { 0x0003, (char *) "MinoltaCameraSettings", (char *) NULL}, 621 { 0x0040, (char *) "CompressedImageSize", (char *) NULL}, 622 { 0x0081, (char *) "PreviewImageData", (char *) NULL}, 623 { 0x0088, (char *) "PreviewImageStart", (char *) NULL}, 624 { 0x0089, (char *) "PreviewImageLength", (char *) NULL}, 625 { 0x0100, (char *) "ThumbnailImage", (char *) NULL}, 626 { 0x0104, (char *) "BodyFirmwareVersion", (char *) NULL}, 627 { 0x0200, (char *) "SpecialMode", (char *) NULL}, 628 { 0x0201, (char *) "Quality", (char *) NULL}, 629 { 0x0202, (char *) "Macro", (char *) NULL}, 630 { 0x0203, (char *) "BWMode", (char *) NULL}, 631 { 0x0204, (char *) "DigitalZoom", (char *) NULL}, 632 { 0x0205, (char *) "FocalPlaneDiagonal", (char *) NULL}, 633 { 0x0206, (char *) "LensDistortionParams", (char *) NULL}, 634 { 0x0207, (char *) "CameraType", (char *) NULL}, 635 { 0x0208, (char *) "TextInfo", (char *) "Olympus TextInfo Tags"}, 636 { 0x0209, (char *) "CameraID", (char *) NULL}, 637 { 0x020B, (char *) "EpsonImageWidth", (char *) NULL}, 638 { 0x020C, (char *) "EpsonImageHeight", (char *) NULL}, 639 { 0x020D, (char *) "EpsonSoftware", (char *) NULL}, 640 { 0x0280, (char *) "PreviewImage", (char *) NULL}, 641 { 0x0300, (char *) "PreCaptureFrames", (char *) NULL}, 642 { 0x0301, (char *) "WhiteBoard", (char *) NULL}, 643 { 0x0302, (char *) "OneTouchWB", (char *) NULL}, 644 { 0x0303, (char *) "WhiteBalanceBracket", (char *) NULL}, 645 { 0x0304, (char *) "WhiteBalanceBias", (char *) NULL}, 646 { 0x0403, (char *) "SceneMode", (char *) NULL}, 647 { 0x0404, (char *) "SerialNumber", (char *) NULL}, 648 { 0x0405, (char *) "Firmware", (char *) NULL}, 649 { 0x0E00, (char *) "PrintIM", (char *) "PrintIM Tags"}, 650 { 0x0F00, (char *) "DataDump", (char *) NULL}, 651 { 0x0F01, (char *) "DataDump2", (char *) NULL}, 652 { 0x1000, (char *) "ShutterSpeedValue", (char *) NULL}, 653 { 0x1001, (char *) "ISOValue", (char *) NULL}, 654 { 0x1002, (char *) "ApertureValue", (char *) NULL}, 655 { 0x1003, (char *) "BrightnessValue", (char *) NULL}, 656 { 0x1004, (char *) "FlashMode", (char *) NULL}, 657 { 0x1005, (char *) "FlashDevice", (char *) NULL}, 658 { 0x1006, (char *) "ExposureCompensation", (char *) NULL}, 659 { 0x1007, (char *) "SensorTemperature", (char *) NULL}, 660 { 0x1008, (char *) "LensTemperature", (char *) NULL}, 661 { 0x1009, (char *) "LightCondition", (char *) NULL}, 662 { 0x100A, (char *) "FocusRange", (char *) NULL}, 663 { 0x100B, (char *) "FocusMode", (char *) NULL}, 664 { 0x100C, (char *) "ManualFocusDistance", (char *) NULL}, 665 { 0x100D, (char *) "ZoomStepCount", (char *) NULL}, 666 { 0x100E, (char *) "FocusStepCount", (char *) NULL}, 667 { 0x100F, (char *) "Sharpness", (char *) NULL}, 668 { 0x1010, (char *) "FlashChargeLevel", (char *) NULL}, 669 { 0x1011, (char *) "ColorMatrix", (char *) NULL}, 670 { 0x1012, (char *) "BlackLevel", (char *) NULL}, 671 { 0x1015, (char *) "WBMode", (char *) NULL}, 672 { 0x1017, (char *) "RedBalance", (char *) NULL}, 673 { 0x1018, (char *) "BlueBalance", (char *) NULL}, 674 { 0x1019, (char *) "ColorMatrixNumber", (char *) NULL}, 675 { 0x101A, (char *) "SerialNumber", (char *) NULL}, 676 { 0x1023, (char *) "FlashExposureComp", (char *) NULL}, 677 { 0x1024, (char *) "InternalFlashTable", (char *) NULL}, 678 { 0x1025, (char *) "ExternalFlashGValue", (char *) NULL}, 679 { 0x1026, (char *) "ExternalFlashBounce", (char *) NULL}, 680 { 0x1027, (char *) "ExternalFlashZoom", (char *) NULL}, 681 { 0x1028, (char *) "ExternalFlashMode", (char *) NULL}, 682 { 0x1029, (char *) "Contrast", (char *) NULL}, 683 { 0x102A, (char *) "SharpnessFactor", (char *) NULL}, 684 { 0x102B, (char *) "ColorControl", (char *) NULL}, 685 { 0x102C, (char *) "ValidBits", (char *) NULL}, 686 { 0x102D, (char *) "CoringFilter", (char *) NULL}, 687 { 0x102E, (char *) "OlympusImageWidth", (char *) NULL}, 688 { 0x102F, (char *) "OlympusImageHeight", (char *) NULL}, 689 { 0x1030, (char *) "SceneDetect", (char *) NULL}, 690 { 0x1031, (char *) "SceneArea?", (char *) NULL}, 691 { 0x1033, (char *) "SceneDetectData?", (char *) NULL}, 692 { 0x1034, (char *) "CompressionRatio", (char *) NULL}, 693 { 0x1035, (char *) "PreviewImageValid", (char *) NULL}, 694 { 0x1036, (char *) "PreviewImageStart", (char *) NULL}, 695 { 0x1037, (char *) "PreviewImageLength", (char *) NULL}, 696 { 0x1038, (char *) "AFResult", (char *) NULL}, 697 { 0x1039, (char *) "CCDScanMode", (char *) NULL}, 698 { 0x103A, (char *) "NoiseReduction", (char *) NULL}, 699 { 0x103B, (char *) "InfinityLensStep", (char *) NULL}, 700 { 0x103C, (char *) "NearLensStep", (char *) NULL}, 701 { 0x103D, (char *) "LightValueCenter", (char *) NULL}, 702 { 0x103E, (char *) "LightValuePeriphery", (char *) NULL}, 703 { 0x2010, (char *) "Equipment", (char *) "Olympus Equipment Tags"}, 704 { 0x2020, (char *) "CameraSettings", (char *) "Olympus CameraSettings Tags"}, 705 { 0x2030, (char *) "RawDevelopment", (char *) "Olympus RawDevelopment Tags"}, 706 { 0x2040, (char *) "ImageProcessing", (char *) "Olympus ImageProcessing Tags"}, 707 { 0x2050, (char *) "FocusInfo", (char *) "Olympus FocusInfo Tags"}, 708 { 0x2100, (char *) "Olympus2100", (char *) "Olympus FE Tags"}, 709 { 0x2200, (char *) "Olympus2200", (char *) "Olympus FE Tags"}, 710 { 0x2300, (char *) "Olympus2300", (char *) "Olympus FE Tags"}, 711 { 0x2400, (char *) "Olympus2400", (char *) "Olympus FE Tags"}, 712 { 0x2500, (char *) "Olympus2500", (char *) "Olympus FE Tags"}, 713 { 0x2600, (char *) "Olympus2600", (char *) "Olympus FE Tags"}, 714 { 0x2700, (char *) "Olympus2700", (char *) "Olympus FE Tags"}, 715 { 0x2800, (char *) "Olympus2800", (char *) "Olympus FE Tags"}, 716 { 0x2900, (char *) "Olympus2900", (char *) "Olympus FE Tags"}, 717 { 0x3000, (char *) "RawInfo", (char *) "Olympus RawInfo Tags"}, 718 { 0x4000, (char *) "MainInfo", (char *) "Olympus MainInfo Tags"}, 719 { 0x0000, (char *) NULL, (char *) NULL} 720 }; 721 722/** 723Minolta maker note 724*/ 725static TagInfo 726 exif_minolta_tag_table[] = 727 { 728 { 0x0000, (char *) "MakerNoteVersion", (char *) NULL}, 729 { 0x0001, (char *) "MinoltaCameraSettingsOld", (char *) NULL}, 730 { 0x0003, (char *) "MinoltaCameraSettings", (char *) NULL}, 731 { 0x0004, (char *) "MinoltaCameraSettings7D", (char *) NULL}, 732 { 0x0018, (char *) "ImageStabilization", (char *) NULL}, 733 { 0x0040, (char *) "CompressedImageSize", (char *) NULL}, 734 { 0x0081, (char *) "PreviewImage", (char *) NULL}, 735 { 0x0088, (char *) "PreviewImageStart", (char *) NULL}, 736 { 0x0089, (char *) "PreviewImageLength", (char *) NULL}, 737 { 0x0100, (char *) "SceneMode", (char *) NULL}, 738 { 0x0101, (char *) "ColorMode", (char *) NULL}, 739 { 0x0102, (char *) "MinoltaQuality", (char *) NULL}, 740 { 0x0103, (char *) "MinoltaImageSize", (char *) NULL}, 741 { 0x0104, (char *) "FlashExposureComp", (char *) NULL}, 742 { 0x0105, (char *) "Teleconverter", (char *) NULL}, 743 { 0x0107, (char *) "ImageStabilization", (char *) NULL}, 744 { 0x0109, (char *) "RawAndJpgRecording", (char *) NULL}, 745 { 0x010A, (char *) "ZoneMatching", (char *) NULL}, 746 { 0x010B, (char *) "ColorTemperature", (char *) NULL}, 747 { 0x010C, (char *) "LensType", (char *) NULL}, 748 { 0x0111, (char *) "ColorCompensationFilter", (char *) NULL}, 749 { 0x0112, (char *) "WhiteBalanceFineTune", (char *) NULL}, 750 { 0x0113, (char *) "ImageStabilization", (char *) NULL}, 751 { 0x0114, (char *) "MinoltaCameraSettings5D", (char *) NULL}, 752 { 0x0115, (char *) "WhiteBalance", (char *) NULL}, 753 { 0x0E00, (char *) "PrintIM", (char *) NULL}, 754 { 0x0F00, (char *) "MinoltaCameraSettings2", (char *) NULL}, 755 { 0x0000, (char *) NULL, (char *) NULL} 756 }; 757 758/** 759There are 3 formats of Nikon's MakerNote. MakerNote of E700/E800/E900/E900S/E910/E950 760starts from ASCII string "Nikon". Data format is the same as IFD, but it starts from 761offset 0x08. This is the same as Olympus except start string. 762*/ 763 764/** 765TYPE 1 is for E-Series cameras prior to (not including) E990 766*/ 767static TagInfo 768 exif_nikon_type1_tag_table[] = 769 { 770 { 0x0002, (char *) "FamilyID", (char *) NULL}, 771 { 0x0003, (char *) "Quality", (char *) NULL}, 772 { 0x0004, (char *) "ColorMode", (char *) NULL}, 773 { 0x0005, (char *) "ImageAdjustment", (char *) NULL}, 774 { 0x0006, (char *) "CCDSensitivity", (char *) NULL}, 775 { 0x0007, (char *) "WhiteBalance", (char *) NULL}, 776 { 0x0008, (char *) "Focus", (char *) NULL}, 777 { 0x000A, (char *) "DigitalZoom", (char *) NULL}, 778 { 0x000B, (char *) "FisheyeConverter", (char *) NULL}, 779 { 0x0000, (char *) NULL, (char *) NULL} 780 }; 781 782/** 783Nikon type 2 maker note 784*/ 785static TagInfo 786 exif_nikon_type2_tag_table[] = 787 { 788 { 0x0001, (char *) "MakerNoteVersion", (char *) NULL}, 789 { 0x0002, (char *) "ISO", (char *) NULL}, 790 { 0x0003, (char *) "ColorMode", (char *) NULL}, 791 { 0x0004, (char *) "Quality", (char *) NULL}, 792 { 0x0005, (char *) "WhiteBalance", (char *) NULL}, 793 { 0x0006, (char *) "Sharpness", (char *) NULL}, 794 { 0x0007, (char *) "FocusMode", (char *) NULL}, 795 { 0x0008, (char *) "FlashSetting", (char *) NULL}, 796 { 0x0009, (char *) "FlashType", (char *) NULL}, 797 { 0x000B, (char *) "WhiteBalanceFineTune", (char *) NULL}, 798 { 0x000F, (char *) "ISOSelection", (char *) NULL}, 799 { 0x0010, (char *) "DataDump", (char *) NULL}, 800 { 0x0080, (char *) "ImageAdjustment", (char *) NULL}, 801 { 0x0082, (char *) "AuxiliaryLens", (char *) NULL}, 802 { 0x0085, (char *) "ManualFocusDistance", (char *) NULL}, 803 { 0x0086, (char *) "DigitalZoom", (char *) NULL}, 804 { 0x0088, (char *) "AFInfo", (char *) NULL}, 805 { 0x0089, (char *) "ShootingMode", (char *) NULL}, 806 { 0x008D, (char *) "ColorMode", (char *) NULL}, 807 { 0x008F, (char *) "SceneMode", (char *) NULL}, 808 { 0x0092, (char *) "HueAdjustment", (char *) NULL}, 809 { 0x0094, (char *) "Saturation", (char *) NULL}, 810 { 0x0095, (char *) "NoiseReduction", (char *) NULL}, 811 { 0x0E00, (char *) "PrintIM", (char *) NULL}, 812 { 0x0000, (char *) NULL, (char *) NULL} 813 }; 814 815/** 816The type-3 directory is for D-Series cameras such as the D1 and D100. 817see http://www.timelesswanderings.net/equipment/D100/NEF.html 818*/ 819static TagInfo 820 exif_nikon_type3_tag_table[] = 821 { 822 { 0x0001, (char *) "MakerNoteVersion", (char *) NULL}, 823 { 0x0002, (char *) "ISO", (char *) NULL}, 824 { 0x0003, (char *) "ColorMode", (char *) NULL}, 825 { 0x0004, (char *) "Quality", (char *) NULL}, 826 { 0x0005, (char *) "WhiteBalance", (char *) NULL}, 827 { 0x0006, (char *) "Sharpness", (char *) NULL}, 828 { 0x0007, (char *) "FocusMode", (char *) NULL}, 829 { 0x0008, (char *) "FlashSetting", (char *) NULL}, 830 { 0x0009, (char *) "FlashType", (char *) NULL}, 831 { 0x000B, (char *) "WhiteBalanceFineTune", (char *) NULL}, 832 { 0x000C, (char *) "WB_RBLevels", (char *) NULL}, 833 { 0x000D, (char *) "ProgramShift", (char *) NULL}, 834 { 0x000E, (char *) "ExposureDifference", (char *) NULL}, 835 { 0x000F, (char *) "ISOSelection", (char *) NULL}, 836 { 0x0010, (char *) "DataDump", (char *) NULL}, 837 { 0x0011, (char *) "PreviewIFD", (char *) NULL}, 838 { 0x0012, (char *) "FlashExposureComp", (char *) NULL}, 839 { 0x0013, (char *) "ISOSetting", (char *) NULL}, 840 { 0x0014, (char *) "ColorBalanceA", (char *) NULL}, 841 { 0x0016, (char *) "ImageBoundary", (char *) NULL}, 842 { 0x0017, (char *) "FlashExposureComp", (char *) NULL}, 843 { 0x0018, (char *) "FlashExposureBracketValue", (char *) NULL}, 844 { 0x0019, (char *) "ExposureBracketValue", (char *) NULL}, 845 { 0x001A, (char *) "ImageProcessing", (char *) NULL}, 846 { 0x001B, (char *) "CropHiSpeed", (char *) NULL}, 847 { 0x001C, (char *) "ExposureTuning", (char *) NULL}, 848 { 0x001D, (char *) "SerialNumber", (char *) NULL}, 849 { 0x001E, (char *) "ColorSpace", (char *) NULL}, 850 { 0x001F, (char *) "VRInfo", (char *) NULL}, 851 { 0x0020, (char *) "ImageAuthentication", (char *) NULL}, 852 { 0x0022, (char *) "ActiveD-Lighting", (char *) NULL}, 853 { 0x0023, (char *) "PictureControl", (char *) NULL}, 854 { 0x0024, (char *) "WorldTime", (char *) NULL}, 855 { 0x0025, (char *) "ISOInfo", (char *) NULL}, 856 { 0x002A, (char *) "VignetteControl", (char *) NULL}, 857 { 0x002B, (char *) "DistortInfo", (char *) NULL}, 858 { 0x0080, (char *) "ImageAdjustment", (char *) NULL}, 859 { 0x0081, (char *) "ToneComp", (char *) NULL}, 860 { 0x0082, (char *) "AuxiliaryLens", (char *) NULL}, 861 { 0x0083, (char *) "LensType", (char *) NULL}, 862 { 0x0084, (char *) "Lens", (char *) NULL}, 863 { 0x0085, (char *) "ManualFocusDistance", (char *) NULL}, 864 { 0x0086, (char *) "DigitalZoom", (char *) NULL}, 865 { 0x0087, (char *) "FlashMode", (char *) NULL}, 866 { 0x0088, (char *) "AFInfo", (char *) NULL}, 867 { 0x0089, (char *) "ShootingMode", (char *) NULL}, 868 { 0x008B, (char *) "LensFStops", (char *) NULL}, 869 { 0x008C, (char *) "ContrastCurve", (char *) NULL}, 870 { 0x008D, (char *) "ColorHue", (char *) NULL}, 871 { 0x008F, (char *) "SceneMode", (char *) NULL}, 872 { 0x0090, (char *) "LightSource", (char *) NULL}, 873 { 0x0091, (char *) "ShotInfo", (char *) NULL}, 874 { 0x0092, (char *) "HueAdjustment", (char *) NULL}, 875 { 0x0093, (char *) "NEFCompression", (char *) NULL}, 876 { 0x0094, (char *) "Saturation", (char *) NULL}, 877 { 0x0095, (char *) "NoiseReduction", (char *) NULL}, 878 { 0x0096, (char *) "LinearizationTable", (char *) NULL}, 879 { 0x0097, (char *) "ColorBalance", (char *) NULL}, 880 { 0x0098, (char *) "LensData", (char *) NULL}, 881 { 0x0099, (char *) "RawImageCenter", (char *) NULL}, 882 { 0x009A, (char *) "SensorPixelSize", (char *) NULL}, 883 { 0x009C, (char *) "SceneAssist", (char *) NULL}, 884 { 0x009E, (char *) "RetouchHistory", (char *) NULL}, 885 { 0x00A0, (char *) "SerialNumber", (char *) NULL}, 886 { 0x00A2, (char *) "ImageDataSize", (char *) NULL}, 887 { 0x00A5, (char *) "ImageCount", (char *) NULL}, 888 { 0x00A6, (char *) "DeletedImageCount", (char *) NULL}, 889 { 0x00A7, (char *) "ShutterCount", (char *) NULL}, 890 { 0x00A8, (char *) "FlashInfo", (char *) NULL}, 891 { 0x00A9, (char *) "ImageOptimization", (char *) NULL}, 892 { 0x00AA, (char *) "Saturation", (char *) NULL}, 893 { 0x00AB, (char *) "VariProgram", (char *) NULL}, 894 { 0x00AC, …
Large files files are truncated, but you can click here to view the full file