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_shared.h#2 $ */
10 /* $DateTime: 2008/04/02 14:06:57 $ */
11 /* $Change: 440485 $ */
12 /* $Author: tknoll $ */
13 
14 /*****************************************************************************/
15 
16 #ifndef __dng_shared__
17 #define __dng_shared__
18 
19 /*****************************************************************************/
20 
21 #include "dng_classes.h"
22 #include "dng_fingerprint.h"
23 #include "dng_matrix.h"
24 #include "dng_rational.h"
25 #include "dng_string.h"
26 #include "dng_stream.h"
27 #include "dng_sdk_limits.h"
28 #include "dng_types.h"
29 #include "dng_xy_coord.h"
30 
31 #include <vector>
32 
33 /*****************************************************************************/
34 
35 class dng_camera_profile_info
36 	{
37 
38 	public:
39 
40 		bool fBigEndian;
41 
42 		uint32 fColorPlanes;
43 
44 		uint32 fCalibrationIlluminant1;
45 		uint32 fCalibrationIlluminant2;
46 
47 		dng_matrix fColorMatrix1;
48 		dng_matrix fColorMatrix2;
49 
50 		dng_matrix fForwardMatrix1;
51 		dng_matrix fForwardMatrix2;
52 
53 		dng_matrix fReductionMatrix1;
54 		dng_matrix fReductionMatrix2;
55 
56 		dng_string fProfileCalibrationSignature;
57 
58 		dng_string fProfileName;
59 
60 		dng_string fProfileCopyright;
61 
62 		uint32 fEmbedPolicy;
63 
64 		uint32 fProfileHues;
65 		uint32 fProfileSats;
66 		uint32 fProfileVals;
67 
68 		uint64 fHueSatDeltas1Offset;
69 		uint32 fHueSatDeltas1Count;
70 
71 		uint64 fHueSatDeltas2Offset;
72 		uint32 fHueSatDeltas2Count;
73 
74 		uint32 fLookTableHues;
75 		uint32 fLookTableSats;
76 		uint32 fLookTableVals;
77 
78 		uint64 fLookTableOffset;
79 		uint32 fLookTableCount;
80 
81 		uint64 fToneCurveOffset;
82 		uint32 fToneCurveCount;
83 
84 		dng_string fUniqueCameraModel;
85 
86 	public:
87 
88 		dng_camera_profile_info ();
89 
90 		~dng_camera_profile_info ();
91 
92 		bool ParseTag (dng_stream &stream,
93 					   uint32 parentCode,
94 					   uint32 tagCode,
95 					   uint32 tagType,
96 					   uint32 tagCount,
97 					   uint64 tagOffset);
98 
99 		bool ParseExtended (dng_stream &stream);
100 
101 	};
102 
103 /*****************************************************************************/
104 
105 class dng_shared
106 	{
107 
108 	public:
109 
110 		uint64 fExifIFD;
111 		uint64 fGPSInfo;
112 		uint64 fInteroperabilityIFD;
113 		uint64 fKodakDCRPrivateIFD;
114 		uint64 fKodakKDCPrivateIFD;
115 
116 		uint32 fXMPCount;
117 		uint64 fXMPOffset;
118 
119 		uint32 fIPTC_NAA_Count;
120 		uint64 fIPTC_NAA_Offset;
121 
122 		uint32 fMakerNoteCount;
123 		uint64 fMakerNoteOffset;
124 		uint32 fMakerNoteSafety;
125 
126 		uint32 fDNGVersion;
127 		uint32 fDNGBackwardVersion;
128 
129 		dng_string fUniqueCameraModel;
130 		dng_string fLocalizedCameraModel;
131 
132 		dng_camera_profile_info fCameraProfile;
133 
134 		std::vector<dng_camera_profile_info> fExtraCameraProfiles;
135 
136 		dng_matrix fCameraCalibration1;
137 		dng_matrix fCameraCalibration2;
138 
139 		dng_string fCameraCalibrationSignature;
140 
141 		dng_vector fAnalogBalance;
142 
143 		dng_vector fAsShotNeutral;
144 
145 		dng_xy_coord fAsShotWhiteXY;
146 
147 		dng_srational fBaselineExposure;
148 		dng_urational fBaselineNoise;
149 		dng_urational fNoiseReductionApplied;
150 		dng_urational fBaselineSharpness;
151 		dng_urational fLinearResponseLimit;
152 		dng_urational fShadowScale;
153 
154 		uint32 fDNGPrivateDataCount;
155 		uint64 fDNGPrivateDataOffset;
156 
157 		dng_fingerprint fRawImageDigest;
158 
159 		dng_fingerprint fRawDataUniqueID;
160 
161 		dng_string fOriginalRawFileName;
162 
163 		uint32 fOriginalRawFileDataCount;
164 		uint64 fOriginalRawFileDataOffset;
165 
166 		dng_fingerprint fOriginalRawFileDigest;
167 
168 		uint32 fAsShotICCProfileCount;
169 		uint64 fAsShotICCProfileOffset;
170 
171 		dng_matrix fAsShotPreProfileMatrix;
172 
173 		uint32 fCurrentICCProfileCount;
174 		uint64 fCurrentICCProfileOffset;
175 
176 		dng_matrix fCurrentPreProfileMatrix;
177 
178 		uint32 fColorimetricReference;
179 
180 		dng_string fAsShotProfileName;
181 
182 	public:
183 
184 		dng_shared ();
185 
186 		virtual ~dng_shared ();
187 
188 		virtual bool ParseTag (dng_stream &stream,
189 							   dng_exif &exif,
190 							   uint32 parentCode,
191 							   bool isMainIFD,
192 							   uint32 tagCode,
193 							   uint32 tagType,
194 							   uint32 tagCount,
195 							   uint64 tagOffset,
196 							   int64 offsetDelta);
197 
198 		virtual void PostParse (dng_host &host,
199 								dng_exif &exif);
200 
201 		virtual bool IsValidDNG ();
202 
203 	protected:
204 
205 		virtual bool Parse_ifd0 (dng_stream &stream,
206 							     dng_exif &exif,
207 							 	 uint32 parentCode,
208 							 	 uint32 tagCode,
209 							 	 uint32 tagType,
210 							 	 uint32 tagCount,
211 							 	 uint64 tagOffset);
212 
213 		virtual bool Parse_ifd0_exif (dng_stream &stream,
214 							          dng_exif &exif,
215 						 		 	  uint32 parentCode,
216 						 		 	  uint32 tagCode,
217 						 		 	  uint32 tagType,
218 						 		 	  uint32 tagCount,
219 						 		 	  uint64 tagOffset);
220 
221 	};
222 
223 /*****************************************************************************/
224 
225 #endif
226 
227 /*****************************************************************************/
228