xref: /aosp_15_r20/external/dng_sdk/source/dng_host.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_host.h#2 $ */
10*fd1fabb7SAndroid Build Coastguard Worker /* $DateTime: 2012/06/14 20:24:41 $ */
11*fd1fabb7SAndroid Build Coastguard Worker /* $Change: 835078 $ */
12*fd1fabb7SAndroid Build Coastguard Worker /* $Author: tknoll $ */
13*fd1fabb7SAndroid Build Coastguard Worker 
14*fd1fabb7SAndroid Build Coastguard Worker /** \file
15*fd1fabb7SAndroid Build Coastguard Worker  * Class definition for dng_host, initial point of contact and control between
16*fd1fabb7SAndroid Build Coastguard Worker  * host application and DNG SDK.
17*fd1fabb7SAndroid Build Coastguard Worker  */
18*fd1fabb7SAndroid Build Coastguard Worker 
19*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
20*fd1fabb7SAndroid Build Coastguard Worker 
21*fd1fabb7SAndroid Build Coastguard Worker #ifndef __dng_host__
22*fd1fabb7SAndroid Build Coastguard Worker #define __dng_host__
23*fd1fabb7SAndroid Build Coastguard Worker 
24*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
25*fd1fabb7SAndroid Build Coastguard Worker 
26*fd1fabb7SAndroid Build Coastguard Worker #include "dng_auto_ptr.h"
27*fd1fabb7SAndroid Build Coastguard Worker #include "dng_classes.h"
28*fd1fabb7SAndroid Build Coastguard Worker #include "dng_errors.h"
29*fd1fabb7SAndroid Build Coastguard Worker #include "dng_types.h"
30*fd1fabb7SAndroid Build Coastguard Worker 
31*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
32*fd1fabb7SAndroid Build Coastguard Worker 
33*fd1fabb7SAndroid Build Coastguard Worker /// \brief The main class for communication between the application and the
34*fd1fabb7SAndroid Build Coastguard Worker /// DNG SDK. Used to customize memory allocation and other behaviors.
35*fd1fabb7SAndroid Build Coastguard Worker ///
36*fd1fabb7SAndroid Build Coastguard Worker /// dng_host allows setting parameters for the DNG conversion, mediates callback
37*fd1fabb7SAndroid Build Coastguard Worker /// style interactions between the host application and the DNG SDK, and allows
38*fd1fabb7SAndroid Build Coastguard Worker /// controlling certain internal behavior of the SDK such as memory allocation.
39*fd1fabb7SAndroid Build Coastguard Worker /// Many applications will be able to use the default implementation of dng_host
40*fd1fabb7SAndroid Build Coastguard Worker /// by just setting the dng_memory_allocator and dng_abort_sniffer in the
41*fd1fabb7SAndroid Build Coastguard Worker /// constructor. More complex interactions will require deriving a class from
42*fd1fabb7SAndroid Build Coastguard Worker /// dng_host.
43*fd1fabb7SAndroid Build Coastguard Worker ///
44*fd1fabb7SAndroid Build Coastguard Worker /// Multiple dng_host objects can be allocated in a single process. This may
45*fd1fabb7SAndroid Build Coastguard Worker /// be useful for DNG processing on separate threads. (Distinct dng_host objects
46*fd1fabb7SAndroid Build Coastguard Worker /// are completely threadsafe for read/write. The application is responsible for
47*fd1fabb7SAndroid Build Coastguard Worker /// establishing mutual exclusion for read/write access to a single dng_host
48*fd1fabb7SAndroid Build Coastguard Worker /// object if it is used in multiple threads.)
49*fd1fabb7SAndroid Build Coastguard Worker 
50*fd1fabb7SAndroid Build Coastguard Worker class dng_host
51*fd1fabb7SAndroid Build Coastguard Worker 	{
52*fd1fabb7SAndroid Build Coastguard Worker 
53*fd1fabb7SAndroid Build Coastguard Worker 	private:
54*fd1fabb7SAndroid Build Coastguard Worker 
55*fd1fabb7SAndroid Build Coastguard Worker 		dng_memory_allocator *fAllocator;
56*fd1fabb7SAndroid Build Coastguard Worker 
57*fd1fabb7SAndroid Build Coastguard Worker 		dng_abort_sniffer *fSniffer;
58*fd1fabb7SAndroid Build Coastguard Worker 
59*fd1fabb7SAndroid Build Coastguard Worker 		// Does the host require all the image metadata (vs. just checking
60*fd1fabb7SAndroid Build Coastguard Worker 		// to see if the file is readable)?
61*fd1fabb7SAndroid Build Coastguard Worker 
62*fd1fabb7SAndroid Build Coastguard Worker 		bool fNeedsMeta;
63*fd1fabb7SAndroid Build Coastguard Worker 
64*fd1fabb7SAndroid Build Coastguard Worker 		// Does the host require actual image data (vs. just getting metadata
65*fd1fabb7SAndroid Build Coastguard Worker 		// or just checking to see if the file is readable)?
66*fd1fabb7SAndroid Build Coastguard Worker 
67*fd1fabb7SAndroid Build Coastguard Worker 		bool fNeedsImage;
68*fd1fabb7SAndroid Build Coastguard Worker 
69*fd1fabb7SAndroid Build Coastguard Worker 		// If we need the image data, can it be read at preview quality?
70*fd1fabb7SAndroid Build Coastguard Worker 
71*fd1fabb7SAndroid Build Coastguard Worker 		bool fForPreview;
72*fd1fabb7SAndroid Build Coastguard Worker 
73*fd1fabb7SAndroid Build Coastguard Worker 		// If non-zero, the minimum size (longer of the two pixel dimensions)
74*fd1fabb7SAndroid Build Coastguard Worker 		// image to read.  If zero, or if the full size image is smaller than
75*fd1fabb7SAndroid Build Coastguard Worker 		// this, read the full size image.
76*fd1fabb7SAndroid Build Coastguard Worker 
77*fd1fabb7SAndroid Build Coastguard Worker 		uint32 fMinimumSize;
78*fd1fabb7SAndroid Build Coastguard Worker 
79*fd1fabb7SAndroid Build Coastguard Worker 		// What is the preferred size for a preview image?  This can
80*fd1fabb7SAndroid Build Coastguard Worker 		// be slightly larger than the minimum size.  Zero if we want
81*fd1fabb7SAndroid Build Coastguard Worker 		// the full resolution image.
82*fd1fabb7SAndroid Build Coastguard Worker 
83*fd1fabb7SAndroid Build Coastguard Worker 		uint32 fPreferredSize;
84*fd1fabb7SAndroid Build Coastguard Worker 
85*fd1fabb7SAndroid Build Coastguard Worker 		// What is the maximum size for a preview image?  Zero if there
86*fd1fabb7SAndroid Build Coastguard Worker 		// is no maximum size limit.
87*fd1fabb7SAndroid Build Coastguard Worker 
88*fd1fabb7SAndroid Build Coastguard Worker 		uint32 fMaximumSize;
89*fd1fabb7SAndroid Build Coastguard Worker 
90*fd1fabb7SAndroid Build Coastguard Worker 		// The fraction of the image kept after a crop.  This is used to
91*fd1fabb7SAndroid Build Coastguard Worker 		// adjust the sizes to take into account the cropping that
92*fd1fabb7SAndroid Build Coastguard Worker 		// will be peformed.
93*fd1fabb7SAndroid Build Coastguard Worker 
94*fd1fabb7SAndroid Build Coastguard Worker 		real64 fCropFactor;
95*fd1fabb7SAndroid Build Coastguard Worker 
96*fd1fabb7SAndroid Build Coastguard Worker 		// What DNG version should we keep enough data to save?
97*fd1fabb7SAndroid Build Coastguard Worker 
98*fd1fabb7SAndroid Build Coastguard Worker 		uint32 fSaveDNGVersion;
99*fd1fabb7SAndroid Build Coastguard Worker 
100*fd1fabb7SAndroid Build Coastguard Worker 		// Do we want to force saving to a linear DNG?
101*fd1fabb7SAndroid Build Coastguard Worker 
102*fd1fabb7SAndroid Build Coastguard Worker 		bool fSaveLinearDNG;
103*fd1fabb7SAndroid Build Coastguard Worker 
104*fd1fabb7SAndroid Build Coastguard Worker 		// Keep the original raw file data block?
105*fd1fabb7SAndroid Build Coastguard Worker 
106*fd1fabb7SAndroid Build Coastguard Worker 		bool fKeepOriginalFile;
107*fd1fabb7SAndroid Build Coastguard Worker 
108*fd1fabb7SAndroid Build Coastguard Worker 	public:
109*fd1fabb7SAndroid Build Coastguard Worker 
110*fd1fabb7SAndroid Build Coastguard Worker 		/// Allocate a dng_host object, possiblly with custom allocator and sniffer.
111*fd1fabb7SAndroid Build Coastguard Worker 		/// \param allocator Allows controlling all memory allocation done via this
112*fd1fabb7SAndroid Build Coastguard Worker 		/// dng_host. Defaults to singleton global dng_memory_allocator, which calls
113*fd1fabb7SAndroid Build Coastguard Worker 		/// new/delete dng_malloc_block for appropriate size.
114*fd1fabb7SAndroid Build Coastguard Worker 		/// \param sniffer Used to periodically check if pending DNG conversions
115*fd1fabb7SAndroid Build Coastguard Worker 		/// should be aborted and to communicate progress updates. Defaults to singleton
116*fd1fabb7SAndroid Build Coastguard Worker 		/// global dng_abort_sniffer, which never aborts and ignores progress updated.
117*fd1fabb7SAndroid Build Coastguard Worker 
118*fd1fabb7SAndroid Build Coastguard Worker 		dng_host (dng_memory_allocator *allocator = NULL,
119*fd1fabb7SAndroid Build Coastguard Worker 				  dng_abort_sniffer *sniffer = NULL);
120*fd1fabb7SAndroid Build Coastguard Worker 
121*fd1fabb7SAndroid Build Coastguard Worker 		/// Clean up direct memory for dng_host. Memory allocator and abort sniffer
122*fd1fabb7SAndroid Build Coastguard Worker 		/// are not deleted. Objects such as dng_image and others returned from
123*fd1fabb7SAndroid Build Coastguard Worker 		/// host can still be used after host is deleted.
124*fd1fabb7SAndroid Build Coastguard Worker 
125*fd1fabb7SAndroid Build Coastguard Worker 		virtual ~dng_host ();
126*fd1fabb7SAndroid Build Coastguard Worker 
127*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for host's memory allocator.
128*fd1fabb7SAndroid Build Coastguard Worker 
129*fd1fabb7SAndroid Build Coastguard Worker 		dng_memory_allocator & Allocator ();
130*fd1fabb7SAndroid Build Coastguard Worker 
131*fd1fabb7SAndroid Build Coastguard Worker 		/// Alocate a new dng_memory_block using the host's memory allocator.
132*fd1fabb7SAndroid Build Coastguard Worker 		/// Uses the Allocator() property of host to allocate a new block of memory.
133*fd1fabb7SAndroid Build Coastguard Worker 		/// Will call ThrowMemoryFull if block cannot be allocated.
134*fd1fabb7SAndroid Build Coastguard Worker 		/// \param logicalSize Number of usable bytes returned dng_memory_block
135*fd1fabb7SAndroid Build Coastguard Worker 		/// must contain.
136*fd1fabb7SAndroid Build Coastguard Worker 
137*fd1fabb7SAndroid Build Coastguard Worker 		virtual dng_memory_block * Allocate (uint32 logicalSize);
138*fd1fabb7SAndroid Build Coastguard Worker 
139*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for host's abort sniffer.
140*fd1fabb7SAndroid Build Coastguard Worker 
SetSniffer(dng_abort_sniffer * sniffer)141*fd1fabb7SAndroid Build Coastguard Worker 		void SetSniffer (dng_abort_sniffer *sniffer)
142*fd1fabb7SAndroid Build Coastguard Worker 			{
143*fd1fabb7SAndroid Build Coastguard Worker 			fSniffer = sniffer;
144*fd1fabb7SAndroid Build Coastguard Worker 			}
145*fd1fabb7SAndroid Build Coastguard Worker 
146*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for host's abort sniffer.
147*fd1fabb7SAndroid Build Coastguard Worker 
Sniffer()148*fd1fabb7SAndroid Build Coastguard Worker 		dng_abort_sniffer * Sniffer ()
149*fd1fabb7SAndroid Build Coastguard Worker 			{
150*fd1fabb7SAndroid Build Coastguard Worker 			return fSniffer;
151*fd1fabb7SAndroid Build Coastguard Worker 			}
152*fd1fabb7SAndroid Build Coastguard Worker 
153*fd1fabb7SAndroid Build Coastguard Worker 		/// Check for pending abort. Should call ThrowUserCanceled if an abort
154*fd1fabb7SAndroid Build Coastguard Worker 		/// is pending.
155*fd1fabb7SAndroid Build Coastguard Worker 
156*fd1fabb7SAndroid Build Coastguard Worker 		virtual void SniffForAbort ();
157*fd1fabb7SAndroid Build Coastguard Worker 
158*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for flag determining whether all XMP metadata should be parsed.
159*fd1fabb7SAndroid Build Coastguard Worker 		/// Defaults to true. One might not want metadata when doing a quick check
160*fd1fabb7SAndroid Build Coastguard Worker 		/// to see if a file is readable.
161*fd1fabb7SAndroid Build Coastguard Worker 		/// \param needs If true, metadata is needed.
162*fd1fabb7SAndroid Build Coastguard Worker 
SetNeedsMeta(bool needs)163*fd1fabb7SAndroid Build Coastguard Worker 		void SetNeedsMeta (bool needs)
164*fd1fabb7SAndroid Build Coastguard Worker 			{
165*fd1fabb7SAndroid Build Coastguard Worker 			fNeedsMeta = needs;
166*fd1fabb7SAndroid Build Coastguard Worker 			}
167*fd1fabb7SAndroid Build Coastguard Worker 
168*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for flag determining whether all XMP metadata should be parsed.
169*fd1fabb7SAndroid Build Coastguard Worker 
NeedsMeta()170*fd1fabb7SAndroid Build Coastguard Worker 		bool NeedsMeta () const
171*fd1fabb7SAndroid Build Coastguard Worker 			{
172*fd1fabb7SAndroid Build Coastguard Worker 			return fNeedsMeta;
173*fd1fabb7SAndroid Build Coastguard Worker 			}
174*fd1fabb7SAndroid Build Coastguard Worker 
175*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for flag determining whether DNG image data is needed. Defaults
176*fd1fabb7SAndroid Build Coastguard Worker 		/// to true. Image data might not be needed for applications which only
177*fd1fabb7SAndroid Build Coastguard Worker 		/// manipulate metadata.
178*fd1fabb7SAndroid Build Coastguard Worker 		/// \param needs If true, image data is needed.
179*fd1fabb7SAndroid Build Coastguard Worker 
SetNeedsImage(bool needs)180*fd1fabb7SAndroid Build Coastguard Worker 		void SetNeedsImage (bool needs)
181*fd1fabb7SAndroid Build Coastguard Worker 			{
182*fd1fabb7SAndroid Build Coastguard Worker 			fNeedsImage = needs;
183*fd1fabb7SAndroid Build Coastguard Worker 			}
184*fd1fabb7SAndroid Build Coastguard Worker 
185*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for flag determining whether DNG image data is needed.
186*fd1fabb7SAndroid Build Coastguard Worker 
NeedsImage()187*fd1fabb7SAndroid Build Coastguard Worker 		bool NeedsImage () const
188*fd1fabb7SAndroid Build Coastguard Worker 			{
189*fd1fabb7SAndroid Build Coastguard Worker 			return fNeedsImage;
190*fd1fabb7SAndroid Build Coastguard Worker 			}
191*fd1fabb7SAndroid Build Coastguard Worker 
192*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for flag determining whether	image should be preview quality,
193*fd1fabb7SAndroid Build Coastguard Worker 		/// or full quality.
194*fd1fabb7SAndroid Build Coastguard Worker 		/// \param preview If true, rendered images are for preview.
195*fd1fabb7SAndroid Build Coastguard Worker 
SetForPreview(bool preview)196*fd1fabb7SAndroid Build Coastguard Worker 		void SetForPreview (bool preview)
197*fd1fabb7SAndroid Build Coastguard Worker 			{
198*fd1fabb7SAndroid Build Coastguard Worker 			fForPreview = preview;
199*fd1fabb7SAndroid Build Coastguard Worker 			}
200*fd1fabb7SAndroid Build Coastguard Worker 
201*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for flag determining whether image should be preview quality.
202*fd1fabb7SAndroid Build Coastguard Worker 		/// Preview quality images may be rendered more quickly. Current DNG SDK
203*fd1fabb7SAndroid Build Coastguard Worker 		/// does not change rendering behavior based on this flag, but derived
204*fd1fabb7SAndroid Build Coastguard Worker 		/// versions may use this getter to choose between a slower more accurate path
205*fd1fabb7SAndroid Build Coastguard Worker 		/// and a faster "good enough for preview" one. Data produce with ForPreview set
206*fd1fabb7SAndroid Build Coastguard Worker 		/// to true should not be written back to a DNG file, except as a preview image.
207*fd1fabb7SAndroid Build Coastguard Worker 
ForPreview()208*fd1fabb7SAndroid Build Coastguard Worker 		bool ForPreview () const
209*fd1fabb7SAndroid Build Coastguard Worker 			{
210*fd1fabb7SAndroid Build Coastguard Worker 			return fForPreview;
211*fd1fabb7SAndroid Build Coastguard Worker 			}
212*fd1fabb7SAndroid Build Coastguard Worker 
213*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for the minimum preview size.
214*fd1fabb7SAndroid Build Coastguard Worker 		/// \param size Minimum pixel size (long side of image).
215*fd1fabb7SAndroid Build Coastguard Worker 
SetMinimumSize(uint32 size)216*fd1fabb7SAndroid Build Coastguard Worker 		void SetMinimumSize (uint32 size)
217*fd1fabb7SAndroid Build Coastguard Worker 			{
218*fd1fabb7SAndroid Build Coastguard Worker 			fMinimumSize = size;
219*fd1fabb7SAndroid Build Coastguard Worker 			}
220*fd1fabb7SAndroid Build Coastguard Worker 
221*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for the minimum preview size.
222*fd1fabb7SAndroid Build Coastguard Worker 
MinimumSize()223*fd1fabb7SAndroid Build Coastguard Worker 		uint32 MinimumSize () const
224*fd1fabb7SAndroid Build Coastguard Worker 			{
225*fd1fabb7SAndroid Build Coastguard Worker 			return fMinimumSize;
226*fd1fabb7SAndroid Build Coastguard Worker 			}
227*fd1fabb7SAndroid Build Coastguard Worker 
228*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for the preferred preview size.
229*fd1fabb7SAndroid Build Coastguard Worker 		/// \param size Preferred pixel size (long side of image).
230*fd1fabb7SAndroid Build Coastguard Worker 
SetPreferredSize(uint32 size)231*fd1fabb7SAndroid Build Coastguard Worker 		void SetPreferredSize (uint32 size)
232*fd1fabb7SAndroid Build Coastguard Worker 			{
233*fd1fabb7SAndroid Build Coastguard Worker 			fPreferredSize = size;
234*fd1fabb7SAndroid Build Coastguard Worker 			}
235*fd1fabb7SAndroid Build Coastguard Worker 
236*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for the preferred preview size.
237*fd1fabb7SAndroid Build Coastguard Worker 
PreferredSize()238*fd1fabb7SAndroid Build Coastguard Worker 		uint32 PreferredSize () const
239*fd1fabb7SAndroid Build Coastguard Worker 			{
240*fd1fabb7SAndroid Build Coastguard Worker 			return fPreferredSize;
241*fd1fabb7SAndroid Build Coastguard Worker 			}
242*fd1fabb7SAndroid Build Coastguard Worker 
243*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for the maximum preview size.
244*fd1fabb7SAndroid Build Coastguard Worker 		/// \param size Maximum pixel size (long side of image).
245*fd1fabb7SAndroid Build Coastguard Worker 
SetMaximumSize(uint32 size)246*fd1fabb7SAndroid Build Coastguard Worker 		void SetMaximumSize (uint32 size)
247*fd1fabb7SAndroid Build Coastguard Worker 			{
248*fd1fabb7SAndroid Build Coastguard Worker 			fMaximumSize = size;
249*fd1fabb7SAndroid Build Coastguard Worker 			}
250*fd1fabb7SAndroid Build Coastguard Worker 
251*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for the maximum preview size.
252*fd1fabb7SAndroid Build Coastguard Worker 
MaximumSize()253*fd1fabb7SAndroid Build Coastguard Worker 		uint32 MaximumSize () const
254*fd1fabb7SAndroid Build Coastguard Worker 			{
255*fd1fabb7SAndroid Build Coastguard Worker 			return fMaximumSize;
256*fd1fabb7SAndroid Build Coastguard Worker 			}
257*fd1fabb7SAndroid Build Coastguard Worker 
258*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for the cropping factor.
259*fd1fabb7SAndroid Build Coastguard Worker 		/// \param cropFactor Fraction of image to be used after crop.
260*fd1fabb7SAndroid Build Coastguard Worker 
SetCropFactor(real64 cropFactor)261*fd1fabb7SAndroid Build Coastguard Worker 		void SetCropFactor (real64 cropFactor)
262*fd1fabb7SAndroid Build Coastguard Worker 			{
263*fd1fabb7SAndroid Build Coastguard Worker 			fCropFactor = cropFactor;
264*fd1fabb7SAndroid Build Coastguard Worker 			}
265*fd1fabb7SAndroid Build Coastguard Worker 
266*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for the cropping factor.
267*fd1fabb7SAndroid Build Coastguard Worker 
CropFactor()268*fd1fabb7SAndroid Build Coastguard Worker 		real64 CropFactor () const
269*fd1fabb7SAndroid Build Coastguard Worker 			{
270*fd1fabb7SAndroid Build Coastguard Worker 			return fCropFactor;
271*fd1fabb7SAndroid Build Coastguard Worker 			}
272*fd1fabb7SAndroid Build Coastguard Worker 
273*fd1fabb7SAndroid Build Coastguard Worker 		/// Makes sures minimum, preferred, and maximum sizes are reasonable.
274*fd1fabb7SAndroid Build Coastguard Worker 
275*fd1fabb7SAndroid Build Coastguard Worker 		void ValidateSizes ();
276*fd1fabb7SAndroid Build Coastguard Worker 
277*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for what version to save DNG file compatible with.
278*fd1fabb7SAndroid Build Coastguard Worker 		/// \param version What version to save DNG file compatible with.
279*fd1fabb7SAndroid Build Coastguard Worker 
SetSaveDNGVersion(uint32 version)280*fd1fabb7SAndroid Build Coastguard Worker 		void SetSaveDNGVersion (uint32 version)
281*fd1fabb7SAndroid Build Coastguard Worker 			{
282*fd1fabb7SAndroid Build Coastguard Worker 			fSaveDNGVersion = version;
283*fd1fabb7SAndroid Build Coastguard Worker 			}
284*fd1fabb7SAndroid Build Coastguard Worker 
285*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for what version to save DNG file compatible with.
286*fd1fabb7SAndroid Build Coastguard Worker 
287*fd1fabb7SAndroid Build Coastguard Worker 		virtual uint32 SaveDNGVersion () const;
288*fd1fabb7SAndroid Build Coastguard Worker 
289*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for flag determining whether to force saving a linear DNG file.
290*fd1fabb7SAndroid Build Coastguard Worker 		/// \param linear If true, we should force saving a linear DNG file.
291*fd1fabb7SAndroid Build Coastguard Worker 
SetSaveLinearDNG(bool linear)292*fd1fabb7SAndroid Build Coastguard Worker 		void SetSaveLinearDNG (bool linear)
293*fd1fabb7SAndroid Build Coastguard Worker 			{
294*fd1fabb7SAndroid Build Coastguard Worker 			fSaveLinearDNG = linear;
295*fd1fabb7SAndroid Build Coastguard Worker 			}
296*fd1fabb7SAndroid Build Coastguard Worker 
297*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for flag determining whether to save a linear DNG file.
298*fd1fabb7SAndroid Build Coastguard Worker 
299*fd1fabb7SAndroid Build Coastguard Worker 		virtual bool SaveLinearDNG (const dng_negative &negative) const;
300*fd1fabb7SAndroid Build Coastguard Worker 
301*fd1fabb7SAndroid Build Coastguard Worker 		/// Setter for flag determining whether to keep original RAW file data.
302*fd1fabb7SAndroid Build Coastguard Worker 		/// \param keep If true, origianl RAW data will be kept.
303*fd1fabb7SAndroid Build Coastguard Worker 
SetKeepOriginalFile(bool keep)304*fd1fabb7SAndroid Build Coastguard Worker 		void SetKeepOriginalFile (bool keep)
305*fd1fabb7SAndroid Build Coastguard Worker 			{
306*fd1fabb7SAndroid Build Coastguard Worker 			fKeepOriginalFile = keep;
307*fd1fabb7SAndroid Build Coastguard Worker 			}
308*fd1fabb7SAndroid Build Coastguard Worker 
309*fd1fabb7SAndroid Build Coastguard Worker 		/// Getter for flag determining whether to keep original RAW file data.
310*fd1fabb7SAndroid Build Coastguard Worker 
KeepOriginalFile()311*fd1fabb7SAndroid Build Coastguard Worker 		bool KeepOriginalFile ()
312*fd1fabb7SAndroid Build Coastguard Worker 			{
313*fd1fabb7SAndroid Build Coastguard Worker 			return fKeepOriginalFile;
314*fd1fabb7SAndroid Build Coastguard Worker 			}
315*fd1fabb7SAndroid Build Coastguard Worker 
316*fd1fabb7SAndroid Build Coastguard Worker 		/// Determine if an error is the result of a temporary, but planned-for
317*fd1fabb7SAndroid Build Coastguard Worker 		/// occurence such as user cancellation or memory exhaustion. This method is
318*fd1fabb7SAndroid Build Coastguard Worker 		/// sometimes used to determine whether to try and continue processing a DNG
319*fd1fabb7SAndroid Build Coastguard Worker 		/// file despite errors in the file format, etc. In such cases, processing will
320*fd1fabb7SAndroid Build Coastguard Worker 		/// be continued if IsTransientError returns false. This is so that user cancellation
321*fd1fabb7SAndroid Build Coastguard Worker 		/// and memory exhaustion always terminate processing.
322*fd1fabb7SAndroid Build Coastguard Worker 		/// \param code Error to test for transience.
323*fd1fabb7SAndroid Build Coastguard Worker 
324*fd1fabb7SAndroid Build Coastguard Worker 		virtual bool IsTransientError (dng_error_code code);
325*fd1fabb7SAndroid Build Coastguard Worker 
326*fd1fabb7SAndroid Build Coastguard Worker 		/// General top-level botttleneck for image processing tasks.
327*fd1fabb7SAndroid Build Coastguard Worker 		/// Default implementation calls dng_area_task::PerformAreaTask method on
328*fd1fabb7SAndroid Build Coastguard Worker 		/// task. Can be overridden in derived classes to support multiprocessing,
329*fd1fabb7SAndroid Build Coastguard Worker 		/// for example.
330*fd1fabb7SAndroid Build Coastguard Worker 		/// \param task Image processing task to perform on area.
331*fd1fabb7SAndroid Build Coastguard Worker 		/// \param area Rectangle over which to perform image processing task.
332*fd1fabb7SAndroid Build Coastguard Worker 
333*fd1fabb7SAndroid Build Coastguard Worker 		virtual void PerformAreaTask (dng_area_task &task,
334*fd1fabb7SAndroid Build Coastguard Worker 									  const dng_rect &area);
335*fd1fabb7SAndroid Build Coastguard Worker 
336*fd1fabb7SAndroid Build Coastguard Worker 		/// How many multiprocessing threads does PerformAreaTask use?
337*fd1fabb7SAndroid Build Coastguard Worker 		/// Default implementation always returns 1 since it is single threaded.
338*fd1fabb7SAndroid Build Coastguard Worker 
339*fd1fabb7SAndroid Build Coastguard Worker 		virtual uint32 PerformAreaTaskThreads ();
340*fd1fabb7SAndroid Build Coastguard Worker 
341*fd1fabb7SAndroid Build Coastguard Worker 		/// Factory method for dng_exif class. Can be used to customize allocation or
342*fd1fabb7SAndroid Build Coastguard Worker 		/// to ensure a derived class is used instead of dng_exif.
343*fd1fabb7SAndroid Build Coastguard Worker 
344*fd1fabb7SAndroid Build Coastguard Worker 		virtual dng_exif * Make_dng_exif ();
345*fd1fabb7SAndroid Build Coastguard Worker 
346*fd1fabb7SAndroid Build Coastguard Worker 		/// Factory method for dng_xmp class. Can be used to customize allocation or
347*fd1fabb7SAndroid Build Coastguard Worker 		/// to ensure a derived class is used instead of dng_xmp.
348*fd1fabb7SAndroid Build Coastguard Worker 
349*fd1fabb7SAndroid Build Coastguard Worker 		#if qDNGUseXMP
350*fd1fabb7SAndroid Build Coastguard Worker 
351*fd1fabb7SAndroid Build Coastguard Worker 		virtual dng_xmp * Make_dng_xmp ();
352*fd1fabb7SAndroid Build Coastguard Worker 
353*fd1fabb7SAndroid Build Coastguard Worker 		#endif
354*fd1fabb7SAndroid Build Coastguard Worker 
355*fd1fabb7SAndroid Build Coastguard Worker 		/// Factory method for dng_shared class. Can be used to customize allocation
356*fd1fabb7SAndroid Build Coastguard Worker 		/// or to ensure a derived class is used instead of dng_shared.
357*fd1fabb7SAndroid Build Coastguard Worker 
358*fd1fabb7SAndroid Build Coastguard Worker 		virtual dng_shared * Make_dng_shared ();
359*fd1fabb7SAndroid Build Coastguard Worker 
360*fd1fabb7SAndroid Build Coastguard Worker 		/// Factory method for dng_ifd class. Can be used to customize allocation or
361*fd1fabb7SAndroid Build Coastguard Worker 		/// to ensure a derived class is used instead of dng_ifd.
362*fd1fabb7SAndroid Build Coastguard Worker 
363*fd1fabb7SAndroid Build Coastguard Worker 		virtual dng_ifd * Make_dng_ifd ();
364*fd1fabb7SAndroid Build Coastguard Worker 
365*fd1fabb7SAndroid Build Coastguard Worker 		/// Factory method for dng_negative class. Can be used to customize allocation
366*fd1fabb7SAndroid Build Coastguard Worker 		/// or to ensure a derived class is used instead of dng_negative.
367*fd1fabb7SAndroid Build Coastguard Worker 
368*fd1fabb7SAndroid Build Coastguard Worker 		virtual dng_negative * Make_dng_negative ();
369*fd1fabb7SAndroid Build Coastguard Worker 
370*fd1fabb7SAndroid Build Coastguard Worker 		/// Factory method for dng_image class. Can be used to customize allocation
371*fd1fabb7SAndroid Build Coastguard Worker 		/// or to ensure a derived class is used instead of dng_simple_image.
372*fd1fabb7SAndroid Build Coastguard Worker 
373*fd1fabb7SAndroid Build Coastguard Worker 		virtual dng_image * Make_dng_image (const dng_rect &bounds,
374*fd1fabb7SAndroid Build Coastguard Worker 											uint32 planes,
375*fd1fabb7SAndroid Build Coastguard Worker 											uint32 pixelType);
376*fd1fabb7SAndroid Build Coastguard Worker 
377*fd1fabb7SAndroid Build Coastguard Worker 		/// Factory method for parsing dng_opcode based classs. Can be used to
378*fd1fabb7SAndroid Build Coastguard Worker 		/// override opcode implementations.
379*fd1fabb7SAndroid Build Coastguard Worker 
380*fd1fabb7SAndroid Build Coastguard Worker 		virtual dng_opcode * Make_dng_opcode (uint32 opcodeID,
381*fd1fabb7SAndroid Build Coastguard Worker 											  dng_stream &stream);
382*fd1fabb7SAndroid Build Coastguard Worker 
383*fd1fabb7SAndroid Build Coastguard Worker 		/// Factory method to apply a dng_opcode_list. Can be used to override
384*fd1fabb7SAndroid Build Coastguard Worker 		/// opcode list applications.
385*fd1fabb7SAndroid Build Coastguard Worker 
386*fd1fabb7SAndroid Build Coastguard Worker 		virtual void ApplyOpcodeList (dng_opcode_list &list,
387*fd1fabb7SAndroid Build Coastguard Worker 									  dng_negative &negative,
388*fd1fabb7SAndroid Build Coastguard Worker 									  AutoPtr<dng_image> &image);
389*fd1fabb7SAndroid Build Coastguard Worker 
390*fd1fabb7SAndroid Build Coastguard Worker 		/// Factory method to resample an image.  Can be used to override
391*fd1fabb7SAndroid Build Coastguard Worker 		/// image method used to resample images.
392*fd1fabb7SAndroid Build Coastguard Worker 
393*fd1fabb7SAndroid Build Coastguard Worker 		virtual void ResampleImage (const dng_image &srcImage,
394*fd1fabb7SAndroid Build Coastguard Worker 									dng_image &dstImage);
395*fd1fabb7SAndroid Build Coastguard Worker 
396*fd1fabb7SAndroid Build Coastguard Worker 	private:
397*fd1fabb7SAndroid Build Coastguard Worker 
398*fd1fabb7SAndroid Build Coastguard Worker 		// Hidden copy constructor and assignment operator.
399*fd1fabb7SAndroid Build Coastguard Worker 
400*fd1fabb7SAndroid Build Coastguard Worker 		dng_host (const dng_host &host);
401*fd1fabb7SAndroid Build Coastguard Worker 
402*fd1fabb7SAndroid Build Coastguard Worker 		dng_host & operator= (const dng_host &host);
403*fd1fabb7SAndroid Build Coastguard Worker 
404*fd1fabb7SAndroid Build Coastguard Worker 	};
405*fd1fabb7SAndroid Build Coastguard Worker 
406*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
407*fd1fabb7SAndroid Build Coastguard Worker 
408*fd1fabb7SAndroid Build Coastguard Worker #endif
409*fd1fabb7SAndroid Build Coastguard Worker 
410*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
411