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