| /*****************************************************************************/ |
| // 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 |
| |
| /*****************************************************************************/ |