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
35class 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
72class 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