PageRenderTime 55ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

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

https://bitbucket.org/cabalistic/ogredeps/
C++ | 1617 lines | 1392 code | 83 blank | 142 comment | 29 complexity | d8f00f55a64e898973560be2b48bf29e MD5 | raw file
Possible License(s): LGPL-3.0, BSD-3-Clause, CPL-1.0, Unlicense, GPL-2.0, GPL-3.0, LGPL-2.0, MPL-2.0-no-copyleft-exception, BSD-2-Clause, LGPL-2.1
  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, (char *) "ImageStabilization", (char *) NULL},
  864. { 0x00AD, (char *) "AFResponse", (char *) NULL},
  865. { 0x00B0, (char *) "MultiExposure", (char *) NULL},
  866. { 0x00B1, (char *) "HighISONoiseReduction", (char *) NULL},
  867. { 0x00B3, (char *) "ToningEffect", (char *) NULL},
  868. { 0x00B6, (char *) "PowerUpTime", (char *) NULL},
  869. { 0x00B7, (char *) "AFInfo2", (char *) NULL},
  870. { 0x00B8, (char *) "FileInfo", (char *) NULL},
  871. { 0x00B9, (char *) "AFTune", (char *) NULL},
  872. { 0x00BD, (char *) "PictureControl", (char *) NULL},
  873. { 0x0E00, (char *) "PrintIM", (char *) NULL},
  874. { 0x0E01, (char *) "NikonCaptureData", (char *) NULL},
  875. { 0x0E09, (char *) "NikonCaptureVersion", (char *) NULL},
  876. { 0x0E0E, (char *) "NikonCaptureOffsets", (char *) NULL},
  877. { 0x0E10, (char *) "NikonScanIFD", (char *) NULL},
  878. { 0x0E1D, (char *) "NikonICCProfile", (char *) NULL},
  879. { 0x0E1E, (char *) "NikonCaptureOutput", (char *) NULL},
  880. { 0x0E22, (char *) "NEFBitDepth", (char *) NULL},
  881. { 0x0000, (char *) NULL, (char *) NULL}
  882. };
  883. /**
  884. Panasonic / Leica maker note
  885. */
  886. static TagInfo
  887. exif_panasonic_tag_table[] =
  888. {
  889. { 0x0001, (char *) "ImageQuality", (char *) NULL},
  890. { 0x0002, (char *) "FirmwareVersion", (char *) NULL},
  891. { 0x0003, (char *) "WhiteBalance", (char *) NULL},
  892. { 0x0007, (char *) "FocusMode", (char *) NULL},
  893. { 0x000F, (char *) "AFAreaMode", (char *) NULL},
  894. { 0x001A, (char *) "ImageStabilization", (char *) NULL},
  895. { 0x001C, (char *) "MacroMode", (char *) NULL},
  896. { 0x001F, (char *) "ShootingMode", (char *) NULL},
  897. { 0x0020, (char *) "Audio", (char *) NULL},
  898. { 0x0021, (char *) "DataDump", (char *) NULL},
  899. { 0x0022, (char *) "EasyMode", (char *) NULL},
  900. { 0x0023, (char *) "WhiteBalanceBias", (char *) NULL},
  901. { 0x0024, (char *) "FlashBias", (char *) NULL},
  902. { 0x0025, (char *) "InternalSerialNumber", (char *) NULL},
  903. { 0x0026, (char *) "PanasonicExifVersion", (char *) NULL},
  904. { 0x0028, (char *) "ColorEffect", (char *) NULL},
  905. { 0x0029, (char *) "TimeSincePowerOn", (char *) NULL},
  906. { 0x002A, (char *) "BurstMode", (char *) NULL},
  907. { 0x002B, (char *) "SequenceNumber", (char *) NULL},
  908. { 0x002C, (char *) "ContrastMode", (char *) NULL},
  909. { 0x002D, (char *) "NoiseReduction", (char *) NULL},
  910. { 0x002E, (char *) "SelfTimer", (char *) NULL},
  911. { 0x0030, (char *) "Rotation", (char *) NULL},
  912. { 0x0031, (char *) "AFAssistLamp", (char *) NULL},
  913. { 0x0032, (char *) "ColorMode", (char *) NULL},
  914. { 0x0033, (char *) "BabyAge_0x0033", (char *) NULL},
  915. { 0x0034, (char *) "OpticalZoomMode", (char *) NULL},
  916. { 0x0035, (char *) "ConversionLens", (char *) NULL},
  917. { 0x0036, (char *) "TravelDay", (char *) NULL},
  918. { 0x0039, (char *) "Contrast", (char *) NULL},
  919. { 0x003A, (char *) "WorldTimeLocation", (char *) NULL},
  920. { 0x003B, (char *) "TextStamp_0x003B", (char *) NULL},
  921. { 0x003C, (char *) "ProgramISO", (char *) NULL},
  922. { 0x003D, (char *) "AdvancedSceneMode", (char *) NULL},
  923. { 0x003E, (char *) "TextStamp_0x003E", (char *) NULL},
  924. { 0x003F, (char *) "FacesDetected", (char *) NULL},
  925. { 0x0040, (char *) "Saturation", (char *) NULL},
  926. { 0x0041, (char *) "Sharpness", (char *) NULL},
  927. { 0x0042, (char *) "FilmMode", (char *) NULL},
  928. { 0x0046, (char *) "WBAdjustAB", (char *) NULL},
  929. { 0x0047, (char *) "WBAdjustGM", (char *) NULL},
  930. { 0x004B, (char *) "PanasonicImageWidth", (char *) NULL},
  931. { 0x004C, (char *) "PanasonicImageHeight", (char *) NULL},
  932. { 0x004D, (char *) "AFPointPosition", (char *) NULL},
  933. { 0x004E, (char *) "FaceDetInfo", (char *) "Panasonic FaceDetInfo Tags"},
  934. { 0x0051, (char *) "LensType", (char *) NULL},
  935. { 0x0052, (char *) "LensSerialNumber", (char *) NULL},
  936. { 0x0053, (char *) "AccessoryType", (char *) NULL},
  937. { 0x0059, (char *) "Transform", (char *) NULL},
  938. { 0x005D, (char *) "IntelligentExposure", (char *) NULL},
  939. { 0x0061, (char *) "FaceRecInfo", (char *) "Panasonic FaceRecInfo Tags"},
  940. { 0x0062, (char *) "FlashWarning", (char *) NULL},
  941. { 0x0063, (char *) "RecognizedFaceFlags?", (char *) NULL},
  942. { 0x0065, (char *) "Title", (char *) NULL},
  943. { 0x0066, (char *) "BabyName", (char *) NULL},
  944. { 0x0067, (char *) "Location", (char *) NULL},
  945. { 0x0069, (char *) "Country", (char *) NULL},
  946. { 0x006B, (char *) "State", (char *) NULL},
  947. { 0x006D, (char *) "City", (char *) NULL},
  948. { 0x006F, (char *) "Landmark", (char *) NULL},
  949. { 0x0070, (char *) "IntelligentResolution", (char *) NULL},
  950. { 0x0079, (char *) "IntelligentD-Range", (char *) NULL},
  951. { 0x0E00, (char *) "PrintIM", (char *) NULL},
  952. { 0x8000, (char *) "MakerNoteVersion", (char *) NULL},
  953. { 0x8001, (char *) "SceneMode", (char *) NULL},
  954. { 0x8004, (char *) "WBRedLevel", (char *) NULL},
  955. { 0x8005, (char *) "WBGreenLevel", (char *) NULL},
  956. { 0x8006, (char *) "WBBlueLevel", (char *) NULL},
  957. { 0x8007, (char *) "FlashFired", (char *) NULL},
  958. { 0x8008, (char *) "TextStamp_0x8008", (char *) NULL},
  959. { 0x8009, (char *) "TextStamp_0x8009", (char *) NULL},
  960. { 0x8010, (char *) "BabyAge_0x8010", (char *) NULL},
  961. { 0x8012, (char *) "Transform", (char *) NULL},
  962. { 0x0000, (char *) NULL, (char *) NULL}
  963. };
  964. /**
  965. Pentax (Asahi) maker note type 1
  966. */
  967. static TagInfo
  968. exif_asahi_tag_table[] =
  969. {
  970. { 0x0001, (char *) "Capture Mode", (char *) NULL},
  971. { 0x0002, (char *) "Quality Level", (char *) NULL},
  972. { 0x0003, (char *) "Focus Mode", (char *) NULL},
  973. { 0x0004, (char *) "Flash Mode", (char *) NULL},
  974. { 0x0007, (char *) "White Balance", (char *) NULL},
  975. { 0x000A, (char *) "Digital Zoom", (char *) NULL},
  976. { 0x000B, (char *) "Sharpness", (char *) NULL},
  977. { 0x000C, (char *) "Contrast", (char *) NULL},
  978. { 0x000D, (char *) "Saturation", (char *) NULL},
  979. { 0x0014, (char *) "ISO Speed", (char *) NULL},
  980. { 0x0017, (char *) "Color", (char *) NULL},
  981. { 0x0E00, (char *) "PrintIM", (char *) NULL},
  982. { 0x1000, (char *) "Time Zone", (char *) NULL},
  983. { 0x1001, (char *) "Daylight Savings", (char *) NULL},
  984. { 0x0000, (char *) NULL, (char *) NULL}
  985. };
  986. /**
  987. Pentax maker note type 2
  988. */
  989. static TagInfo
  990. exif_pentax_tag_table[] =
  991. {
  992. { 0x0000, (char *) "PentaxVersion", (char *) NULL},
  993. { 0x0001, (char *) "PentaxMode", (char *) NULL},
  994. { 0x0002, (char *) "PreviewImageSize", (char *) NULL},
  995. { 0x0003, (char *) "PreviewImageLength", (char *) NULL},
  996. { 0x0004, (char *) "PreviewImageStart", (char *) NULL},
  997. { 0x0005, (char *) "PentaxModelID", (char *) "Pentax PentaxModelID Values"},
  998. { 0x0006, (char *) "Date", (char *) NULL},
  999. { 0x0007, (char *) "Time", (char *) NULL},
  1000. { 0x0008, (char *) "Quality", (char *) NULL},
  1001. { 0x0009, (char *) "PentaxImageSize", (char *) NULL},
  1002. { 0x000B, (char *) "PictureMode", (char *) NULL},
  1003. { 0x000C, (char *) "FlashMode", (char *) NULL},
  1004. { 0x000D, (char *) "FocusMode", (char *) NULL},
  1005. { 0x000E, (char *) "AFPointSelected", (char *) NULL},
  1006. { 0x000F, (char *) "AFPointsInFocus", (char *) NULL},
  1007. { 0x0010, (char *) "FocusPosition", (char *) NULL},
  1008. { 0x0012, (char *) "ExposureTime", (char *) NULL},
  1009. { 0x0013, (char *) "FNumber", (char *) NULL},
  1010. { 0x0014, (char *) "ISO", (char *) NULL},
  1011. { 0x0015, (char *) "LightReading", (char *) NULL},
  1012. { 0x0016, (char *) "ExposureCompensation", (char *) NULL},
  1013. { 0x0017, (char *) "MeteringMode", (char *) NULL},
  1014. { 0x0018, (char *) "AutoBracketing", (char *) NULL},
  1015. { 0x0019, (char *) "WhiteBalance", (char *) NULL},
  1016. { 0x001A, (char *) "WhiteBalanceMode", (char *) NULL},
  1017. { 0x001B, (char *) "BlueBalance", (char *) NULL},
  1018. { 0x001C, (char *) "RedBalance", (char *) NULL},
  1019. { 0x001D, (char *) "FocalLength", (char *) NULL},
  1020. { 0x001E, (char *) "DigitalZoom", (char *) NULL},
  1021. { 0x001F, (char *) "Saturation", (char *) NULL},
  1022. { 0x0020, (char *) "Contrast", (char *) NULL},
  1023. { 0x0021, (char *) "Sharpness", (char *) NULL},
  1024. { 0x0022, (char *) "WorldTimeLocation", (char *) NULL},
  1025. { 0x0023, (char *) "HometownCity", (char *) "Pentax City Values"},
  1026. { 0x0024, (char *) "DestinationCity", (char *) "Pentax City Values"},
  1027. { 0x0025, (char *) "HometownDST", (char *) NULL},
  1028. { 0x0026, (char *) "DestinationDST", (char *) NULL},
  1029. { 0x0027, (char *) "DSPFirmwareVersion", (char *) NULL},
  1030. { 0x0028, (char *) "CPUFirmwareVersion", (char *) NULL},
  1031. { 0x0029, (char *) "FrameNumber", (char *) NULL},
  1032. { 0x002D, (char *) "EffectiveLV", (char *) NULL},
  1033. { 0x0032, (char *) "ImageProcessing", (char *) NULL},
  1034. { 0x0033, (char *) "PictureMode", (char *) NULL},
  1035. { 0x0034, (char *) "DriveMode", (char *) NULL},
  1036. { 0x0035, (char *) "SensorSize", (char *) NULL},
  1037. { 0x0037, (char *) "ColorSpace", (char *) NULL},
  1038. { 0x0039, (char *) "RawImageSize", (char *) NULL},
  1039. { 0x003C, (char *) "AFPointsInFocus", (char *) NULL},
  1040. { 0x003E, (char *) "PreviewImageBorders", (char *) NULL},
  1041. { 0x003F, (char *) "LensType", (char *) "Pentax LensType Values"},
  1042. { 0x0040, (char *) "SensitivityAdjust", (char *) NULL},
  1043. { 0x0041, (char *) "ImageProcessingCount", (char *) NULL},
  1044. { 0x0047, (char *) "CameraTemperature", (char *) NULL},
  1045. { 0x0048, (char *) "AELock", (char *) NULL},
  1046. { 0x0049, (char *) "NoiseReduction", (char *) NULL},
  1047. { 0x004D, (char *) "FlashExposureComp", (char *) NULL},
  1048. { 0x004F, (char *) "ImageTone", (char *) NULL},
  1049. { 0x0050, (char *) "ColorTemperature", (char *) NULL},
  1050. { 0x005C, (char *) "ShakeReductionInfo", (char *) "Pentax SRInfo Tags"},
  1051. { 0x005D, (char *) "ShutterCount", (char *) NULL},
  1052. { 0x0060, (char *) "FaceInfo", (char *) "Pentax FaceInfo Tags"},
  1053. { 0x0067, (char *) "Hue", (char *) NULL},
  1054. { 0x0068, (char *) "AWBInfo", (char *) "Pentax AWBInfo Tags"},
  1055. { 0x0069, (char *) "DynamicRangeExpansion", (char *) NULL},
  1056. { 0x006B, (char *) "TimeInfo", (char *) "Pentax TimeInfo Tags"},
  1057. { 0x006C, (char *) "HighLowKeyAdj", (char *) NULL},
  1058. { 0x006D, (char *) "ContrastHighlight", (char *) NULL},
  1059. { 0x006E, (char *) "ContrastShadow", (char *) NULL},
  1060. { 0x006F, (char *) "ContrastHighlightShadowAdj", (char *) NULL},
  1061. { 0x0070, (char *) "FineSharpness", (char *) NULL},
  1062. { 0x0071, (char *) "HighISONoiseReduction", (char *) NULL},
  1063. { 0x0072, (char *) "AFAdjustment", (char *) NULL},
  1064. { 0x0073, (char *) "MonochromeFilterEffect", (char *) NULL},
  1065. { 0x0074, (char *) "MonochromeToning", (char *) NULL},
  1066. { 0x0076, (char *) "FaceDetect", (char *) NULL},
  1067. { 0x0077, (char *) "FaceDetectFrameSize", (char *) NULL},
  1068. { 0x0079, (char *) "ShadowCompensation", (char *) NULL},
  1069. { 0x007A, (char *) "ISOAutoParameters", (char *) NULL},
  1070. { 0x007B, (char *) "CrossProcess", (char *) NULL},
  1071. { 0x007D, (char *) "LensCorr", (char *) "Pentax LensCorr Tags"},
  1072. { 0x007F, (char *) "BleachBypassToning", (char *) NULL},
  1073. { 0x0200, (char *) "BlackPoint", (char *) NULL},
  1074. { 0x0201, (char *) "WhitePoint", (char *) NULL},
  1075. { 0x0203, (char *) "ColorMatrixA", (char *) NULL},
  1076. { 0x0204, (char *) "ColorMatrixB", (char *) NULL},
  1077. { 0x0205, (char *) "CameraSettings", (char *) "Pentax CameraSettings Tags"},
  1078. { 0x0206, (char *) "AEInfo", (char *) "Pentax AEInfo Tags"},
  1079. { 0x0207, (char *) "LensInfo", (char *) "Pentax LensInfo Tags"},
  1080. { 0x0208, (char *) "FlashInfo", (char *) "Pentax FlashInfo Tags"},
  1081. { 0x0209, (char *) "AEMeteringSegments", (char *) NULL},
  1082. { 0x020A, (char *) "FlashMeteringSegments", (char *) NULL},
  1083. { 0x020B, (char *) "SlaveFlashMeteringSegments", (char *) NULL},
  1084. { 0x020D, (char *) "WB_RGGBLevelsDaylight", (char *) NULL},
  1085. { 0x020E, (char *) "WB_RGGBLevelsShade", (char *) NULL},
  1086. { 0x020F, (char *) "WB_RGGBLevelsCloudy", (char *) NULL},
  1087. { 0x0210, (char *) "WB_RGGBLevelsTungsten", (char *) NULL},
  1088. { 0x0211, (char *) "WB_RGGBLevelsFluorescentD", (char *) NULL},
  1089. { 0x0212, (char *) "WB_RGGBLevelsFluorescentN", (char *) NULL},
  1090. { 0x0213, (char *) "WB_RGGBLevelsFluorescentW", (char *) NULL},
  1091. { 0x0214, (char *) "WB_RGGBLevelsFlash", (char *) NULL},
  1092. { 0x0215, (char *) "CameraInfo", (char *) "Pentax CameraInfo Tags"},
  1093. { 0x0216, (char *) "BatteryInfo", (char *) "Pentax BatteryInfo Tags"},
  1094. { 0x021B, (char *) "SaturationInfo", (char *) NULL},
  1095. { 0x021F, (char *) "AFInfo", (char *) "Pentax AFInfo Tags"},
  1096. { 0x0222, (char *) "ColorInfo", (char *) "Pentax ColorInfo Tags"},
  1097. { 0x0224, (char *) "EVStepInfo", (char *) "Pentax EVStepInfo Tags"},
  1098. { 0x0226, (char *) "ShotInfo", (char *) "Pentax ShotInfo Tags"},
  1099. { 0x0227, (char *) "FacePos", (char *) "Pentax FacePos Tags"},
  1100. { 0x0228, (char *) "FaceSize", (char *) "Pentax FaceSize Tags"},
  1101. { 0x0229, (char *) "SerialNumber", (char *) NULL},
  1102. { 0x022A, (char *) "FilterInfo", (char *) "Pentax FilterInfo Tags"},
  1103. { 0x022B, (char *) "LevelInfo", (char *) "Pentax LevelInfo Tags"},
  1104. { 0x022E, (char *) "Artist", (char *) NULL},
  1105. { 0x022F, (char *) "Copyright", (char *) NULL},
  1106. { 0x0230, (char *) "FirmwareVersion", (char *) NULL},
  1107. { 0x0231, (char *) "ContrastDetectAFArea", (char *) NULL},
  1108. { 0x0235, (char *) "CrossProcessParams", (char *) NULL},
  1109. { 0x03FE, (char *) "DataDump", (char *) NULL},
  1110. { 0x0402, (char *) "ToneCurve", (char *) NULL},
  1111. { 0x0403, (char *) "ToneCurves", (char *) NULL},
  1112. { 0x0E00, (char *) "PrintIM", (char *) NULL},
  1113. { 0x1000, (char *) "HometownCityCode", (char *) NULL},
  1114. { 0x1001, (char *) "DestinationCityCode", (char *) NULL},
  1115. { 0x2000, (char *) "PreviewImageData", (char *) NULL},
  1116. { 0x0000, (char *) NULL, (char *) NULL}
  1117. };
  1118. /**
  1119. Sony maker note
  1120. */
  1121. static TagInfo
  1122. exif_sony_tag_table[] =
  1123. {
  1124. { 0x0102, (char *) "Quality", (char *) NULL},
  1125. { 0x0104, (char *) "FlashExposureComp", (char *) NULL},
  1126. { 0x0105, (char *) "Teleconverter", (char *) NULL},
  1127. { 0x0112, (char *) "WhiteBalanceFineTune", (char *) NULL},
  1128. { 0x0114, (char *) "CameraSettings", (char *) NULL},
  1129. { 0x0115, (char *) "WhiteBalance", (char *) NULL},
  1130. { 0x0E00, (char *) "PrintIM", (char *) NULL},
  1131. { 0x1000, (char *) "MultiBurstMode", (char *) NULL},
  1132. { 0x1001, (char *) "MultiBurstImageWidth", (char *) NULL},
  1133. { 0x1002, (char *) "MultiBurstImageHeight", (char *) NULL},
  1134. { 0x1003, (char *) "Panorama", (char *) NULL},
  1135. { 0x2001, (char *) "PreviewImage", (char *) NULL},
  1136. { 0x2004, (char *) "Contrast", (char *) NULL},
  1137. { 0x2005, (char *) "Saturation", (char *) NULL},
  1138. { 0x2006, (char *) "Sharpness", (char *) NULL},
  1139. { 0x2007, (char *) "Brightness", (char *) NULL},
  1140. { 0x2008, (char *) "LongExposureNoiseReduction", (char *) NULL},
  1141. { 0x2009, (char *) "HighISONoiseReduction", (char *) NULL},
  1142. { 0x200A, (char *) "HDR", (char *) NULL},
  1143. { 0x200B, (char *) "MultiFrameNoiseReduction", (char *) NULL},
  1144. { 0x3000, (char *) "ShotInfo", (char *) NULL},
  1145. { 0xB000, (char *) "FileFormat", (char *) NULL},
  1146. { 0xB001, (char *) "SonyModelID", (char *) NULL},
  1147. { 0xB020, (char *) "ColorReproduction", (char *) NULL},
  1148. { 0xB021, (char *) "ColorTemperature", (char *) NULL},
  1149. { 0xB022, (char *) "ColorCompensationFilter", (char *) NULL},
  1150. { 0xB023, (char *) "SceneMode", (char *) NULL},
  1151. { 0xB024, (char *) "ZoneMatching", (char *) NULL},
  1152. { 0xB025, (char *) "DynamicRangeOptimizer", (char *) NULL},
  1153. { 0xB026, (char *) "ImageStabilization", (char *) NULL},
  1154. { 0xB027, (char *) "LensType", (char *) NULL},
  1155. { 0xB028, (char *) "MinoltaMakerNote", (char *) NULL},
  1156. { 0xB029, (char *) "ColorMode", (char *) NULL},
  1157. { 0xB02B, (char *) "FullImageSize", (char *) NULL},
  1158. { 0xB02C, (char *) "PreviewImageSize", (char *) NULL},
  1159. { 0xB040, (char *) "Macro", (char *) NULL},
  1160. { 0xB041, (char *) "ExposureMode", (char *) NULL},
  1161. { 0xB042, (char *) "FocusMode", (char *) NULL},
  1162. { 0xB043, (char *) "AFMode", (char *) NULL},
  1163. { 0xB044, (char *) "AFIlluminator", (char *) NULL},
  1164. { 0xB047, (char *) "Quality2", (char *) NULL},
  1165. { 0xB048, (char *) "FlashLevel", (char *) NULL},
  1166. { 0xB049, (char *) "ReleaseMode", (char *) NULL},
  1167. { 0xB04A, (char *) "SequenceNumber", (char *) NULL},
  1168. { 0xB04B, (char *) "Anti-Blur", (char *) NULL},
  1169. { 0xB04E, (char *) "LongExposureNoiseReduction", (char *) NULL},
  1170. { 0xB04F, (char *) "DynamicRangeOptimizer", (char *) NULL},
  1171. { 0xB052, (char *) "IntelligentAuto", (char *) NULL},
  1172. { 0xB054, (char *) "WhiteBalance2", (char *) NULL},
  1173. { 0x0000, (char *) NULL, (char *) NULL}
  1174. };
  1175. /**
  1176. Sigma SD1 maker note
  1177. */
  1178. static TagInfo
  1179. exif_sigma_sd1_tag_table[] =
  1180. {
  1181. { 0x0002, (char *) "SerialNumber", (char *) NULL},
  1182. { 0x0003, (char *) "DriveMode", (char *) NULL},
  1183. { 0x0004, (char *) "ResolutionMode", (char *) NULL},
  1184. { 0x0005, (char *) "AFMode", (char *) NULL},
  1185. { 0x0006, (char *) "FocusSetting", (char *) NULL},
  1186. { 0x0007, (char *) "WhiteBalance", (char *) NULL},
  1187. { 0x0008, (char *) "ExposureMode", (char *) NULL},
  1188. { 0x0009, (char *) "MeteringMode", (char *) NULL},
  1189. { 0x000A, (char *) "LensFocalRange", (char *) NULL},
  1190. { 0x000B, (char *) "ColorSpace", (char *) NULL},
  1191. { 0x000C, (char *) "ExposureCompensation", (char *) NULL},
  1192. { 0x000D, (char *) "Contrast", (char *) NULL},
  1193. { 0x000E, (char *) "Shadow", (char *) NULL},
  1194. { 0x000F, (char *) "Highlight", (char *) NULL},
  1195. { 0x0010, (char *) "Saturation", (char *) NULL},
  1196. { 0x0011, (char *) "Sharpness", (char *) NULL},
  1197. { 0x0012, (char *) "X3FillLight", (char *) NULL},
  1198. { 0x0014, (char *) "ColorAdjustment", (char *) NULL},
  1199. { 0x0015, (char *) "AdjustmentMode", (char *) NULL},
  1200. { 0x0016, (char *) "Quality", (char *) NULL},
  1201. { 0x0017, (char *) "Firmware", (char *) NULL},
  1202. { 0x0018, (char *) "Software", (char *) NULL},
  1203. { 0x0019, (char *) "AutoBracket", (char *) NULL},
  1204. { 0x001A, (char *) "ChrominanceNoiseReduction", (char *) NULL},
  1205. { 0x001B, (char *) "LuminanceNoiseReduction", (char *) NULL},
  1206. { 0x001C, (char *) "PreviewImageStart", (char *) NULL},
  1207. { 0x001D, (char *) "PreviewImageLength", (char *) NULL},
  1208. { 0x001F, (char *) "MakerNoteVersion", (char *) NULL},
  1209. { 0x0026, (char *) "FileFormat", (char *) NULL},
  1210. { 0x002C, (char *) "ColorMode", (char *) NULL},
  1211. { 0x0030, (char *) "Calibration", (char *) NULL},
  1212. { 0x0048, (char *) "LensApertureRange", (char *) NULL},
  1213. { 0x0049, (char *) "FNumber", (char *) NULL},
  1214. { 0x004A, (char *) "ExposureTime", (char *) NULL},
  1215. { 0x004B, (char *) "ExposureTime2", (char *) NULL},
  1216. { 0x004D, (char *) "ExposureCompensation_SD1", (char *) NULL},
  1217. { 0x0055, (char *) "SensorTemperature", (char *) NULL},
  1218. { 0x0056, (char *) "FlashExposureComp", (char *) NULL},
  1219. { 0x0057, (char *) "Firmware_SD1", (char *) NULL},
  1220. { 0x0058, (char *) "WhiteBalance", (char *) NULL},
  1221. { 0x0000, (char *) NULL, (char *) NULL}
  1222. };
  1223. /**
  1224. Sigma / Foveon maker note (others than SD1 models)
  1225. NB: many tags are not consistent between different models
  1226. */
  1227. static TagInfo
  1228. exif_sigma_foveon_tag_table[] =
  1229. {
  1230. { 0x0002, (char *) "SerialNumber", (char *) NULL},
  1231. { 0x0003, (char *) "DriveMode", (char *) NULL},
  1232. { 0x0004, (char *) "ResolutionMode", (char *) NULL},
  1233. { 0x0005, (char *) "AFMode", (char *) NULL},
  1234. { 0x0006, (char *) "FocusSetting", (char *) NULL},
  1235. { 0x0007, (char *) "WhiteBalance", (char *) NULL},
  1236. { 0x0008, (char *) "ExposureMode", (char *) NULL},
  1237. { 0x0009, (char *) "MeteringMode", (char *) NULL},
  1238. { 0x000A, (char *) "LensFocalRange", (char *) NULL},
  1239. { 0x000B, (char *) "ColorSpace", (char *) NULL},
  1240. { 0x000C, (char *) "ExposureCompensation", (char *) NULL},
  1241. { 0x000D, (char *) "Contrast", (char *) NULL},
  1242. { 0x000E, (char *) "Shadow", (char *) NULL},
  1243. { 0x000F, (char *) "Highlight", (char *) NULL},
  1244. { 0x0010, (char *) "Saturation", (char *) NULL},
  1245. { 0x0011, (char *) "Sharpness", (char *) NULL},
  1246. { 0x0012, (char *) "X3FillLight", (char *) NULL},
  1247. { 0x0014, (char *) "ColorAdjustment", (char *) NULL},
  1248. { 0x0015, (char *) "AdjustmentMode", (char *) NULL},
  1249. { 0x0016, (char *) "Quality", (char *) NULL},
  1250. { 0x0017, (char *) "Firmware", (char *) NULL},
  1251. { 0x0018, (char *) "Software", (char *) NULL},
  1252. { 0x0019, (char *) "AutoBracket", (char *) NULL},
  1253. { 0x001A, (char *) "PreviewImageStart", (char *) NULL},
  1254. { 0x001B, (char *) "PreviewImageLength", (char *) NULL},
  1255. { 0x001C, (char *) "PreviewImageSize", (char *) NULL},
  1256. { 0x001D, (char *) "MakerNoteVersion", (char *) NULL},
  1257. { 0x001F, (char *) "AFPoint", (char *) NULL},
  1258. { 0x0022, (char *) "FileFormat", (char *) NULL},
  1259. { 0x0024, (char *) "Calibration", (char *) NULL},
  1260. { 0x002C, (char *) "ColorMode", (char *) NULL},
  1261. { 0x0030, (char *) "LensApertureRange", (char *) NULL},
  1262. { 0x0031, (char *) "FNumber", (char *) NULL},
  1263. { 0x0032, (char *) "ExposureTime", (char *) NULL},
  1264. { 0x0033, (char *) "ExposureTime2", (char *) NULL},
  1265. { 0x0034, (char *) "BurstShot", (char *) NULL},
  1266. { 0x0035, (char *) "ExposureCompensation", (char *) NULL},
  1267. { 0x0039, (char *) "SensorTemperature", (char *) NULL},
  1268. { 0x003A, (char *) "FlashExposureComp", (char *) NULL},
  1269. { 0x003B, (char *) "Firmware", (char *) NULL},
  1270. { 0x003C, (char *) "WhiteBalance", (char *) NULL},
  1271. { 0x003D, (char *) "PictureMode", (char *) NULL},
  1272. { 0x0000, (char *) NULL, (char *) NULL}
  1273. };
  1274. // --------------------------------------------------------------------------
  1275. // IPTC tags definition
  1276. // --------------------------------------------------------------------------
  1277. static TagInfo
  1278. iptc_tag_table[] =
  1279. {
  1280. // IPTC-NAA IIM version 4
  1281. { 0x0200 + 0, (char *) "ApplicationRecordVersion", (char *) "Application Record Version"},
  1282. { 0x0200 + 3, (char *) "ObjectTypeReference", (char *) "Object Type Reference"},
  1283. { 0x0200 + 4, (char *) "ObjectAttributeReference", (char *) "Object Attribute Reference"},
  1284. { 0x0200 + 5, (char *) "ObjectName", (char *) "Title"},
  1285. { 0x0200 + 7, (char *) "EditStatus", (char *) "Edit Status"},
  1286. { 0x0200 + 8, (char *) "EditorialUpdate", (char *) "Editorial Update"},
  1287. { 0x0200 + 10, (char *) "Urgency", (char *) "Urgency"},
  1288. { 0x0200 + 12, (char *) "SubjectReference", (char *) "Subject Reference"},
  1289. { 0x0200 + 15, (char *) "Category", (char *) "Category"},
  1290. { 0x0200 + 20, (char *) "SupplementalCategories", (char *) "Supplemental Categories"},
  1291. { 0x0200 + 22, (char *) "FixtureIdentifier", (char *) "Fixture Identifier"},
  1292. { 0x0200 + 25, (char *) "Keywords", (char *) "Keywords"},
  1293. { 0x0200 + 26, (char *) "ContentLocationCode", (char *) "Content Location Code"},
  1294. { 0x0200 + 27, (char *) "ContentLocationName", (char *) "Content Location Name"},
  1295. { 0x0200 + 30, (char *) "ReleaseDate", (char *) "Release Date"},
  1296. { 0x0200 + 35, (char *) "ReleaseTime", (char *) "Release Time"},
  1297. { 0x0200 + 37, (char *) "ExpirationDate", (char *) "Expiration Date"},
  1298. { 0x0200 + 38, (char *) "ExpirationTime", (char *) "Expiration Time"},
  1299. { 0x0200 + 40, (char *) "SpecialInstructions", (char *) "Instructions"},
  1300. { 0x0200 + 42, (char *) "ActionAdvised", (char *) "Action Advised"},
  1301. { 0x0200 + 45, (char *) "ReferenceService", (char *) "Reference Service"},
  1302. { 0x0200 + 47, (char *) "ReferenceDate", (char *) "Reference Date"},
  1303. { 0x0200 + 50, (char *) "ReferenceNumber", (char *) "Reference Number"},
  1304. { 0x0200 + 55, (char *) "DateCreated", (char *) "Date Created"},
  1305. { 0x0200 + 60, (char *) "TimeCreated", (char *) "Time Created"},
  1306. { 0x0200 + 62, (char *) "DigitalCreationDate", (char *) "Digital Creation Date"},
  1307. { 0x0200 + 63, (char *) "DigitalCreationTime", (char *) "Digital Creation Time"},
  1308. { 0x0200 + 65, (char *) "OriginatingProgram", (char *) "Originating Program"},
  1309. { 0x0200 + 70, (char *) "ProgramVersion", (char *) "Program Version"},
  1310. { 0x0200 + 75, (char *) "ObjectCycle", (char *) "Object Cycle"},
  1311. { 0x0200 + 80, (char *) "By-line", (char *) "Author"},
  1312. { 0x0200 + 85, (char *) "By-lineTitle", (char *) "Author's Position"},
  1313. { 0x0200 + 90, (char *) "City", (char *) "City"},
  1314. { 0x0200 + 92, (char *) "SubLocation", (char *) "Sub-Location"},
  1315. { 0x0200 + 95, (char *) "Province-State", (char *) "State/Province"},
  1316. { 0x0200 + 100, (char *) "Country-PrimaryLocationCode", (char *) "Country Code"},
  1317. { 0x0200 + 101, (char *) "Country-PrimaryLocationName", (char *) "Country Name"},
  1318. { 0x0200 + 103, (char *) "OriginalTransmissionReference", (char *) "Transmission Reference"},
  1319. { 0x0200 + 105, (char *) "Headline", (char *) "Headline"},
  1320. { 0x0200 + 110, (char *) "Credit", (char *) "Credit"},
  1321. { 0x0200 + 115, (char *) "Source", (char *) "Source"},
  1322. { 0x0200 + 116, (char *) "CopyrightNotice", (char *) "Copyright Notice"},
  1323. { 0x0200 + 118, (char *) "Contact", (char *) "Contact"},
  1324. { 0x0200 + 120, (char *) "Caption-Abstract", (char *) "Caption"},
  1325. { 0x0200 + 122, (char *) "Writer-Editor", (char *) "Caption Writer"},
  1326. { 0x0200 + 125, (char *) "RasterizedCaption", (char *) "Rasterized Caption"},
  1327. { 0x0200 + 130, (char *) "ImageType", (char *) "Image Type"},
  1328. { 0x0200 + 131, (char *) "ImageOrientation", (char *) "Image Orientation"},
  1329. { 0x0200 + 135, (char *) "LanguageIdentifier", (char *) "Language Identifier"},
  1330. { 0x0200 + 150, (char *) "AudioType", (char *) "Audio Type"},
  1331. { 0x0200 + 151, (char *) "AudioSamplingRate", (char *) "Audio Sampling Rate"},
  1332. { 0x0200 + 152, (char *) "AudioSamplingResolution", (char *) "Audio Sampling Resolution"},
  1333. { 0x0200 + 153, (char *) "AudioDuration", (char *) "Audio Duration"},
  1334. { 0x0200 + 154, (char *) "AudioOutcue", (char *) "Audio Outcue"},
  1335. // Metadata seen in other softwares (see also http://owl.phy.queensu.ca/~phil/exiftool/TagNames/IPTC.html#ApplicationRecord)
  1336. { 0x0200 + 184, (char *) "JobID", (char *) "Job ID"},
  1337. { 0x0200 + 185, (char *) "MasterDocumentID", (char *) "Master Document ID"},
  1338. { 0x0200 + 186, (char *) "ShortDocumentID", (char *) "Short Document ID"},
  1339. { 0x0200 + 187, (char *) "UniqueDocumentID", (char *) "Unique Document ID"},
  1340. { 0x0200 + 188, (char *) "OwnerID", (char *) "Owner ID"},
  1341. // IPTC-NAA IIM version 4
  1342. { 0x0200 + 200, (char *) "ObjectPreviewFileFormat", (char *) "Object Preview File Format"},
  1343. { 0x0200 + 201, (char *) "ObjectPreviewFileVersion", (char *) "Object Preview File Version"},
  1344. { 0x0200 + 202, (char *) "ObjectPreviewData", (char *) "Audio Outcue"},
  1345. // Metadata seen in other softwares (see also http://owl.phy.queensu.ca/~phil/exiftool/TagNames/IPTC.html#ApplicationRecord)
  1346. { 0x0200 + 221, (char *) "Prefs", (char *) "PhotoMechanic preferences"},
  1347. { 0x0200 + 225, (char *) "ClassifyState", (char *) "Classify State"},
  1348. { 0x0200 + 228, (char *) "SimilarityIndex", (char *) "Similarity Index"},
  1349. { 0x0200 + 230, (char *) "DocumentNotes", (char *) "Document Notes"},
  1350. { 0x0200 + 231, (char *) "DocumentHistory", (char *) "Document History"},
  1351. { 0x0200 + 232, (char *) "ExifCameraInfo", (char *) "Exif Camera Info"},
  1352. { 0x0000, (char *) NULL, (char *) NULL}
  1353. };
  1354. // --------------------------------------------------------------------------
  1355. // GeoTIFF tags definition
  1356. // --------------------------------------------------------------------------
  1357. static TagInfo
  1358. geotiff_tag_table[] =
  1359. {
  1360. { 0x830E, (char *) "GeoPixelScale", (char *) NULL},
  1361. { 0x8480, (char *) "Intergraph TransformationMatrix", (char *) NULL},
  1362. { 0x8482, (char *) "GeoTiePoints", (char *) NULL},
  1363. { 0x85D7, (char *) "JPL Carto IFD offset", (char *) NULL},
  1364. { 0x85D8, (char *) "GeoTransformationMatrix", (char *) NULL},
  1365. { 0x87AF, (char *) "GeoKeyDirectory", (char *) NULL},
  1366. { 0x87B0, (char *) "GeoDoubleParams", (char *) NULL},
  1367. { 0x87B1, (char *) "GeoASCIIParams", (char *) NULL},
  1368. { 0x0000, (char *) NULL, (char *) NULL}
  1369. };
  1370. // --------------------------------------------------------------------------
  1371. // Animation tags definition
  1372. // --------------------------------------------------------------------------
  1373. static TagInfo
  1374. animation_tag_table[] =
  1375. {
  1376. { 0x0001, (char *) "LogicalWidth", (char *) "Logical width"},
  1377. { 0x0002, (char *) "LogicalHeight", (char *) "Logical height"},
  1378. { 0x0003, (char *) "GlobalPalette", (char *) "Global Palette"},
  1379. { 0x0004, (char *) "Loop", (char *) "loop"},
  1380. { 0x1001, (char *) "FrameLeft", (char *) "Frame left"},
  1381. { 0x1002, (char *) "FrameTop", (char *) "Frame top"},
  1382. { 0x1003, (char *) "NoLocalPalette", (char *) "No Local Palette"},
  1383. { 0x1004, (char *) "Interlaced", (char *) "Interlaced"},
  1384. { 0x1005, (char *) "FrameTime", (char *) "Frame display time"},
  1385. { 0x1006, (char *) "DisposalMethod", (char *) "Frame disposal method"},
  1386. { 0x0000, (char *) NULL, (char *) NULL}
  1387. };
  1388. // --------------------------------------------------------------------------
  1389. // TagLib class definition
  1390. // --------------------------------------------------------------------------
  1391. /**
  1392. This is where the tag info tables are initialized
  1393. */
  1394. TagLib::TagLib() {
  1395. // initialize all known metadata models
  1396. // ====================================
  1397. // Exif
  1398. addMetadataModel(TagLib::EXIF_MAIN, exif_exif_tag_table);
  1399. addMetadataModel(TagLib::EXIF_EXIF, exif_exif_tag_table);
  1400. addMetadataModel(TagLib::EXIF_GPS, exif_gps_tag_table);
  1401. addMetadataModel(TagLib::EXIF_INTEROP, exif_interop_tag_table);
  1402. // Exif maker note
  1403. addMetadataModel(TagLib::EXIF_MAKERNOTE_CANON, exif_canon_tag_table);
  1404. addMetadataModel(TagLib::EXIF_MAKERNOTE_CASIOTYPE1, exif_casio_type1_tag_table);
  1405. addMetadataModel(TagLib::EXIF_MAKERNOTE_CASIOTYPE2, exif_casio_type2_tag_table);
  1406. addMetadataModel(TagLib::EXIF_MAKERNOTE_FUJIFILM, exif_fujifilm_tag_table);
  1407. addMetadataModel(TagLib::EXIF_MAKERNOTE_KYOCERA, exif_kyocera_tag_table);
  1408. addMetadataModel(TagLib::EXIF_MAKERNOTE_MINOLTA, exif_minolta_tag_table);
  1409. addMetadataModel(TagLib::EXIF_MAKERNOTE_NIKONTYPE1, exif_nikon_type1_tag_table);
  1410. addMetadataModel(TagLib::EXIF_MAKERNOTE_NIKONTYPE2, exif_nikon_type2_tag_table);
  1411. addMetadataModel(TagLib::EXIF_MAKERNOTE_NIKONTYPE3, exif_nikon_type3_tag_table);
  1412. addMetadataModel(TagLib::EXIF_MAKERNOTE_OLYMPUSTYPE1, exif_olympus_type1_tag_table);
  1413. addMetadataModel(TagLib::EXIF_MAKERNOTE_PANASONIC, exif_panasonic_tag_table);
  1414. addMetadataModel(TagLib::EXIF_MAKERNOTE_ASAHI, exif_asahi_tag_table);
  1415. addMetadataModel(TagLib::EXIF_MAKERNOTE_PENTAX, exif_pentax_tag_table);
  1416. addMetadataModel(TagLib::EXIF_MAKERNOTE_SONY, exif_sony_tag_table);
  1417. addMetadataModel(TagLib::EXIF_MAKERNOTE_SIGMA_SD1, exif_sigma_sd1_tag_table);
  1418. addMetadataModel(TagLib::EXIF_MAKERNOTE_SIGMA_FOVEON, exif_sigma_foveon_tag_table);
  1419. // IPTC/NAA
  1420. addMetadataModel(TagLib::IPTC, iptc_tag_table);
  1421. // GeoTIFF
  1422. addMetadataModel(TagLib::GEOTIFF, geotiff_tag_table);
  1423. // Animation
  1424. addMetadataModel(TagLib::ANIMATION, animation_tag_table);
  1425. }
  1426. BOOL TagLib::addMetadataModel(MDMODEL md_model, TagInfo *tag_table) {
  1427. // check that the model doesn't already exist
  1428. if((_table_map.find(md_model) == _table_map.end()) && (tag_table != NULL)) {
  1429. // add the tag description table
  1430. TAGINFO *info_map = new(std::nothrow) TAGINFO();
  1431. if(!info_map) return FALSE;
  1432. for(int i = 0; ; i++) {
  1433. if((tag_table[i].tag == 0) && (tag_table[i].fieldname == NULL))
  1434. break;
  1435. (*info_map)[tag_table[i].tag] = &tag_table[i];
  1436. }
  1437. // add the metadata model
  1438. _table_map[md_model] = info_map;
  1439. return TRUE;
  1440. }
  1441. return FALSE;
  1442. }
  1443. TagLib::~TagLib() {
  1444. // delete metadata models
  1445. for(TABLEMAP::iterator i = _table_map.begin(); i != _table_map.end(); i++) {
  1446. TAGINFO *info_map = (*i).second;
  1447. delete info_map;
  1448. }
  1449. }
  1450. TagLib&
  1451. TagLib::instance() {
  1452. static TagLib s;
  1453. return s;
  1454. }
  1455. const TagInfo*
  1456. TagLib::getTagInfo(MDMODEL md_model, WORD tagID) {
  1457. if(_table_map.find(md_model) != _table_map.end()) {
  1458. TAGINFO *info_map = (TAGINFO*)_table_map[md_model];
  1459. if(info_map->find(tagID) != info_map->end()) {
  1460. return (*info_map)[tagID];
  1461. }
  1462. }
  1463. return NULL;
  1464. }
  1465. const char*
  1466. TagLib::getTagFieldName(MDMODEL md_model, WORD tagID, char *defaultKey) {
  1467. const TagInfo *info = getTagInfo(md_model, tagID);
  1468. if(NULL == info) {
  1469. if(defaultKey != NULL) {
  1470. sprintf(defaultKey, "Tag 0x%04X", tagID);
  1471. return &defaultKey[0];
  1472. } else {
  1473. return NULL;
  1474. }
  1475. }
  1476. return info->fieldname;
  1477. }
  1478. const char*
  1479. TagLib::getTagDescription(MDMODEL md_model, WORD tagID) {
  1480. const TagInfo *info = getTagInfo(md_model, tagID);
  1481. if(info) {
  1482. return info->description;
  1483. }
  1484. return NULL;
  1485. }
  1486. int TagLib::getTagID(MDMODEL md_model, const char *key) {
  1487. if(_table_map.find(md_model) != _table_map.end()) {
  1488. TAGINFO *info_map = (TAGINFO*)_table_map[md_model];
  1489. for(TAGINFO::iterator i = info_map->begin(); i != info_map->end(); i++) {
  1490. const TagInfo *info = (*i).second;
  1491. if(info && (strcmp(info->fieldname, key) == 0)) {
  1492. return (int)info->tag;
  1493. }
  1494. }
  1495. }
  1496. return -1;
  1497. }
  1498. FREE_IMAGE_MDMODEL
  1499. TagLib::getFreeImageModel(MDMODEL model) {
  1500. switch(model) {
  1501. case EXIF_MAIN:
  1502. return FIMD_EXIF_MAIN;
  1503. case EXIF_EXIF:
  1504. return FIMD_EXIF_EXIF;
  1505. case EXIF_GPS:
  1506. return FIMD_EXIF_GPS;
  1507. case EXIF_INTEROP:
  1508. return FIMD_EXIF_INTEROP;
  1509. case EXIF_MAKERNOTE_CANON:
  1510. case EXIF_MAKERNOTE_CASIOTYPE1:
  1511. case EXIF_MAKERNOTE_CASIOTYPE2:
  1512. case EXIF_MAKERNOTE_FUJIFILM:
  1513. case EXIF_MAKERNOTE_KYOCERA:
  1514. case EXIF_MAKERNOTE_MINOLTA:
  1515. case EXIF_MAKERNOTE_NIKONTYPE1:
  1516. case EXIF_MAKERNOTE_NIKONTYPE2:
  1517. case EXIF_MAKERNOTE_NIKONTYPE3:
  1518. case EXIF_MAKERNOTE_OLYMPUSTYPE1:
  1519. case EXIF_MAKERNOTE_PANASONIC:
  1520. case EXIF_MAKERNOTE_ASAHI:
  1521. case EXIF_MAKERNOTE_PENTAX:
  1522. case EXIF_MAKERNOTE_SONY:
  1523. case EXIF_MAKERNOTE_SIGMA_SD1:
  1524. case EXIF_MAKERNOTE_SIGMA_FOVEON:
  1525. return FIMD_EXIF_MAKERNOTE;
  1526. case IPTC:
  1527. return FIMD_IPTC;
  1528. case GEOTIFF:
  1529. return FIMD_GEOTIFF;
  1530. case ANIMATION:
  1531. return FIMD_ANIMATION;
  1532. }
  1533. return FIMD_NODATA;
  1534. }