xref: /aosp_15_r20/external/dng_sdk/source/dng_image_writer.h (revision fd1fabb72dbdf09ea7034f531e6f8e9f57334c8d)
1*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
2*fd1fabb7SAndroid Build Coastguard Worker // Copyright 2006-2012 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_image_writer.h#3 $ */
10*fd1fabb7SAndroid Build Coastguard Worker /* $DateTime: 2012/07/31 22:04:34 $ */
11*fd1fabb7SAndroid Build Coastguard Worker /* $Change: 840853 $ */
12*fd1fabb7SAndroid Build Coastguard Worker /* $Author: tknoll $ */
13*fd1fabb7SAndroid Build Coastguard Worker 
14*fd1fabb7SAndroid Build Coastguard Worker /** \file
15*fd1fabb7SAndroid Build Coastguard Worker  * Support for writing DNG images to files.
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_image_writer__
21*fd1fabb7SAndroid Build Coastguard Worker #define __dng_image_writer__
22*fd1fabb7SAndroid Build Coastguard Worker 
23*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
24*fd1fabb7SAndroid Build Coastguard Worker 
25*fd1fabb7SAndroid Build Coastguard Worker #include "dng_auto_ptr.h"
26*fd1fabb7SAndroid Build Coastguard Worker #include "dng_classes.h"
27*fd1fabb7SAndroid Build Coastguard Worker #include "dng_fingerprint.h"
28*fd1fabb7SAndroid Build Coastguard Worker #include "dng_memory.h"
29*fd1fabb7SAndroid Build Coastguard Worker #include "dng_point.h"
30*fd1fabb7SAndroid Build Coastguard Worker #include "dng_rational.h"
31*fd1fabb7SAndroid Build Coastguard Worker #include "dng_sdk_limits.h"
32*fd1fabb7SAndroid Build Coastguard Worker #include "dng_string.h"
33*fd1fabb7SAndroid Build Coastguard Worker #include "dng_tag_types.h"
34*fd1fabb7SAndroid Build Coastguard Worker #include "dng_tag_values.h"
35*fd1fabb7SAndroid Build Coastguard Worker #include "dng_types.h"
36*fd1fabb7SAndroid Build Coastguard Worker 
37*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
38*fd1fabb7SAndroid Build Coastguard Worker 
39*fd1fabb7SAndroid Build Coastguard Worker /// \brief Image resolution.
40*fd1fabb7SAndroid Build Coastguard Worker 
41*fd1fabb7SAndroid Build Coastguard Worker class dng_resolution
42*fd1fabb7SAndroid Build Coastguard Worker 	{
43*fd1fabb7SAndroid Build Coastguard Worker 
44*fd1fabb7SAndroid Build Coastguard Worker 	public:
45*fd1fabb7SAndroid Build Coastguard Worker 
46*fd1fabb7SAndroid Build Coastguard Worker 		dng_urational fXResolution;
47*fd1fabb7SAndroid Build Coastguard Worker 		dng_urational fYResolution;
48*fd1fabb7SAndroid Build Coastguard Worker 
49*fd1fabb7SAndroid Build Coastguard Worker 		uint16 fResolutionUnit;
50*fd1fabb7SAndroid Build Coastguard Worker 
51*fd1fabb7SAndroid Build Coastguard Worker 	public:
52*fd1fabb7SAndroid Build Coastguard Worker 
53*fd1fabb7SAndroid Build Coastguard Worker 		dng_resolution ();
54*fd1fabb7SAndroid Build Coastguard Worker 
55*fd1fabb7SAndroid Build Coastguard Worker 	};
56*fd1fabb7SAndroid Build Coastguard Worker 
57*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
58*fd1fabb7SAndroid Build Coastguard Worker 
59*fd1fabb7SAndroid Build Coastguard Worker class tiff_tag
60*fd1fabb7SAndroid Build Coastguard Worker 	{
61*fd1fabb7SAndroid Build Coastguard Worker 
62*fd1fabb7SAndroid Build Coastguard Worker 	protected:
63*fd1fabb7SAndroid Build Coastguard Worker 
64*fd1fabb7SAndroid Build Coastguard Worker 		uint16 fCode;
65*fd1fabb7SAndroid Build Coastguard Worker 
66*fd1fabb7SAndroid Build Coastguard Worker 		uint16 fType;
67*fd1fabb7SAndroid Build Coastguard Worker 
68*fd1fabb7SAndroid Build Coastguard Worker 		uint32 fCount;
69*fd1fabb7SAndroid Build Coastguard Worker 
70*fd1fabb7SAndroid Build Coastguard Worker 	protected:
71*fd1fabb7SAndroid Build Coastguard Worker 
tiff_tag(uint16 code,uint16 type,uint32 count)72*fd1fabb7SAndroid Build Coastguard Worker 		tiff_tag (uint16 code,
73*fd1fabb7SAndroid Build Coastguard Worker 				  uint16 type,
74*fd1fabb7SAndroid Build Coastguard Worker 				  uint32 count)
75*fd1fabb7SAndroid Build Coastguard Worker 
76*fd1fabb7SAndroid Build Coastguard Worker 			:	fCode  (code)
77*fd1fabb7SAndroid Build Coastguard Worker 			,	fType  (type)
78*fd1fabb7SAndroid Build Coastguard Worker 			,	fCount (count)
79*fd1fabb7SAndroid Build Coastguard Worker 
80*fd1fabb7SAndroid Build Coastguard Worker 			{
81*fd1fabb7SAndroid Build Coastguard Worker 			}
82*fd1fabb7SAndroid Build Coastguard Worker 
83*fd1fabb7SAndroid Build Coastguard Worker 	public:
84*fd1fabb7SAndroid Build Coastguard Worker 
~tiff_tag()85*fd1fabb7SAndroid Build Coastguard Worker 		virtual ~tiff_tag ()
86*fd1fabb7SAndroid Build Coastguard Worker 			{
87*fd1fabb7SAndroid Build Coastguard Worker 			}
88*fd1fabb7SAndroid Build Coastguard Worker 
Code()89*fd1fabb7SAndroid Build Coastguard Worker 		uint16 Code () const
90*fd1fabb7SAndroid Build Coastguard Worker 			{
91*fd1fabb7SAndroid Build Coastguard Worker 			return fCode;
92*fd1fabb7SAndroid Build Coastguard Worker 			}
93*fd1fabb7SAndroid Build Coastguard Worker 
Type()94*fd1fabb7SAndroid Build Coastguard Worker 		uint16 Type () const
95*fd1fabb7SAndroid Build Coastguard Worker 			{
96*fd1fabb7SAndroid Build Coastguard Worker 			return fType;
97*fd1fabb7SAndroid Build Coastguard Worker 			}
98*fd1fabb7SAndroid Build Coastguard Worker 
Count()99*fd1fabb7SAndroid Build Coastguard Worker 		uint32 Count () const
100*fd1fabb7SAndroid Build Coastguard Worker 			{
101*fd1fabb7SAndroid Build Coastguard Worker 			return fCount;
102*fd1fabb7SAndroid Build Coastguard Worker 			}
103*fd1fabb7SAndroid Build Coastguard Worker 
SetCount(uint32 count)104*fd1fabb7SAndroid Build Coastguard Worker 		void SetCount (uint32 count)
105*fd1fabb7SAndroid Build Coastguard Worker 			{
106*fd1fabb7SAndroid Build Coastguard Worker 			fCount = count;
107*fd1fabb7SAndroid Build Coastguard Worker 			}
108*fd1fabb7SAndroid Build Coastguard Worker 
Size()109*fd1fabb7SAndroid Build Coastguard Worker 		uint32 Size () const
110*fd1fabb7SAndroid Build Coastguard Worker 			{
111*fd1fabb7SAndroid Build Coastguard Worker 			return TagTypeSize (Type ()) * Count ();
112*fd1fabb7SAndroid Build Coastguard Worker 			}
113*fd1fabb7SAndroid Build Coastguard Worker 
114*fd1fabb7SAndroid Build Coastguard Worker 		virtual void Put (dng_stream &stream) const = 0;
115*fd1fabb7SAndroid Build Coastguard Worker 
116*fd1fabb7SAndroid Build Coastguard Worker 	private:
117*fd1fabb7SAndroid Build Coastguard Worker 
118*fd1fabb7SAndroid Build Coastguard Worker 		// Hidden copy constructor and assignment operator.
119*fd1fabb7SAndroid Build Coastguard Worker 
120*fd1fabb7SAndroid Build Coastguard Worker 		tiff_tag (const tiff_tag &tag);
121*fd1fabb7SAndroid Build Coastguard Worker 
122*fd1fabb7SAndroid Build Coastguard Worker 		tiff_tag & operator= (const tiff_tag &tag);
123*fd1fabb7SAndroid Build Coastguard Worker 
124*fd1fabb7SAndroid Build Coastguard Worker 	};
125*fd1fabb7SAndroid Build Coastguard Worker 
126*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
127*fd1fabb7SAndroid Build Coastguard Worker 
128*fd1fabb7SAndroid Build Coastguard Worker class tag_data_ptr: public tiff_tag
129*fd1fabb7SAndroid Build Coastguard Worker 	{
130*fd1fabb7SAndroid Build Coastguard Worker 
131*fd1fabb7SAndroid Build Coastguard Worker 	protected:
132*fd1fabb7SAndroid Build Coastguard Worker 
133*fd1fabb7SAndroid Build Coastguard Worker 		const void *fData;
134*fd1fabb7SAndroid Build Coastguard Worker 
135*fd1fabb7SAndroid Build Coastguard Worker 	public:
136*fd1fabb7SAndroid Build Coastguard Worker 
tag_data_ptr(uint16 code,uint16 type,uint32 count,const void * data)137*fd1fabb7SAndroid Build Coastguard Worker 		tag_data_ptr (uint16 code,
138*fd1fabb7SAndroid Build Coastguard Worker 				      uint16 type,
139*fd1fabb7SAndroid Build Coastguard Worker 				      uint32 count,
140*fd1fabb7SAndroid Build Coastguard Worker 				      const void *data)
141*fd1fabb7SAndroid Build Coastguard Worker 
142*fd1fabb7SAndroid Build Coastguard Worker 			:	tiff_tag (code, type, count)
143*fd1fabb7SAndroid Build Coastguard Worker 
144*fd1fabb7SAndroid Build Coastguard Worker 			,	fData (data)
145*fd1fabb7SAndroid Build Coastguard Worker 
146*fd1fabb7SAndroid Build Coastguard Worker 			{
147*fd1fabb7SAndroid Build Coastguard Worker 			}
148*fd1fabb7SAndroid Build Coastguard Worker 
SetData(const void * data)149*fd1fabb7SAndroid Build Coastguard Worker 		void SetData (const void *data)
150*fd1fabb7SAndroid Build Coastguard Worker 			{
151*fd1fabb7SAndroid Build Coastguard Worker 			fData = data;
152*fd1fabb7SAndroid Build Coastguard Worker 			}
153*fd1fabb7SAndroid Build Coastguard Worker 
154*fd1fabb7SAndroid Build Coastguard Worker 		virtual void Put (dng_stream &stream) const;
155*fd1fabb7SAndroid Build Coastguard Worker 
156*fd1fabb7SAndroid Build Coastguard Worker 	private:
157*fd1fabb7SAndroid Build Coastguard Worker 
158*fd1fabb7SAndroid Build Coastguard Worker 		// Hidden copy constructor and assignment operator.
159*fd1fabb7SAndroid Build Coastguard Worker 
160*fd1fabb7SAndroid Build Coastguard Worker 		tag_data_ptr (const tag_data_ptr &tag);
161*fd1fabb7SAndroid Build Coastguard Worker 
162*fd1fabb7SAndroid Build Coastguard Worker 		tag_data_ptr & operator= (const tag_data_ptr &tag);
163*fd1fabb7SAndroid Build Coastguard Worker 
164*fd1fabb7SAndroid Build Coastguard Worker 	};
165*fd1fabb7SAndroid Build Coastguard Worker 
166*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
167*fd1fabb7SAndroid Build Coastguard Worker 
168*fd1fabb7SAndroid Build Coastguard Worker class tag_string: public tiff_tag
169*fd1fabb7SAndroid Build Coastguard Worker 	{
170*fd1fabb7SAndroid Build Coastguard Worker 
171*fd1fabb7SAndroid Build Coastguard Worker 	protected:
172*fd1fabb7SAndroid Build Coastguard Worker 
173*fd1fabb7SAndroid Build Coastguard Worker 		dng_string fString;
174*fd1fabb7SAndroid Build Coastguard Worker 
175*fd1fabb7SAndroid Build Coastguard Worker 	public:
176*fd1fabb7SAndroid Build Coastguard Worker 
177*fd1fabb7SAndroid Build Coastguard Worker 		tag_string (uint16 code,
178*fd1fabb7SAndroid Build Coastguard Worker 				    const dng_string &s,
179*fd1fabb7SAndroid Build Coastguard Worker 				    bool forceASCII = true);
180*fd1fabb7SAndroid Build Coastguard Worker 
181*fd1fabb7SAndroid Build Coastguard Worker 		virtual void Put (dng_stream &stream) const;
182*fd1fabb7SAndroid Build Coastguard Worker 
183*fd1fabb7SAndroid Build Coastguard Worker 	};
184*fd1fabb7SAndroid Build Coastguard Worker 
185*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
186*fd1fabb7SAndroid Build Coastguard Worker 
187*fd1fabb7SAndroid Build Coastguard Worker class tag_encoded_text: public tiff_tag
188*fd1fabb7SAndroid Build Coastguard Worker 	{
189*fd1fabb7SAndroid Build Coastguard Worker 
190*fd1fabb7SAndroid Build Coastguard Worker 	private:
191*fd1fabb7SAndroid Build Coastguard Worker 
192*fd1fabb7SAndroid Build Coastguard Worker 		dng_string fText;
193*fd1fabb7SAndroid Build Coastguard Worker 
194*fd1fabb7SAndroid Build Coastguard Worker 		dng_memory_data fUTF16;
195*fd1fabb7SAndroid Build Coastguard Worker 
196*fd1fabb7SAndroid Build Coastguard Worker 	public:
197*fd1fabb7SAndroid Build Coastguard Worker 
198*fd1fabb7SAndroid Build Coastguard Worker 		tag_encoded_text (uint16 code,
199*fd1fabb7SAndroid Build Coastguard Worker 						  const dng_string &text);
200*fd1fabb7SAndroid Build Coastguard Worker 
201*fd1fabb7SAndroid Build Coastguard Worker 		virtual void Put (dng_stream &stream) const;
202*fd1fabb7SAndroid Build Coastguard Worker 
203*fd1fabb7SAndroid Build Coastguard Worker 	};
204*fd1fabb7SAndroid Build Coastguard Worker 
205*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
206*fd1fabb7SAndroid Build Coastguard Worker 
207*fd1fabb7SAndroid Build Coastguard Worker class tag_uint8: public tag_data_ptr
208*fd1fabb7SAndroid Build Coastguard Worker 	{
209*fd1fabb7SAndroid Build Coastguard Worker 
210*fd1fabb7SAndroid Build Coastguard Worker 	private:
211*fd1fabb7SAndroid Build Coastguard Worker 
212*fd1fabb7SAndroid Build Coastguard Worker 		uint8 fValue;
213*fd1fabb7SAndroid Build Coastguard Worker 
214*fd1fabb7SAndroid Build Coastguard Worker 	public:
215*fd1fabb7SAndroid Build Coastguard Worker 
216*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint8 (uint16 code,
217*fd1fabb7SAndroid Build Coastguard Worker 				   uint8 value = 0)
218*fd1fabb7SAndroid Build Coastguard Worker 
219*fd1fabb7SAndroid Build Coastguard Worker 			:	tag_data_ptr (code, ttByte, 1, &fValue)
220*fd1fabb7SAndroid Build Coastguard Worker 
221*fd1fabb7SAndroid Build Coastguard Worker 			,	fValue (value)
222*fd1fabb7SAndroid Build Coastguard Worker 
223*fd1fabb7SAndroid Build Coastguard Worker 			{
224*fd1fabb7SAndroid Build Coastguard Worker 			}
225*fd1fabb7SAndroid Build Coastguard Worker 
Set(uint8 value)226*fd1fabb7SAndroid Build Coastguard Worker 		void Set (uint8 value)
227*fd1fabb7SAndroid Build Coastguard Worker 			{
228*fd1fabb7SAndroid Build Coastguard Worker 			fValue = value;
229*fd1fabb7SAndroid Build Coastguard Worker 			}
230*fd1fabb7SAndroid Build Coastguard Worker 
231*fd1fabb7SAndroid Build Coastguard Worker 	};
232*fd1fabb7SAndroid Build Coastguard Worker 
233*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
234*fd1fabb7SAndroid Build Coastguard Worker 
235*fd1fabb7SAndroid Build Coastguard Worker class tag_uint8_ptr: public tag_data_ptr
236*fd1fabb7SAndroid Build Coastguard Worker 	{
237*fd1fabb7SAndroid Build Coastguard Worker 
238*fd1fabb7SAndroid Build Coastguard Worker 	public:
239*fd1fabb7SAndroid Build Coastguard Worker 
240*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint8_ptr (uint16 code,
241*fd1fabb7SAndroid Build Coastguard Worker 			    	   const uint8 *data,
242*fd1fabb7SAndroid Build Coastguard Worker 			    	   uint32 count = 1)
243*fd1fabb7SAndroid Build Coastguard Worker 
tag_data_ptr(code,ttByte,count,data)244*fd1fabb7SAndroid Build Coastguard Worker 			:	tag_data_ptr (code, ttByte, count, data)
245*fd1fabb7SAndroid Build Coastguard Worker 
246*fd1fabb7SAndroid Build Coastguard Worker 			{
247*fd1fabb7SAndroid Build Coastguard Worker 			}
248*fd1fabb7SAndroid Build Coastguard Worker 
249*fd1fabb7SAndroid Build Coastguard Worker 	};
250*fd1fabb7SAndroid Build Coastguard Worker 
251*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
252*fd1fabb7SAndroid Build Coastguard Worker 
253*fd1fabb7SAndroid Build Coastguard Worker class tag_uint16: public tag_data_ptr
254*fd1fabb7SAndroid Build Coastguard Worker 	{
255*fd1fabb7SAndroid Build Coastguard Worker 
256*fd1fabb7SAndroid Build Coastguard Worker 	private:
257*fd1fabb7SAndroid Build Coastguard Worker 
258*fd1fabb7SAndroid Build Coastguard Worker 		uint16 fValue;
259*fd1fabb7SAndroid Build Coastguard Worker 
260*fd1fabb7SAndroid Build Coastguard Worker 	public:
261*fd1fabb7SAndroid Build Coastguard Worker 
262*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 (uint16 code,
263*fd1fabb7SAndroid Build Coastguard Worker 					uint16 value = 0)
264*fd1fabb7SAndroid Build Coastguard Worker 
265*fd1fabb7SAndroid Build Coastguard Worker 			:	tag_data_ptr (code, ttShort, 1, &fValue)
266*fd1fabb7SAndroid Build Coastguard Worker 
267*fd1fabb7SAndroid Build Coastguard Worker 			,	fValue (value)
268*fd1fabb7SAndroid Build Coastguard Worker 
269*fd1fabb7SAndroid Build Coastguard Worker 			{
270*fd1fabb7SAndroid Build Coastguard Worker 			}
271*fd1fabb7SAndroid Build Coastguard Worker 
Set(uint16 value)272*fd1fabb7SAndroid Build Coastguard Worker 		void Set (uint16 value)
273*fd1fabb7SAndroid Build Coastguard Worker 			{
274*fd1fabb7SAndroid Build Coastguard Worker 			fValue = value;
275*fd1fabb7SAndroid Build Coastguard Worker 			}
276*fd1fabb7SAndroid Build Coastguard Worker 
277*fd1fabb7SAndroid Build Coastguard Worker 	};
278*fd1fabb7SAndroid Build Coastguard Worker 
279*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
280*fd1fabb7SAndroid Build Coastguard Worker 
281*fd1fabb7SAndroid Build Coastguard Worker class tag_int16_ptr: public tag_data_ptr
282*fd1fabb7SAndroid Build Coastguard Worker 	{
283*fd1fabb7SAndroid Build Coastguard Worker 
284*fd1fabb7SAndroid Build Coastguard Worker 	public:
285*fd1fabb7SAndroid Build Coastguard Worker 
286*fd1fabb7SAndroid Build Coastguard Worker 		tag_int16_ptr (uint16 code,
287*fd1fabb7SAndroid Build Coastguard Worker 				       const int16 *data,
288*fd1fabb7SAndroid Build Coastguard Worker 				       uint32 count = 1)
289*fd1fabb7SAndroid Build Coastguard Worker 
tag_data_ptr(code,ttSShort,count,data)290*fd1fabb7SAndroid Build Coastguard Worker 			:	tag_data_ptr (code, ttSShort, count, data)
291*fd1fabb7SAndroid Build Coastguard Worker 
292*fd1fabb7SAndroid Build Coastguard Worker 			{
293*fd1fabb7SAndroid Build Coastguard Worker 			}
294*fd1fabb7SAndroid Build Coastguard Worker 
295*fd1fabb7SAndroid Build Coastguard Worker 	};
296*fd1fabb7SAndroid Build Coastguard Worker 
297*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
298*fd1fabb7SAndroid Build Coastguard Worker 
299*fd1fabb7SAndroid Build Coastguard Worker class tag_uint16_ptr: public tag_data_ptr
300*fd1fabb7SAndroid Build Coastguard Worker 	{
301*fd1fabb7SAndroid Build Coastguard Worker 
302*fd1fabb7SAndroid Build Coastguard Worker 	public:
303*fd1fabb7SAndroid Build Coastguard Worker 
304*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16_ptr (uint16 code,
305*fd1fabb7SAndroid Build Coastguard Worker 				        const uint16 *data,
306*fd1fabb7SAndroid Build Coastguard Worker 				        uint32 count = 1)
307*fd1fabb7SAndroid Build Coastguard Worker 
tag_data_ptr(code,ttShort,count,data)308*fd1fabb7SAndroid Build Coastguard Worker 			:	tag_data_ptr (code, ttShort, count, data)
309*fd1fabb7SAndroid Build Coastguard Worker 
310*fd1fabb7SAndroid Build Coastguard Worker 			{
311*fd1fabb7SAndroid Build Coastguard Worker 			}
312*fd1fabb7SAndroid Build Coastguard Worker 
313*fd1fabb7SAndroid Build Coastguard Worker 	};
314*fd1fabb7SAndroid Build Coastguard Worker 
315*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
316*fd1fabb7SAndroid Build Coastguard Worker 
317*fd1fabb7SAndroid Build Coastguard Worker class tag_uint32: public tag_data_ptr
318*fd1fabb7SAndroid Build Coastguard Worker 	{
319*fd1fabb7SAndroid Build Coastguard Worker 
320*fd1fabb7SAndroid Build Coastguard Worker 	private:
321*fd1fabb7SAndroid Build Coastguard Worker 
322*fd1fabb7SAndroid Build Coastguard Worker 		uint32 fValue;
323*fd1fabb7SAndroid Build Coastguard Worker 
324*fd1fabb7SAndroid Build Coastguard Worker 	public:
325*fd1fabb7SAndroid Build Coastguard Worker 
326*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint32 (uint16 code,
327*fd1fabb7SAndroid Build Coastguard Worker 				    uint32 value = 0)
328*fd1fabb7SAndroid Build Coastguard Worker 
329*fd1fabb7SAndroid Build Coastguard Worker 			:	tag_data_ptr (code, ttLong, 1, &fValue)
330*fd1fabb7SAndroid Build Coastguard Worker 
331*fd1fabb7SAndroid Build Coastguard Worker 			,	fValue (value)
332*fd1fabb7SAndroid Build Coastguard Worker 
333*fd1fabb7SAndroid Build Coastguard Worker 			{
334*fd1fabb7SAndroid Build Coastguard Worker 			}
335*fd1fabb7SAndroid Build Coastguard Worker 
Set(uint32 value)336*fd1fabb7SAndroid Build Coastguard Worker 		void Set (uint32 value)
337*fd1fabb7SAndroid Build Coastguard Worker 			{
338*fd1fabb7SAndroid Build Coastguard Worker 			fValue = value;
339*fd1fabb7SAndroid Build Coastguard Worker 			}
340*fd1fabb7SAndroid Build Coastguard Worker 
341*fd1fabb7SAndroid Build Coastguard Worker 	};
342*fd1fabb7SAndroid Build Coastguard Worker 
343*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
344*fd1fabb7SAndroid Build Coastguard Worker 
345*fd1fabb7SAndroid Build Coastguard Worker class tag_uint32_ptr: public tag_data_ptr
346*fd1fabb7SAndroid Build Coastguard Worker 	{
347*fd1fabb7SAndroid Build Coastguard Worker 
348*fd1fabb7SAndroid Build Coastguard Worker 	public:
349*fd1fabb7SAndroid Build Coastguard Worker 
350*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint32_ptr (uint16 code,
351*fd1fabb7SAndroid Build Coastguard Worker 				 		const uint32 *data,
352*fd1fabb7SAndroid Build Coastguard Worker 				 		uint32 count = 1)
353*fd1fabb7SAndroid Build Coastguard Worker 
tag_data_ptr(code,ttLong,count,data)354*fd1fabb7SAndroid Build Coastguard Worker 			:	tag_data_ptr (code, ttLong, count, data)
355*fd1fabb7SAndroid Build Coastguard Worker 
356*fd1fabb7SAndroid Build Coastguard Worker 			{
357*fd1fabb7SAndroid Build Coastguard Worker 			}
358*fd1fabb7SAndroid Build Coastguard Worker 
359*fd1fabb7SAndroid Build Coastguard Worker 	};
360*fd1fabb7SAndroid Build Coastguard Worker 
361*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
362*fd1fabb7SAndroid Build Coastguard Worker 
363*fd1fabb7SAndroid Build Coastguard Worker class tag_urational: public tag_data_ptr
364*fd1fabb7SAndroid Build Coastguard Worker 	{
365*fd1fabb7SAndroid Build Coastguard Worker 
366*fd1fabb7SAndroid Build Coastguard Worker 	private:
367*fd1fabb7SAndroid Build Coastguard Worker 
368*fd1fabb7SAndroid Build Coastguard Worker 		const dng_urational fValue;
369*fd1fabb7SAndroid Build Coastguard Worker 
370*fd1fabb7SAndroid Build Coastguard Worker 	public:
371*fd1fabb7SAndroid Build Coastguard Worker 
tag_urational(uint16 code,const dng_urational & value)372*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational (uint16 code,
373*fd1fabb7SAndroid Build Coastguard Worker 				       const dng_urational &value)
374*fd1fabb7SAndroid Build Coastguard Worker 
375*fd1fabb7SAndroid Build Coastguard Worker 			:	tag_data_ptr (code, ttRational, 1, &fValue)
376*fd1fabb7SAndroid Build Coastguard Worker 
377*fd1fabb7SAndroid Build Coastguard Worker 			,	fValue (value)
378*fd1fabb7SAndroid Build Coastguard Worker 
379*fd1fabb7SAndroid Build Coastguard Worker 			{
380*fd1fabb7SAndroid Build Coastguard Worker 			}
381*fd1fabb7SAndroid Build Coastguard Worker 
382*fd1fabb7SAndroid Build Coastguard Worker 	};
383*fd1fabb7SAndroid Build Coastguard Worker 
384*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
385*fd1fabb7SAndroid Build Coastguard Worker 
386*fd1fabb7SAndroid Build Coastguard Worker class tag_urational_ptr: public tag_data_ptr
387*fd1fabb7SAndroid Build Coastguard Worker 	{
388*fd1fabb7SAndroid Build Coastguard Worker 
389*fd1fabb7SAndroid Build Coastguard Worker 	public:
390*fd1fabb7SAndroid Build Coastguard Worker 
391*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational_ptr (uint16 code,
392*fd1fabb7SAndroid Build Coastguard Worker 				           const dng_urational *data = NULL,
393*fd1fabb7SAndroid Build Coastguard Worker 				           uint32 count = 1)
394*fd1fabb7SAndroid Build Coastguard Worker 
tag_data_ptr(code,ttRational,count,data)395*fd1fabb7SAndroid Build Coastguard Worker 			:	tag_data_ptr (code, ttRational, count, data)
396*fd1fabb7SAndroid Build Coastguard Worker 
397*fd1fabb7SAndroid Build Coastguard Worker 			{
398*fd1fabb7SAndroid Build Coastguard Worker 			}
399*fd1fabb7SAndroid Build Coastguard Worker 
400*fd1fabb7SAndroid Build Coastguard Worker 	};
401*fd1fabb7SAndroid Build Coastguard Worker 
402*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
403*fd1fabb7SAndroid Build Coastguard Worker 
404*fd1fabb7SAndroid Build Coastguard Worker class tag_srational: public tag_data_ptr
405*fd1fabb7SAndroid Build Coastguard Worker 	{
406*fd1fabb7SAndroid Build Coastguard Worker 
407*fd1fabb7SAndroid Build Coastguard Worker 	private:
408*fd1fabb7SAndroid Build Coastguard Worker 
409*fd1fabb7SAndroid Build Coastguard Worker 		const dng_srational fValue;
410*fd1fabb7SAndroid Build Coastguard Worker 
411*fd1fabb7SAndroid Build Coastguard Worker 	public:
412*fd1fabb7SAndroid Build Coastguard Worker 
tag_srational(uint16 code,const dng_srational & value)413*fd1fabb7SAndroid Build Coastguard Worker 		tag_srational (uint16 code,
414*fd1fabb7SAndroid Build Coastguard Worker 				       const dng_srational &value)
415*fd1fabb7SAndroid Build Coastguard Worker 
416*fd1fabb7SAndroid Build Coastguard Worker 			:	tag_data_ptr (code, ttSRational, 1, &fValue)
417*fd1fabb7SAndroid Build Coastguard Worker 
418*fd1fabb7SAndroid Build Coastguard Worker 			,	fValue (value)
419*fd1fabb7SAndroid Build Coastguard Worker 
420*fd1fabb7SAndroid Build Coastguard Worker 			{
421*fd1fabb7SAndroid Build Coastguard Worker 			}
422*fd1fabb7SAndroid Build Coastguard Worker 
423*fd1fabb7SAndroid Build Coastguard Worker 	};
424*fd1fabb7SAndroid Build Coastguard Worker 
425*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
426*fd1fabb7SAndroid Build Coastguard Worker 
427*fd1fabb7SAndroid Build Coastguard Worker class tag_srational_ptr: public tag_data_ptr
428*fd1fabb7SAndroid Build Coastguard Worker 	{
429*fd1fabb7SAndroid Build Coastguard Worker 
430*fd1fabb7SAndroid Build Coastguard Worker 	public:
431*fd1fabb7SAndroid Build Coastguard Worker 
432*fd1fabb7SAndroid Build Coastguard Worker 		tag_srational_ptr (uint16 code,
433*fd1fabb7SAndroid Build Coastguard Worker 				           const dng_srational *data = NULL,
434*fd1fabb7SAndroid Build Coastguard Worker 				           uint32 count = 1)
435*fd1fabb7SAndroid Build Coastguard Worker 
tag_data_ptr(code,ttSRational,count,data)436*fd1fabb7SAndroid Build Coastguard Worker 			:	tag_data_ptr (code, ttSRational, count, data)
437*fd1fabb7SAndroid Build Coastguard Worker 
438*fd1fabb7SAndroid Build Coastguard Worker 			{
439*fd1fabb7SAndroid Build Coastguard Worker 			}
440*fd1fabb7SAndroid Build Coastguard Worker 
441*fd1fabb7SAndroid Build Coastguard Worker 	};
442*fd1fabb7SAndroid Build Coastguard Worker 
443*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
444*fd1fabb7SAndroid Build Coastguard Worker 
445*fd1fabb7SAndroid Build Coastguard Worker class tag_real64: public tag_data_ptr
446*fd1fabb7SAndroid Build Coastguard Worker 	{
447*fd1fabb7SAndroid Build Coastguard Worker 
448*fd1fabb7SAndroid Build Coastguard Worker 	private:
449*fd1fabb7SAndroid Build Coastguard Worker 
450*fd1fabb7SAndroid Build Coastguard Worker 		real64 fValue;
451*fd1fabb7SAndroid Build Coastguard Worker 
452*fd1fabb7SAndroid Build Coastguard Worker 	public:
453*fd1fabb7SAndroid Build Coastguard Worker 
454*fd1fabb7SAndroid Build Coastguard Worker 		tag_real64 (uint16 code,
455*fd1fabb7SAndroid Build Coastguard Worker 				    real64 value = 0.0)
456*fd1fabb7SAndroid Build Coastguard Worker 
457*fd1fabb7SAndroid Build Coastguard Worker 			:	tag_data_ptr (code, ttDouble, 1, &fValue)
458*fd1fabb7SAndroid Build Coastguard Worker 
459*fd1fabb7SAndroid Build Coastguard Worker 			,	fValue (value)
460*fd1fabb7SAndroid Build Coastguard Worker 
461*fd1fabb7SAndroid Build Coastguard Worker 			{
462*fd1fabb7SAndroid Build Coastguard Worker 			}
463*fd1fabb7SAndroid Build Coastguard Worker 
Set(real64 value)464*fd1fabb7SAndroid Build Coastguard Worker 		void Set (real64 value)
465*fd1fabb7SAndroid Build Coastguard Worker 			{
466*fd1fabb7SAndroid Build Coastguard Worker 			fValue = value;
467*fd1fabb7SAndroid Build Coastguard Worker 			}
468*fd1fabb7SAndroid Build Coastguard Worker 
469*fd1fabb7SAndroid Build Coastguard Worker 	};
470*fd1fabb7SAndroid Build Coastguard Worker 
471*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
472*fd1fabb7SAndroid Build Coastguard Worker 
473*fd1fabb7SAndroid Build Coastguard Worker class tag_matrix: public tag_srational_ptr
474*fd1fabb7SAndroid Build Coastguard Worker 	{
475*fd1fabb7SAndroid Build Coastguard Worker 
476*fd1fabb7SAndroid Build Coastguard Worker 	private:
477*fd1fabb7SAndroid Build Coastguard Worker 
478*fd1fabb7SAndroid Build Coastguard Worker 		dng_srational fEntry [kMaxColorPlanes *
479*fd1fabb7SAndroid Build Coastguard Worker 							  kMaxColorPlanes];
480*fd1fabb7SAndroid Build Coastguard Worker 
481*fd1fabb7SAndroid Build Coastguard Worker 	public:
482*fd1fabb7SAndroid Build Coastguard Worker 
483*fd1fabb7SAndroid Build Coastguard Worker 		tag_matrix (uint16 code,
484*fd1fabb7SAndroid Build Coastguard Worker 				    const dng_matrix &m);
485*fd1fabb7SAndroid Build Coastguard Worker 
486*fd1fabb7SAndroid Build Coastguard Worker 	};
487*fd1fabb7SAndroid Build Coastguard Worker 
488*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
489*fd1fabb7SAndroid Build Coastguard Worker 
490*fd1fabb7SAndroid Build Coastguard Worker class tag_icc_profile: public tag_data_ptr
491*fd1fabb7SAndroid Build Coastguard Worker 	{
492*fd1fabb7SAndroid Build Coastguard Worker 
493*fd1fabb7SAndroid Build Coastguard Worker 	public:
494*fd1fabb7SAndroid Build Coastguard Worker 
495*fd1fabb7SAndroid Build Coastguard Worker 		tag_icc_profile (const void *profileData, uint32 profileSize);
496*fd1fabb7SAndroid Build Coastguard Worker 
497*fd1fabb7SAndroid Build Coastguard Worker 	};
498*fd1fabb7SAndroid Build Coastguard Worker 
499*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
500*fd1fabb7SAndroid Build Coastguard Worker 
501*fd1fabb7SAndroid Build Coastguard Worker class tag_cfa_pattern: public tiff_tag
502*fd1fabb7SAndroid Build Coastguard Worker 	{
503*fd1fabb7SAndroid Build Coastguard Worker 
504*fd1fabb7SAndroid Build Coastguard Worker 	private:
505*fd1fabb7SAndroid Build Coastguard Worker 
506*fd1fabb7SAndroid Build Coastguard Worker 		uint32 fRows;
507*fd1fabb7SAndroid Build Coastguard Worker 		uint32 fCols;
508*fd1fabb7SAndroid Build Coastguard Worker 
509*fd1fabb7SAndroid Build Coastguard Worker 		const uint8 *fPattern;
510*fd1fabb7SAndroid Build Coastguard Worker 
511*fd1fabb7SAndroid Build Coastguard Worker 	public:
512*fd1fabb7SAndroid Build Coastguard Worker 
tag_cfa_pattern(uint16 code,uint32 rows,uint32 cols,const uint8 * pattern)513*fd1fabb7SAndroid Build Coastguard Worker 		tag_cfa_pattern (uint16 code,
514*fd1fabb7SAndroid Build Coastguard Worker 					   	 uint32 rows,
515*fd1fabb7SAndroid Build Coastguard Worker 					     uint32 cols,
516*fd1fabb7SAndroid Build Coastguard Worker 					   	 const uint8 *pattern)
517*fd1fabb7SAndroid Build Coastguard Worker 
518*fd1fabb7SAndroid Build Coastguard Worker 			:	tiff_tag (code, ttUndefined, 4 + rows * cols)
519*fd1fabb7SAndroid Build Coastguard Worker 
520*fd1fabb7SAndroid Build Coastguard Worker 			,	fRows    (rows   )
521*fd1fabb7SAndroid Build Coastguard Worker 			,	fCols    (cols   )
522*fd1fabb7SAndroid Build Coastguard Worker 			,	fPattern (pattern)
523*fd1fabb7SAndroid Build Coastguard Worker 
524*fd1fabb7SAndroid Build Coastguard Worker 			{
525*fd1fabb7SAndroid Build Coastguard Worker 			}
526*fd1fabb7SAndroid Build Coastguard Worker 
527*fd1fabb7SAndroid Build Coastguard Worker 		virtual void Put (dng_stream &stream) const;
528*fd1fabb7SAndroid Build Coastguard Worker 
529*fd1fabb7SAndroid Build Coastguard Worker 	private:
530*fd1fabb7SAndroid Build Coastguard Worker 
531*fd1fabb7SAndroid Build Coastguard Worker 		// Hidden copy constructor and assignment operator.
532*fd1fabb7SAndroid Build Coastguard Worker 
533*fd1fabb7SAndroid Build Coastguard Worker 		tag_cfa_pattern (const tag_cfa_pattern &tag);
534*fd1fabb7SAndroid Build Coastguard Worker 
535*fd1fabb7SAndroid Build Coastguard Worker 		tag_cfa_pattern & operator= (const tag_cfa_pattern &tag);
536*fd1fabb7SAndroid Build Coastguard Worker 
537*fd1fabb7SAndroid Build Coastguard Worker 	};
538*fd1fabb7SAndroid Build Coastguard Worker 
539*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
540*fd1fabb7SAndroid Build Coastguard Worker 
541*fd1fabb7SAndroid Build Coastguard Worker class tag_exif_date_time: public tag_data_ptr
542*fd1fabb7SAndroid Build Coastguard Worker 	{
543*fd1fabb7SAndroid Build Coastguard Worker 
544*fd1fabb7SAndroid Build Coastguard Worker 	private:
545*fd1fabb7SAndroid Build Coastguard Worker 
546*fd1fabb7SAndroid Build Coastguard Worker 		char fData [20];
547*fd1fabb7SAndroid Build Coastguard Worker 
548*fd1fabb7SAndroid Build Coastguard Worker 	public:
549*fd1fabb7SAndroid Build Coastguard Worker 
550*fd1fabb7SAndroid Build Coastguard Worker 		tag_exif_date_time (uint16 code,
551*fd1fabb7SAndroid Build Coastguard Worker 				            const dng_date_time &dt);
552*fd1fabb7SAndroid Build Coastguard Worker 
553*fd1fabb7SAndroid Build Coastguard Worker 	};
554*fd1fabb7SAndroid Build Coastguard Worker 
555*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
556*fd1fabb7SAndroid Build Coastguard Worker 
557*fd1fabb7SAndroid Build Coastguard Worker class tag_iptc: public tiff_tag
558*fd1fabb7SAndroid Build Coastguard Worker 	{
559*fd1fabb7SAndroid Build Coastguard Worker 
560*fd1fabb7SAndroid Build Coastguard Worker 	private:
561*fd1fabb7SAndroid Build Coastguard Worker 
562*fd1fabb7SAndroid Build Coastguard Worker 		const void *fData;
563*fd1fabb7SAndroid Build Coastguard Worker 
564*fd1fabb7SAndroid Build Coastguard Worker 		uint32 fLength;
565*fd1fabb7SAndroid Build Coastguard Worker 
566*fd1fabb7SAndroid Build Coastguard Worker 	public:
567*fd1fabb7SAndroid Build Coastguard Worker 
568*fd1fabb7SAndroid Build Coastguard Worker 		tag_iptc (const void *data,
569*fd1fabb7SAndroid Build Coastguard Worker 				  uint32 length);
570*fd1fabb7SAndroid Build Coastguard Worker 
571*fd1fabb7SAndroid Build Coastguard Worker 		virtual void Put (dng_stream &stream) const;
572*fd1fabb7SAndroid Build Coastguard Worker 
573*fd1fabb7SAndroid Build Coastguard Worker 	private:
574*fd1fabb7SAndroid Build Coastguard Worker 
575*fd1fabb7SAndroid Build Coastguard Worker 		// Hidden copy constructor and assignment operator.
576*fd1fabb7SAndroid Build Coastguard Worker 
577*fd1fabb7SAndroid Build Coastguard Worker 		tag_iptc (const tag_iptc &tag);
578*fd1fabb7SAndroid Build Coastguard Worker 
579*fd1fabb7SAndroid Build Coastguard Worker 		tag_iptc & operator= (const tag_iptc &tag);
580*fd1fabb7SAndroid Build Coastguard Worker 
581*fd1fabb7SAndroid Build Coastguard Worker 	};
582*fd1fabb7SAndroid Build Coastguard Worker 
583*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
584*fd1fabb7SAndroid Build Coastguard Worker 
585*fd1fabb7SAndroid Build Coastguard Worker class tag_xmp: public tag_uint8_ptr
586*fd1fabb7SAndroid Build Coastguard Worker 	{
587*fd1fabb7SAndroid Build Coastguard Worker 
588*fd1fabb7SAndroid Build Coastguard Worker 	private:
589*fd1fabb7SAndroid Build Coastguard Worker 
590*fd1fabb7SAndroid Build Coastguard Worker 		AutoPtr<dng_memory_block> fBuffer;
591*fd1fabb7SAndroid Build Coastguard Worker 
592*fd1fabb7SAndroid Build Coastguard Worker 	public:
593*fd1fabb7SAndroid Build Coastguard Worker 
594*fd1fabb7SAndroid Build Coastguard Worker 		tag_xmp (const dng_xmp *xmp);
595*fd1fabb7SAndroid Build Coastguard Worker 
596*fd1fabb7SAndroid Build Coastguard Worker 	private:
597*fd1fabb7SAndroid Build Coastguard Worker 
598*fd1fabb7SAndroid Build Coastguard Worker 		// Hidden copy constructor and assignment operator.
599*fd1fabb7SAndroid Build Coastguard Worker 
600*fd1fabb7SAndroid Build Coastguard Worker 		tag_xmp (const tag_xmp &tag);
601*fd1fabb7SAndroid Build Coastguard Worker 
602*fd1fabb7SAndroid Build Coastguard Worker 		tag_xmp & operator= (const tag_xmp &tag);
603*fd1fabb7SAndroid Build Coastguard Worker 
604*fd1fabb7SAndroid Build Coastguard Worker 	};
605*fd1fabb7SAndroid Build Coastguard Worker 
606*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
607*fd1fabb7SAndroid Build Coastguard Worker 
608*fd1fabb7SAndroid Build Coastguard Worker class dng_tiff_directory
609*fd1fabb7SAndroid Build Coastguard Worker 	{
610*fd1fabb7SAndroid Build Coastguard Worker 
611*fd1fabb7SAndroid Build Coastguard Worker 	private:
612*fd1fabb7SAndroid Build Coastguard Worker 
613*fd1fabb7SAndroid Build Coastguard Worker 		enum
614*fd1fabb7SAndroid Build Coastguard Worker 			{
615*fd1fabb7SAndroid Build Coastguard Worker 			kMaxEntries = 100
616*fd1fabb7SAndroid Build Coastguard Worker 			};
617*fd1fabb7SAndroid Build Coastguard Worker 
618*fd1fabb7SAndroid Build Coastguard Worker 		uint32 fEntries;
619*fd1fabb7SAndroid Build Coastguard Worker 
620*fd1fabb7SAndroid Build Coastguard Worker 		const tiff_tag *fTag [kMaxEntries];
621*fd1fabb7SAndroid Build Coastguard Worker 
622*fd1fabb7SAndroid Build Coastguard Worker 		uint32 fChained;
623*fd1fabb7SAndroid Build Coastguard Worker 
624*fd1fabb7SAndroid Build Coastguard Worker 	public:
625*fd1fabb7SAndroid Build Coastguard Worker 
dng_tiff_directory()626*fd1fabb7SAndroid Build Coastguard Worker 		dng_tiff_directory ()
627*fd1fabb7SAndroid Build Coastguard Worker 
628*fd1fabb7SAndroid Build Coastguard Worker 			:	fEntries (0)
629*fd1fabb7SAndroid Build Coastguard Worker 			,	fChained (0)
630*fd1fabb7SAndroid Build Coastguard Worker 
631*fd1fabb7SAndroid Build Coastguard Worker 			{
632*fd1fabb7SAndroid Build Coastguard Worker 			}
633*fd1fabb7SAndroid Build Coastguard Worker 
~dng_tiff_directory()634*fd1fabb7SAndroid Build Coastguard Worker 		virtual ~dng_tiff_directory ()
635*fd1fabb7SAndroid Build Coastguard Worker 			{
636*fd1fabb7SAndroid Build Coastguard Worker 			}
637*fd1fabb7SAndroid Build Coastguard Worker 
638*fd1fabb7SAndroid Build Coastguard Worker 		void Add (const tiff_tag *tag);
639*fd1fabb7SAndroid Build Coastguard Worker 
SetChained(uint32 offset)640*fd1fabb7SAndroid Build Coastguard Worker 		void SetChained (uint32 offset)
641*fd1fabb7SAndroid Build Coastguard Worker 			{
642*fd1fabb7SAndroid Build Coastguard Worker 			fChained = offset;
643*fd1fabb7SAndroid Build Coastguard Worker 			}
644*fd1fabb7SAndroid Build Coastguard Worker 
645*fd1fabb7SAndroid Build Coastguard Worker 		uint32 Size () const;
646*fd1fabb7SAndroid Build Coastguard Worker 
647*fd1fabb7SAndroid Build Coastguard Worker 		enum OffsetsBase
648*fd1fabb7SAndroid Build Coastguard Worker 			{
649*fd1fabb7SAndroid Build Coastguard Worker 			offsetsRelativeToStream			= 0,
650*fd1fabb7SAndroid Build Coastguard Worker 			offsetsRelativeToExplicitBase	= 1,
651*fd1fabb7SAndroid Build Coastguard Worker 			offsetsRelativeToIFD			= 2
652*fd1fabb7SAndroid Build Coastguard Worker 			};
653*fd1fabb7SAndroid Build Coastguard Worker 
654*fd1fabb7SAndroid Build Coastguard Worker 		void Put (dng_stream &stream,
655*fd1fabb7SAndroid Build Coastguard Worker 				  OffsetsBase offsetsBase = offsetsRelativeToStream,
656*fd1fabb7SAndroid Build Coastguard Worker 				  uint32 explicitBase = 0) const;
657*fd1fabb7SAndroid Build Coastguard Worker 
658*fd1fabb7SAndroid Build Coastguard Worker 	private:
659*fd1fabb7SAndroid Build Coastguard Worker 
660*fd1fabb7SAndroid Build Coastguard Worker 		// Hidden copy constructor and assignment operator.
661*fd1fabb7SAndroid Build Coastguard Worker 
662*fd1fabb7SAndroid Build Coastguard Worker 		dng_tiff_directory (const dng_tiff_directory &dir);
663*fd1fabb7SAndroid Build Coastguard Worker 
664*fd1fabb7SAndroid Build Coastguard Worker 		dng_tiff_directory & operator= (const dng_tiff_directory &dir);
665*fd1fabb7SAndroid Build Coastguard Worker 
666*fd1fabb7SAndroid Build Coastguard Worker 	};
667*fd1fabb7SAndroid Build Coastguard Worker 
668*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
669*fd1fabb7SAndroid Build Coastguard Worker 
670*fd1fabb7SAndroid Build Coastguard Worker class dng_basic_tag_set
671*fd1fabb7SAndroid Build Coastguard Worker 	{
672*fd1fabb7SAndroid Build Coastguard Worker 
673*fd1fabb7SAndroid Build Coastguard Worker 	private:
674*fd1fabb7SAndroid Build Coastguard Worker 
675*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint32 fNewSubFileType;
676*fd1fabb7SAndroid Build Coastguard Worker 
677*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint32 fImageWidth;
678*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint32 fImageLength;
679*fd1fabb7SAndroid Build Coastguard Worker 
680*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fPhotoInterpretation;
681*fd1fabb7SAndroid Build Coastguard Worker 
682*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fFillOrder;
683*fd1fabb7SAndroid Build Coastguard Worker 
684*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fSamplesPerPixel;
685*fd1fabb7SAndroid Build Coastguard Worker 
686*fd1fabb7SAndroid Build Coastguard Worker 		uint16 fBitsPerSampleData [kMaxSamplesPerPixel];
687*fd1fabb7SAndroid Build Coastguard Worker 
688*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16_ptr fBitsPerSample;
689*fd1fabb7SAndroid Build Coastguard Worker 
690*fd1fabb7SAndroid Build Coastguard Worker 		bool fStrips;
691*fd1fabb7SAndroid Build Coastguard Worker 
692*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint32 fTileWidth;
693*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint32 fTileLength;
694*fd1fabb7SAndroid Build Coastguard Worker 
695*fd1fabb7SAndroid Build Coastguard Worker 		dng_memory_data fTileInfoBuffer;
696*fd1fabb7SAndroid Build Coastguard Worker 
697*fd1fabb7SAndroid Build Coastguard Worker 		uint32 *fTileOffsetData;
698*fd1fabb7SAndroid Build Coastguard Worker 
699*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint32_ptr fTileOffsets;
700*fd1fabb7SAndroid Build Coastguard Worker 
701*fd1fabb7SAndroid Build Coastguard Worker 		uint32 *fTileByteCountData;
702*fd1fabb7SAndroid Build Coastguard Worker 
703*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint32_ptr fTileByteCounts;
704*fd1fabb7SAndroid Build Coastguard Worker 
705*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fPlanarConfiguration;
706*fd1fabb7SAndroid Build Coastguard Worker 
707*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fCompression;
708*fd1fabb7SAndroid Build Coastguard Worker 
709*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fPredictor;
710*fd1fabb7SAndroid Build Coastguard Worker 
711*fd1fabb7SAndroid Build Coastguard Worker 		uint16 fExtraSamplesData [kMaxSamplesPerPixel];
712*fd1fabb7SAndroid Build Coastguard Worker 
713*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16_ptr fExtraSamples;
714*fd1fabb7SAndroid Build Coastguard Worker 
715*fd1fabb7SAndroid Build Coastguard Worker 		uint16 fSampleFormatData [kMaxSamplesPerPixel];
716*fd1fabb7SAndroid Build Coastguard Worker 
717*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16_ptr fSampleFormat;
718*fd1fabb7SAndroid Build Coastguard Worker 
719*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fRowInterleaveFactor;
720*fd1fabb7SAndroid Build Coastguard Worker 
721*fd1fabb7SAndroid Build Coastguard Worker 		uint16 fSubTileBlockSizeData [2];
722*fd1fabb7SAndroid Build Coastguard Worker 
723*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16_ptr fSubTileBlockSize;
724*fd1fabb7SAndroid Build Coastguard Worker 
725*fd1fabb7SAndroid Build Coastguard Worker 	public:
726*fd1fabb7SAndroid Build Coastguard Worker 
727*fd1fabb7SAndroid Build Coastguard Worker 		dng_basic_tag_set (dng_tiff_directory &directory,
728*fd1fabb7SAndroid Build Coastguard Worker 					       const dng_ifd &info);
729*fd1fabb7SAndroid Build Coastguard Worker 
~dng_basic_tag_set()730*fd1fabb7SAndroid Build Coastguard Worker 		virtual ~dng_basic_tag_set ()
731*fd1fabb7SAndroid Build Coastguard Worker 			{
732*fd1fabb7SAndroid Build Coastguard Worker 			}
733*fd1fabb7SAndroid Build Coastguard Worker 
SetTileOffset(uint32 index,uint32 offset)734*fd1fabb7SAndroid Build Coastguard Worker 		void SetTileOffset (uint32 index,
735*fd1fabb7SAndroid Build Coastguard Worker 							uint32 offset)
736*fd1fabb7SAndroid Build Coastguard Worker 			{
737*fd1fabb7SAndroid Build Coastguard Worker 			fTileOffsetData [index] = offset;
738*fd1fabb7SAndroid Build Coastguard Worker 			}
739*fd1fabb7SAndroid Build Coastguard Worker 
SetTileByteCount(uint32 index,uint32 count)740*fd1fabb7SAndroid Build Coastguard Worker 		void SetTileByteCount (uint32 index,
741*fd1fabb7SAndroid Build Coastguard Worker 							   uint32 count)
742*fd1fabb7SAndroid Build Coastguard Worker 			{
743*fd1fabb7SAndroid Build Coastguard Worker 			fTileByteCountData [index] = count;
744*fd1fabb7SAndroid Build Coastguard Worker 			}
745*fd1fabb7SAndroid Build Coastguard Worker 
WritingStrips()746*fd1fabb7SAndroid Build Coastguard Worker 		bool WritingStrips () const
747*fd1fabb7SAndroid Build Coastguard Worker 			{
748*fd1fabb7SAndroid Build Coastguard Worker 			return fStrips;
749*fd1fabb7SAndroid Build Coastguard Worker 			}
750*fd1fabb7SAndroid Build Coastguard Worker 
751*fd1fabb7SAndroid Build Coastguard Worker 	private:
752*fd1fabb7SAndroid Build Coastguard Worker 
753*fd1fabb7SAndroid Build Coastguard Worker 		// Hidden copy constructor and assignment operator.
754*fd1fabb7SAndroid Build Coastguard Worker 
755*fd1fabb7SAndroid Build Coastguard Worker 		dng_basic_tag_set (const dng_basic_tag_set &set);
756*fd1fabb7SAndroid Build Coastguard Worker 
757*fd1fabb7SAndroid Build Coastguard Worker 		dng_basic_tag_set & operator= (const dng_basic_tag_set &set);
758*fd1fabb7SAndroid Build Coastguard Worker 
759*fd1fabb7SAndroid Build Coastguard Worker 	};
760*fd1fabb7SAndroid Build Coastguard Worker 
761*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
762*fd1fabb7SAndroid Build Coastguard Worker 
763*fd1fabb7SAndroid Build Coastguard Worker class exif_tag_set
764*fd1fabb7SAndroid Build Coastguard Worker 	{
765*fd1fabb7SAndroid Build Coastguard Worker 
766*fd1fabb7SAndroid Build Coastguard Worker 	protected:
767*fd1fabb7SAndroid Build Coastguard Worker 
768*fd1fabb7SAndroid Build Coastguard Worker 		dng_tiff_directory fExifIFD;
769*fd1fabb7SAndroid Build Coastguard Worker 		dng_tiff_directory fGPSIFD;
770*fd1fabb7SAndroid Build Coastguard Worker 
771*fd1fabb7SAndroid Build Coastguard Worker 	private:
772*fd1fabb7SAndroid Build Coastguard Worker 
773*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint32 fExifLink;
774*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint32 fGPSLink;
775*fd1fabb7SAndroid Build Coastguard Worker 
776*fd1fabb7SAndroid Build Coastguard Worker 		bool fAddedExifLink;
777*fd1fabb7SAndroid Build Coastguard Worker 		bool fAddedGPSLink;
778*fd1fabb7SAndroid Build Coastguard Worker 
779*fd1fabb7SAndroid Build Coastguard Worker 		uint8 fExifVersionData [4];
780*fd1fabb7SAndroid Build Coastguard Worker 
781*fd1fabb7SAndroid Build Coastguard Worker 		tag_data_ptr fExifVersion;
782*fd1fabb7SAndroid Build Coastguard Worker 
783*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational fExposureTime;
784*fd1fabb7SAndroid Build Coastguard Worker 		tag_srational fShutterSpeedValue;
785*fd1fabb7SAndroid Build Coastguard Worker 
786*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational fFNumber;
787*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational fApertureValue;
788*fd1fabb7SAndroid Build Coastguard Worker 
789*fd1fabb7SAndroid Build Coastguard Worker 		tag_srational fBrightnessValue;
790*fd1fabb7SAndroid Build Coastguard Worker 
791*fd1fabb7SAndroid Build Coastguard Worker 		tag_srational fExposureBiasValue;
792*fd1fabb7SAndroid Build Coastguard Worker 
793*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational fMaxApertureValue;
794*fd1fabb7SAndroid Build Coastguard Worker 
795*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational fSubjectDistance;
796*fd1fabb7SAndroid Build Coastguard Worker 
797*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational fFocalLength;
798*fd1fabb7SAndroid Build Coastguard Worker 
799*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fISOSpeedRatings;
800*fd1fabb7SAndroid Build Coastguard Worker 
801*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fSensitivityType;
802*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint32 fStandardOutputSensitivity;
803*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint32 fRecommendedExposureIndex;
804*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint32 fISOSpeed;
805*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint32 fISOSpeedLatitudeyyy;
806*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint32 fISOSpeedLatitudezzz;
807*fd1fabb7SAndroid Build Coastguard Worker 
808*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fFlash;
809*fd1fabb7SAndroid Build Coastguard Worker 
810*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fExposureProgram;
811*fd1fabb7SAndroid Build Coastguard Worker 
812*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fMeteringMode;
813*fd1fabb7SAndroid Build Coastguard Worker 
814*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fLightSource;
815*fd1fabb7SAndroid Build Coastguard Worker 
816*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fSensingMethod;
817*fd1fabb7SAndroid Build Coastguard Worker 
818*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fFocalLength35mm;
819*fd1fabb7SAndroid Build Coastguard Worker 
820*fd1fabb7SAndroid Build Coastguard Worker 		uint8 fFileSourceData;
821*fd1fabb7SAndroid Build Coastguard Worker 		tag_data_ptr fFileSource;
822*fd1fabb7SAndroid Build Coastguard Worker 
823*fd1fabb7SAndroid Build Coastguard Worker 		uint8 fSceneTypeData;
824*fd1fabb7SAndroid Build Coastguard Worker 		tag_data_ptr fSceneType;
825*fd1fabb7SAndroid Build Coastguard Worker 
826*fd1fabb7SAndroid Build Coastguard Worker 		tag_cfa_pattern fCFAPattern;
827*fd1fabb7SAndroid Build Coastguard Worker 
828*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fCustomRendered;
829*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fExposureMode;
830*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fWhiteBalance;
831*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fSceneCaptureType;
832*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fGainControl;
833*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fContrast;
834*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fSaturation;
835*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fSharpness;
836*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fSubjectDistanceRange;
837*fd1fabb7SAndroid Build Coastguard Worker 
838*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational fDigitalZoomRatio;
839*fd1fabb7SAndroid Build Coastguard Worker 
840*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational fExposureIndex;
841*fd1fabb7SAndroid Build Coastguard Worker 
842*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint32 fImageNumber;
843*fd1fabb7SAndroid Build Coastguard Worker 
844*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fSelfTimerMode;
845*fd1fabb7SAndroid Build Coastguard Worker 
846*fd1fabb7SAndroid Build Coastguard Worker 		tag_string    fBatteryLevelA;
847*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational fBatteryLevelR;
848*fd1fabb7SAndroid Build Coastguard Worker 
849*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational fFocalPlaneXResolution;
850*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational fFocalPlaneYResolution;
851*fd1fabb7SAndroid Build Coastguard Worker 
852*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fFocalPlaneResolutionUnit;
853*fd1fabb7SAndroid Build Coastguard Worker 
854*fd1fabb7SAndroid Build Coastguard Worker 		uint16 fSubjectAreaData [4];
855*fd1fabb7SAndroid Build Coastguard Worker 
856*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16_ptr fSubjectArea;
857*fd1fabb7SAndroid Build Coastguard Worker 
858*fd1fabb7SAndroid Build Coastguard Worker 		dng_urational fLensInfoData [4];
859*fd1fabb7SAndroid Build Coastguard Worker 
860*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational_ptr fLensInfo;
861*fd1fabb7SAndroid Build Coastguard Worker 
862*fd1fabb7SAndroid Build Coastguard Worker 		tag_exif_date_time fDateTime;
863*fd1fabb7SAndroid Build Coastguard Worker 		tag_exif_date_time fDateTimeOriginal;
864*fd1fabb7SAndroid Build Coastguard Worker 		tag_exif_date_time fDateTimeDigitized;
865*fd1fabb7SAndroid Build Coastguard Worker 
866*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fSubsecTime;
867*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fSubsecTimeOriginal;
868*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fSubsecTimeDigitized;
869*fd1fabb7SAndroid Build Coastguard Worker 
870*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fMake;
871*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fModel;
872*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fArtist;
873*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fSoftware;
874*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fCopyright;
875*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fImageDescription;
876*fd1fabb7SAndroid Build Coastguard Worker 
877*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fSerialNumber;
878*fd1fabb7SAndroid Build Coastguard Worker 
879*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fMakerNoteSafety;
880*fd1fabb7SAndroid Build Coastguard Worker 
881*fd1fabb7SAndroid Build Coastguard Worker 		tag_data_ptr fMakerNote;
882*fd1fabb7SAndroid Build Coastguard Worker 
883*fd1fabb7SAndroid Build Coastguard Worker 		tag_encoded_text fUserComment;
884*fd1fabb7SAndroid Build Coastguard Worker 
885*fd1fabb7SAndroid Build Coastguard Worker 		char fImageUniqueIDData [33];
886*fd1fabb7SAndroid Build Coastguard Worker 
887*fd1fabb7SAndroid Build Coastguard Worker 		tag_data_ptr fImageUniqueID;
888*fd1fabb7SAndroid Build Coastguard Worker 
889*fd1fabb7SAndroid Build Coastguard Worker 		// EXIF 2.3 tags.
890*fd1fabb7SAndroid Build Coastguard Worker 
891*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fCameraOwnerName;
892*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fBodySerialNumber;
893*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational_ptr fLensSpecification;
894*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fLensMake;
895*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fLensModel;
896*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fLensSerialNumber;
897*fd1fabb7SAndroid Build Coastguard Worker 
898*fd1fabb7SAndroid Build Coastguard Worker 		uint8 fGPSVersionData [4];
899*fd1fabb7SAndroid Build Coastguard Worker 
900*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint8_ptr fGPSVersionID;
901*fd1fabb7SAndroid Build Coastguard Worker 
902*fd1fabb7SAndroid Build Coastguard Worker 		tag_string        fGPSLatitudeRef;
903*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational_ptr fGPSLatitude;
904*fd1fabb7SAndroid Build Coastguard Worker 
905*fd1fabb7SAndroid Build Coastguard Worker 		tag_string        fGPSLongitudeRef;
906*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational_ptr fGPSLongitude;
907*fd1fabb7SAndroid Build Coastguard Worker 
908*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint8     fGPSAltitudeRef;
909*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational fGPSAltitude;
910*fd1fabb7SAndroid Build Coastguard Worker 
911*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational_ptr fGPSTimeStamp;
912*fd1fabb7SAndroid Build Coastguard Worker 
913*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fGPSSatellites;
914*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fGPSStatus;
915*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fGPSMeasureMode;
916*fd1fabb7SAndroid Build Coastguard Worker 
917*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational fGPSDOP;
918*fd1fabb7SAndroid Build Coastguard Worker 
919*fd1fabb7SAndroid Build Coastguard Worker 		tag_string    fGPSSpeedRef;
920*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational fGPSSpeed;
921*fd1fabb7SAndroid Build Coastguard Worker 
922*fd1fabb7SAndroid Build Coastguard Worker 		tag_string    fGPSTrackRef;
923*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational fGPSTrack;
924*fd1fabb7SAndroid Build Coastguard Worker 
925*fd1fabb7SAndroid Build Coastguard Worker 		tag_string    fGPSImgDirectionRef;
926*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational fGPSImgDirection;
927*fd1fabb7SAndroid Build Coastguard Worker 
928*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fGPSMapDatum;
929*fd1fabb7SAndroid Build Coastguard Worker 
930*fd1fabb7SAndroid Build Coastguard Worker 		tag_string        fGPSDestLatitudeRef;
931*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational_ptr fGPSDestLatitude;
932*fd1fabb7SAndroid Build Coastguard Worker 
933*fd1fabb7SAndroid Build Coastguard Worker 		tag_string         fGPSDestLongitudeRef;
934*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational_ptr fGPSDestLongitude;
935*fd1fabb7SAndroid Build Coastguard Worker 
936*fd1fabb7SAndroid Build Coastguard Worker 		tag_string    fGPSDestBearingRef;
937*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational fGPSDestBearing;
938*fd1fabb7SAndroid Build Coastguard Worker 
939*fd1fabb7SAndroid Build Coastguard Worker 		tag_string    fGPSDestDistanceRef;
940*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational fGPSDestDistance;
941*fd1fabb7SAndroid Build Coastguard Worker 
942*fd1fabb7SAndroid Build Coastguard Worker 		tag_encoded_text fGPSProcessingMethod;
943*fd1fabb7SAndroid Build Coastguard Worker 		tag_encoded_text fGPSAreaInformation;
944*fd1fabb7SAndroid Build Coastguard Worker 
945*fd1fabb7SAndroid Build Coastguard Worker 		tag_string fGPSDateStamp;
946*fd1fabb7SAndroid Build Coastguard Worker 
947*fd1fabb7SAndroid Build Coastguard Worker 		tag_uint16 fGPSDifferential;
948*fd1fabb7SAndroid Build Coastguard Worker 
949*fd1fabb7SAndroid Build Coastguard Worker 		tag_urational fGPSHPositioningError;
950*fd1fabb7SAndroid Build Coastguard Worker 
951*fd1fabb7SAndroid Build Coastguard Worker 	public:
952*fd1fabb7SAndroid Build Coastguard Worker 
953*fd1fabb7SAndroid Build Coastguard Worker 		exif_tag_set (dng_tiff_directory &directory,
954*fd1fabb7SAndroid Build Coastguard Worker 					  const dng_exif &exif,
955*fd1fabb7SAndroid Build Coastguard Worker 					  bool makerNoteSafe = false,
956*fd1fabb7SAndroid Build Coastguard Worker 					  const void *makerNoteData = NULL,
957*fd1fabb7SAndroid Build Coastguard Worker 					  uint32 makerNoteLength = 0,
958*fd1fabb7SAndroid Build Coastguard Worker 					  bool insideDNG = false);
959*fd1fabb7SAndroid Build Coastguard Worker 
Locate(uint32 offset)960*fd1fabb7SAndroid Build Coastguard Worker 		void Locate (uint32 offset)
961*fd1fabb7SAndroid Build Coastguard Worker 			{
962*fd1fabb7SAndroid Build Coastguard Worker 			fExifLink.Set (offset);
963*fd1fabb7SAndroid Build Coastguard Worker 			fGPSLink .Set (offset + fExifIFD.Size ());
964*fd1fabb7SAndroid Build Coastguard Worker 			}
965*fd1fabb7SAndroid Build Coastguard Worker 
Size()966*fd1fabb7SAndroid Build Coastguard Worker 		uint32 Size () const
967*fd1fabb7SAndroid Build Coastguard Worker 			{
968*fd1fabb7SAndroid Build Coastguard Worker 			return fExifIFD.Size () +
969*fd1fabb7SAndroid Build Coastguard Worker 				   fGPSIFD .Size ();
970*fd1fabb7SAndroid Build Coastguard Worker 			}
971*fd1fabb7SAndroid Build Coastguard Worker 
Put(dng_stream & stream)972*fd1fabb7SAndroid Build Coastguard Worker 		void Put (dng_stream &stream) const
973*fd1fabb7SAndroid Build Coastguard Worker 			{
974*fd1fabb7SAndroid Build Coastguard Worker 			fExifIFD.Put (stream);
975*fd1fabb7SAndroid Build Coastguard Worker 			fGPSIFD .Put (stream);
976*fd1fabb7SAndroid Build Coastguard Worker 			}
977*fd1fabb7SAndroid Build Coastguard Worker 
978*fd1fabb7SAndroid Build Coastguard Worker 	protected:
979*fd1fabb7SAndroid Build Coastguard Worker 
980*fd1fabb7SAndroid Build Coastguard Worker 		void AddLinks (dng_tiff_directory &directory);
981*fd1fabb7SAndroid Build Coastguard Worker 
982*fd1fabb7SAndroid Build Coastguard Worker 	private:
983*fd1fabb7SAndroid Build Coastguard Worker 
984*fd1fabb7SAndroid Build Coastguard Worker 		// Hidden copy constructor and assignment operator.
985*fd1fabb7SAndroid Build Coastguard Worker 
986*fd1fabb7SAndroid Build Coastguard Worker 		exif_tag_set (const exif_tag_set &set);
987*fd1fabb7SAndroid Build Coastguard Worker 
988*fd1fabb7SAndroid Build Coastguard Worker 		exif_tag_set & operator= (const exif_tag_set &set);
989*fd1fabb7SAndroid Build Coastguard Worker 
990*fd1fabb7SAndroid Build Coastguard Worker 	};
991*fd1fabb7SAndroid Build Coastguard Worker 
992*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
993*fd1fabb7SAndroid Build Coastguard Worker 
994*fd1fabb7SAndroid Build Coastguard Worker class tiff_dng_extended_color_profile: private dng_tiff_directory
995*fd1fabb7SAndroid Build Coastguard Worker 	{
996*fd1fabb7SAndroid Build Coastguard Worker 
997*fd1fabb7SAndroid Build Coastguard Worker 	protected:
998*fd1fabb7SAndroid Build Coastguard Worker 
999*fd1fabb7SAndroid Build Coastguard Worker 		const dng_camera_profile &fProfile;
1000*fd1fabb7SAndroid Build Coastguard Worker 
1001*fd1fabb7SAndroid Build Coastguard Worker 	public:
1002*fd1fabb7SAndroid Build Coastguard Worker 
1003*fd1fabb7SAndroid Build Coastguard Worker 		tiff_dng_extended_color_profile (const dng_camera_profile &profile);
1004*fd1fabb7SAndroid Build Coastguard Worker 
1005*fd1fabb7SAndroid Build Coastguard Worker 		void Put (dng_stream &stream,
1006*fd1fabb7SAndroid Build Coastguard Worker 				  bool includeModelRestriction = true);
1007*fd1fabb7SAndroid Build Coastguard Worker 
1008*fd1fabb7SAndroid Build Coastguard Worker 	};
1009*fd1fabb7SAndroid Build Coastguard Worker 
1010*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
1011*fd1fabb7SAndroid Build Coastguard Worker 
1012*fd1fabb7SAndroid Build Coastguard Worker class tag_dng_noise_profile: public tag_data_ptr
1013*fd1fabb7SAndroid Build Coastguard Worker 	{
1014*fd1fabb7SAndroid Build Coastguard Worker 
1015*fd1fabb7SAndroid Build Coastguard Worker 	protected:
1016*fd1fabb7SAndroid Build Coastguard Worker 
1017*fd1fabb7SAndroid Build Coastguard Worker 		real64 fValues [2 * kMaxColorPlanes];
1018*fd1fabb7SAndroid Build Coastguard Worker 
1019*fd1fabb7SAndroid Build Coastguard Worker 	public:
1020*fd1fabb7SAndroid Build Coastguard Worker 
1021*fd1fabb7SAndroid Build Coastguard Worker 		explicit tag_dng_noise_profile (const dng_noise_profile &profile);
1022*fd1fabb7SAndroid Build Coastguard Worker 
1023*fd1fabb7SAndroid Build Coastguard Worker 	};
1024*fd1fabb7SAndroid Build Coastguard Worker 
1025*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
1026*fd1fabb7SAndroid Build Coastguard Worker 
1027*fd1fabb7SAndroid Build Coastguard Worker // Enum to control the subset of metadata to save to a file.
1028*fd1fabb7SAndroid Build Coastguard Worker 
1029*fd1fabb7SAndroid Build Coastguard Worker enum dng_metadata_subset
1030*fd1fabb7SAndroid Build Coastguard Worker 	{
1031*fd1fabb7SAndroid Build Coastguard Worker 
1032*fd1fabb7SAndroid Build Coastguard Worker 	kMetadataSubset_CopyrightOnly = 0,
1033*fd1fabb7SAndroid Build Coastguard Worker 	kMetadataSubset_CopyrightAndContact,
1034*fd1fabb7SAndroid Build Coastguard Worker 	kMetadataSubset_AllExceptCameraInfo,
1035*fd1fabb7SAndroid Build Coastguard Worker 	kMetadataSubset_All,
1036*fd1fabb7SAndroid Build Coastguard Worker 	kMetadataSubset_AllExceptLocationInfo,
1037*fd1fabb7SAndroid Build Coastguard Worker 	kMetadataSubset_AllExceptCameraAndLocation,
1038*fd1fabb7SAndroid Build Coastguard Worker 
1039*fd1fabb7SAndroid Build Coastguard Worker 	kMetadataSubset_Last = kMetadataSubset_AllExceptCameraAndLocation
1040*fd1fabb7SAndroid Build Coastguard Worker 
1041*fd1fabb7SAndroid Build Coastguard Worker 	};
1042*fd1fabb7SAndroid Build Coastguard Worker 
1043*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
1044*fd1fabb7SAndroid Build Coastguard Worker 
1045*fd1fabb7SAndroid Build Coastguard Worker /// \brief Support for writing dng_image or dng_negative instances to a
1046*fd1fabb7SAndroid Build Coastguard Worker /// dng_stream in TIFF or DNG format.
1047*fd1fabb7SAndroid Build Coastguard Worker 
1048*fd1fabb7SAndroid Build Coastguard Worker class dng_image_writer
1049*fd1fabb7SAndroid Build Coastguard Worker 	{
1050*fd1fabb7SAndroid Build Coastguard Worker 
1051*fd1fabb7SAndroid Build Coastguard Worker 	friend class dng_jpeg_image;
1052*fd1fabb7SAndroid Build Coastguard Worker 	friend class dng_jpeg_image_encode_task;
1053*fd1fabb7SAndroid Build Coastguard Worker 	friend class dng_write_tiles_task;
1054*fd1fabb7SAndroid Build Coastguard Worker 
1055*fd1fabb7SAndroid Build Coastguard Worker 	protected:
1056*fd1fabb7SAndroid Build Coastguard Worker 
1057*fd1fabb7SAndroid Build Coastguard Worker 		enum
1058*fd1fabb7SAndroid Build Coastguard Worker 			{
1059*fd1fabb7SAndroid Build Coastguard Worker 
1060*fd1fabb7SAndroid Build Coastguard Worker 			// Target size for buffer used to copy data to the image.
1061*fd1fabb7SAndroid Build Coastguard Worker 
1062*fd1fabb7SAndroid Build Coastguard Worker 			kImageBufferSize = 128 * 1024
1063*fd1fabb7SAndroid Build Coastguard Worker 
1064*fd1fabb7SAndroid Build Coastguard Worker 			};
1065*fd1fabb7SAndroid Build Coastguard Worker 
1066*fd1fabb7SAndroid Build Coastguard Worker 	public:
1067*fd1fabb7SAndroid Build Coastguard Worker 
1068*fd1fabb7SAndroid Build Coastguard Worker 		dng_image_writer ();
1069*fd1fabb7SAndroid Build Coastguard Worker 
1070*fd1fabb7SAndroid Build Coastguard Worker 		virtual ~dng_image_writer ();
1071*fd1fabb7SAndroid Build Coastguard Worker 
1072*fd1fabb7SAndroid Build Coastguard Worker 		virtual void EncodeJPEGPreview (dng_host &host,
1073*fd1fabb7SAndroid Build Coastguard Worker 							            const dng_image &image,
1074*fd1fabb7SAndroid Build Coastguard Worker 							            dng_jpeg_preview &preview,
1075*fd1fabb7SAndroid Build Coastguard Worker 							            int32 quality = -1);
1076*fd1fabb7SAndroid Build Coastguard Worker 
1077*fd1fabb7SAndroid Build Coastguard Worker 		virtual void WriteImage (dng_host &host,
1078*fd1fabb7SAndroid Build Coastguard Worker 						         const dng_ifd &ifd,
1079*fd1fabb7SAndroid Build Coastguard Worker 						         dng_basic_tag_set &basic,
1080*fd1fabb7SAndroid Build Coastguard Worker 						         dng_stream &stream,
1081*fd1fabb7SAndroid Build Coastguard Worker 						         const dng_image &image,
1082*fd1fabb7SAndroid Build Coastguard Worker 						         uint32 fakeChannels = 1);
1083*fd1fabb7SAndroid Build Coastguard Worker 
1084*fd1fabb7SAndroid Build Coastguard Worker 		/// Write a dng_image to a dng_stream in TIFF format.
1085*fd1fabb7SAndroid Build Coastguard Worker 		/// \param host Host interface used for progress updates, abort testing, buffer allocation, etc.
1086*fd1fabb7SAndroid Build Coastguard Worker 		/// \param stream The dng_stream on which to write the TIFF.
1087*fd1fabb7SAndroid Build Coastguard Worker 		/// \param image The actual image data to be written.
1088*fd1fabb7SAndroid Build Coastguard Worker 		/// \param photometricInterpretation Either piBlackIsZero for monochrome or piRGB for RGB images.
1089*fd1fabb7SAndroid Build Coastguard Worker 		/// \param compression Must be ccUncompressed.
1090*fd1fabb7SAndroid Build Coastguard Worker 		/// \param negative or metadata If non-NULL, EXIF, IPTC, and XMP metadata from this negative is written to TIFF.
1091*fd1fabb7SAndroid Build Coastguard Worker 		/// \param space If non-null and color space has an ICC profile, TIFF will be tagged with this
1092*fd1fabb7SAndroid Build Coastguard Worker 		/// profile. No color space conversion of image data occurs.
1093*fd1fabb7SAndroid Build Coastguard Worker 		/// \param resolution If non-NULL, TIFF will be tagged with this resolution.
1094*fd1fabb7SAndroid Build Coastguard Worker 		/// \param thumbnail If non-NULL, will be stored in TIFF as preview image.
1095*fd1fabb7SAndroid Build Coastguard Worker 		/// \param imageResources If non-NULL, will image resources be stored in TIFF as well.
1096*fd1fabb7SAndroid Build Coastguard Worker 		/// \param metadataSubset The subset of metadata (e.g., copyright only) to include in the TIFF.
1097*fd1fabb7SAndroid Build Coastguard Worker 
1098*fd1fabb7SAndroid Build Coastguard Worker 		void WriteTIFF (dng_host &host,
1099*fd1fabb7SAndroid Build Coastguard Worker 						dng_stream &stream,
1100*fd1fabb7SAndroid Build Coastguard Worker 						const dng_image &image,
1101*fd1fabb7SAndroid Build Coastguard Worker 						uint32 photometricInterpretation,
1102*fd1fabb7SAndroid Build Coastguard Worker 						uint32 compression,
1103*fd1fabb7SAndroid Build Coastguard Worker 						dng_negative *negative,
1104*fd1fabb7SAndroid Build Coastguard Worker 						const dng_color_space *space = NULL,
1105*fd1fabb7SAndroid Build Coastguard Worker 						const dng_resolution *resolution = NULL,
1106*fd1fabb7SAndroid Build Coastguard Worker 						const dng_jpeg_preview *thumbnail = NULL,
1107*fd1fabb7SAndroid Build Coastguard Worker 						const dng_memory_block *imageResources = NULL,
1108*fd1fabb7SAndroid Build Coastguard Worker 						dng_metadata_subset metadataSubset = kMetadataSubset_All);
1109*fd1fabb7SAndroid Build Coastguard Worker 
1110*fd1fabb7SAndroid Build Coastguard Worker 		void WriteTIFF (dng_host &host,
1111*fd1fabb7SAndroid Build Coastguard Worker 						dng_stream &stream,
1112*fd1fabb7SAndroid Build Coastguard Worker 						const dng_image &image,
1113*fd1fabb7SAndroid Build Coastguard Worker 						uint32 photometricInterpretation = piBlackIsZero,
1114*fd1fabb7SAndroid Build Coastguard Worker 						uint32 compression = ccUncompressed,
1115*fd1fabb7SAndroid Build Coastguard Worker 						const dng_metadata *metadata = NULL,
1116*fd1fabb7SAndroid Build Coastguard Worker 						const dng_color_space *space = NULL,
1117*fd1fabb7SAndroid Build Coastguard Worker 						const dng_resolution *resolution = NULL,
1118*fd1fabb7SAndroid Build Coastguard Worker 						const dng_jpeg_preview *thumbnail = NULL,
1119*fd1fabb7SAndroid Build Coastguard Worker 						const dng_memory_block *imageResources = NULL,
1120*fd1fabb7SAndroid Build Coastguard Worker 						dng_metadata_subset metadataSubset = kMetadataSubset_All);
1121*fd1fabb7SAndroid Build Coastguard Worker 
1122*fd1fabb7SAndroid Build Coastguard Worker 		/// Write a dng_image to a dng_stream in TIFF format.
1123*fd1fabb7SAndroid Build Coastguard Worker 		/// \param host Host interface used for progress updates, abort testing, buffer allocation, etc.
1124*fd1fabb7SAndroid Build Coastguard Worker 		/// \param stream The dng_stream on which to write the TIFF.
1125*fd1fabb7SAndroid Build Coastguard Worker 		/// \param image The actual image data to be written.
1126*fd1fabb7SAndroid Build Coastguard Worker 		/// \param photometricInterpretation Either piBlackIsZero for monochrome or piRGB for RGB images.
1127*fd1fabb7SAndroid Build Coastguard Worker 		/// \param compression Must be ccUncompressed.
1128*fd1fabb7SAndroid Build Coastguard Worker 		/// \param negative or metadata If non-NULL, EXIF, IPTC, and XMP metadata from this negative is written to TIFF.
1129*fd1fabb7SAndroid Build Coastguard Worker 		/// \param profileData If non-null, TIFF will be tagged with this profile. No color space conversion
1130*fd1fabb7SAndroid Build Coastguard Worker 		/// of image data occurs.
1131*fd1fabb7SAndroid Build Coastguard Worker 		/// \param profileSize The size for the profile data.
1132*fd1fabb7SAndroid Build Coastguard Worker 		/// \param resolution If non-NULL, TIFF will be tagged with this resolution.
1133*fd1fabb7SAndroid Build Coastguard Worker 		/// \param thumbnail If non-NULL, will be stored in TIFF as preview image.
1134*fd1fabb7SAndroid Build Coastguard Worker 		/// \param imageResources If non-NULL, will image resources be stored in TIFF as well.
1135*fd1fabb7SAndroid Build Coastguard Worker 		/// \param metadataSubset The subset of metadata (e.g., copyright only) to include in the TIFF.
1136*fd1fabb7SAndroid Build Coastguard Worker 
1137*fd1fabb7SAndroid Build Coastguard Worker 		void WriteTIFFWithProfile (dng_host &host,
1138*fd1fabb7SAndroid Build Coastguard Worker 								   dng_stream &stream,
1139*fd1fabb7SAndroid Build Coastguard Worker 								   const dng_image &image,
1140*fd1fabb7SAndroid Build Coastguard Worker 								   uint32 photometricInterpretation,
1141*fd1fabb7SAndroid Build Coastguard Worker 								   uint32 compression,
1142*fd1fabb7SAndroid Build Coastguard Worker 								   dng_negative *negative,
1143*fd1fabb7SAndroid Build Coastguard Worker 								   const void *profileData = NULL,
1144*fd1fabb7SAndroid Build Coastguard Worker 								   uint32 profileSize = 0,
1145*fd1fabb7SAndroid Build Coastguard Worker 								   const dng_resolution *resolution = NULL,
1146*fd1fabb7SAndroid Build Coastguard Worker 								   const dng_jpeg_preview *thumbnail = NULL,
1147*fd1fabb7SAndroid Build Coastguard Worker 								   const dng_memory_block *imageResources = NULL,
1148*fd1fabb7SAndroid Build Coastguard Worker 								   dng_metadata_subset metadataSubset = kMetadataSubset_All);
1149*fd1fabb7SAndroid Build Coastguard Worker 
1150*fd1fabb7SAndroid Build Coastguard Worker 		virtual void WriteTIFFWithProfile (dng_host &host,
1151*fd1fabb7SAndroid Build Coastguard Worker 										   dng_stream &stream,
1152*fd1fabb7SAndroid Build Coastguard Worker 										   const dng_image &image,
1153*fd1fabb7SAndroid Build Coastguard Worker 										   uint32 photometricInterpretation = piBlackIsZero,
1154*fd1fabb7SAndroid Build Coastguard Worker 										   uint32 compression = ccUncompressed,
1155*fd1fabb7SAndroid Build Coastguard Worker 										   const dng_metadata *metadata = NULL,
1156*fd1fabb7SAndroid Build Coastguard Worker 										   const void *profileData = NULL,
1157*fd1fabb7SAndroid Build Coastguard Worker 										   uint32 profileSize = 0,
1158*fd1fabb7SAndroid Build Coastguard Worker 										   const dng_resolution *resolution = NULL,
1159*fd1fabb7SAndroid Build Coastguard Worker 										   const dng_jpeg_preview *thumbnail = NULL,
1160*fd1fabb7SAndroid Build Coastguard Worker 										   const dng_memory_block *imageResources = NULL,
1161*fd1fabb7SAndroid Build Coastguard Worker 										   dng_metadata_subset metadataSubset = kMetadataSubset_All);
1162*fd1fabb7SAndroid Build Coastguard Worker 
1163*fd1fabb7SAndroid Build Coastguard Worker 		/// Write a dng_image to a dng_stream in DNG format.
1164*fd1fabb7SAndroid Build Coastguard Worker 		/// \param host Host interface used for progress updates, abort testing, buffer allocation, etc.
1165*fd1fabb7SAndroid Build Coastguard Worker 		/// \param stream The dng_stream on which to write the TIFF.
1166*fd1fabb7SAndroid Build Coastguard Worker 		/// \param negative The image data and metadata (EXIF, IPTC, XMP) to be written.
1167*fd1fabb7SAndroid Build Coastguard Worker 		/// \param previewList List of previews (not counting thumbnail) to write to the file. Defaults to empty.
1168*fd1fabb7SAndroid Build Coastguard Worker 		/// \param maxBackwardVersion The DNG file should be readable by readers at least back to this version.
1169*fd1fabb7SAndroid Build Coastguard Worker 		/// \param uncompressed True to force uncompressed images. Otherwise use normal compression.
1170*fd1fabb7SAndroid Build Coastguard Worker 
1171*fd1fabb7SAndroid Build Coastguard Worker 		void WriteDNG (dng_host &host,
1172*fd1fabb7SAndroid Build Coastguard Worker 					   dng_stream &stream,
1173*fd1fabb7SAndroid Build Coastguard Worker 					   dng_negative &negative,
1174*fd1fabb7SAndroid Build Coastguard Worker 					   const dng_preview_list *previewList = NULL,
1175*fd1fabb7SAndroid Build Coastguard Worker 					   uint32 maxBackwardVersion = dngVersion_SaveDefault,
1176*fd1fabb7SAndroid Build Coastguard Worker 					   bool uncompressed = false);
1177*fd1fabb7SAndroid Build Coastguard Worker 
1178*fd1fabb7SAndroid Build Coastguard Worker 		/// Write a dng_image to a dng_stream in DNG format.
1179*fd1fabb7SAndroid Build Coastguard Worker 		/// \param host Host interface used for progress updates, abort testing, buffer allocation, etc.
1180*fd1fabb7SAndroid Build Coastguard Worker 		/// \param stream The dng_stream on which to write the TIFF.
1181*fd1fabb7SAndroid Build Coastguard Worker 		/// \param negative The image data to be written.
1182*fd1fabb7SAndroid Build Coastguard Worker 		/// \param metadata The metadata (EXIF, IPTC, XMP) to be written.
1183*fd1fabb7SAndroid Build Coastguard Worker 		/// \param previewList List of previews (not counting thumbnail) to write to the file. Defaults to empty.
1184*fd1fabb7SAndroid Build Coastguard Worker 		/// \param maxBackwardVersion The DNG file should be readable by readers at least back to this version.
1185*fd1fabb7SAndroid Build Coastguard Worker 		/// \param uncompressed True to force uncompressed images. Otherwise use normal compression.
1186*fd1fabb7SAndroid Build Coastguard Worker 
1187*fd1fabb7SAndroid Build Coastguard Worker 		virtual void WriteDNG (dng_host &host,
1188*fd1fabb7SAndroid Build Coastguard Worker 							   dng_stream &stream,
1189*fd1fabb7SAndroid Build Coastguard Worker 							   const dng_negative &negative,
1190*fd1fabb7SAndroid Build Coastguard Worker 							   const dng_metadata &metadata,
1191*fd1fabb7SAndroid Build Coastguard Worker 							   const dng_preview_list *previewList = NULL,
1192*fd1fabb7SAndroid Build Coastguard Worker 							   uint32 maxBackwardVersion = dngVersion_SaveDefault,
1193*fd1fabb7SAndroid Build Coastguard Worker 							   bool uncompressed = false);
1194*fd1fabb7SAndroid Build Coastguard Worker 
1195*fd1fabb7SAndroid Build Coastguard Worker 		/// Resolve metadata conflicts and apply metadata policies in keeping
1196*fd1fabb7SAndroid Build Coastguard Worker 		/// with Metadata Working Group (MWG) guidelines.
1197*fd1fabb7SAndroid Build Coastguard Worker 
1198*fd1fabb7SAndroid Build Coastguard Worker 		virtual void CleanUpMetadata (dng_host &host,
1199*fd1fabb7SAndroid Build Coastguard Worker 									  dng_metadata &metadata,
1200*fd1fabb7SAndroid Build Coastguard Worker 									  dng_metadata_subset metadataSubset,
1201*fd1fabb7SAndroid Build Coastguard Worker 									  const char *dstMIMI,
1202*fd1fabb7SAndroid Build Coastguard Worker 									  const char *software = NULL);
1203*fd1fabb7SAndroid Build Coastguard Worker 
1204*fd1fabb7SAndroid Build Coastguard Worker 	protected:
1205*fd1fabb7SAndroid Build Coastguard Worker 
1206*fd1fabb7SAndroid Build Coastguard Worker 		virtual uint32 CompressedBufferSize (const dng_ifd &ifd,
1207*fd1fabb7SAndroid Build Coastguard Worker 											 uint32 uncompressedSize);
1208*fd1fabb7SAndroid Build Coastguard Worker 
1209*fd1fabb7SAndroid Build Coastguard Worker 		virtual void EncodePredictor (dng_host &host,
1210*fd1fabb7SAndroid Build Coastguard Worker 									  const dng_ifd &ifd,
1211*fd1fabb7SAndroid Build Coastguard Worker 						        	  dng_pixel_buffer &buffer,
1212*fd1fabb7SAndroid Build Coastguard Worker 									  AutoPtr<dng_memory_block> &tempBuffer);
1213*fd1fabb7SAndroid Build Coastguard Worker 
1214*fd1fabb7SAndroid Build Coastguard Worker 		virtual void ByteSwapBuffer (dng_host &host,
1215*fd1fabb7SAndroid Build Coastguard Worker 									 dng_pixel_buffer &buffer);
1216*fd1fabb7SAndroid Build Coastguard Worker 
1217*fd1fabb7SAndroid Build Coastguard Worker 		void ReorderSubTileBlocks (const dng_ifd &ifd,
1218*fd1fabb7SAndroid Build Coastguard Worker 								   dng_pixel_buffer &buffer,
1219*fd1fabb7SAndroid Build Coastguard Worker 								   AutoPtr<dng_memory_block> &uncompressedBuffer,
1220*fd1fabb7SAndroid Build Coastguard Worker 								   AutoPtr<dng_memory_block> &subTileBlockBuffer);
1221*fd1fabb7SAndroid Build Coastguard Worker 
1222*fd1fabb7SAndroid Build Coastguard Worker 		virtual void WriteData (dng_host &host,
1223*fd1fabb7SAndroid Build Coastguard Worker 								const dng_ifd &ifd,
1224*fd1fabb7SAndroid Build Coastguard Worker 						        dng_stream &stream,
1225*fd1fabb7SAndroid Build Coastguard Worker 						        dng_pixel_buffer &buffer,
1226*fd1fabb7SAndroid Build Coastguard Worker 								AutoPtr<dng_memory_block> &compressedBuffer);
1227*fd1fabb7SAndroid Build Coastguard Worker 
1228*fd1fabb7SAndroid Build Coastguard Worker 		virtual void WriteTile (dng_host &host,
1229*fd1fabb7SAndroid Build Coastguard Worker 						        const dng_ifd &ifd,
1230*fd1fabb7SAndroid Build Coastguard Worker 						        dng_stream &stream,
1231*fd1fabb7SAndroid Build Coastguard Worker 						        const dng_image &image,
1232*fd1fabb7SAndroid Build Coastguard Worker 						        const dng_rect &tileArea,
1233*fd1fabb7SAndroid Build Coastguard Worker 						        uint32 fakeChannels,
1234*fd1fabb7SAndroid Build Coastguard Worker 								AutoPtr<dng_memory_block> &compressedBuffer,
1235*fd1fabb7SAndroid Build Coastguard Worker 								AutoPtr<dng_memory_block> &uncompressedBuffer,
1236*fd1fabb7SAndroid Build Coastguard Worker 								AutoPtr<dng_memory_block> &subTileBlockBuffer,
1237*fd1fabb7SAndroid Build Coastguard Worker 								AutoPtr<dng_memory_block> &tempBuffer);
1238*fd1fabb7SAndroid Build Coastguard Worker 
1239*fd1fabb7SAndroid Build Coastguard Worker 	};
1240*fd1fabb7SAndroid Build Coastguard Worker 
1241*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
1242*fd1fabb7SAndroid Build Coastguard Worker 
1243*fd1fabb7SAndroid Build Coastguard Worker #endif
1244*fd1fabb7SAndroid Build Coastguard Worker 
1245*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
1246