Coverage Report

Created: 2025-07-11 06:42

/src/dng_sdk/source/dng_ifd.h
Line
Count
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
26.5k
      {
256
26.5k
      return dng_rect (0,
257
26.5k
               0,
258
26.5k
               fImageLength,
259
26.5k
               fImageWidth);
260
26.5k
      }
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
/*****************************************************************************/