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