• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*****************************************************************************/
2 // Copyright 2006-2011 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_info.h#1 $ */
10 /* $DateTime: 2012/05/30 13:28:51 $ */
11 /* $Change: 832332 $ */
12 /* $Author: tknoll $ */
13 
14 /** \file
15  * Class for holding top-level information about a DNG image.
16  */
17 
18 /*****************************************************************************/
19 
20 #ifndef __dng_info__
21 #define __dng_info__
22 
23 /*****************************************************************************/
24 
25 #include "dng_classes.h"
26 #include "dng_ifd.h"
27 #include "dng_exif.h"
28 #include "dng_shared.h"
29 #include "dng_errors.h"
30 #include "dng_sdk_limits.h"
31 #include "dng_auto_ptr.h"
32 
33 /*****************************************************************************/
34 
35 /// \brief Top-level structure of DNG file with access to metadata.
36 ///
37 /// See \ref spec_dng "DNG 1.1.0 specification" for information on member fields of this class.
38 
39 class dng_info
40 	{
41 
42 	public:
43 
44 		uint64 fTIFFBlockOffset;
45 
46 		uint64 fTIFFBlockOriginalOffset;
47 
48 		bool fBigEndian;
49 
50 		uint32 fMagic;
51 
52 		AutoPtr<dng_exif> fExif;
53 
54 		AutoPtr<dng_shared> fShared;
55 
56 		int32 fMainIndex;
57 
58 		int32 fMaskIndex;
59 
60 		uint32 fIFDCount;
61 
62 		AutoPtr<dng_ifd> fIFD [kMaxSubIFDs + 1];
63 
64 		uint32 fChainedIFDCount;
65 
66 		AutoPtr<dng_ifd> fChainedIFD [kMaxChainedIFDs];
67 
68 	protected:
69 
70 		uint32 fMakerNoteNextIFD;
71 
72 	public:
73 
74 		dng_info ();
75 
76 		virtual ~dng_info ();
77 
78 		/// Read dng_info from a dng_stream
79 		/// \param host DNG host used for progress updating, abort testing, buffer allocation, etc.
80 		/// \param stream Stream to read DNG data from.
81 
82 		virtual void Parse (dng_host &host,
83 							dng_stream &stream);
84 
85 		/// Must be called immediately after a successful Parse operation.
86 
87 		virtual void PostParse (dng_host &host);
88 
89 		/// Test validity of DNG data.
90 		/// \retval true if stream provided a valid DNG.
91 
92 		virtual bool IsValidDNG ();
93 
94 	protected:
95 
96 		virtual void ValidateMagic ();
97 
98 		virtual void ParseTag (dng_host &host,
99 							   dng_stream &stream,
100 							   dng_exif *exif,
101 						 	   dng_shared *shared,
102 						 	   dng_ifd *ifd,
103 						 	   uint32 parentCode,
104 						 	   uint32 tagCode,
105 						 	   uint32 tagType,
106 						 	   uint32 tagCount,
107 						 	   uint64 tagOffset,
108 						 	   int64 offsetDelta);
109 
110 		virtual bool ValidateIFD (dng_stream &stream,
111 						 	      uint64 ifdOffset,
112 						 	      int64 offsetDelta);
113 
114 		virtual void ParseIFD (dng_host &host,
115 							   dng_stream &stream,
116 							   dng_exif *exif,
117 						 	   dng_shared *shared,
118 						 	   dng_ifd *ifd,
119 						 	   uint64 ifdOffset,
120 						 	   int64 offsetDelta,
121 						 	   uint32 parentCode);
122 
123 		virtual bool ParseMakerNoteIFD (dng_host &host,
124 										dng_stream &stream,
125 										uint64 ifdSize,
126 								 	    uint64 ifdOffset,
127 								 	    int64 offsetDelta,
128 								 	    uint64 minOffset,
129 								 	    uint64 maxOffset,
130 								 	    uint32 parentCode);
131 
132 		virtual void ParseMakerNote (dng_host &host,
133 									 dng_stream &stream,
134 							   		 uint32 makerNoteCount,
135 							   		 uint64 makerNoteOffset,
136 							   		 int64 offsetDelta,
137 							   		 uint64 minOffset,
138 							   		 uint64 maxOffset);
139 
140 		virtual void ParseSonyPrivateData (dng_host &host,
141 										   dng_stream &stream,
142 										   uint64 count,
143 										   uint64 oldOffset,
144 										   uint64 newOffset);
145 
146 		virtual void ParseDNGPrivateData (dng_host &host,
147 										  dng_stream &stream);
148 
149 	private:
150 
151 		// Hidden copy constructor and assignment operator.
152 
153 		dng_info (const dng_info &info);
154 
155 		dng_info & operator= (const dng_info &info);
156 
157 	};
158 
159 /*****************************************************************************/
160 
161 #endif
162 
163 /*****************************************************************************/
164