1 /*****************************************************************************/ 2 // Copyright 2006-2008 Adobe Systems Incorporated 3 // All Rights Reserved. 4 // 5 // NOTICE: Adobe permits you to use, modify, and distribute this file in 6 // accordance with the terms of the Adobe license agreement accompanying it. 7 /*****************************************************************************/ 8 9 /* $Id: //mondo/dng_sdk_1_2/dng_sdk/source/dng_exif.h#1 $ */ 10 /* $DateTime: 2008/03/09 14:29:54 $ */ 11 /* $Change: 431850 $ */ 12 /* $Author: tknoll $ */ 13 14 /** \file 15 * EXIF read access support. See the \ref spec_exif "EXIF specification" for full description of tags. 16 */ 17 18 /*****************************************************************************/ 19 20 #ifndef __dng_exif__ 21 #define __dng_exif__ 22 23 /*****************************************************************************/ 24 25 #include "dng_classes.h" 26 #include "dng_date_time.h" 27 #include "dng_fingerprint.h" 28 #include "dng_types.h" 29 #include "dng_matrix.h" 30 #include "dng_rational.h" 31 #include "dng_string.h" 32 #include "dng_stream.h" 33 #include "dng_sdk_limits.h" 34 35 /*****************************************************************************/ 36 37 /// \brief Container class for parsing and holding EXIF tags. 38 /// 39 /// Public member fields are documented in \ref spec_exif "EXIF specification." 40 41 class dng_exif 42 { 43 44 public: 45 46 dng_string fImageDescription; 47 dng_string fMake; 48 dng_string fModel; 49 dng_string fSoftware; 50 dng_string fArtist; 51 dng_string fCopyright; 52 dng_string fCopyright2; 53 dng_string fUserComment; 54 55 dng_date_time_info fDateTime; 56 dng_date_time_storage_info fDateTimeStorageInfo; 57 58 dng_date_time_info fDateTimeOriginal; 59 dng_date_time_storage_info fDateTimeOriginalStorageInfo; 60 61 dng_date_time_info fDateTimeDigitized; 62 dng_date_time_storage_info fDateTimeDigitizedStorageInfo; 63 64 uint32 fTIFF_EP_StandardID; 65 uint32 fExifVersion; 66 uint32 fFlashPixVersion; 67 68 dng_urational fExposureTime; 69 dng_urational fFNumber; 70 dng_srational fShutterSpeedValue; 71 dng_urational fApertureValue; 72 dng_srational fBrightnessValue; 73 dng_srational fExposureBiasValue; 74 dng_urational fMaxApertureValue; 75 dng_urational fFocalLength; 76 dng_urational fDigitalZoomRatio; 77 dng_urational fExposureIndex; 78 dng_urational fSubjectDistance; 79 dng_urational fGamma; 80 81 dng_urational fBatteryLevelR; 82 dng_string fBatteryLevelA; 83 84 uint32 fExposureProgram; 85 uint32 fMeteringMode; 86 uint32 fLightSource; 87 uint32 fFlash; 88 uint32 fFlashMask; 89 uint32 fSensingMethod; 90 uint32 fColorSpace; 91 uint32 fFileSource; 92 uint32 fSceneType; 93 uint32 fCustomRendered; 94 uint32 fExposureMode; 95 uint32 fWhiteBalance; 96 uint32 fSceneCaptureType; 97 uint32 fGainControl; 98 uint32 fContrast; 99 uint32 fSaturation; 100 uint32 fSharpness; 101 uint32 fSubjectDistanceRange; 102 uint32 fSelfTimerMode; 103 uint32 fImageNumber; 104 105 uint32 fFocalLengthIn35mmFilm; 106 107 uint32 fISOSpeedRatings [3]; 108 109 uint32 fSubjectAreaCount; 110 uint32 fSubjectArea [4]; 111 112 uint32 fComponentsConfiguration; 113 114 dng_urational fCompresssedBitsPerPixel; 115 116 uint32 fPixelXDimension; 117 uint32 fPixelYDimension; 118 119 dng_urational fFocalPlaneXResolution; 120 dng_urational fFocalPlaneYResolution; 121 122 uint32 fFocalPlaneResolutionUnit; 123 124 uint32 fCFARepeatPatternRows; 125 uint32 fCFARepeatPatternCols; 126 127 uint8 fCFAPattern [kMaxCFAPattern] [kMaxCFAPattern]; 128 129 dng_fingerprint fImageUniqueID; 130 131 uint32 fGPSVersionID; 132 dng_string fGPSLatitudeRef; 133 dng_urational fGPSLatitude [3]; 134 dng_string fGPSLongitudeRef; 135 dng_urational fGPSLongitude [3]; 136 uint32 fGPSAltitudeRef; 137 dng_urational fGPSAltitude; 138 dng_urational fGPSTimeStamp [3]; 139 dng_string fGPSSatellites; 140 dng_string fGPSStatus; 141 dng_string fGPSMeasureMode; 142 dng_urational fGPSDOP; 143 dng_string fGPSSpeedRef; 144 dng_urational fGPSSpeed; 145 dng_string fGPSTrackRef; 146 dng_urational fGPSTrack; 147 dng_string fGPSImgDirectionRef; 148 dng_urational fGPSImgDirection; 149 dng_string fGPSMapDatum; 150 dng_string fGPSDestLatitudeRef; 151 dng_urational fGPSDestLatitude [3]; 152 dng_string fGPSDestLongitudeRef; 153 dng_urational fGPSDestLongitude [3]; 154 dng_string fGPSDestBearingRef; 155 dng_urational fGPSDestBearing; 156 dng_string fGPSDestDistanceRef; 157 dng_urational fGPSDestDistance; 158 dng_string fGPSProcessingMethod; 159 dng_string fGPSAreaInformation; 160 dng_string fGPSDateStamp; 161 uint32 fGPSDifferential; 162 163 dng_string fInteroperabilityIndex; 164 165 uint32 fInteroperabilityVersion; 166 167 dng_string fRelatedImageFileFormat; 168 169 uint32 fRelatedImageWidth; 170 uint32 fRelatedImageLength; 171 172 dng_string fCameraSerialNumber; 173 174 dng_urational fLensInfo [4]; 175 176 dng_string fLensID; 177 dng_string fLensName; 178 dng_string fLensSerialNumber; 179 180 dng_srational fFlashCompensation; 181 182 dng_string fOwnerName; 183 dng_string fFirmware; 184 185 public: 186 187 dng_exif (); 188 189 virtual ~dng_exif (); 190 191 virtual dng_exif * Clone () const; 192 193 static real64 SnapExposureTime (real64 et); 194 195 void SetExposureTime (real64 et, 196 bool snap = true); 197 198 void SetShutterSpeedValue (real64 ss); 199 200 static dng_urational EncodeFNumber (real64 fs); 201 202 void SetFNumber (real64 fs); 203 204 void SetApertureValue (real64 av); 205 206 void UpdateDateTime (const dng_date_time_info &dt); 207 208 virtual bool ParseTag (dng_stream &stream, 209 dng_shared &shared, 210 uint32 parentCode, 211 bool isMainIFD, 212 uint32 tagCode, 213 uint32 tagType, 214 uint32 tagCount, 215 uint64 tagOffset); 216 217 virtual void PostParse (dng_host &host, 218 dng_shared &shared); 219 220 protected: 221 222 virtual bool Parse_ifd0 (dng_stream &stream, 223 dng_shared &shared, 224 uint32 parentCode, 225 uint32 tagCode, 226 uint32 tagType, 227 uint32 tagCount, 228 uint64 tagOffset); 229 230 virtual bool Parse_ifd0_main (dng_stream &stream, 231 dng_shared &shared, 232 uint32 parentCode, 233 uint32 tagCode, 234 uint32 tagType, 235 uint32 tagCount, 236 uint64 tagOffset); 237 238 virtual bool Parse_ifd0_exif (dng_stream &stream, 239 dng_shared &shared, 240 uint32 parentCode, 241 uint32 tagCode, 242 uint32 tagType, 243 uint32 tagCount, 244 uint64 tagOffset); 245 246 virtual bool Parse_gps (dng_stream &stream, 247 dng_shared &shared, 248 uint32 parentCode, 249 uint32 tagCode, 250 uint32 tagType, 251 uint32 tagCount, 252 uint64 tagOffset); 253 254 virtual bool Parse_interoperability (dng_stream &stream, 255 dng_shared &shared, 256 uint32 parentCode, 257 uint32 tagCode, 258 uint32 tagType, 259 uint32 tagCount, 260 uint64 tagOffset); 261 262 }; 263 264 /*****************************************************************************/ 265 266 #endif 267 268 /*****************************************************************************/ 269