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