/*****************************************************************************/
// Copyright 2006-2012 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_ifd.h#3 $ */ 
/* $DateTime: 2012/06/05 11:05:39 $ */
/* $Change: 833352 $ */
/* $Author: tknoll $ */

/** \file
 *  DNG image file directory support.
 */

/*****************************************************************************/

#ifndef __dng_ifd__
#define __dng_ifd__

/*****************************************************************************/

#include "dng_fingerprint.h"
#include "dng_rect.h"
#include "dng_shared.h"
#include "dng_stream.h"
#include "dng_string.h"
#include "dng_sdk_limits.h"
#include "dng_tag_values.h"

/*****************************************************************************/

class dng_preview_info
	{
	
	public:
	
		bool fIsPrimary;
		
		dng_string fApplicationName;
		
		dng_string fApplicationVersion;
		
		dng_string fSettingsName;
		
		dng_fingerprint fSettingsDigest;
		
		PreviewColorSpaceEnum fColorSpace;
		
		dng_string fDateTime;
		
		real64 fRawToPreviewGain;
		
		uint32 fCacheVersion;
		
	public:
	
		dng_preview_info ();
		
		~dng_preview_info ();
		
	};

/*****************************************************************************/

/// \brief Container for a single image file directory of a digital negative.
///
/// See \ref spec_dng "DNG 1.1.0 specification" for documentation of specific tags.

