/src/FreeImage/Source/Metadata/TagLib.cpp

https://bitbucket.org/cabalistic/ogredeps/ · C++ · 1617 lines · 1392 code · 83 blank · 142 comment · 30 complexity · d8f00f55a64e898973560be2b48bf29e MD5 · raw file

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