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