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