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