PageRenderTime 159ms CodeModel.GetById 20ms app.highlight 127ms RepoModel.GetById 2ms 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

Large files files are truncated, but you can click here to view the full file

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

Large files files are truncated, but you can click here to view the full file