Home | History | Annotate | Download | only in source
      1 /*****************************************************************************/
      2 // Copyright 2006-2012 Adobe Systems Incorporated
      3 // All Rights Reserved.
      4 //
      5 // NOTICE:  Adobe permits you to use, modify, and distribute this file in
      6 // accordance with the terms of the Adobe license agreement accompanying it.
      7 /*****************************************************************************/
      8 
      9 /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_ifd.h#3 $ */
     10 /* $DateTime: 2012/06/05 11:05:39 $ */
     11 /* $Change: 833352 $ */
     12 /* $Author: tknoll $ */
     13 
     14 /** \file
     15  *  DNG image file directory support.
     16  */
     17 
     18 /*****************************************************************************/
     19 
     20 #ifndef __dng_ifd__
     21 #define __dng_ifd__
     22 
     23 /*****************************************************************************/
     24 
     25 #include "dng_fingerprint.h"
     26 #include "dng_rect.h"
     27 #include "dng_shared.h"
     28 #include "dng_stream.h"
     29 #include "dng_string.h"
     30 #include "dng_sdk_limits.h"
     31 #include "dng_tag_values.h"
     32 
     33 /*****************************************************************************/
     34 
     35 class dng_preview_info
     36 	{
     37 
     38 	public:
     39 
     40 		bool fIsPrimary;
     41 
     42 		dng_string fApplicationName;
     43 
     44 		dng_string fApplicationVersion;
     45 
     46 		dng_string fSettingsName;
     47 
     48 		dng_fingerprint fSettingsDigest;
     49 
     50 		PreviewColorSpaceEnum fColorSpace;
     51 
     52 		dng_string fDateTime;
     53 
     54 		real64 fRawToPreviewGain;
     55 
     56 		uint32 fCacheVersion;
     57 
     58 	public:
     59 
     60 		dng_preview_info ();
     61 
     62 		~dng_preview_info ();
     63 
     64 	};
     65 
     66 /*****************************************************************************/
     67 
     68 /// \brief Container for a single image file directory of a digital negative.
     69 ///
     70 /// See \ref spec_dng "DNG 1.1.0 specification" for documentation of specific tags.
     71 
     72 class dng_ifd
     73 	{
     74 
     75 	public:
     76 
     77 		bool fUsesNewSubFileType;
     78 
     79 		uint32 fNewSubFileType;
     80 
     81 		uint32 fImageWidth;
     82 		uint32 fImageLength;
     83 
     84 		uint32 fBitsPerSample [kMaxSamplesPerPixel];
     85 
     86 		uint32 fCompression;
     87 
     88 		uint32 fPredictor;
     89 
     90 		uint32 fPhotometricInterpretation;
     91 
     92 		uint32 fFillOrder;
     93 
     94 		uint32 fOrientation;
     95 		uint32 fOrientationType;
     96 		uint64 fOrientationOffset;
     97 		bool   fOrientationBigEndian;
     98 
     99 		uint32 fSamplesPerPixel;
    100 
    101 		uint32 fPlanarConfiguration;
    102 
    103 		real64 fXResolution;
    104 		real64 fYResolution;
    105 
    106 		uint32 fResolutionUnit;
    107 
    108 		bool fUsesStrips;
    109 		bool fUsesTiles;
    110 
    111 		uint32 fTileWidth;
    112 		uint32 fTileLength;
    113 
    114 		enum
    115 			{
    116 			kMaxTileInfo = 32
    117 			};
    118 
    119 		uint32 fTileOffsetsType;
    120 		uint32 fTileOffsetsCount;
    121 		uint64 fTileOffsetsOffset;
    122 		uint64 fTileOffset [kMaxTileInfo];
    123 
    124 		uint32 fTileByteCountsType;
    125 		uint32 fTileByteCountsCount;
    126 		uint64 fTileByteCountsOffset;
    127 		uint32 fTileByteCount [kMaxTileInfo];
    128 
    129 		uint32 fSubIFDsCount;
    130 		uint64 fSubIFDsOffset;
    131 
    132 		uint32 fExtraSamplesCount;
    133 		uint32 fExtraSamples [kMaxSamplesPerPixel];
    134 
    135 		uint32 fSampleFormat [kMaxSamplesPerPixel];
    136 
    137 		uint32 fJPEGTablesCount;
    138 		uint64 fJPEGTablesOffset;
    139 
    140 		uint64 fJPEGInterchangeFormat;
    141 		uint32 fJPEGInterchangeFormatLength;
    142 
    143 		real64 fYCbCrCoefficientR;
    144 		real64 fYCbCrCoefficientG;
    145 		real64 fYCbCrCoefficientB;
    146 
    147 		uint32 fYCbCrSubSampleH;
    148 		uint32 fYCbCrSubSampleV;
    149 
    150 		uint32 fYCbCrPositioning;
    151 
    152 		real64 fReferenceBlackWhite [6];
    153 
    154 		uint32 fCFARepeatPatternRows;
    155 		uint32 fCFARepeatPatternCols;
    156 
    157 		uint8 fCFAPattern [kMaxCFAPattern] [kMaxCFAPattern];
    158 
    159 		uint8 fCFAPlaneColor [kMaxColorPlanes];
    160 
    161 		uint32 fCFALayout;
    162 
    163 		uint32 fLinearizationTableType;
    164 		uint32 fLinearizationTableCount;
    165 		uint64 fLinearizationTableOffset;
    166 
    167 		uint32 fBlackLevelRepeatRows;
    168 		uint32 fBlackLevelRepeatCols;
    169 
    170 		real64 fBlackLevel [kMaxBlackPattern] [kMaxBlackPattern] [kMaxSamplesPerPixel];
    171 
    172 		uint32 fBlackLevelDeltaHType;
    173 		uint32 fBlackLevelDeltaHCount;
    174 		uint64 fBlackLevelDeltaHOffset;
    175 
    176 		uint32 fBlackLevelDeltaVType;
    177 		uint32 fBlackLevelDeltaVCount;
    178 		uint64 fBlackLevelDeltaVOffset;
    179 
    180 		real64 fWhiteLevel [kMaxSamplesPerPixel];
    181 
    182 		dng_urational fDefaultScaleH;
    183 		dng_urational fDefaultScaleV;
    184 
    185 		dng_urational fBestQualityScale;
    186 
    187 		dng_urational fDefaultCropOriginH;
    188 		dng_urational fDefaultCropOriginV;
    189 
    190 		dng_urational fDefaultCropSizeH;
    191 		dng_urational fDefaultCropSizeV;
    192 
    193 		dng_urational fDefaultUserCropT;
    194 		dng_urational fDefaultUserCropL;
    195 		dng_urational fDefaultUserCropB;
    196 		dng_urational fDefaultUserCropR;
    197 
    198 		uint32 fBayerGreenSplit;
    199 
    200 		dng_urational fChromaBlurRadius;
    201 
    202 		dng_urational fAntiAliasStrength;
    203 
    204 		dng_rect fActiveArea;
    205 
    206 		uint32   fMaskedAreaCount;
    207 		dng_rect fMaskedArea [kMaxMaskedAreas];
    208 
    209 		uint32 fRowInterleaveFactor;
    210 
    211 		uint32 fSubTileBlockRows;
    212 		uint32 fSubTileBlockCols;
    213 
    214 		dng_preview_info fPreviewInfo;
    215 
    216 		uint32 fOpcodeList1Count;
    217 		uint64 fOpcodeList1Offset;
    218 
    219 		uint32 fOpcodeList2Count;
    220 		uint64 fOpcodeList2Offset;
    221 
    222 		uint32 fOpcodeList3Count;
    223 		uint64 fOpcodeList3Offset;
    224 
    225 		bool fLosslessJPEGBug16;
    226 
    227 		uint32 fSampleBitShift;
    228 
    229 		uint64 fThisIFD;
    230 		uint64 fNextIFD;
    231 
    232 		int32 fCompressionQuality;
    233 
    234 		bool fPatchFirstJPEGByte;
    235 
    236 	public:
    237 
    238 		dng_ifd ();
    239 
    240 		virtual ~dng_ifd ();
    241 
    242 		virtual bool ParseTag (dng_stream &stream,
    243 							   uint32 parentCode,
    244 							   uint32 tagCode,
    245 							   uint32 tagType,
    246 							   uint32 tagCount,
    247 							   uint64 tagOffset);
    248 
    249 		virtual void PostParse ();
    250 
    251 		virtual bool IsValidDNG (dng_shared &shared,
    252 								 uint32 parentCode);
    253 
    254 		dng_rect Bounds () const
    255 			{
    256 			return dng_rect (0,
    257 							 0,
    258 							 fImageLength,
    259 							 fImageWidth);
    260 			}
    261 
    262 		uint32 TilesAcross () const;
    263 
    264 		uint32 TilesDown () const;
    265 
    266 		uint32 TilesPerImage () const;
    267 
    268 		dng_rect TileArea (uint32 rowIndex,
    269 						   uint32 colIndex) const;
    270 
    271 		virtual uint32 TileByteCount (const dng_rect &tile) const;
    272 
    273 		void SetSingleStrip ();
    274 
    275 		void FindTileSize (uint32 bytesPerTile = 128 * 1024,
    276 						   uint32 cellH = 16,
    277 						   uint32 cellV = 16);
    278 
    279 		void FindStripSize (uint32 bytesPerStrip = 128 * 1024,
    280 						    uint32 cellV = 16);
    281 
    282 		virtual uint32 PixelType () const;
    283 
    284 		virtual bool IsBaselineJPEG () const;
    285 
    286 		virtual bool CanRead () const;
    287 
    288 		virtual void ReadImage (dng_host &host,
    289 								dng_stream &stream,
    290 								dng_image &image,
    291 								dng_jpeg_image *jpegImage = NULL,
    292 								dng_fingerprint *jpegDigest = NULL) const;
    293 
    294 	protected:
    295 
    296 		virtual bool IsValidCFA (dng_shared &shared,
    297 					      		 uint32 parentCode);
    298 
    299 	};
    300 
    301 /*****************************************************************************/
    302 
    303 #endif
    304 
    305 /*****************************************************************************/
    306