class dng_ifd
	{
	
	public:
	
		bool fUsesNewSubFileType;
	
		uint32 fNewSubFileType;
		
		uint32 fImageWidth;
		uint32 fImageLength;
		
		uint32 fBitsPerSample [kMaxSamplesPerPixel];
		
		uint32 fCompression;
		
		uint32 fPredictor;
		
		uint32 fPhotometricInterpretation;
		
		uint32 fFillOrder;
		
		uint32 fOrientation;
		uint32 fOrientationType;
		uint64 fOrientationOffset;
		bool   fOrientationBigEndian;
		
		uint32 fSamplesPerPixel;
		
		uint32 fPlanarConfiguration;
		
		real64 fXResolution;
		real64 fYResolution;
		
		uint32 fResolutionUnit;
		
		bool fUsesStrips;
		bool fUsesTiles;

		uint32 fTileWidth;
		uint32 fTileLength;
		
		enum
			{
			kMaxTileInfo = 32
			};
		
		uint32 fTileOffsetsType;
		uint32 fTileOffsetsCount;
		uint64 fTileOffsetsOffset;
		uint64 fTileOffset [kMaxTileInfo];
		
		uint32 fTileByteCountsType;
		uint32 fTileByteCountsCount;
		uint64 fTileByteCountsOffset;
		uint32 fTileByteCount [kMaxTileInfo];

		uint32 fSubIFDsCount;
		uint64 fSubIFDsOffset;
		
		uint32 fExtraSamplesCount;
		uint32 fExtraSamples [kMaxSamplesPerPixel];
		
		uint32 fSampleFormat [kMaxSamplesPerPixel];
		
		uint32 fJPEGTablesCount;
		uint64 fJPEGTablesOffset;
		
		uint64 fJPEGInterchangeFormat;
		uint32 fJPEGInterchangeFormatLength;

		real64 fYCbCrCoefficientR;
		real64 fYCbCrCoefficientG;
		real64 fYCbCrCoefficientB;
		
		uint32 fYCbCrSubSampleH;
		uint32 fYCbCrSubSampleV;
		
		uint32 fYCbCrPositioning;
		
		real64 fReferenceBlackWhite [6];
		
		uint32 fCFARepeatPatternRows;
		uint32 fCFARepeatPatternCols;
		
		uint8 fCFAPattern [kMaxCFAPattern] [kMaxCFAPattern];
		
		uint8 fCFAPlaneColor [kMaxColorPlanes];
		
		uint32 fCFALayout;
		
		uint32 fLinearizationTableType;
		uint32 fLinearizationTableCount;
		uint64 fLinearizationTableOffset;
		
		uint32 fBlackLevelRepeatRows;
		uint32 fBlackLevelRepeatCols;
		
		real64 fBlackLevel [kMaxBlackPattern] [kMaxBlackPattern] [kMaxSamplesPerPixel];
		
		uint32 fBlackLevelDeltaHType;
		uint32 fBlackLevelDeltaHCount;
		uint64 fBlackLevelDeltaHOffset;
		
		uint32 fBlackLevelDeltaVType;
		uint32 fBlackLevelDeltaVCount;
		uint64 fBlackLevelDeltaVOffset;
		
		real64 fWhiteLevel [kMaxSamplesPerPixel];
		
		dng_urational fDefaultScaleH;
		dng_urational fDefaultScaleV;
		
		dng_urational fBestQualityScale;
		
		dng_urational fDefaultCropOriginH;
		dng_urational fDefaultCropOriginV;
		
		dng_urational fDefaultCropSizeH;
		dng_urational fDefaultCropSizeV;
		
		dng_urational fDefaultUserCropT;
		dng_urational fDefaultUserCropL;
		dng_urational fDefaultUserCropB;
		dng_urational fDefaultUserCropR;
		
		uint32 fBayerGreenSplit;
		
		dng_urational fChromaBlurRadius;
		
		dng_urational fAntiAliasStrength;
		
		dng_rect fActiveArea;
		
		uint32   fMaskedAreaCount;
		dng_rect fMaskedArea [kMaxMaskedAreas];
		
		uint32 fRowInterleaveFactor;
		
		uint32 fSubTileBlockRows;
		uint32 fSubTileBlockCols;
		
		dng_preview_info fPreviewInfo;
		
		uint32 fOpcodeList1Count;
		uint64 fOpcodeList1Offset;
		
		uint32 fOpcodeList2Count;
		uint64 fOpcodeList2Offset;
		
		uint32 fOpcodeList3Count;
		uint64 fOpcodeList3Offset;
		
		bool fLosslessJPEGBug16;
		
		uint32 fSampleBitShift;
		
		uint64 fThisIFD;
		uint64 fNextIFD;
		
		int32 fCompressionQuality;
		
		bool fPatchFirstJPEGByte;

	public:
	
		dng_ifd ();
		
		virtual ~dng_ifd ();
		
		virtual bool ParseTag (dng_stream &stream,
							   uint32 parentCode,
							   uint32 tagCode,
							   uint32 tagType,
							   uint32 tagCount,
							   uint64 tagOffset);
							   
		virtual void PostParse ();
		
		virtual bool IsValidDNG (dng_shared &shared,
								 uint32 parentCode);

		dng_rect Bounds () const
			{
			return dng_rect (0,
							 0,
							 fImageLength,
							 fImageWidth);
			}
					      		 
		uint32 TilesAcross () const;
		
		uint32 TilesDown () const;
		
		uint32 TilesPerImage () const;
		
		dng_rect TileArea (uint32 rowIndex,
						   uint32 colIndex) const;
						   
		virtual uint32 TileByteCount (const dng_rect &tile) const;
		
		void SetSingleStrip ();
		
		void FindTileSize (uint32 bytesPerTile = 128 * 1024,
						   uint32 cellH = 16,
						   uint32 cellV = 16);
		
		void FindStripSize (uint32 bytesPerStrip = 128 * 1024,
						    uint32 cellV = 16);
		
		virtual uint32 PixelType () const;
		
		virtual bool IsBaselineJPEG () const;
		
		virtual bool CanRead () const;
		
		virtual void ReadImage (dng_host &host,
								dng_stream &stream,
								dng_image &image,
								dng_jpeg_image *jpegImage = NULL,
								dng_fingerprint *jpegDigest = NULL) const;
			
	protected:
							   
		virtual bool IsValidCFA (dng_shared &shared,
					      		 uint32 parentCode);
					      
	};
	
/*****************************************************************************/

#endif
	
/*****************************************************************************/
