18e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/******************************************************************************/ 28e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// Copyright 2006-2007 Adobe Systems Incorporated 38e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// All Rights Reserved. 48e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// 58e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// NOTICE: Adobe permits you to use, modify, and distribute this file in 68e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// accordance with the terms of the Adobe license agreement accompanying it. 78e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/******************************************************************************/ 88e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 98e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_camera_profile.h#2 $ */ 108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $DateTime: 2012/07/11 10:36:56 $ */ 118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $Change: 838485 $ */ 128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $Author: tknoll $ */ 138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/** \file 158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener * Support for DNG camera color profile information. 168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener * Per the \ref spec_dng "DNG 1.1.0 specification", a DNG file can store up to 178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener * two sets of color profile information for a camera in the DNG file from that 188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener * camera. The second set is optional and when there are two sets, they represent 198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener * profiles made under different illumination. 208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener * 218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener * Profiling information is optionally separated into two parts. One part represents 228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener * a profile for a reference camera. (ColorMatrix1 and ColorMatrix2 here.) The 238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener * second is a per-camera calibration that takes into account unit-to-unit variation. 248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener * This is designed to allow replacing the reference color matrix with one of one's 258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener * own construction while maintaining any unit-specific calibration the camera 268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener * manufacturer may have provided. 278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener * 288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener * See Appendix 6 of the \ref spec_dng "DNG 1.1.0 specification" for more information. 298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener */ 308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#ifndef __dng_camera_profile__ 328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#define __dng_camera_profile__ 338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/******************************************************************************/ 358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_auto_ptr.h" 378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_assertions.h" 388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_classes.h" 398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_fingerprint.h" 408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_hue_sat_map.h" 418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_matrix.h" 428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_string.h" 438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_tag_values.h" 448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_tone_curve.h" 458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/******************************************************************************/ 478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 488e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerextern const char * kProfileName_Embedded; 498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 508e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerextern const char * kAdobeCalibrationSignature; 518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/******************************************************************************/ 538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/// \brief An ID for a camera profile consisting of a name and optional fingerprint. 558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 568e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerclass dng_camera_profile_id 578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener private: 608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_string fName; 628e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_fingerprint fFingerprint; 648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener public: 668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Construct an invalid camera profile ID (empty name and fingerprint). 688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_camera_profile_id () 708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener : fName () 728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fFingerprint () 738e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Construct a camera profile ID with the specified name and no fingerprint. 788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \param name The name of the camera profile ID. 798e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 808e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_camera_profile_id (const char *name) 818e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 828e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener : fName () 838e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fFingerprint () 848e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 858e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 868e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fName.Set (name); 878e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 888e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 898e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Construct a camera profile ID with the specified name and no fingerprint. 908e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \param name The name of the camera profile ID. 918e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 928e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_camera_profile_id (const dng_string &name) 938e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 948e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener : fName (name) 958e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fFingerprint () 968e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 978e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 988e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 998e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1008e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Construct a camera profile ID with the specified name and fingerprint. 1018e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \param name The name of the camera profile ID. 1028e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \param fingerprint The fingerprint of the camera profile ID. 1038e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1048e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_camera_profile_id (const char *name, 1058e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_fingerprint &fingerprint) 1068e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1078e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener : fName () 1088e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fFingerprint (fingerprint) 1098e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fName.Set (name); 1128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener DNG_ASSERT (!fFingerprint.IsValid () || fName.NotEmpty (), 1138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener "Cannot have profile fingerprint without name"); 1148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Construct a camera profile ID with the specified name and fingerprint. 1178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \param name The name of the camera profile ID. 1188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \param fingerprint The fingerprint of the camera profile ID. 1198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_camera_profile_id (const dng_string &name, 1218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_fingerprint &fingerprint) 1228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener : fName (name) 1248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fFingerprint (fingerprint) 1258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener DNG_ASSERT (!fFingerprint.IsValid () || fName.NotEmpty (), 1288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener "Cannot have profile fingerprint without name"); 1298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for the name of the camera profile ID. 1328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \retval The name of the camera profile ID. 1338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_string & Name () const 1358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fName; 1378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for the fingerprint of the camera profile ID. 1408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \retval The fingerprint of the camera profile ID. 1418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_fingerprint & Fingerprint () const 1438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fFingerprint; 1458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Test for equality of two camera profile IDs. 1488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \param The id of the camera profile ID to compare. 1498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool operator== (const dng_camera_profile_id &id) const 1518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fName == id.fName && 1538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fFingerprint == id.fFingerprint; 1548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Test for inequality of two camera profile IDs. 1578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \param The id of the camera profile ID to compare. 1588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool operator!= (const dng_camera_profile_id &id) const 1608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return !(*this == id); 1628e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Returns true iff the camera profile ID is valid. 1658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool IsValid () const 1678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fName.NotEmpty (); // Fingerprint is optional. 1698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Resets the name and fingerprint, thereby making this camera profile ID 1728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// invalid. 1738e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void Clear () 1758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener *this = dng_camera_profile_id (); 1778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1798e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener }; 1808e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1818e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/******************************************************************************/ 1828e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1838e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/// \brief Container for DNG camera color profile and calibration data. 1848e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1858e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerclass dng_camera_profile 1868e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1878e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1888e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener protected: 1898e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1908e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Name of this camera profile. 1918e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1928e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_string fName; 1938e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1948e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Light sources for up to two calibrations. These use the EXIF 1958e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // encodings for illuminant and are used to distinguish which 1968e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // matrix to use. 1978e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1988e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 fCalibrationIlluminant1; 1998e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 fCalibrationIlluminant2; 2008e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2018e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Color matrices for up to two calibrations. 2028e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2038e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // These matrices map XYZ values to non-white balanced camera values. 2048e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Adobe needs to go that direction in order to determine the clipping 2058e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // points for highlight recovery logic based on the white point. If 2068e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // cameras were all 3-color, the matrix could be stored as a forward matrix, 2078e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // but we need the backwards matrix to deal with 4-color cameras. 2088e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2098e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_matrix fColorMatrix1; 2108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_matrix fColorMatrix2; 2118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // These matrices map white balanced camera values to XYZ chromatically 2138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // adapted to D50 (the ICC profile PCS white point). If the matrices 2148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // exist, then this implies that white balancing should be done by scaling 2158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // camera values with a diagonal matrix. 2168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_matrix fForwardMatrix1; 2188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_matrix fForwardMatrix2; 2198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Dimensionality reduction hints for more than three color cameras. 2218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // This is an optional matrix that maps the camera's color components 2228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // to 3 components. These are only used if the forward matrices don't 2238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // exist, and are used invert the color matrices. 2248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_matrix fReductionMatrix1; 2268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_matrix fReductionMatrix2; 2278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // MD5 hash for all data bits of the profile. 2298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener mutable dng_fingerprint fFingerprint; 2318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Copyright notice from creator of profile. 2338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_string fCopyright; 2358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Rules for how this profile can be embedded and/or copied. 2378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 fEmbedPolicy; 2398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // 2-D (or 3-D) hue/sat tables to modify colors. 2418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_hue_sat_map fHueSatDeltas1; 2438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_hue_sat_map fHueSatDeltas2; 2448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Value (V of HSV) encoding for hue/sat tables. 2468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 fHueSatMapEncoding; 2488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // 3-D hue/sat table to apply a "look". 2508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_hue_sat_map fLookTable; 2528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Value (V of HSV) encoding for look table. 2548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 fLookTableEncoding; 2568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Baseline exposure offset. When using this profile, this offset value is 2588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // added to the BaselineExposure value for the negative to determine the 2598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // overall baseline exposure to apply. 2608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_srational fBaselineExposureOffset; 2628e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Default black rendering. 2648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 fDefaultBlackRender; 2668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // The "as shot" tone curve for this profile. Check IsValid method 2688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // to tell if one exists in profile. 2698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_tone_curve fToneCurve; 2718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // If this string matches the fCameraCalibrationSignature of the 2738e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // negative, then use the calibration matrix values from the negative. 2748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_string fProfileCalibrationSignature; 2768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // If non-empty, only allow use of this profile with camera having 2788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // same unique model name. 2798e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2808e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_string fUniqueCameraModelRestriction; 2818e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2828e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Was this profile read from inside a DNG file? (If so, we wnat 2838e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // to be sure to include it again when writing out an updated 2848e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // DNG file) 2858e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2868e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool fWasReadFromDNG; 2878e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2888e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Was this profile read from disk (i.e., an external profile)? (If so, we 2898e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // may need to refresh when changes are made externally to the profile 2908e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // directory.) 2918e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2928e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool fWasReadFromDisk; 2938e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2948e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Was this profile a built-in "Matrix" profile? (If so, we may need to 2958e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // refresh -- i.e., remove it from the list of available profiles -- when 2968e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // changes are made externally to the profile directory.) 2978e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2988e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool fWasBuiltinMatrix; 2998e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3008e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Was this profile stubbed to save memory (and no longer valid 3018e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // for building color conversion tables)? 3028e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3038e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool fWasStubbed; 3048e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3058e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener public: 3068e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3078e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_camera_profile (); 3088e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3098e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener virtual ~dng_camera_profile (); 3108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // API for profile name: 3128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Setter for camera profile name. 3148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \param name Name to use for this camera profile. 3158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetName (const char *name) 3178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 3188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fName.Set (name); 3198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener ClearFingerprint (); 3208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 3218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for camera profile name. 3238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \retval Name of profile. 3248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_string & Name () const 3268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 3278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fName; 3288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 3298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Test if this name is embedded. 3318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \retval true if the name matches the name of the embedded camera profile. 3328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool NameIsEmbedded () const 3348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 3358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fName.Matches (kProfileName_Embedded, true); 3368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 3378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // API for calibration illuminants: 3398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Setter for first of up to two light sources used for calibration. 3418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Uses the EXIF encodings for illuminant and is used to distinguish which 3428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// matrix to use. 3438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Corresponds to the DNG CalibrationIlluminant1 tag. 3448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetCalibrationIlluminant1 (uint32 light) 3468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 3478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fCalibrationIlluminant1 = light; 3488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener ClearFingerprint (); 3498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 3508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Setter for second of up to two light sources used for calibration. 3528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Uses the EXIF encodings for illuminant and is used to distinguish which 3538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// matrix to use. 3548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Corresponds to the DNG CalibrationIlluminant2 tag. 3558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetCalibrationIlluminant2 (uint32 light) 3578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 3588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fCalibrationIlluminant2 = light; 3598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener ClearFingerprint (); 3608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 3618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3628e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for first of up to two light sources used for calibration. 3638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Uses the EXIF encodings for illuminant and is used to distinguish which 3648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// matrix to use. 3658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Corresponds to the DNG CalibrationIlluminant1 tag. 3668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 CalibrationIlluminant1 () const 3688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 3698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fCalibrationIlluminant1; 3708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 3718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for second of up to two light sources used for calibration. 3738e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Uses the EXIF encodings for illuminant and is used to distinguish which 3748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// matrix to use. 3758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Corresponds to the DNG CalibrationIlluminant2 tag. 3768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 CalibrationIlluminant2 () const 3788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 3798e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fCalibrationIlluminant2; 3808e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 3818e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3828e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for first of up to two light sources used for calibration, returning 3838e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// result as color temperature. 3848e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3858e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener real64 CalibrationTemperature1 () const 3868e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 3878e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return IlluminantToTemperature (CalibrationIlluminant1 ()); 3888e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 3898e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3908e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for second of up to two light sources used for calibration, returning 3918e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// result as color temperature. 3928e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3938e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener real64 CalibrationTemperature2 () const 3948e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 3958e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return IlluminantToTemperature (CalibrationIlluminant2 ()); 3968e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 3978e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3988e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // API for color matrices: 3998e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4008e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Utility function to normalize the scale of the color matrix. 4018e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4028e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener static void NormalizeColorMatrix (dng_matrix &m); 4038e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4048e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Setter for first of up to two color matrices used for reference camera calibrations. 4058e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// These matrices map XYZ values to camera values. The DNG SDK needs to map colors 4068e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// that direction in order to determine the clipping points for 4078e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// highlight recovery logic based on the white point. If cameras 4088e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// were all three-color, the matrix could be stored as a forward matrix. 4098e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// The inverse matrix is requried to support four-color cameras. 4108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetColorMatrix1 (const dng_matrix &m); 4128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Setter for second of up to two color matrices used for reference camera calibrations. 4148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// These matrices map XYZ values to camera values. The DNG SDK needs to map colors 4158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// that direction in order to determine the clipping points for 4168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// highlight recovery logic based on the white point. If cameras 4178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// were all three-color, the matrix could be stored as a forward matrix. 4188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// The inverse matrix is requried to support four-color cameras. 4198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetColorMatrix2 (const dng_matrix &m); 4218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Predicate to test if first camera matrix is set 4238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool HasColorMatrix1 () const; 4258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Predicate to test if second camera matrix is set 4278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool HasColorMatrix2 () const; 4298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for first of up to two color matrices used for calibrations. 4318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_matrix & ColorMatrix1 () const 4338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 4348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fColorMatrix1; 4358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 4368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for second of up to two color matrices used for calibrations. 4388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_matrix & ColorMatrix2 () const 4408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 4418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fColorMatrix2; 4428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 4438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // API for forward matrices: 4458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Utility function to normalize the scale of the forward matrix. 4478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener static void NormalizeForwardMatrix (dng_matrix &m); 4498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Setter for first of up to two forward matrices used for calibrations. 4518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetForwardMatrix1 (const dng_matrix &m); 4538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Setter for second of up to two forward matrices used for calibrations. 4558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetForwardMatrix2 (const dng_matrix &m); 4578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for first of up to two forward matrices used for calibrations. 4598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_matrix & ForwardMatrix1 () const 4618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 4628e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fForwardMatrix1; 4638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 4648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for second of up to two forward matrices used for calibrations. 4668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_matrix & ForwardMatrix2 () const 4688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 4698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fForwardMatrix2; 4708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 4718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // API for reduction matrices: 4738e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Setter for first of up to two dimensionality reduction hints for four-color cameras. 4758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// This is an optional matrix that maps four components to three. 4768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// See Appendix 6 of the \ref spec_dng "DNG 1.1.0 specification." 4778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetReductionMatrix1 (const dng_matrix &m); 4798e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4808e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Setter for second of up to two dimensionality reduction hints for four-color cameras. 4818e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// This is an optional matrix that maps four components to three. 4828e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// See Appendix 6 of the \ref spec_dng "DNG 1.1.0 specification." 4838e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4848e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetReductionMatrix2 (const dng_matrix &m); 4858e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4868e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for first of up to two dimensionality reduction hints for four color cameras. 4878e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4888e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_matrix & ReductionMatrix1 () const 4898e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 4908e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fReductionMatrix1; 4918e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 4928e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4938e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for second of up to two dimensionality reduction hints for four color cameras. 4948e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4958e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_matrix & ReductionMatrix2 () const 4968e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 4978e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fReductionMatrix2; 4988e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 4998e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5008e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter function from profile fingerprint. 5018e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5028e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_fingerprint &Fingerprint () const 5038e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 5048e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5058e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener if (!fFingerprint.IsValid ()) 5068e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener CalculateFingerprint (); 5078e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5088e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fFingerprint; 5098e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 5118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for camera profile id. 5138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \retval ID of profile. 5148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_camera_profile_id ProfileID () const 5168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 5178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return dng_camera_profile_id (Name (), Fingerprint ()); 5188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 5198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Setter for camera profile copyright. 5218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \param copyright Copyright string to use for this camera profile. 5228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetCopyright (const char *copyright) 5248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 5258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fCopyright.Set (copyright); 5268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener ClearFingerprint (); 5278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 5288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for camera profile copyright. 5308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \retval Copyright string for profile. 5318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_string & Copyright () const 5338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 5348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fCopyright; 5358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 5368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Accessors for embed policy. 5388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Setter for camera profile embed policy. 5408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \param policy Policy to use for this camera profile. 5418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetEmbedPolicy (uint32 policy) 5438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 5448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fEmbedPolicy = policy; 5458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener ClearFingerprint (); 5468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 5478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for camera profile embed policy. 5498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \param Policy for profile. 5508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 EmbedPolicy () const 5528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 5538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fEmbedPolicy; 5548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 5558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Returns true iff the profile is legal to embed in a DNG, per the 5578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// profile's embed policy. 5588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool IsLegalToEmbed () const 5608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 5618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return WasReadFromDNG () || 5628e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener EmbedPolicy () == pepAllowCopying || 5638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener EmbedPolicy () == pepEmbedIfUsed || 5648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener EmbedPolicy () == pepNoRestrictions; 5658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 5668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Accessors for hue sat maps. 5688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Returns true iff the profile has a valid HueSatMap color table. 5708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool HasHueSatDeltas () const 5728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 5738e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fHueSatDeltas1.IsValid (); 5748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 5758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for first HueSatMap color table (for calibration illuminant 1). 5778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_hue_sat_map & HueSatDeltas1 () const 5798e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 5808e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fHueSatDeltas1; 5818e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 5828e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5838e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Setter for first HueSatMap color table (for calibration illuminant 1). 5848e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5858e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetHueSatDeltas1 (const dng_hue_sat_map &deltas1); 5868e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5878e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for second HueSatMap color table (for calibration illuminant 2). 5888e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5898e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_hue_sat_map & HueSatDeltas2 () const 5908e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 5918e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fHueSatDeltas2; 5928e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 5938e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5948e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Setter for second HueSatMap color table (for calibration illuminant 2). 5958e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5968e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetHueSatDeltas2 (const dng_hue_sat_map &deltas2); 5978e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5988e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Accessors for hue sat map encoding. 5998e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6008e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Returns the hue sat map encoding (see ProfileHueSatMapEncoding tag). 6018e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6028e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 HueSatMapEncoding () const 6038e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 6048e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fHueSatMapEncoding; 6058e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 6068e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6078e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Sets the hue sat map encoding (see ProfileHueSatMapEncoding tag) to the 6088e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// specified encoding. 6098e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetHueSatMapEncoding (uint32 encoding) 6118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 6128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fHueSatMapEncoding = encoding; 6138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener ClearFingerprint (); 6148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 6158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Accessors for look table. 6178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Returns true if the profile has a LookTable. 6198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool HasLookTable () const 6218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 6228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fLookTable.IsValid (); 6238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 6248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for LookTable. 6268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_hue_sat_map & LookTable () const 6288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 6298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fLookTable; 6308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 6318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Setter for LookTable. 6338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetLookTable (const dng_hue_sat_map &table); 6358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Accessors for look table encoding. 6378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Returns the LookTable encoding (see ProfileLookTableEncoding tag). 6398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 LookTableEncoding () const 6418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 6428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fLookTableEncoding; 6438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 6448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Sets the LookTable encoding (see ProfileLookTableEncoding tag) to the 6468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// specified encoding. 6478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetLookTableEncoding (uint32 encoding) 6498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 6508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fLookTableEncoding = encoding; 6518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener ClearFingerprint (); 6528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 6538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Accessors for baseline exposure offset. 6558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Sets the baseline exposure offset of the profile (see 6578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// BaselineExposureOffset tag) to the specified value. 6588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetBaselineExposureOffset (real64 exposureOffset) 6608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 6618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fBaselineExposureOffset.Set_real64 (exposureOffset, 100); 6628e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener ClearFingerprint (); 6638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 6648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Returns the baseline exposure offset of the profile (see 6668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// BaselineExposureOffset tag). 6678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_srational & BaselineExposureOffset () const 6698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 6708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fBaselineExposureOffset; 6718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 6728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6738e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Accessors for default black render. 6748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Sets the default black render of the profile (see DefaultBlackRender tag) 6768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// to the specified option. 6778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetDefaultBlackRender (uint32 defaultBlackRender) 6798e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 6808e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fDefaultBlackRender = defaultBlackRender; 6818e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener ClearFingerprint (); 6828e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 6838e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6848e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Returns the default black render of the profile (see DefaultBlackRender 6858e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// tag). 6868e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6878e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 DefaultBlackRender () const 6888e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 6898e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fDefaultBlackRender; 6908e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 6918e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6928e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Accessors for tone curve. 6938e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6948e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Returns the tone curve of the profile. 6958e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 6968e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_tone_curve & ToneCurve () const 6978e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 6988e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fToneCurve; 6998e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 7008e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7018e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Sets the tone curve of the profile to the specified curve. 7028e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7038e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetToneCurve (const dng_tone_curve &curve) 7048e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 7058e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fToneCurve = curve; 7068e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener ClearFingerprint (); 7078e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 7088e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7098e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Accessors for profile calibration signature. 7108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Sets the profile calibration signature (see ProfileCalibrationSignature 7128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// tag) to the specified string. 7138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetProfileCalibrationSignature (const char *signature) 7158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 7168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fProfileCalibrationSignature.Set (signature); 7178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 7188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Returns the profile calibration signature (see ProfileCalibrationSignature 7208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// tag) of the profile. 7218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_string & ProfileCalibrationSignature () const 7238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 7248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fProfileCalibrationSignature; 7258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 7268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Setter for camera unique model name to restrict use of this profile. 7288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \param camera Camera unique model name designating only camera this 7298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// profile can be used with. (Empty string for no restriction.) 7308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetUniqueCameraModelRestriction (const char *camera) 7328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 7338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fUniqueCameraModelRestriction.Set (camera); 7348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Not included in fingerprint, so don't need ClearFingerprint (). 7358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 7368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Getter for camera unique model name to restrict use of this profile. 7388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \retval Unique model name of only camera this profile can be used with 7398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// or empty if no restriction. 7408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_string & UniqueCameraModelRestriction () const 7428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 7438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fUniqueCameraModelRestriction; 7448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 7458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Accessors for was read from DNG flag. 7478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Sets internal flag to indicate this profile was originally read from a 7498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// DNG file. 7508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetWasReadFromDNG (bool state = true) 7528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 7538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fWasReadFromDNG = state; 7548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 7558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Was this profile read from a DNG? 7578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool WasReadFromDNG () const 7598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 7608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fWasReadFromDNG; 7618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 7628e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Accessors for was read from disk flag. 7648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Sets internal flag to indicate this profile was originally read from 7668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// disk. 7678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetWasReadFromDisk (bool state = true) 7698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 7708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fWasReadFromDisk = state; 7718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 7728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7738e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Was this profile read from disk? 7748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool WasReadFromDisk () const 7768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 7778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fWasReadFromDisk; 7788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 7798e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7808e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Accessors for was built-in matrix flag. 7818e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7828e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Sets internal flag to indicate this profile was originally a built-in 7838e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// matrix profile. 7848e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7858e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void SetWasBuiltinMatrix (bool state = true) 7868e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 7878e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fWasBuiltinMatrix = state; 7888e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 7898e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7908e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Was this profile a built-in matrix profile? 7918e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7928e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool WasBuiltinMatrix () const 7938e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 7948e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fWasBuiltinMatrix; 7958e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 7968e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 7978e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Determines if this a valid profile for this number of color channels? 7988e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \retval true if the profile is valid. 7998e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8008e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool IsValid (uint32 channels) const; 8018e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8028e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Predicate to check if two camera profiles are colorwise equal, thus ignores 8038e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// the profile name. 8048e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// \param profile Camera profile to compare to. 8058e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8068e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool EqualData (const dng_camera_profile &profile) const; 8078e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8088e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Parse profile from dng_camera_profile_info data. 8098e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void Parse (dng_stream &stream, 8118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_camera_profile_info &profileInfo); 8128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Parse from an extended profile stream, which is similar to stand alone 8148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// TIFF file. 8158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool ParseExtended (dng_stream &stream); 8178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Convert from a three-color to a four-color Bayer profile. 8198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener virtual void SetFourColorBayer (); 8218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Find the hue/sat table to use for a given white point, if any. 8238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// The calling routine owns the resulting table. 8248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_hue_sat_map * HueSatMapForWhite (const dng_xy_coord &white) const; 8268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Stub out the profile (free memory used by large tables). 8288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void Stub (); 8308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener /// Was this profile stubbed? 8328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool WasStubbed () const 8348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 8358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fWasStubbed; 8368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 8378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener protected: 8398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener static real64 IlluminantToTemperature (uint32 light); 8418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void ClearFingerprint () 8438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 8448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fFingerprint.Clear (); 8458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 8468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener void CalculateFingerprint () const; 8488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener static bool ValidForwardMatrix (const dng_matrix &m); 8508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener static void ReadHueSatMap (dng_stream &stream, 8528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_hue_sat_map &hueSatMap, 8538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 hues, 8548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 sats, 8558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 vals, 8568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool skipSat0); 8578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener }; 8598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/******************************************************************************/ 8618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8628e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienervoid SplitCameraProfileName (const dng_string &name, 8638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_string &baseName, 8648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener int32 &version); 8658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 8678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8688e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienervoid BuildHueSatMapEncodingTable (dng_memory_allocator &allocator, 8698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 encoding, 8708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener AutoPtr<dng_1d_table> &encodeTable, 8718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener AutoPtr<dng_1d_table> &decodeTable, 8728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool subSample); 8738e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/******************************************************************************/ 8758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#endif 8778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 8788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/******************************************************************************/ 879