xref: /aosp_15_r20/external/dng_sdk/source/dng_camera_profile.h (revision fd1fabb72dbdf09ea7034f531e6f8e9f57334c8d)
1*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
2*fd1fabb7SAndroid Build Coastguard Worker // Copyright 2006-2007 Adobe Systems Incorporated
3*fd1fabb7SAndroid Build Coastguard Worker // All Rights Reserved.
4*fd1fabb7SAndroid Build Coastguard Worker //
5*fd1fabb7SAndroid Build Coastguard Worker // NOTICE:  Adobe permits you to use, modify, and distribute this file in
6*fd1fabb7SAndroid Build Coastguard Worker // accordance with the terms of the Adobe license agreement accompanying it.
7*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
8*fd1fabb7SAndroid Build Coastguard Worker 
9*fd1fabb7SAndroid Build Coastguard Worker /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_camera_profile.h#2 $ */
10*fd1fabb7SAndroid Build Coastguard Worker /* $DateTime: 2012/07/11 10:36:56 $ */
11*fd1fabb7SAndroid Build Coastguard Worker /* $Change: 838485 $ */
12*fd1fabb7SAndroid Build Coastguard Worker /* $Author: tknoll $ */
13*fd1fabb7SAndroid Build Coastguard Worker 
14*fd1fabb7SAndroid Build Coastguard Worker /** \file
15*fd1fabb7SAndroid Build Coastguard Worker  * Support for DNG camera color profile information.
16*fd1fabb7SAndroid Build Coastguard Worker  *  Per the \ref spec_dng "DNG 1.1.0 specification", a DNG file can store up to
17*fd1fabb7SAndroid Build Coastguard Worker  *  two sets of color profile information for a camera in the DNG file from that
18*fd1fabb7SAndroid Build Coastguard Worker  *  camera. The second set is optional and when there are two sets, they represent
19*fd1fabb7SAndroid Build Coastguard Worker  *  profiles made under different illumination.
20*fd1fabb7SAndroid Build Coastguard Worker  *
21*fd1fabb7SAndroid Build Coastguard Worker  *  Profiling information is optionally separated into two parts. One part represents
22*fd1fabb7SAndroid Build Coastguard Worker  *  a profile for a reference camera. (ColorMatrix1 and ColorMatrix2 here.) The
23*fd1fabb7SAndroid Build Coastguard Worker  *  second is a per-camera calibration that takes into account unit-to-unit variation.
24*fd1fabb7SAndroid Build Coastguard Worker  *  This is designed to allow replacing the reference color matrix with one of one's
25*fd1fabb7SAndroid Build Coastguard Worker  *  own construction while maintaining any unit-specific calibration the camera
26*fd1fabb7SAndroid Build Coastguard Worker  *  manufacturer may have provided.
27*fd1fabb7SAndroid Build Coastguard Worker  *
28*fd1fabb7SAndroid Build Coastguard Worker  * See Appendix 6 of the \ref spec_dng "DNG 1.1.0 specification" for more information.
29*fd1fabb7SAndroid Build Coastguard Worker  */
30*fd1fabb7SAndroid Build Coastguard Worker 
31*fd1fabb7SAndroid Build Coastguard Worker #ifndef __dng_camera_profile__
32*fd1fabb7SAndroid Build Coastguard Worker #define __dng_camera_profile__
33*fd1fabb7SAndroid Build Coastguard Worker 
34*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
35*fd1fabb7SAndroid Build Coastguard Worker 
36*fd1fabb7SAndroid Build Coastguard Worker #include "dng_auto_ptr.h"
37*fd1fabb7SAndroid Build Coastguard Worker #include "dng_assertions.h"
38*fd1fabb7SAndroid Build Coastguard Worker #include "dng_classes.h"
39*fd1fabb7SAndroid Build Coastguard Worker #include "dng_fingerprint.h"
40*fd1fabb7SAndroid Build Coastguard Worker #include "dng_hue_sat_map.h"
41*fd1fabb7SAndroid Build Coastguard Worker #include "dng_matrix.h"
42*fd1fabb7SAndroid Build Coastguard Worker #include "dng_string.h"
43*fd1fabb7SAndroid Build Coastguard Worker #include "dng_tag_values.h"
44*fd1fabb7SAndroid Build Coastguard Worker #include "dng_tone_curve.h"
45*fd1fabb7SAndroid Build Coastguard Worker 
46*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
47*fd1fabb7SAndroid Build Coastguard Worker 
48*fd1fabb7SAndroid Build Coastguard Worker extern const char * kProfileName_Embedded;
49*fd1fabb7SAndroid Build Coastguard Worker 
50*fd1fabb7SAndroid Build Coastguard Worker extern const char * kAdobeCalibrationSignature;
51*fd1fabb7SAndroid Build Coastguard Worker 
52*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
53*fd1fabb7SAndroid Build Coastguard Worker 
54*fd1fabb7SAndroid Build Coastguard Worker /// \brief An ID for a camera profile consisting of a name and optional fingerprint.
55*fd1fabb7SAndroid Build Coastguard Worker 
56*fd1fabb7SAndroid Build Coastguard Worker class dng_camera_profile_id
57*fd1fabb7SAndroid Build Coastguard Worker 	{
58*fd1fabb7SAndroid Build Coastguard Worker 
59*fd1fabb7SAndroid Build Coastguard Worker 	private:
60*fd1fabb7SAndroid Build Coastguard Worker 
61*fd1fabb7SAndroid Build Coastguard Worker 		dng_string fName;
62*fd1fabb7SAndroid Build Coastguard Worker 
63*fd1fabb7SAndroid Build Coastguard Worker 		dng_fingerprint fFingerprint;
64*fd1fabb7SAndroid Build Coastguard Worker 
65*fd1fabb7SAndroid Build Coastguard Worker 	public:
66*fd1fabb7SAndroid Build Coastguard Worker 
67*fd1fabb7SAndroid Build Coastguard Worker 		/// Construct an invalid camera profile ID (empty name and fingerprint).
68*fd1fabb7SAndroid Build Coastguard Worker 
dng_camera_profile_id()69*fd1fabb7SAndroid Build Coastguard Worker 		dng_camera_profile_id ()
70*fd1fabb7SAndroid Build Coastguard Worker 
71*fd1fabb7SAndroid Build Coastguard Worker 			:	fName        ()
72*fd1fabb7SAndroid Build Coastguard Worker 			,	fFingerprint ()
73*fd1fabb7SAndroid Build Coastguard Worker 
74*fd1fabb7SAndroid Build Coastguard Worker 			{
75*fd1fabb7SAndroid Build Coastguard Worker 			}
76*fd1fabb7SAndroid Build Coastguard Worker 
77*fd1fabb7SAndroid Build Coastguard Worker 		/// Construct a camera profile ID with the specified name and no fingerprint.
78*fd1fabb7SAndroid Build Coastguard Worker 		/// \param name The name of the camera profile ID.
79*fd1fabb7SAndroid Build Coastguard Worker 
dng_camera_profile_id(const char * name)80*fd1fabb7SAndroid Build Coastguard Worker 		dng_camera_profile_id (const char *name)
81*fd1fabb7SAndroid Build Coastguard Worker 
82*fd1fabb7SAndroid Build Coastguard Worker 			:	fName		 ()
83*fd1fabb7SAndroid Build Coastguard Worker 			,	fFingerprint ()
84*fd1fabb7SAndroid Build Coastguard Worker 
85*fd1fabb7SAndroid Build Coastguard Worker 			{
86*fd1fabb7SAndroid Build Coastguard Worker 			fName.Set (name);
87*fd1fabb7SAndroid Build Coastguard Worker 			}
88*fd1fabb7SAndroid Build Coastguard Worker 
89*fd1fabb7SAndroid Build Coastguard Worker 		/// Construct a camera profile ID with the specified name and no fingerprint.
90*fd1fabb7SAndroid Build Coastguard Worker 		/// \param name The name of the camera profile ID.
91*fd1fabb7SAndroid Build Coastguard Worker 
dng_camera_profile_id(const dng_string & name)92*fd1fabb7SAndroid Build Coastguard Worker 		dng_camera_profile_id (const dng_string &name)
93*fd1fabb7SAndroid Build Coastguard Worker 
94*fd1fabb7SAndroid Build Coastguard Worker 			:	fName		 (name)
95*fd1fabb7SAndroid Build Coastguard Worker 			,	fFingerprint ()
96*fd1fabb7SAndroid Build Coastguard Worker 
97*fd1fabb7SAndroid Build Coastguard Worker 			{
98*fd1fabb7SAndroid Build Coastguard Worker 			}
99*fd1fabb7SAndroid Build Coastguard Worker 
100*fd1fabb7SAndroid Build Coastguard Worker 		/// Construct a camera profile ID with the specified name and fingerprint.
101*fd1fabb7SAndroid Build Coastguard Worker 		/// \param name The name of the camera profile ID.
102*fd1fabb7SAndroid Build Coastguard Worker 		/// \param fingerprint The fingerprint of the camera profile ID.
103*fd1fabb7SAndroid Build Coastguard Worker 
dng_camera_profile_id(const char * name,const dng_fingerprint & fingerprint)104*fd1fabb7SAndroid Build Coastguard Worker 		dng_camera_profile_id (const char *name,
105*fd1fabb7SAndroid Build Coastguard Worker 							   const dng_fingerprint &fingerprint)
106*fd1fabb7SAndroid Build Coastguard Worker 
107*fd1fabb7SAndroid Build Coastguard Worker 			:	fName		 ()
108*fd1fabb7SAndroid Build Coastguard Worker 			,	fFingerprint (fingerprint)
109*fd1fabb7SAndroid Build Coastguard Worker 
110*fd1fabb7SAndroid Build Coastguard Worker 			{
111*fd1fabb7SAndroid Build Coastguard Worker 			fName.Set (name);
112*fd1fabb7SAndroid Build Coastguard Worker 			DNG_ASSERT (!fFingerprint.IsValid () || fName.NotEmpty (),
113*fd1fabb7SAndroid Build Coastguard Worker 						"Cannot have profile fingerprint without name");
114*fd1fabb7SAndroid Build Coastguard Worker 			}
115*fd1fabb7SAndroid Build Coastguard Worker 
116*fd1fabb7SAndroid Build Coastguard Worker 		/// Construct a camera profile ID with the specified name and fingerprint.
117*fd1fabb7SAndroid Build Coastguard Worker 		/// \param name The name of the camera profile ID.
118*fd1fabb7SAndroid Build Coastguard Worker 		/// \param fingerprint The fingerprint of the camera profile ID.
119*fd1fabb7SAndroid Build Coastguard Worker 
dng_camera_profile_id(const dng_string & name,const dng_fingerprint & fingerprint)120*fd1fabb7SAndroid Build Coastguard Worker 		dng_camera_profile_id (const dng_string &name,
121*fd1fabb7SAndroid Build Coastguard Worker 							   const dng_fingerprint &fingerprint)
122*fd1fabb7SAndroid Build Coastguard Worker 
123*fd1fabb7SAndroid Build Coastguard Worker 			:	fName		 (name)
124*fd1fabb7SAndroid Build Coastguard Worker 			,	fFingerprint (fingerprint)
125*fd1fabb7SAndroid Build Coastguard Worker 
126*fd1fabb7SAndroid Build Coastguard Worker 			{
127*fd1fabb7SAndroid Build Coastguard Worker 			DNG_ASSERT (!fFingerprint.IsValid () || fName.NotEmpty (),
128*fd1fabb7SAndroid Build Coastguard Worker 						"Cannot have profile fingerprint without name");
129*fd1fabb7SAndroid Build Coastguard Worker 			}
130*fd1fabb7SAndroid Build Coastguard Worker 
131*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for the name of the camera profile ID.
132*fd1fabb7SAndroid Build Coastguard Worker 		/// \retval The name of the camera profile ID.
133*fd1fabb7SAndroid Build Coastguard Worker 
Name()134*fd1fabb7SAndroid Build Coastguard Worker 		const dng_string & Name () const
135*fd1fabb7SAndroid Build Coastguard Worker 			{
136*fd1fabb7SAndroid Build Coastguard Worker 			return fName;
137*fd1fabb7SAndroid Build Coastguard Worker 			}
138*fd1fabb7SAndroid Build Coastguard Worker 
139*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for the fingerprint of the camera profile ID.
140*fd1fabb7SAndroid Build Coastguard Worker 		/// \retval The fingerprint of the camera profile ID.
141*fd1fabb7SAndroid Build Coastguard Worker 
Fingerprint()142*fd1fabb7SAndroid Build Coastguard Worker 		const dng_fingerprint & Fingerprint () const
143*fd1fabb7SAndroid Build Coastguard Worker 			{
144*fd1fabb7SAndroid Build Coastguard Worker 			return fFingerprint;
145*fd1fabb7SAndroid Build Coastguard Worker 			}
146*fd1fabb7SAndroid Build Coastguard Worker 
147*fd1fabb7SAndroid Build Coastguard Worker 		/// Test for equality of two camera profile IDs.
148*fd1fabb7SAndroid Build Coastguard Worker 		/// \param The id of the camera profile ID to compare.
149*fd1fabb7SAndroid Build Coastguard Worker 
150*fd1fabb7SAndroid Build Coastguard Worker 		bool operator== (const dng_camera_profile_id &id) const
151*fd1fabb7SAndroid Build Coastguard Worker 			{
152*fd1fabb7SAndroid Build Coastguard Worker 			return fName        == id.fName &&
153*fd1fabb7SAndroid Build Coastguard Worker 				   fFingerprint == id.fFingerprint;
154*fd1fabb7SAndroid Build Coastguard Worker 			}
155*fd1fabb7SAndroid Build Coastguard Worker 
156*fd1fabb7SAndroid Build Coastguard Worker 		/// Test for inequality of two camera profile IDs.
157*fd1fabb7SAndroid Build Coastguard Worker 		/// \param The id of the camera profile ID to compare.
158*fd1fabb7SAndroid Build Coastguard Worker 
159*fd1fabb7SAndroid Build Coastguard Worker 		bool operator!= (const dng_camera_profile_id &id) const
160*fd1fabb7SAndroid Build Coastguard Worker 			{
161*fd1fabb7SAndroid Build Coastguard Worker 			return !(*this == id);
162*fd1fabb7SAndroid Build Coastguard Worker 			}
163*fd1fabb7SAndroid Build Coastguard Worker 
164*fd1fabb7SAndroid Build Coastguard Worker 		/// Returns true iff the camera profile ID is valid.
165*fd1fabb7SAndroid Build Coastguard Worker 
IsValid()166*fd1fabb7SAndroid Build Coastguard Worker 		bool IsValid () const
167*fd1fabb7SAndroid Build Coastguard Worker 			{
168*fd1fabb7SAndroid Build Coastguard Worker 			return fName.NotEmpty ();		// Fingerprint is optional.
169*fd1fabb7SAndroid Build Coastguard Worker 			}
170*fd1fabb7SAndroid Build Coastguard Worker 
171*fd1fabb7SAndroid Build Coastguard Worker 		/// Resets the name and fingerprint, thereby making this camera profile ID
172*fd1fabb7SAndroid Build Coastguard Worker 		/// invalid.
173*fd1fabb7SAndroid Build Coastguard Worker 
Clear()174*fd1fabb7SAndroid Build Coastguard Worker 		void Clear ()
175*fd1fabb7SAndroid Build Coastguard Worker 			{
176*fd1fabb7SAndroid Build Coastguard Worker 			*this = dng_camera_profile_id ();
177*fd1fabb7SAndroid Build Coastguard Worker 			}
178*fd1fabb7SAndroid Build Coastguard Worker 
179*fd1fabb7SAndroid Build Coastguard Worker 	};
180*fd1fabb7SAndroid Build Coastguard Worker 
181*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
182*fd1fabb7SAndroid Build Coastguard Worker 
183*fd1fabb7SAndroid Build Coastguard Worker /// \brief Container for DNG camera color profile and calibration data.
184*fd1fabb7SAndroid Build Coastguard Worker 
185*fd1fabb7SAndroid Build Coastguard Worker class dng_camera_profile
186*fd1fabb7SAndroid Build Coastguard Worker 	{
187*fd1fabb7SAndroid Build Coastguard Worker 
188*fd1fabb7SAndroid Build Coastguard Worker 	protected:
189*fd1fabb7SAndroid Build Coastguard Worker 
190*fd1fabb7SAndroid Build Coastguard Worker 		// Name of this camera profile.
191*fd1fabb7SAndroid Build Coastguard Worker 
192*fd1fabb7SAndroid Build Coastguard Worker 		dng_string fName;
193*fd1fabb7SAndroid Build Coastguard Worker 
194*fd1fabb7SAndroid Build Coastguard Worker 		// Light sources for up to two calibrations. These use the EXIF
195*fd1fabb7SAndroid Build Coastguard Worker 		// encodings for illuminant and are used to distinguish which
196*fd1fabb7SAndroid Build Coastguard Worker 		// matrix to use.
197*fd1fabb7SAndroid Build Coastguard Worker 
198*fd1fabb7SAndroid Build Coastguard Worker 		uint32 fCalibrationIlluminant1;
199*fd1fabb7SAndroid Build Coastguard Worker 		uint32 fCalibrationIlluminant2;
200*fd1fabb7SAndroid Build Coastguard Worker 
201*fd1fabb7SAndroid Build Coastguard Worker 		// Color matrices for up to two calibrations.
202*fd1fabb7SAndroid Build Coastguard Worker 
203*fd1fabb7SAndroid Build Coastguard Worker 		// These matrices map XYZ values to non-white balanced camera values.
204*fd1fabb7SAndroid Build Coastguard Worker 		// Adobe needs to go that direction in order to determine the clipping
205*fd1fabb7SAndroid Build Coastguard Worker 		// points for highlight recovery logic based on the white point.  If
206*fd1fabb7SAndroid Build Coastguard Worker 		// cameras were all 3-color, the matrix could be stored as a forward matrix,
207*fd1fabb7SAndroid Build Coastguard Worker 		// but we need the backwards matrix to deal with 4-color cameras.
208*fd1fabb7SAndroid Build Coastguard Worker 
209*fd1fabb7SAndroid Build Coastguard Worker 		dng_matrix fColorMatrix1;
210*fd1fabb7SAndroid Build Coastguard Worker 		dng_matrix fColorMatrix2;
211*fd1fabb7SAndroid Build Coastguard Worker 
212*fd1fabb7SAndroid Build Coastguard Worker 		// These matrices map white balanced camera values to XYZ chromatically
213*fd1fabb7SAndroid Build Coastguard Worker 		// adapted to D50 (the ICC profile PCS white point).  If the matrices
214*fd1fabb7SAndroid Build Coastguard Worker 		// exist, then this implies that white balancing should be done by scaling
215*fd1fabb7SAndroid Build Coastguard Worker 		// camera values with a diagonal matrix.
216*fd1fabb7SAndroid Build Coastguard Worker 
217*fd1fabb7SAndroid Build Coastguard Worker 		dng_matrix fForwardMatrix1;
218*fd1fabb7SAndroid Build Coastguard Worker 		dng_matrix fForwardMatrix2;
219*fd1fabb7SAndroid Build Coastguard Worker 
220*fd1fabb7SAndroid Build Coastguard Worker 		// Dimensionality reduction hints for more than three color cameras.
221*fd1fabb7SAndroid Build Coastguard Worker 		// This is an optional matrix that maps the camera's color components
222*fd1fabb7SAndroid Build Coastguard Worker 		// to 3 components.  These are only used if the forward matrices don't
223*fd1fabb7SAndroid Build Coastguard Worker 		// exist, and are used invert the color matrices.
224*fd1fabb7SAndroid Build Coastguard Worker 
225*fd1fabb7SAndroid Build Coastguard Worker 		dng_matrix fReductionMatrix1;
226*fd1fabb7SAndroid Build Coastguard Worker 		dng_matrix fReductionMatrix2;
227*fd1fabb7SAndroid Build Coastguard Worker 
228*fd1fabb7SAndroid Build Coastguard Worker 		// MD5 hash for all data bits of the profile.
229*fd1fabb7SAndroid Build Coastguard Worker 
230*fd1fabb7SAndroid Build Coastguard Worker 		mutable dng_fingerprint fFingerprint;
231*fd1fabb7SAndroid Build Coastguard Worker 
232*fd1fabb7SAndroid Build Coastguard Worker 		// Copyright notice from creator of profile.
233*fd1fabb7SAndroid Build Coastguard Worker 
234*fd1fabb7SAndroid Build Coastguard Worker 		dng_string fCopyright;
235*fd1fabb7SAndroid Build Coastguard Worker 
236*fd1fabb7SAndroid Build Coastguard Worker 		// Rules for how this profile can be embedded and/or copied.
237*fd1fabb7SAndroid Build Coastguard Worker 
238*fd1fabb7SAndroid Build Coastguard Worker 		uint32 fEmbedPolicy;
239*fd1fabb7SAndroid Build Coastguard Worker 
240*fd1fabb7SAndroid Build Coastguard Worker 		// 2-D (or 3-D) hue/sat tables to modify colors.
241*fd1fabb7SAndroid Build Coastguard Worker 
242*fd1fabb7SAndroid Build Coastguard Worker 		dng_hue_sat_map fHueSatDeltas1;
243*fd1fabb7SAndroid Build Coastguard Worker 		dng_hue_sat_map fHueSatDeltas2;
244*fd1fabb7SAndroid Build Coastguard Worker 
245*fd1fabb7SAndroid Build Coastguard Worker 		// Value (V of HSV) encoding for hue/sat tables.
246*fd1fabb7SAndroid Build Coastguard Worker 
247*fd1fabb7SAndroid Build Coastguard Worker 		uint32 fHueSatMapEncoding;
248*fd1fabb7SAndroid Build Coastguard Worker 
249*fd1fabb7SAndroid Build Coastguard Worker 		// 3-D hue/sat table to apply a "look".
250*fd1fabb7SAndroid Build Coastguard Worker 
251*fd1fabb7SAndroid Build Coastguard Worker 		dng_hue_sat_map fLookTable;
252*fd1fabb7SAndroid Build Coastguard Worker 
253*fd1fabb7SAndroid Build Coastguard Worker 		// Value (V of HSV) encoding for look table.
254*fd1fabb7SAndroid Build Coastguard Worker 
255*fd1fabb7SAndroid Build Coastguard Worker 		uint32 fLookTableEncoding;
256*fd1fabb7SAndroid Build Coastguard Worker 
257*fd1fabb7SAndroid Build Coastguard Worker 		// Baseline exposure offset. When using this profile, this offset value is
258*fd1fabb7SAndroid Build Coastguard Worker 		// added to the BaselineExposure value for the negative to determine the
259*fd1fabb7SAndroid Build Coastguard Worker 		// overall baseline exposure to apply.
260*fd1fabb7SAndroid Build Coastguard Worker 
261*fd1fabb7SAndroid Build Coastguard Worker 		dng_srational fBaselineExposureOffset;
262*fd1fabb7SAndroid Build Coastguard Worker 
263*fd1fabb7SAndroid Build Coastguard Worker 		// Default black rendering.
264*fd1fabb7SAndroid Build Coastguard Worker 
265*fd1fabb7SAndroid Build Coastguard Worker 		uint32 fDefaultBlackRender;
266*fd1fabb7SAndroid Build Coastguard Worker 
267*fd1fabb7SAndroid Build Coastguard Worker 		// The "as shot" tone curve for this profile.  Check IsValid method
268*fd1fabb7SAndroid Build Coastguard Worker 		// to tell if one exists in profile.
269*fd1fabb7SAndroid Build Coastguard Worker 
270*fd1fabb7SAndroid Build Coastguard Worker 		dng_tone_curve fToneCurve;
271*fd1fabb7SAndroid Build Coastguard Worker 
272*fd1fabb7SAndroid Build Coastguard Worker 		// If this string matches the fCameraCalibrationSignature of the
273*fd1fabb7SAndroid Build Coastguard Worker 		// negative, then use the calibration matrix values from the negative.
274*fd1fabb7SAndroid Build Coastguard Worker 
275*fd1fabb7SAndroid Build Coastguard Worker 		dng_string fProfileCalibrationSignature;
276*fd1fabb7SAndroid Build Coastguard Worker 
277*fd1fabb7SAndroid Build Coastguard Worker 		// If non-empty, only allow use of this profile with camera having
278*fd1fabb7SAndroid Build Coastguard Worker 		// same unique model name.
279*fd1fabb7SAndroid Build Coastguard Worker 
280*fd1fabb7SAndroid Build Coastguard Worker 		dng_string fUniqueCameraModelRestriction;
281*fd1fabb7SAndroid Build Coastguard Worker 
282*fd1fabb7SAndroid Build Coastguard Worker 		// Was this profile read from inside a DNG file? (If so, we wnat
283*fd1fabb7SAndroid Build Coastguard Worker 		// to be sure to include it again when writing out an updated
284*fd1fabb7SAndroid Build Coastguard Worker 		// DNG file)
285*fd1fabb7SAndroid Build Coastguard Worker 
286*fd1fabb7SAndroid Build Coastguard Worker 		bool fWasReadFromDNG;
287*fd1fabb7SAndroid Build Coastguard Worker 
288*fd1fabb7SAndroid Build Coastguard Worker 		// Was this profile read from disk (i.e., an external profile)? (If so, we
289*fd1fabb7SAndroid Build Coastguard Worker 		// may need to refresh when changes are made externally to the profile
290*fd1fabb7SAndroid Build Coastguard Worker 		// directory.)
291*fd1fabb7SAndroid Build Coastguard Worker 
292*fd1fabb7SAndroid Build Coastguard Worker 		bool fWasReadFromDisk;
293*fd1fabb7SAndroid Build Coastguard Worker 
294*fd1fabb7SAndroid Build Coastguard Worker 		// Was this profile a built-in "Matrix" profile? (If so, we may need to
295*fd1fabb7SAndroid Build Coastguard Worker 		// refresh -- i.e., remove it from the list of available profiles -- when
296*fd1fabb7SAndroid Build Coastguard Worker 		// changes are made externally to the profile directory.)
297*fd1fabb7SAndroid Build Coastguard Worker 
298*fd1fabb7SAndroid Build Coastguard Worker 		bool fWasBuiltinMatrix;
299*fd1fabb7SAndroid Build Coastguard Worker 
300*fd1fabb7SAndroid Build Coastguard Worker 		// Was this profile stubbed to save memory (and no longer valid
301*fd1fabb7SAndroid Build Coastguard Worker 		// for building color conversion tables)?
302*fd1fabb7SAndroid Build Coastguard Worker 
303*fd1fabb7SAndroid Build Coastguard Worker 		bool fWasStubbed;
304*fd1fabb7SAndroid Build Coastguard Worker 
305*fd1fabb7SAndroid Build Coastguard Worker 	public:
306*fd1fabb7SAndroid Build Coastguard Worker 
307*fd1fabb7SAndroid Build Coastguard Worker 		dng_camera_profile ();
308*fd1fabb7SAndroid Build Coastguard Worker 
309*fd1fabb7SAndroid Build Coastguard Worker 		virtual ~dng_camera_profile ();
310*fd1fabb7SAndroid Build Coastguard Worker 
311*fd1fabb7SAndroid Build Coastguard Worker 		// API for profile name:
312*fd1fabb7SAndroid Build Coastguard Worker 
313*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for camera profile name.
314*fd1fabb7SAndroid Build Coastguard Worker 		/// \param name Name to use for this camera profile.
315*fd1fabb7SAndroid Build Coastguard Worker 
SetName(const char * name)316*fd1fabb7SAndroid Build Coastguard Worker 		void SetName (const char *name)
317*fd1fabb7SAndroid Build Coastguard Worker 			{
318*fd1fabb7SAndroid Build Coastguard Worker 			fName.Set (name);
319*fd1fabb7SAndroid Build Coastguard Worker 			ClearFingerprint ();
320*fd1fabb7SAndroid Build Coastguard Worker 			}
321*fd1fabb7SAndroid Build Coastguard Worker 
322*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for camera profile name.
323*fd1fabb7SAndroid Build Coastguard Worker 		/// \retval Name of profile.
324*fd1fabb7SAndroid Build Coastguard Worker 
Name()325*fd1fabb7SAndroid Build Coastguard Worker 		const dng_string & Name () const
326*fd1fabb7SAndroid Build Coastguard Worker 			{
327*fd1fabb7SAndroid Build Coastguard Worker 			return fName;
328*fd1fabb7SAndroid Build Coastguard Worker 			}
329*fd1fabb7SAndroid Build Coastguard Worker 
330*fd1fabb7SAndroid Build Coastguard Worker 		/// Test if this name is embedded.
331*fd1fabb7SAndroid Build Coastguard Worker 		/// \retval true if the name matches the name of the embedded camera profile.
332*fd1fabb7SAndroid Build Coastguard Worker 
NameIsEmbedded()333*fd1fabb7SAndroid Build Coastguard Worker 		bool NameIsEmbedded () const
334*fd1fabb7SAndroid Build Coastguard Worker 			{
335*fd1fabb7SAndroid Build Coastguard Worker 			return fName.Matches (kProfileName_Embedded, true);
336*fd1fabb7SAndroid Build Coastguard Worker 			}
337*fd1fabb7SAndroid Build Coastguard Worker 
338*fd1fabb7SAndroid Build Coastguard Worker 		// API for calibration illuminants:
339*fd1fabb7SAndroid Build Coastguard Worker 
340*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for first of up to two light sources used for calibration.
341*fd1fabb7SAndroid Build Coastguard Worker 		/// Uses the EXIF encodings for illuminant and is used to distinguish which
342*fd1fabb7SAndroid Build Coastguard Worker 		/// matrix to use.
343*fd1fabb7SAndroid Build Coastguard Worker 		/// Corresponds to the DNG CalibrationIlluminant1 tag.
344*fd1fabb7SAndroid Build Coastguard Worker 
SetCalibrationIlluminant1(uint32 light)345*fd1fabb7SAndroid Build Coastguard Worker 		void SetCalibrationIlluminant1 (uint32 light)
346*fd1fabb7SAndroid Build Coastguard Worker 			{
347*fd1fabb7SAndroid Build Coastguard Worker 			fCalibrationIlluminant1 = light;
348*fd1fabb7SAndroid Build Coastguard Worker 			ClearFingerprint ();
349*fd1fabb7SAndroid Build Coastguard Worker 			}
350*fd1fabb7SAndroid Build Coastguard Worker 
351*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for second of up to two light sources used for calibration.
352*fd1fabb7SAndroid Build Coastguard Worker 		/// Uses the EXIF encodings for illuminant and is used to distinguish which
353*fd1fabb7SAndroid Build Coastguard Worker 		/// matrix to use.
354*fd1fabb7SAndroid Build Coastguard Worker 		/// Corresponds to the DNG CalibrationIlluminant2 tag.
355*fd1fabb7SAndroid Build Coastguard Worker 
SetCalibrationIlluminant2(uint32 light)356*fd1fabb7SAndroid Build Coastguard Worker 		void SetCalibrationIlluminant2 (uint32 light)
357*fd1fabb7SAndroid Build Coastguard Worker 			{
358*fd1fabb7SAndroid Build Coastguard Worker 			fCalibrationIlluminant2 = light;
359*fd1fabb7SAndroid Build Coastguard Worker 			ClearFingerprint ();
360*fd1fabb7SAndroid Build Coastguard Worker 			}
361*fd1fabb7SAndroid Build Coastguard Worker 
362*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for first of up to two light sources used for calibration.
363*fd1fabb7SAndroid Build Coastguard Worker 		/// Uses the EXIF encodings for illuminant and is used to distinguish which
364*fd1fabb7SAndroid Build Coastguard Worker 		/// matrix to use.
365*fd1fabb7SAndroid Build Coastguard Worker 		/// Corresponds to the DNG CalibrationIlluminant1 tag.
366*fd1fabb7SAndroid Build Coastguard Worker 
CalibrationIlluminant1()367*fd1fabb7SAndroid Build Coastguard Worker 		uint32 CalibrationIlluminant1 () const
368*fd1fabb7SAndroid Build Coastguard Worker 			{
369*fd1fabb7SAndroid Build Coastguard Worker 			return fCalibrationIlluminant1;
370*fd1fabb7SAndroid Build Coastguard Worker 			}
371*fd1fabb7SAndroid Build Coastguard Worker 
372*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for second of up to two light sources used for calibration.
373*fd1fabb7SAndroid Build Coastguard Worker 		/// Uses the EXIF encodings for illuminant and is used to distinguish which
374*fd1fabb7SAndroid Build Coastguard Worker 		/// matrix to use.
375*fd1fabb7SAndroid Build Coastguard Worker 		/// Corresponds to the DNG CalibrationIlluminant2 tag.
376*fd1fabb7SAndroid Build Coastguard Worker 
CalibrationIlluminant2()377*fd1fabb7SAndroid Build Coastguard Worker 		uint32 CalibrationIlluminant2 () const
378*fd1fabb7SAndroid Build Coastguard Worker 			{
379*fd1fabb7SAndroid Build Coastguard Worker 			return fCalibrationIlluminant2;
380*fd1fabb7SAndroid Build Coastguard Worker 			}
381*fd1fabb7SAndroid Build Coastguard Worker 
382*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for first of up to two light sources used for calibration, returning
383*fd1fabb7SAndroid Build Coastguard Worker 		/// result as color temperature.
384*fd1fabb7SAndroid Build Coastguard Worker 
CalibrationTemperature1()385*fd1fabb7SAndroid Build Coastguard Worker 		real64 CalibrationTemperature1 () const
386*fd1fabb7SAndroid Build Coastguard Worker 			{
387*fd1fabb7SAndroid Build Coastguard Worker 			return IlluminantToTemperature (CalibrationIlluminant1 ());
388*fd1fabb7SAndroid Build Coastguard Worker 			}
389*fd1fabb7SAndroid Build Coastguard Worker 
390*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for second of up to two light sources used for calibration, returning
391*fd1fabb7SAndroid Build Coastguard Worker 		/// result as color temperature.
392*fd1fabb7SAndroid Build Coastguard Worker 
CalibrationTemperature2()393*fd1fabb7SAndroid Build Coastguard Worker 		real64 CalibrationTemperature2 () const
394*fd1fabb7SAndroid Build Coastguard Worker 			{
395*fd1fabb7SAndroid Build Coastguard Worker 			return IlluminantToTemperature (CalibrationIlluminant2 ());
396*fd1fabb7SAndroid Build Coastguard Worker 			}
397*fd1fabb7SAndroid Build Coastguard Worker 
398*fd1fabb7SAndroid Build Coastguard Worker 		// API for color matrices:
399*fd1fabb7SAndroid Build Coastguard Worker 
400*fd1fabb7SAndroid Build Coastguard Worker 		/// Utility function to normalize the scale of the color matrix.
401*fd1fabb7SAndroid Build Coastguard Worker 
402*fd1fabb7SAndroid Build Coastguard Worker 		static void NormalizeColorMatrix (dng_matrix &m);
403*fd1fabb7SAndroid Build Coastguard Worker 
404*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for first of up to two color matrices used for reference camera calibrations.
405*fd1fabb7SAndroid Build Coastguard Worker 		/// These matrices map XYZ values to camera values.  The DNG SDK needs to map colors
406*fd1fabb7SAndroid Build Coastguard Worker 		/// that direction in order to determine the clipping points for
407*fd1fabb7SAndroid Build Coastguard Worker 		/// highlight recovery logic based on the white point.  If cameras
408*fd1fabb7SAndroid Build Coastguard Worker 		/// were all three-color, the matrix could be stored as a forward matrix.
409*fd1fabb7SAndroid Build Coastguard Worker 		/// The inverse matrix is requried to support four-color cameras.
410*fd1fabb7SAndroid Build Coastguard Worker 
411*fd1fabb7SAndroid Build Coastguard Worker 		void SetColorMatrix1 (const dng_matrix &m);
412*fd1fabb7SAndroid Build Coastguard Worker 
413*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for second of up to two color matrices used for reference camera calibrations.
414*fd1fabb7SAndroid Build Coastguard Worker 		/// These matrices map XYZ values to camera values.  The DNG SDK needs to map colors
415*fd1fabb7SAndroid Build Coastguard Worker 		/// that direction in order to determine the clipping points for
416*fd1fabb7SAndroid Build Coastguard Worker 		/// highlight recovery logic based on the white point.  If cameras
417*fd1fabb7SAndroid Build Coastguard Worker 		/// were all three-color, the matrix could be stored as a forward matrix.
418*fd1fabb7SAndroid Build Coastguard Worker 		/// The inverse matrix is requried to support four-color cameras.
419*fd1fabb7SAndroid Build Coastguard Worker 
420*fd1fabb7SAndroid Build Coastguard Worker 		void SetColorMatrix2 (const dng_matrix &m);
421*fd1fabb7SAndroid Build Coastguard Worker 
422*fd1fabb7SAndroid Build Coastguard Worker 		/// Predicate to test if first camera matrix is set
423*fd1fabb7SAndroid Build Coastguard Worker 
424*fd1fabb7SAndroid Build Coastguard Worker 		bool HasColorMatrix1 () const;
425*fd1fabb7SAndroid Build Coastguard Worker 
426*fd1fabb7SAndroid Build Coastguard Worker 		/// Predicate to test if second camera matrix is set
427*fd1fabb7SAndroid Build Coastguard Worker 
428*fd1fabb7SAndroid Build Coastguard Worker 		bool HasColorMatrix2 () const;
429*fd1fabb7SAndroid Build Coastguard Worker 
430*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for first of up to two color matrices used for calibrations.
431*fd1fabb7SAndroid Build Coastguard Worker 
ColorMatrix1()432*fd1fabb7SAndroid Build Coastguard Worker 		const dng_matrix & ColorMatrix1 () const
433*fd1fabb7SAndroid Build Coastguard Worker 			{
434*fd1fabb7SAndroid Build Coastguard Worker 			return fColorMatrix1;
435*fd1fabb7SAndroid Build Coastguard Worker 			}
436*fd1fabb7SAndroid Build Coastguard Worker 
437*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for second of up to two color matrices used for calibrations.
438*fd1fabb7SAndroid Build Coastguard Worker 
ColorMatrix2()439*fd1fabb7SAndroid Build Coastguard Worker 		const dng_matrix & ColorMatrix2 () const
440*fd1fabb7SAndroid Build Coastguard Worker 			{
441*fd1fabb7SAndroid Build Coastguard Worker 			return fColorMatrix2;
442*fd1fabb7SAndroid Build Coastguard Worker 			}
443*fd1fabb7SAndroid Build Coastguard Worker 
444*fd1fabb7SAndroid Build Coastguard Worker 		// API for forward matrices:
445*fd1fabb7SAndroid Build Coastguard Worker 
446*fd1fabb7SAndroid Build Coastguard Worker 		/// Utility function to normalize the scale of the forward matrix.
447*fd1fabb7SAndroid Build Coastguard Worker 
448*fd1fabb7SAndroid Build Coastguard Worker 		static void NormalizeForwardMatrix (dng_matrix &m);
449*fd1fabb7SAndroid Build Coastguard Worker 
450*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for first of up to two forward matrices used for calibrations.
451*fd1fabb7SAndroid Build Coastguard Worker 
452*fd1fabb7SAndroid Build Coastguard Worker 		void SetForwardMatrix1 (const dng_matrix &m);
453*fd1fabb7SAndroid Build Coastguard Worker 
454*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for second of up to two forward matrices used for calibrations.
455*fd1fabb7SAndroid Build Coastguard Worker 
456*fd1fabb7SAndroid Build Coastguard Worker 		void SetForwardMatrix2 (const dng_matrix &m);
457*fd1fabb7SAndroid Build Coastguard Worker 
458*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for first of up to two forward matrices used for calibrations.
459*fd1fabb7SAndroid Build Coastguard Worker 
ForwardMatrix1()460*fd1fabb7SAndroid Build Coastguard Worker 		const dng_matrix & ForwardMatrix1 () const
461*fd1fabb7SAndroid Build Coastguard Worker 			{
462*fd1fabb7SAndroid Build Coastguard Worker 			return fForwardMatrix1;
463*fd1fabb7SAndroid Build Coastguard Worker 			}
464*fd1fabb7SAndroid Build Coastguard Worker 
465*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for second of up to two forward matrices used for calibrations.
466*fd1fabb7SAndroid Build Coastguard Worker 
ForwardMatrix2()467*fd1fabb7SAndroid Build Coastguard Worker 		const dng_matrix & ForwardMatrix2 () const
468*fd1fabb7SAndroid Build Coastguard Worker 			{
469*fd1fabb7SAndroid Build Coastguard Worker 			return fForwardMatrix2;
470*fd1fabb7SAndroid Build Coastguard Worker 			}
471*fd1fabb7SAndroid Build Coastguard Worker 
472*fd1fabb7SAndroid Build Coastguard Worker 		// API for reduction matrices:
473*fd1fabb7SAndroid Build Coastguard Worker 
474*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for first of up to two dimensionality reduction hints for four-color cameras.
475*fd1fabb7SAndroid Build Coastguard Worker 		/// This is an optional matrix that maps four components to three.
476*fd1fabb7SAndroid Build Coastguard Worker 		/// See Appendix 6 of the \ref spec_dng "DNG 1.1.0 specification."
477*fd1fabb7SAndroid Build Coastguard Worker 
478*fd1fabb7SAndroid Build Coastguard Worker 		void SetReductionMatrix1 (const dng_matrix &m);
479*fd1fabb7SAndroid Build Coastguard Worker 
480*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for second of up to two dimensionality reduction hints for four-color cameras.
481*fd1fabb7SAndroid Build Coastguard Worker 		/// This is an optional matrix that maps four components to three.
482*fd1fabb7SAndroid Build Coastguard Worker 		/// See Appendix 6 of the \ref spec_dng "DNG 1.1.0 specification."
483*fd1fabb7SAndroid Build Coastguard Worker 
484*fd1fabb7SAndroid Build Coastguard Worker 		void SetReductionMatrix2 (const dng_matrix &m);
485*fd1fabb7SAndroid Build Coastguard Worker 
486*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for first of up to two dimensionality reduction hints for four color cameras.
487*fd1fabb7SAndroid Build Coastguard Worker 
ReductionMatrix1()488*fd1fabb7SAndroid Build Coastguard Worker 		const dng_matrix & ReductionMatrix1 () const
489*fd1fabb7SAndroid Build Coastguard Worker 			{
490*fd1fabb7SAndroid Build Coastguard Worker 			return fReductionMatrix1;
491*fd1fabb7SAndroid Build Coastguard Worker 			}
492*fd1fabb7SAndroid Build Coastguard Worker 
493*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for second of up to two dimensionality reduction hints for four color cameras.
494*fd1fabb7SAndroid Build Coastguard Worker 
ReductionMatrix2()495*fd1fabb7SAndroid Build Coastguard Worker 		const dng_matrix & ReductionMatrix2 () const
496*fd1fabb7SAndroid Build Coastguard Worker 			{
497*fd1fabb7SAndroid Build Coastguard Worker 			return fReductionMatrix2;
498*fd1fabb7SAndroid Build Coastguard Worker 			}
499*fd1fabb7SAndroid Build Coastguard Worker 
500*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter function from profile fingerprint.
501*fd1fabb7SAndroid Build Coastguard Worker 
Fingerprint()502*fd1fabb7SAndroid Build Coastguard Worker 		const dng_fingerprint &Fingerprint () const
503*fd1fabb7SAndroid Build Coastguard Worker 			{
504*fd1fabb7SAndroid Build Coastguard Worker 
505*fd1fabb7SAndroid Build Coastguard Worker 			if (!fFingerprint.IsValid ())
506*fd1fabb7SAndroid Build Coastguard Worker 				CalculateFingerprint ();
507*fd1fabb7SAndroid Build Coastguard Worker 
508*fd1fabb7SAndroid Build Coastguard Worker 			return fFingerprint;
509*fd1fabb7SAndroid Build Coastguard Worker 
510*fd1fabb7SAndroid Build Coastguard Worker 			}
511*fd1fabb7SAndroid Build Coastguard Worker 
512*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for camera profile id.
513*fd1fabb7SAndroid Build Coastguard Worker 		/// \retval ID of profile.
514*fd1fabb7SAndroid Build Coastguard Worker 
ProfileID()515*fd1fabb7SAndroid Build Coastguard Worker 		dng_camera_profile_id ProfileID () const
516*fd1fabb7SAndroid Build Coastguard Worker 			{
517*fd1fabb7SAndroid Build Coastguard Worker 			return dng_camera_profile_id (Name (), Fingerprint ());
518*fd1fabb7SAndroid Build Coastguard Worker 			}
519*fd1fabb7SAndroid Build Coastguard Worker 
520*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for camera profile copyright.
521*fd1fabb7SAndroid Build Coastguard Worker 		/// \param copyright Copyright string to use for this camera profile.
522*fd1fabb7SAndroid Build Coastguard Worker 
SetCopyright(const char * copyright)523*fd1fabb7SAndroid Build Coastguard Worker 		void SetCopyright (const char *copyright)
524*fd1fabb7SAndroid Build Coastguard Worker 			{
525*fd1fabb7SAndroid Build Coastguard Worker 			fCopyright.Set (copyright);
526*fd1fabb7SAndroid Build Coastguard Worker 			ClearFingerprint ();
527*fd1fabb7SAndroid Build Coastguard Worker 			}
528*fd1fabb7SAndroid Build Coastguard Worker 
529*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for camera profile copyright.
530*fd1fabb7SAndroid Build Coastguard Worker 		/// \retval Copyright string for profile.
531*fd1fabb7SAndroid Build Coastguard Worker 
Copyright()532*fd1fabb7SAndroid Build Coastguard Worker 		const dng_string & Copyright () const
533*fd1fabb7SAndroid Build Coastguard Worker 			{
534*fd1fabb7SAndroid Build Coastguard Worker 			return fCopyright;
535*fd1fabb7SAndroid Build Coastguard Worker 			}
536*fd1fabb7SAndroid Build Coastguard Worker 
537*fd1fabb7SAndroid Build Coastguard Worker 		// Accessors for embed policy.
538*fd1fabb7SAndroid Build Coastguard Worker 
539*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for camera profile embed policy.
540*fd1fabb7SAndroid Build Coastguard Worker 		/// \param policy Policy to use for this camera profile.
541*fd1fabb7SAndroid Build Coastguard Worker 
SetEmbedPolicy(uint32 policy)542*fd1fabb7SAndroid Build Coastguard Worker 		void SetEmbedPolicy (uint32 policy)
543*fd1fabb7SAndroid Build Coastguard Worker 			{
544*fd1fabb7SAndroid Build Coastguard Worker 			fEmbedPolicy = policy;
545*fd1fabb7SAndroid Build Coastguard Worker 			ClearFingerprint ();
546*fd1fabb7SAndroid Build Coastguard Worker 			}
547*fd1fabb7SAndroid Build Coastguard Worker 
548*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for camera profile embed policy.
549*fd1fabb7SAndroid Build Coastguard Worker 		/// \param Policy for profile.
550*fd1fabb7SAndroid Build Coastguard Worker 
EmbedPolicy()551*fd1fabb7SAndroid Build Coastguard Worker 		uint32 EmbedPolicy () const
552*fd1fabb7SAndroid Build Coastguard Worker 			{
553*fd1fabb7SAndroid Build Coastguard Worker 			return fEmbedPolicy;
554*fd1fabb7SAndroid Build Coastguard Worker 			}
555*fd1fabb7SAndroid Build Coastguard Worker 
556*fd1fabb7SAndroid Build Coastguard Worker 		/// Returns true iff the profile is legal to embed in a DNG, per the
557*fd1fabb7SAndroid Build Coastguard Worker 		/// profile's embed policy.
558*fd1fabb7SAndroid Build Coastguard Worker 
IsLegalToEmbed()559*fd1fabb7SAndroid Build Coastguard Worker 		bool IsLegalToEmbed () const
560*fd1fabb7SAndroid Build Coastguard Worker 			{
561*fd1fabb7SAndroid Build Coastguard Worker 			return WasReadFromDNG () ||
562*fd1fabb7SAndroid Build Coastguard Worker 				   EmbedPolicy () == pepAllowCopying ||
563*fd1fabb7SAndroid Build Coastguard Worker 				   EmbedPolicy () == pepEmbedIfUsed  ||
564*fd1fabb7SAndroid Build Coastguard Worker 				   EmbedPolicy () == pepNoRestrictions;
565*fd1fabb7SAndroid Build Coastguard Worker 			}
566*fd1fabb7SAndroid Build Coastguard Worker 
567*fd1fabb7SAndroid Build Coastguard Worker 		// Accessors for hue sat maps.
568*fd1fabb7SAndroid Build Coastguard Worker 
569*fd1fabb7SAndroid Build Coastguard Worker 		/// Returns true iff the profile has a valid HueSatMap color table.
570*fd1fabb7SAndroid Build Coastguard Worker 
HasHueSatDeltas()571*fd1fabb7SAndroid Build Coastguard Worker 		bool HasHueSatDeltas () const
572*fd1fabb7SAndroid Build Coastguard Worker 			{
573*fd1fabb7SAndroid Build Coastguard Worker 			return fHueSatDeltas1.IsValid ();
574*fd1fabb7SAndroid Build Coastguard Worker 			}
575*fd1fabb7SAndroid Build Coastguard Worker 
576*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for first HueSatMap color table (for calibration illuminant 1).
577*fd1fabb7SAndroid Build Coastguard Worker 
HueSatDeltas1()578*fd1fabb7SAndroid Build Coastguard Worker 		const dng_hue_sat_map & HueSatDeltas1 () const
579*fd1fabb7SAndroid Build Coastguard Worker 			{
580*fd1fabb7SAndroid Build Coastguard Worker 			return fHueSatDeltas1;
581*fd1fabb7SAndroid Build Coastguard Worker 			}
582*fd1fabb7SAndroid Build Coastguard Worker 
583*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for first HueSatMap color table (for calibration illuminant 1).
584*fd1fabb7SAndroid Build Coastguard Worker 
585*fd1fabb7SAndroid Build Coastguard Worker 		void SetHueSatDeltas1 (const dng_hue_sat_map &deltas1);
586*fd1fabb7SAndroid Build Coastguard Worker 
587*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for second HueSatMap color table (for calibration illuminant 2).
588*fd1fabb7SAndroid Build Coastguard Worker 
HueSatDeltas2()589*fd1fabb7SAndroid Build Coastguard Worker 		const dng_hue_sat_map & HueSatDeltas2 () const
590*fd1fabb7SAndroid Build Coastguard Worker 			{
591*fd1fabb7SAndroid Build Coastguard Worker 			return fHueSatDeltas2;
592*fd1fabb7SAndroid Build Coastguard Worker 			}
593*fd1fabb7SAndroid Build Coastguard Worker 
594*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for second HueSatMap color table (for calibration illuminant 2).
595*fd1fabb7SAndroid Build Coastguard Worker 
596*fd1fabb7SAndroid Build Coastguard Worker 		void SetHueSatDeltas2 (const dng_hue_sat_map &deltas2);
597*fd1fabb7SAndroid Build Coastguard Worker 
598*fd1fabb7SAndroid Build Coastguard Worker 		// Accessors for hue sat map encoding.
599*fd1fabb7SAndroid Build Coastguard Worker 
600*fd1fabb7SAndroid Build Coastguard Worker 		/// Returns the hue sat map encoding (see ProfileHueSatMapEncoding tag).
601*fd1fabb7SAndroid Build Coastguard Worker 
HueSatMapEncoding()602*fd1fabb7SAndroid Build Coastguard Worker 		uint32 HueSatMapEncoding () const
603*fd1fabb7SAndroid Build Coastguard Worker 			{
604*fd1fabb7SAndroid Build Coastguard Worker 			return fHueSatMapEncoding;
605*fd1fabb7SAndroid Build Coastguard Worker 			}
606*fd1fabb7SAndroid Build Coastguard Worker 
607*fd1fabb7SAndroid Build Coastguard Worker 		/// Sets the hue sat map encoding (see ProfileHueSatMapEncoding tag) to the
608*fd1fabb7SAndroid Build Coastguard Worker 		/// specified encoding.
609*fd1fabb7SAndroid Build Coastguard Worker 
SetHueSatMapEncoding(uint32 encoding)610*fd1fabb7SAndroid Build Coastguard Worker 		void SetHueSatMapEncoding (uint32 encoding)
611*fd1fabb7SAndroid Build Coastguard Worker 			{
612*fd1fabb7SAndroid Build Coastguard Worker 			fHueSatMapEncoding = encoding;
613*fd1fabb7SAndroid Build Coastguard Worker 			ClearFingerprint ();
614*fd1fabb7SAndroid Build Coastguard Worker 			}
615*fd1fabb7SAndroid Build Coastguard Worker 
616*fd1fabb7SAndroid Build Coastguard Worker 		// Accessors for look table.
617*fd1fabb7SAndroid Build Coastguard Worker 
618*fd1fabb7SAndroid Build Coastguard Worker 		/// Returns true if the profile has a LookTable.
619*fd1fabb7SAndroid Build Coastguard Worker 
HasLookTable()620*fd1fabb7SAndroid Build Coastguard Worker 		bool HasLookTable () const
621*fd1fabb7SAndroid Build Coastguard Worker 			{
622*fd1fabb7SAndroid Build Coastguard Worker 			return fLookTable.IsValid ();
623*fd1fabb7SAndroid Build Coastguard Worker 			}
624*fd1fabb7SAndroid Build Coastguard Worker 
625*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for LookTable.
626*fd1fabb7SAndroid Build Coastguard Worker 
LookTable()627*fd1fabb7SAndroid Build Coastguard Worker 		const dng_hue_sat_map & LookTable () const
628*fd1fabb7SAndroid Build Coastguard Worker 			{
629*fd1fabb7SAndroid Build Coastguard Worker 			return fLookTable;
630*fd1fabb7SAndroid Build Coastguard Worker 			}
631*fd1fabb7SAndroid Build Coastguard Worker 
632*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for LookTable.
633*fd1fabb7SAndroid Build Coastguard Worker 
634*fd1fabb7SAndroid Build Coastguard Worker 		void SetLookTable (const dng_hue_sat_map &table);
635*fd1fabb7SAndroid Build Coastguard Worker 
636*fd1fabb7SAndroid Build Coastguard Worker 		// Accessors for look table encoding.
637*fd1fabb7SAndroid Build Coastguard Worker 
638*fd1fabb7SAndroid Build Coastguard Worker 		/// Returns the LookTable encoding (see ProfileLookTableEncoding tag).
639*fd1fabb7SAndroid Build Coastguard Worker 
LookTableEncoding()640*fd1fabb7SAndroid Build Coastguard Worker 		uint32 LookTableEncoding () const
641*fd1fabb7SAndroid Build Coastguard Worker 			{
642*fd1fabb7SAndroid Build Coastguard Worker 			return fLookTableEncoding;
643*fd1fabb7SAndroid Build Coastguard Worker 			}
644*fd1fabb7SAndroid Build Coastguard Worker 
645*fd1fabb7SAndroid Build Coastguard Worker 		/// Sets the LookTable encoding (see ProfileLookTableEncoding tag) to the
646*fd1fabb7SAndroid Build Coastguard Worker 		/// specified encoding.
647*fd1fabb7SAndroid Build Coastguard Worker 
SetLookTableEncoding(uint32 encoding)648*fd1fabb7SAndroid Build Coastguard Worker 		void SetLookTableEncoding (uint32 encoding)
649*fd1fabb7SAndroid Build Coastguard Worker 			{
650*fd1fabb7SAndroid Build Coastguard Worker 			fLookTableEncoding = encoding;
651*fd1fabb7SAndroid Build Coastguard Worker 			ClearFingerprint ();
652*fd1fabb7SAndroid Build Coastguard Worker 			}
653*fd1fabb7SAndroid Build Coastguard Worker 
654*fd1fabb7SAndroid Build Coastguard Worker 		// Accessors for baseline exposure offset.
655*fd1fabb7SAndroid Build Coastguard Worker 
656*fd1fabb7SAndroid Build Coastguard Worker 		/// Sets the baseline exposure offset of the profile (see
657*fd1fabb7SAndroid Build Coastguard Worker 		/// BaselineExposureOffset tag) to the specified value.
658*fd1fabb7SAndroid Build Coastguard Worker 
SetBaselineExposureOffset(real64 exposureOffset)659*fd1fabb7SAndroid Build Coastguard Worker 		void SetBaselineExposureOffset (real64 exposureOffset)
660*fd1fabb7SAndroid Build Coastguard Worker 			{
661*fd1fabb7SAndroid Build Coastguard Worker 			fBaselineExposureOffset.Set_real64 (exposureOffset, 100);
662*fd1fabb7SAndroid Build Coastguard Worker 			ClearFingerprint ();
663*fd1fabb7SAndroid Build Coastguard Worker 			}
664*fd1fabb7SAndroid Build Coastguard Worker 
665*fd1fabb7SAndroid Build Coastguard Worker 		/// Returns the baseline exposure offset of the profile (see
666*fd1fabb7SAndroid Build Coastguard Worker 		/// BaselineExposureOffset tag).
667*fd1fabb7SAndroid Build Coastguard Worker 
BaselineExposureOffset()668*fd1fabb7SAndroid Build Coastguard Worker 		const dng_srational & BaselineExposureOffset () const
669*fd1fabb7SAndroid Build Coastguard Worker 			{
670*fd1fabb7SAndroid Build Coastguard Worker 			return fBaselineExposureOffset;
671*fd1fabb7SAndroid Build Coastguard Worker 			}
672*fd1fabb7SAndroid Build Coastguard Worker 
673*fd1fabb7SAndroid Build Coastguard Worker 		// Accessors for default black render.
674*fd1fabb7SAndroid Build Coastguard Worker 
675*fd1fabb7SAndroid Build Coastguard Worker 		/// Sets the default black render of the profile (see DefaultBlackRender tag)
676*fd1fabb7SAndroid Build Coastguard Worker 		/// to the specified option.
677*fd1fabb7SAndroid Build Coastguard Worker 
SetDefaultBlackRender(uint32 defaultBlackRender)678*fd1fabb7SAndroid Build Coastguard Worker 		void SetDefaultBlackRender (uint32 defaultBlackRender)
679*fd1fabb7SAndroid Build Coastguard Worker 			{
680*fd1fabb7SAndroid Build Coastguard Worker 			fDefaultBlackRender = defaultBlackRender;
681*fd1fabb7SAndroid Build Coastguard Worker 			ClearFingerprint ();
682*fd1fabb7SAndroid Build Coastguard Worker 			}
683*fd1fabb7SAndroid Build Coastguard Worker 
684*fd1fabb7SAndroid Build Coastguard Worker 		/// Returns the default black render of the profile (see DefaultBlackRender
685*fd1fabb7SAndroid Build Coastguard Worker 		/// tag).
686*fd1fabb7SAndroid Build Coastguard Worker 
DefaultBlackRender()687*fd1fabb7SAndroid Build Coastguard Worker 		uint32 DefaultBlackRender () const
688*fd1fabb7SAndroid Build Coastguard Worker 			{
689*fd1fabb7SAndroid Build Coastguard Worker 			return fDefaultBlackRender;
690*fd1fabb7SAndroid Build Coastguard Worker 			}
691*fd1fabb7SAndroid Build Coastguard Worker 
692*fd1fabb7SAndroid Build Coastguard Worker 		// Accessors for tone curve.
693*fd1fabb7SAndroid Build Coastguard Worker 
694*fd1fabb7SAndroid Build Coastguard Worker 		/// Returns the tone curve of the profile.
695*fd1fabb7SAndroid Build Coastguard Worker 
ToneCurve()696*fd1fabb7SAndroid Build Coastguard Worker 		const dng_tone_curve & ToneCurve () const
697*fd1fabb7SAndroid Build Coastguard Worker 			{
698*fd1fabb7SAndroid Build Coastguard Worker 			return fToneCurve;
699*fd1fabb7SAndroid Build Coastguard Worker 			}
700*fd1fabb7SAndroid Build Coastguard Worker 
701*fd1fabb7SAndroid Build Coastguard Worker 		/// Sets the tone curve of the profile to the specified curve.
702*fd1fabb7SAndroid Build Coastguard Worker 
SetToneCurve(const dng_tone_curve & curve)703*fd1fabb7SAndroid Build Coastguard Worker 		void SetToneCurve (const dng_tone_curve &curve)
704*fd1fabb7SAndroid Build Coastguard Worker 			{
705*fd1fabb7SAndroid Build Coastguard Worker 			fToneCurve = curve;
706*fd1fabb7SAndroid Build Coastguard Worker 			ClearFingerprint ();
707*fd1fabb7SAndroid Build Coastguard Worker 			}
708*fd1fabb7SAndroid Build Coastguard Worker 
709*fd1fabb7SAndroid Build Coastguard Worker 		// Accessors for profile calibration signature.
710*fd1fabb7SAndroid Build Coastguard Worker 
711*fd1fabb7SAndroid Build Coastguard Worker 		/// Sets the profile calibration signature (see ProfileCalibrationSignature
712*fd1fabb7SAndroid Build Coastguard Worker 		/// tag) to the specified string.
713*fd1fabb7SAndroid Build Coastguard Worker 
SetProfileCalibrationSignature(const char * signature)714*fd1fabb7SAndroid Build Coastguard Worker 		void SetProfileCalibrationSignature (const char *signature)
715*fd1fabb7SAndroid Build Coastguard Worker 			{
716*fd1fabb7SAndroid Build Coastguard Worker 			fProfileCalibrationSignature.Set (signature);
717*fd1fabb7SAndroid Build Coastguard Worker 			}
718*fd1fabb7SAndroid Build Coastguard Worker 
719*fd1fabb7SAndroid Build Coastguard Worker 		/// Returns the profile calibration signature (see ProfileCalibrationSignature
720*fd1fabb7SAndroid Build Coastguard Worker 		/// tag) of the profile.
721*fd1fabb7SAndroid Build Coastguard Worker 
ProfileCalibrationSignature()722*fd1fabb7SAndroid Build Coastguard Worker 		const dng_string & ProfileCalibrationSignature () const
723*fd1fabb7SAndroid Build Coastguard Worker 			{
724*fd1fabb7SAndroid Build Coastguard Worker 			return fProfileCalibrationSignature;
725*fd1fabb7SAndroid Build Coastguard Worker 			}
726*fd1fabb7SAndroid Build Coastguard Worker 
727*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for camera unique model name to restrict use of this profile.
728*fd1fabb7SAndroid Build Coastguard Worker 		/// \param camera Camera unique model name designating only camera this
729*fd1fabb7SAndroid Build Coastguard Worker 		/// profile can be used with. (Empty string for no restriction.)
730*fd1fabb7SAndroid Build Coastguard Worker 
SetUniqueCameraModelRestriction(const char * camera)731*fd1fabb7SAndroid Build Coastguard Worker 		void SetUniqueCameraModelRestriction (const char *camera)
732*fd1fabb7SAndroid Build Coastguard Worker 			{
733*fd1fabb7SAndroid Build Coastguard Worker 			fUniqueCameraModelRestriction.Set (camera);
734*fd1fabb7SAndroid Build Coastguard Worker 			// Not included in fingerprint, so don't need ClearFingerprint ().
735*fd1fabb7SAndroid Build Coastguard Worker 			}
736*fd1fabb7SAndroid Build Coastguard Worker 
737*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for camera unique model name to restrict use of this profile.
738*fd1fabb7SAndroid Build Coastguard Worker 		/// \retval Unique model name of only camera this profile can be used with
739*fd1fabb7SAndroid Build Coastguard Worker 		/// or empty if no restriction.
740*fd1fabb7SAndroid Build Coastguard Worker 
UniqueCameraModelRestriction()741*fd1fabb7SAndroid Build Coastguard Worker 		const dng_string & UniqueCameraModelRestriction () const
742*fd1fabb7SAndroid Build Coastguard Worker 			{
743*fd1fabb7SAndroid Build Coastguard Worker 			return fUniqueCameraModelRestriction;
744*fd1fabb7SAndroid Build Coastguard Worker 			}
745*fd1fabb7SAndroid Build Coastguard Worker 
746*fd1fabb7SAndroid Build Coastguard Worker 		// Accessors for was read from DNG flag.
747*fd1fabb7SAndroid Build Coastguard Worker 
748*fd1fabb7SAndroid Build Coastguard Worker 		/// Sets internal flag to indicate this profile was originally read from a
749*fd1fabb7SAndroid Build Coastguard Worker 		/// DNG file.
750*fd1fabb7SAndroid Build Coastguard Worker 
751*fd1fabb7SAndroid Build Coastguard Worker 		void SetWasReadFromDNG (bool state = true)
752*fd1fabb7SAndroid Build Coastguard Worker 			{
753*fd1fabb7SAndroid Build Coastguard Worker 			fWasReadFromDNG = state;
754*fd1fabb7SAndroid Build Coastguard Worker 			}
755*fd1fabb7SAndroid Build Coastguard Worker 
756*fd1fabb7SAndroid Build Coastguard Worker 		/// Was this profile read from a DNG?
757*fd1fabb7SAndroid Build Coastguard Worker 
WasReadFromDNG()758*fd1fabb7SAndroid Build Coastguard Worker 		bool WasReadFromDNG () const
759*fd1fabb7SAndroid Build Coastguard Worker 			{
760*fd1fabb7SAndroid Build Coastguard Worker 			return fWasReadFromDNG;
761*fd1fabb7SAndroid Build Coastguard Worker 			}
762*fd1fabb7SAndroid Build Coastguard Worker 
763*fd1fabb7SAndroid Build Coastguard Worker 		// Accessors for was read from disk flag.
764*fd1fabb7SAndroid Build Coastguard Worker 
765*fd1fabb7SAndroid Build Coastguard Worker 		/// Sets internal flag to indicate this profile was originally read from
766*fd1fabb7SAndroid Build Coastguard Worker 		/// disk.
767*fd1fabb7SAndroid Build Coastguard Worker 
768*fd1fabb7SAndroid Build Coastguard Worker 		void SetWasReadFromDisk (bool state = true)
769*fd1fabb7SAndroid Build Coastguard Worker 			{
770*fd1fabb7SAndroid Build Coastguard Worker 			fWasReadFromDisk = state;
771*fd1fabb7SAndroid Build Coastguard Worker 			}
772*fd1fabb7SAndroid Build Coastguard Worker 
773*fd1fabb7SAndroid Build Coastguard Worker 		/// Was this profile read from disk?
774*fd1fabb7SAndroid Build Coastguard Worker 
WasReadFromDisk()775*fd1fabb7SAndroid Build Coastguard Worker 		bool WasReadFromDisk () const
776*fd1fabb7SAndroid Build Coastguard Worker 			{
777*fd1fabb7SAndroid Build Coastguard Worker 			return fWasReadFromDisk;
778*fd1fabb7SAndroid Build Coastguard Worker 			}
779*fd1fabb7SAndroid Build Coastguard Worker 
780*fd1fabb7SAndroid Build Coastguard Worker 		// Accessors for was built-in matrix flag.
781*fd1fabb7SAndroid Build Coastguard Worker 
782*fd1fabb7SAndroid Build Coastguard Worker 		/// Sets internal flag to indicate this profile was originally a built-in
783*fd1fabb7SAndroid Build Coastguard Worker 		/// matrix profile.
784*fd1fabb7SAndroid Build Coastguard Worker 
785*fd1fabb7SAndroid Build Coastguard Worker 		void SetWasBuiltinMatrix (bool state = true)
786*fd1fabb7SAndroid Build Coastguard Worker 			{
787*fd1fabb7SAndroid Build Coastguard Worker 			fWasBuiltinMatrix = state;
788*fd1fabb7SAndroid Build Coastguard Worker 			}
789*fd1fabb7SAndroid Build Coastguard Worker 
790*fd1fabb7SAndroid Build Coastguard Worker 		/// Was this profile a built-in matrix profile?
791*fd1fabb7SAndroid Build Coastguard Worker 
WasBuiltinMatrix()792*fd1fabb7SAndroid Build Coastguard Worker 		bool WasBuiltinMatrix () const
793*fd1fabb7SAndroid Build Coastguard Worker 			{
794*fd1fabb7SAndroid Build Coastguard Worker 			return fWasBuiltinMatrix;
795*fd1fabb7SAndroid Build Coastguard Worker 			}
796*fd1fabb7SAndroid Build Coastguard Worker 
797*fd1fabb7SAndroid Build Coastguard Worker 		/// Determines if this a valid profile for this number of color channels?
798*fd1fabb7SAndroid Build Coastguard Worker 		/// \retval true if the profile is valid.
799*fd1fabb7SAndroid Build Coastguard Worker 
800*fd1fabb7SAndroid Build Coastguard Worker 		bool IsValid (uint32 channels) const;
801*fd1fabb7SAndroid Build Coastguard Worker 
802*fd1fabb7SAndroid Build Coastguard Worker 		/// Predicate to check if two camera profiles are colorwise equal, thus ignores
803*fd1fabb7SAndroid Build Coastguard Worker 		/// the profile name.
804*fd1fabb7SAndroid Build Coastguard Worker 		/// \param profile Camera profile to compare to.
805*fd1fabb7SAndroid Build Coastguard Worker 
806*fd1fabb7SAndroid Build Coastguard Worker 		bool EqualData (const dng_camera_profile &profile) const;
807*fd1fabb7SAndroid Build Coastguard Worker 
808*fd1fabb7SAndroid Build Coastguard Worker 		/// Parse profile from dng_camera_profile_info data.
809*fd1fabb7SAndroid Build Coastguard Worker 
810*fd1fabb7SAndroid Build Coastguard Worker 		void Parse (dng_stream &stream,
811*fd1fabb7SAndroid Build Coastguard Worker 					dng_camera_profile_info &profileInfo);
812*fd1fabb7SAndroid Build Coastguard Worker 
813*fd1fabb7SAndroid Build Coastguard Worker 		/// Parse from an extended profile stream, which is similar to stand alone
814*fd1fabb7SAndroid Build Coastguard Worker 		/// TIFF file.
815*fd1fabb7SAndroid Build Coastguard Worker 
816*fd1fabb7SAndroid Build Coastguard Worker 		bool ParseExtended (dng_stream &stream);
817*fd1fabb7SAndroid Build Coastguard Worker 
818*fd1fabb7SAndroid Build Coastguard Worker 		/// Convert from a three-color to a four-color Bayer profile.
819*fd1fabb7SAndroid Build Coastguard Worker 
820*fd1fabb7SAndroid Build Coastguard Worker 		virtual void SetFourColorBayer ();
821*fd1fabb7SAndroid Build Coastguard Worker 
822*fd1fabb7SAndroid Build Coastguard Worker 		/// Find the hue/sat table to use for a given white point, if any.
823*fd1fabb7SAndroid Build Coastguard Worker 		/// The calling routine owns the resulting table.
824*fd1fabb7SAndroid Build Coastguard Worker 
825*fd1fabb7SAndroid Build Coastguard Worker 		dng_hue_sat_map * HueSatMapForWhite (const dng_xy_coord &white) const;
826*fd1fabb7SAndroid Build Coastguard Worker 
827*fd1fabb7SAndroid Build Coastguard Worker 		/// Stub out the profile (free memory used by large tables).
828*fd1fabb7SAndroid Build Coastguard Worker 
829*fd1fabb7SAndroid Build Coastguard Worker 		void Stub ();
830*fd1fabb7SAndroid Build Coastguard Worker 
831*fd1fabb7SAndroid Build Coastguard Worker 		/// Was this profile stubbed?
832*fd1fabb7SAndroid Build Coastguard Worker 
WasStubbed()833*fd1fabb7SAndroid Build Coastguard Worker 		bool WasStubbed () const
834*fd1fabb7SAndroid Build Coastguard Worker 			{
835*fd1fabb7SAndroid Build Coastguard Worker 			return fWasStubbed;
836*fd1fabb7SAndroid Build Coastguard Worker 			}
837*fd1fabb7SAndroid Build Coastguard Worker 
838*fd1fabb7SAndroid Build Coastguard Worker 	protected:
839*fd1fabb7SAndroid Build Coastguard Worker 
840*fd1fabb7SAndroid Build Coastguard Worker 		static real64 IlluminantToTemperature (uint32 light);
841*fd1fabb7SAndroid Build Coastguard Worker 
ClearFingerprint()842*fd1fabb7SAndroid Build Coastguard Worker 		void ClearFingerprint ()
843*fd1fabb7SAndroid Build Coastguard Worker 			{
844*fd1fabb7SAndroid Build Coastguard Worker 			fFingerprint.Clear ();
845*fd1fabb7SAndroid Build Coastguard Worker 			}
846*fd1fabb7SAndroid Build Coastguard Worker 
847*fd1fabb7SAndroid Build Coastguard Worker 		void CalculateFingerprint () const;
848*fd1fabb7SAndroid Build Coastguard Worker 
849*fd1fabb7SAndroid Build Coastguard Worker 		static bool ValidForwardMatrix (const dng_matrix &m);
850*fd1fabb7SAndroid Build Coastguard Worker 
851*fd1fabb7SAndroid Build Coastguard Worker 		static void ReadHueSatMap (dng_stream &stream,
852*fd1fabb7SAndroid Build Coastguard Worker 								   dng_hue_sat_map &hueSatMap,
853*fd1fabb7SAndroid Build Coastguard Worker 								   uint32 hues,
854*fd1fabb7SAndroid Build Coastguard Worker 								   uint32 sats,
855*fd1fabb7SAndroid Build Coastguard Worker 								   uint32 vals,
856*fd1fabb7SAndroid Build Coastguard Worker 								   bool skipSat0);
857*fd1fabb7SAndroid Build Coastguard Worker 
858*fd1fabb7SAndroid Build Coastguard Worker 	};
859*fd1fabb7SAndroid Build Coastguard Worker 
860*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
861*fd1fabb7SAndroid Build Coastguard Worker 
862*fd1fabb7SAndroid Build Coastguard Worker void SplitCameraProfileName (const dng_string &name,
863*fd1fabb7SAndroid Build Coastguard Worker 							 dng_string &baseName,
864*fd1fabb7SAndroid Build Coastguard Worker 							 int32 &version);
865*fd1fabb7SAndroid Build Coastguard Worker 
866*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
867*fd1fabb7SAndroid Build Coastguard Worker 
868*fd1fabb7SAndroid Build Coastguard Worker void BuildHueSatMapEncodingTable (dng_memory_allocator &allocator,
869*fd1fabb7SAndroid Build Coastguard Worker 								  uint32 encoding,
870*fd1fabb7SAndroid Build Coastguard Worker 								  AutoPtr<dng_1d_table> &encodeTable,
871*fd1fabb7SAndroid Build Coastguard Worker 								  AutoPtr<dng_1d_table> &decodeTable,
872*fd1fabb7SAndroid Build Coastguard Worker 								  bool subSample);
873*fd1fabb7SAndroid Build Coastguard Worker 
874*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
875*fd1fabb7SAndroid Build Coastguard Worker 
876*fd1fabb7SAndroid Build Coastguard Worker #endif
877*fd1fabb7SAndroid Build Coastguard Worker 
878*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
879