diff options
Diffstat (limited to 'gpr/source/lib/dng_sdk/dng_host.h')
-rw-r--r-- | gpr/source/lib/dng_sdk/dng_host.h | 411 |
1 files changed, 411 insertions, 0 deletions
diff --git a/gpr/source/lib/dng_sdk/dng_host.h b/gpr/source/lib/dng_sdk/dng_host.h new file mode 100644 index 0000000..3e82504 --- /dev/null +++ b/gpr/source/lib/dng_sdk/dng_host.h @@ -0,0 +1,411 @@ +/*****************************************************************************/
+// Copyright 2006-2012 Adobe Systems Incorporated
+// All Rights Reserved.
+//
+// NOTICE: Adobe permits you to use, modify, and distribute this file in
+// accordance with the terms of the Adobe license agreement accompanying it.
+/*****************************************************************************/
+
+/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_host.h#2 $ */
+/* $DateTime: 2012/06/14 20:24:41 $ */
+/* $Change: 835078 $ */
+/* $Author: tknoll $ */
+
+/** \file
+ * Class definition for dng_host, initial point of contact and control between
+ * host application and DNG SDK.
+ */
+
+/*****************************************************************************/
+
+#ifndef __dng_host__
+#define __dng_host__
+
+/*****************************************************************************/
+
+#include "dng_auto_ptr.h"
+#include "dng_classes.h"
+#include "dng_errors.h"
+#include "dng_types.h"
+
+/*****************************************************************************/
+
+/// \brief The main class for communication between the application and the
+/// DNG SDK. Used to customize memory allocation and other behaviors.
+///
+/// dng_host allows setting parameters for the DNG conversion, mediates callback
+/// style interactions between the host application and the DNG SDK, and allows
+/// controlling certain internal behavior of the SDK such as memory allocation.
+/// Many applications will be able to use the default implementation of dng_host
+/// by just setting the dng_memory_allocator and dng_abort_sniffer in the
+/// constructor. More complex interactions will require deriving a class from
+/// dng_host.
+///
+/// Multiple dng_host objects can be allocated in a single process. This may
+/// be useful for DNG processing on separate threads. (Distinct dng_host objects
+/// are completely threadsafe for read/write. The application is responsible for
+/// establishing mutual exclusion for read/write access to a single dng_host
+/// object if it is used in multiple threads.)
+
+class dng_host
+ {
+
+ private:
+
+ dng_memory_allocator *fAllocator;
+
+ dng_abort_sniffer *fSniffer;
+
+ // Does the host require all the image metadata (vs. just checking
+ // to see if the file is readable)?
+
+ bool fNeedsMeta;
+
+ // Does the host require actual image data (vs. just getting metadata
+ // or just checking to see if the file is readable)?
+
+ bool fNeedsImage;
+
+ // If we need the image data, can it be read at preview quality?
+
+ bool fForPreview;
+
+ // If non-zero, the minimum size (longer of the two pixel dimensions)
+ // image to read. If zero, or if the full size image is smaller than
+ // this, read the full size image.
+
+ uint32 fMinimumSize;
+
+ // What is the preferred size for a preview image? This can
+ // be slightly larger than the minimum size. Zero if we want
+ // the full resolution image.
+
+ uint32 fPreferredSize;
+
+ // What is the maximum size for a preview image? Zero if there
+ // is no maximum size limit.
+
+ uint32 fMaximumSize;
+
+ // The fraction of the image kept after a crop. This is used to
+ // adjust the sizes to take into account the cropping that
+ // will be peformed.
+
+ real64 fCropFactor;
+
+ // What DNG version should we keep enough data to save?
+
+ uint32 fSaveDNGVersion;
+
+ // Do we want to force saving to a linear DNG?
+
+ bool fSaveLinearDNG;
+
+ // Keep the original raw file data block?
+
+ bool fKeepOriginalFile;
+
+ // Payload for General Purpose Metadata Format (GPMF)
+ AutoPtr<dng_memory_block> gpmf_payload;
+
+ public:
+
+ AutoPtr<dng_memory_block>& GetGPMFPayload() { return gpmf_payload; };
+
+ /// Allocate a dng_host object, possiblly with custom allocator and sniffer.
+ /// \param allocator Allows controlling all memory allocation done via this
+ /// dng_host. Defaults to singleton global dng_memory_allocator, which calls
+ /// new/delete dng_malloc_block for appropriate size.
+ /// \param sniffer Used to periodically check if pending DNG conversions
+ /// should be aborted and to communicate progress updates. Defaults to singleton
+ /// global dng_abort_sniffer, which never aborts and ignores progress updated.
+
+ dng_host (dng_memory_allocator *allocator = NULL,
+ dng_abort_sniffer *sniffer = NULL);
+
+ /// Clean up direct memory for dng_host. Memory allocator and abort sniffer
+ /// are not deleted. Objects such as dng_image and others returned from
+ /// host can still be used after host is deleted.
+
+ virtual ~dng_host ();
+
+ /// Getter for host's memory allocator.
+
+ dng_memory_allocator & Allocator ();
+
+ /// Alocate a new dng_memory_block using the host's memory allocator.
+ /// Uses the Allocator() property of host to allocate a new block of memory.
+ /// Will call ThrowMemoryFull if block cannot be allocated.
+ /// \param logicalSize Number of usable bytes returned dng_memory_block
+ /// must contain.
+
+ virtual dng_memory_block * Allocate (uint32 logicalSize);
+
+ /// Setter for host's abort sniffer.
+
+ void SetSniffer (dng_abort_sniffer *sniffer)
+ {
+ fSniffer = sniffer;
+ }
+
+ /// Getter for host's abort sniffer.
+
+ dng_abort_sniffer * Sniffer ()
+ {
+ return fSniffer;
+ }
+
+ /// Check for pending abort. Should call ThrowUserCanceled if an abort
+ /// is pending.
+
+ virtual void SniffForAbort ();
+
+ /// Setter for flag determining whether all XMP metadata should be parsed.
+ /// Defaults to true. One might not want metadata when doing a quick check
+ /// to see if a file is readable.
+ /// \param needs If true, metadata is needed.
+
+ void SetNeedsMeta (bool needs)
+ {
+ fNeedsMeta = needs;
+ }
+
+ /// Getter for flag determining whether all XMP metadata should be parsed.
+
+ bool NeedsMeta () const
+ {
+ return fNeedsMeta;
+ }
+
+ /// Setter for flag determining whether DNG image data is needed. Defaults
+ /// to true. Image data might not be needed for applications which only
+ /// manipulate metadata.
+ /// \param needs If true, image data is needed.
+
+ void SetNeedsImage (bool needs)
+ {
+ fNeedsImage = needs;
+ }
+
+ /// Setter for flag determining whether DNG image data is needed.
+
+ bool NeedsImage () const
+ {
+ return fNeedsImage;
+ }
+
+ /// Setter for flag determining whether image should be preview quality,
+ /// or full quality.
+ /// \param preview If true, rendered images are for preview.
+
+ void SetForPreview (bool preview)
+ {
+ fForPreview = preview;
+ }
+
+ /// Getter for flag determining whether image should be preview quality.
+ /// Preview quality images may be rendered more quickly. Current DNG SDK
+ /// does not change rendering behavior based on this flag, but derived
+ /// versions may use this getter to choose between a slower more accurate path
+ /// and a faster "good enough for preview" one. Data produce with ForPreview set
+ /// to true should not be written back to a DNG file, except as a preview image.
+
+ bool ForPreview () const
+ {
+ return fForPreview;
+ }
+
+ /// Setter for the minimum preview size.
+ /// \param size Minimum pixel size (long side of image).
+
+ void SetMinimumSize (uint32 size)
+ {
+ fMinimumSize = size;
+ }
+
+ /// Getter for the minimum preview size.
+
+ uint32 MinimumSize () const
+ {
+ return fMinimumSize;
+ }
+
+ /// Setter for the preferred preview size.
+ /// \param size Preferred pixel size (long side of image).
+
+ void SetPreferredSize (uint32 size)
+ {
+ fPreferredSize = size;
+ }
+
+ /// Getter for the preferred preview size.
+
+ uint32 PreferredSize () const
+ {
+ return fPreferredSize;
+ }
+
+ /// Setter for the maximum preview size.
+ /// \param size Maximum pixel size (long side of image).
+
+ void SetMaximumSize (uint32 size)
+ {
+ fMaximumSize = size;
+ }
+
+ /// Getter for the maximum preview size.
+
+ uint32 MaximumSize () const
+ {
+ return fMaximumSize;
+ }
+
+ /// Setter for the cropping factor.
+ /// \param cropFactor Fraction of image to be used after crop.
+
+ void SetCropFactor (real64 cropFactor)
+ {
+ fCropFactor = cropFactor;
+ }
+
+ /// Getter for the cropping factor.
+
+ real64 CropFactor () const
+ {
+ return fCropFactor;
+ }
+
+ /// Makes sures minimum, preferred, and maximum sizes are reasonable.
+
+ void ValidateSizes ();
+
+ /// Setter for what version to save DNG file compatible with.
+ /// \param version What version to save DNG file compatible with.
+
+ void SetSaveDNGVersion (uint32 version)
+ {
+ fSaveDNGVersion = version;
+ }
+
+ /// Getter for what version to save DNG file compatible with.
+
+ virtual uint32 SaveDNGVersion () const;
+
+ /// Setter for flag determining whether to force saving a linear DNG file.
+ /// \param linear If true, we should force saving a linear DNG file.
+
+ void SetSaveLinearDNG (bool linear)
+ {
+ fSaveLinearDNG = linear;
+ }
+
+ /// Getter for flag determining whether to save a linear DNG file.
+
+ virtual bool SaveLinearDNG (const dng_negative &negative) const;
+
+ /// Setter for flag determining whether to keep original RAW file data.
+ /// \param keep If true, origianl RAW data will be kept.
+
+ void SetKeepOriginalFile (bool keep)
+ {
+ fKeepOriginalFile = keep;
+ }
+
+ /// Getter for flag determining whether to keep original RAW file data.
+
+ bool KeepOriginalFile ()
+ {
+ return fKeepOriginalFile;
+ }
+
+ /// Determine if an error is the result of a temporary, but planned-for
+ /// occurence such as user cancellation or memory exhaustion. This method is
+ /// sometimes used to determine whether to try and continue processing a DNG
+ /// file despite errors in the file format, etc. In such cases, processing will
+ /// be continued if IsTransientError returns false. This is so that user cancellation
+ /// and memory exhaustion always terminate processing.
+ /// \param code Error to test for transience.
+
+ virtual bool IsTransientError (dng_error_code code);
+
+ /// General top-level botttleneck for image processing tasks.
+ /// Default implementation calls dng_area_task::PerformAreaTask method on
+ /// task. Can be overridden in derived classes to support multiprocessing,
+ /// for example.
+ /// \param task Image processing task to perform on area.
+ /// \param area Rectangle over which to perform image processing task.
+
+ virtual void PerformAreaTask (dng_area_task &task,
+ const dng_rect &area);
+
+ /// How many multiprocessing threads does PerformAreaTask use?
+ /// Default implementation always returns 1 since it is single threaded.
+
+ virtual uint32 PerformAreaTaskThreads ();
+
+ /// Factory method for dng_exif class. Can be used to customize allocation or
+ /// to ensure a derived class is used instead of dng_exif.
+
+ virtual dng_exif * Make_dng_exif ();
+
+ /// Factory method for dng_xmp class. Can be used to customize allocation or
+ /// to ensure a derived class is used instead of dng_xmp.
+
+ virtual dng_xmp * Make_dng_xmp ();
+
+ /// Factory method for dng_shared class. Can be used to customize allocation
+ /// or to ensure a derived class is used instead of dng_shared.
+
+ virtual dng_shared * Make_dng_shared ();
+
+ /// Factory method for dng_ifd class. Can be used to customize allocation or
+ /// to ensure a derived class is used instead of dng_ifd.
+
+ virtual dng_ifd * Make_dng_ifd ();
+
+ /// Factory method for dng_negative class. Can be used to customize allocation
+ /// or to ensure a derived class is used instead of dng_negative.
+
+ virtual dng_negative * Make_dng_negative ();
+
+ /// Factory method for dng_image class. Can be used to customize allocation
+ /// or to ensure a derived class is used instead of dng_simple_image.
+
+ virtual dng_image * Make_dng_image (const dng_rect &bounds,
+ uint32 planes,
+ uint32 pixelType);
+
+ /// Factory method for parsing dng_opcode based classs. Can be used to
+ /// override opcode implementations.
+
+ virtual dng_opcode * Make_dng_opcode (uint32 opcodeID,
+ dng_stream &stream);
+
+ /// Factory method to apply a dng_opcode_list. Can be used to override
+ /// opcode list applications.
+
+ virtual void ApplyOpcodeList (dng_opcode_list &list,
+ dng_negative &negative,
+ AutoPtr<dng_image> &image);
+
+ /// Factory method to resample an image. Can be used to override
+ /// image method used to resample images.
+
+ virtual void ResampleImage (const dng_image &srcImage,
+ dng_image &dstImage);
+
+ private:
+
+ // Hidden copy constructor and assignment operator.
+
+ dng_host (const dng_host &host);
+
+ dng_host & operator= (const dng_host &host);
+
+ };
+
+/*****************************************************************************/
+
+#endif
+
+/*****************************************************************************/
|