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