summaryrefslogtreecommitdiff
path: root/gpr/source/lib/dng_sdk/dng_exif.h
diff options
context:
space:
mode:
Diffstat (limited to 'gpr/source/lib/dng_sdk/dng_exif.h')
-rw-r--r--gpr/source/lib/dng_sdk/dng_exif.h351
1 files changed, 351 insertions, 0 deletions
diff --git a/gpr/source/lib/dng_sdk/dng_exif.h b/gpr/source/lib/dng_sdk/dng_exif.h
new file mode 100644
index 0000000..a85fc7d
--- /dev/null
+++ b/gpr/source/lib/dng_sdk/dng_exif.h
@@ -0,0 +1,351 @@
+/*****************************************************************************/
+// Copyright 2006-2008 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_exif.h#2 $ */
+/* $DateTime: 2012/07/11 10:36:56 $ */
+/* $Change: 838485 $ */
+/* $Author: tknoll $ */
+
+/** \file
+ * EXIF read access support. See the \ref spec_exif "EXIF specification" for full
+ * description of tags.
+ */
+
+/*****************************************************************************/
+
+#ifndef __dng_exif__
+#define __dng_exif__
+
+/*****************************************************************************/
+
+#include "dng_classes.h"
+#include "dng_date_time.h"
+#include "dng_fingerprint.h"
+#include "dng_types.h"
+#include "dng_matrix.h"
+#include "dng_rational.h"
+#include "dng_string.h"
+#include "dng_stream.h"
+#include "dng_sdk_limits.h"
+
+/*****************************************************************************/
+
+/// \brief Container class for parsing and holding EXIF tags.
+///
+/// Public member fields are documented in \ref spec_exif "EXIF specification."
+
+class dng_exif
+ {
+
+ public:
+
+ dng_string fImageDescription;
+ dng_string fMake;
+ dng_string fModel;
+ dng_string fSoftware;
+ dng_string fArtist;
+ dng_string fCopyright;
+ dng_string fCopyright2;
+ dng_string fUserComment;
+
+ dng_date_time_info fDateTime;
+ dng_date_time_storage_info fDateTimeStorageInfo;
+
+ dng_date_time_info fDateTimeOriginal;
+ dng_date_time_storage_info fDateTimeOriginalStorageInfo;
+
+ dng_date_time_info fDateTimeDigitized;
+ dng_date_time_storage_info fDateTimeDigitizedStorageInfo;
+
+ uint32 fTIFF_EP_StandardID;
+ uint32 fExifVersion;
+ uint32 fFlashPixVersion;
+
+ dng_urational fExposureTime;
+ dng_urational fFNumber;
+ dng_srational fShutterSpeedValue;
+ dng_urational fApertureValue;
+ dng_srational fBrightnessValue;
+ dng_srational fExposureBiasValue;
+ dng_urational fMaxApertureValue;
+ dng_urational fFocalLength;
+ dng_urational fDigitalZoomRatio;
+ dng_urational fExposureIndex;
+ dng_urational fSubjectDistance;
+ dng_urational fGamma;
+
+ dng_urational fBatteryLevelR;
+ dng_string fBatteryLevelA;
+
+ uint32 fExposureProgram;
+ uint32 fMeteringMode;
+ uint32 fLightSource;
+ uint32 fFlash;
+ uint32 fFlashMask;
+ uint32 fSensingMethod;
+ uint32 fColorSpace;
+ uint32 fFileSource;
+ uint32 fSceneType;
+ uint32 fCustomRendered;
+ uint32 fExposureMode;
+ uint32 fWhiteBalance;
+ uint32 fSceneCaptureType;
+ uint32 fGainControl;
+ uint32 fContrast;
+ uint32 fSaturation;
+ uint32 fSharpness;
+ uint32 fSubjectDistanceRange;
+ uint32 fSelfTimerMode;
+ uint32 fImageNumber;
+
+ uint32 fFocalLengthIn35mmFilm;
+
+ uint32 fISOSpeedRatings [3]; // EXIF 2.3: PhotographicSensitivity.
+
+ // Sensitivity tags added in EXIF 2.3.
+
+ uint32 fSensitivityType;
+ uint32 fStandardOutputSensitivity;
+ uint32 fRecommendedExposureIndex;
+ uint32 fISOSpeed;
+ uint32 fISOSpeedLatitudeyyy;
+ uint32 fISOSpeedLatitudezzz;
+
+ uint32 fSubjectAreaCount;
+ uint32 fSubjectArea [4];
+
+ uint32 fComponentsConfiguration;
+
+ dng_urational fCompresssedBitsPerPixel;
+
+ uint32 fPixelXDimension;
+ uint32 fPixelYDimension;
+
+ dng_urational fFocalPlaneXResolution;
+ dng_urational fFocalPlaneYResolution;
+
+ uint32 fFocalPlaneResolutionUnit;
+
+ uint32 fCFARepeatPatternRows;
+ uint32 fCFARepeatPatternCols;
+
+ uint8 fCFAPattern [kMaxCFAPattern] [kMaxCFAPattern];
+
+ dng_fingerprint fImageUniqueID;
+
+ uint32 fGPSVersionID;
+ dng_string fGPSLatitudeRef;
+ dng_urational fGPSLatitude [3];
+ dng_string fGPSLongitudeRef;
+ dng_urational fGPSLongitude [3];
+ uint32 fGPSAltitudeRef;
+ dng_urational fGPSAltitude;
+ dng_urational fGPSTimeStamp [3];
+ dng_string fGPSSatellites;
+ dng_string fGPSStatus;
+ dng_string fGPSMeasureMode;
+ dng_urational fGPSDOP;
+ dng_string fGPSSpeedRef;
+ dng_urational fGPSSpeed;
+ dng_string fGPSTrackRef;
+ dng_urational fGPSTrack;
+ dng_string fGPSImgDirectionRef;
+ dng_urational fGPSImgDirection;
+ dng_string fGPSMapDatum;
+ dng_string fGPSDestLatitudeRef;
+ dng_urational fGPSDestLatitude [3];
+ dng_string fGPSDestLongitudeRef;
+ dng_urational fGPSDestLongitude [3];
+ dng_string fGPSDestBearingRef;
+ dng_urational fGPSDestBearing;
+ dng_string fGPSDestDistanceRef;
+ dng_urational fGPSDestDistance;
+ dng_string fGPSProcessingMethod;
+ dng_string fGPSAreaInformation;
+ dng_string fGPSDateStamp;
+ uint32 fGPSDifferential;
+ dng_urational fGPSHPositioningError;
+
+ dng_string fInteroperabilityIndex;
+
+ uint32 fInteroperabilityVersion;
+
+ dng_string fRelatedImageFileFormat;
+
+ uint32 fRelatedImageWidth;
+ uint32 fRelatedImageLength;
+
+ dng_string fCameraSerialNumber; // EXIF 2.3: BodySerialNumber.
+
+ dng_urational fLensInfo [4]; // EXIF 2.3: LensSpecification.
+
+ dng_string fLensID;
+ dng_string fLensMake;
+ dng_string fLensName; // EXIF 2.3: LensModel.
+ dng_string fLensSerialNumber;
+
+ // Was the lens name field read from a LensModel tag?
+
+ bool fLensNameWasReadFromExif;
+
+ // Private field to hold the approximate focus distance of the lens, in
+ // meters. This value is often coarsely measured/reported and hence should be
+ // interpreted only as a rough estimate of the true distance from the plane
+ // of focus (in object space) to the focal plane. It is still useful for the
+ // purposes of applying lens corrections.
+
+ dng_urational fApproxFocusDistance;
+
+ dng_srational fFlashCompensation;
+
+ dng_string fOwnerName; // EXIF 2.3: CameraOwnerName.
+ dng_string fFirmware;
+
+ public:
+
+ dng_exif ();
+
+ virtual ~dng_exif ();
+
+ /// Make clone.
+
+ virtual dng_exif * Clone () const;
+
+ /// Clear all EXIF fields.
+
+ void SetEmpty ();
+
+ /// Copy all GPS-related fields.
+ /// \param exif Source object from which to copy GPS fields.
+
+ void CopyGPSFrom (const dng_exif &exif);
+
+ /// Utility to fix up common errors and rounding issues with EXIF exposure
+ /// times.
+
+ static real64 SnapExposureTime (real64 et);
+
+ /// Set exposure time and shutter speed fields. Optionally fix up common
+ /// errors and rounding issues with EXIF exposure times.
+ /// \param et Exposure time in seconds.
+ /// \param snap Set to true to fix up common errors and rounding issues with
+ /// EXIF exposure times.
+
+ void SetExposureTime (real64 et,
+ bool snap = true);
+
+ /// Set shutter speed value (APEX units) and exposure time.
+ /// \param Shutter speed in APEX units.
+
+ void SetShutterSpeedValue (real64 ss);
+
+ /// Utility to encode f-number as a rational.
+ /// \param fs The f-number to encode.
+
+ static dng_urational EncodeFNumber (real64 fs);
+
+ /// Set the FNumber and ApertureValue fields.
+ /// \param fs The f-number to set.
+
+ void SetFNumber (real64 fs);
+
+ /// Set the FNumber and ApertureValue fields.
+ /// \param av The aperture value (APEX units).
+
+ void SetApertureValue (real64 av);
+
+ /// Utility to convert aperture value (APEX units) to f-number.
+ /// \param av The aperture value (APEX units) to convert.
+
+ static real64 ApertureValueToFNumber (real64 av);
+
+ /// Utility to convert aperture value (APEX units) to f-number.
+ /// \param av The aperture value (APEX units) to convert.
+
+ static real64 ApertureValueToFNumber (const dng_urational &av);
+
+ /// Utility to convert f-number to aperture value (APEX units).
+ /// \param fNumber The f-number to convert.
+
+ static real64 FNumberToApertureValue (real64 fNumber);
+
+ /// Utility to convert f-number to aperture value (APEX units).
+ /// \param fNumber The f-number to convert.
+
+ static real64 FNumberToApertureValue (const dng_urational &fNumber);
+
+ /// Set the DateTime field.
+ /// \param dt The DateTime value.
+
+ void UpdateDateTime (const dng_date_time_info &dt);
+
+ /// Returns true iff the EXIF version is at least 2.3.
+
+ bool AtLeastVersion0230 () const;
+
+ virtual bool ParseTag (dng_stream &stream,
+ dng_shared &shared,
+ uint32 parentCode,
+ bool isMainIFD,
+ uint32 tagCode,
+ uint32 tagType,
+ uint32 tagCount,
+ uint64 tagOffset);
+
+ virtual void PostParse (dng_host &host,
+ dng_shared &shared);
+
+ protected:
+
+ virtual bool Parse_ifd0 (dng_stream &stream,
+ dng_shared &shared,
+ uint32 parentCode,
+ uint32 tagCode,
+ uint32 tagType,
+ uint32 tagCount,
+ uint64 tagOffset);
+
+ virtual bool Parse_ifd0_main (dng_stream &stream,
+ dng_shared &shared,
+ uint32 parentCode,
+ uint32 tagCode,
+ uint32 tagType,
+ uint32 tagCount,
+ uint64 tagOffset);
+
+ virtual bool Parse_ifd0_exif (dng_stream &stream,
+ dng_shared &shared,
+ uint32 parentCode,
+ uint32 tagCode,
+ uint32 tagType,
+ uint32 tagCount,
+ uint64 tagOffset);
+
+ virtual bool Parse_gps (dng_stream &stream,
+ dng_shared &shared,
+ uint32 parentCode,
+ uint32 tagCode,
+ uint32 tagType,
+ uint32 tagCount,
+ uint64 tagOffset);
+
+ virtual bool Parse_interoperability (dng_stream &stream,
+ dng_shared &shared,
+ uint32 parentCode,
+ uint32 tagCode,
+ uint32 tagType,
+ uint32 tagCount,
+ uint64 tagOffset);
+
+ };
+
+/*****************************************************************************/
+
+#endif
+
+/*****************************************************************************/