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