summaryrefslogtreecommitdiff
path: root/gpr/source/lib/dng_sdk/dng_xmp.h
diff options
context:
space:
mode:
Diffstat (limited to 'gpr/source/lib/dng_sdk/dng_xmp.h')
-rw-r--r--gpr/source/lib/dng_sdk/dng_xmp.h405
1 files changed, 405 insertions, 0 deletions
diff --git a/gpr/source/lib/dng_sdk/dng_xmp.h b/gpr/source/lib/dng_sdk/dng_xmp.h
new file mode 100644
index 0000000..8b8319e
--- /dev/null
+++ b/gpr/source/lib/dng_sdk/dng_xmp.h
@@ -0,0 +1,405 @@
+/*****************************************************************************/
+// Copyright 2006-2011 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_xmp.h#1 $ */
+/* $DateTime: 2012/05/30 13:28:51 $ */
+/* $Change: 832332 $ */
+/* $Author: tknoll $ */
+
+/*****************************************************************************/
+
+#ifndef __dng_xmp__
+#define __dng_xmp__
+
+/*****************************************************************************/
+
+#include "dng_classes.h"
+#include "dng_types.h"
+#include "dng_xmp_sdk.h"
+
+/*****************************************************************************/
+
+class dng_xmp
+ {
+
+ protected:
+
+ // Sync option bits.
+
+ enum
+ {
+ ignoreXMP = 1, // Force XMP values to match non-XMP
+ preferXMP = 2, // Prefer XMP values if conflict
+ preferNonXMP = 4, // Prefer non-XMP values if conflict
+ removeXMP = 8 // Remove XMP value after syncing
+ };
+
+ dng_memory_allocator &fAllocator;
+
+ dng_xmp_sdk *fSDK;
+
+ public:
+
+ dng_xmp (dng_memory_allocator &allocator);
+
+ dng_xmp (const dng_xmp &xmp);
+
+ virtual ~dng_xmp ();
+
+ virtual dng_xmp * Clone () const;
+
+ void Parse (dng_host &host,
+ const void *buffer,
+ uint32 count);
+
+ dng_memory_block * Serialize (bool asPacket = false,
+ uint32 targetBytes = 0,
+ uint32 padBytes = 4096,
+ bool forJPEG = false,
+ bool compact = true) const;
+
+ // Kludge: Due to a bug in Premere Elements 9, we need to pass non-compact XMP
+ // to the host, until we drop support for this Premere version. This bug
+ // is fixed in Premere Elements 10 and later.
+
+ dng_memory_block * SerializeNonCompact () const
+ {
+ return Serialize (false,
+ 0,
+ 4096,
+ false,
+ false);
+ }
+
+ void PackageForJPEG (AutoPtr<dng_memory_block> &stdBlock,
+ AutoPtr<dng_memory_block> &extBlock,
+ dng_string &extDigest) const;
+
+ void MergeFromJPEG (const dng_xmp &xmp);
+
+ bool HasMeta () const;
+
+ void * GetPrivateMeta ();
+
+ bool Exists (const char *ns,
+ const char *path) const;
+
+ bool HasNameSpace (const char *ns) const;
+
+ bool IteratePaths (IteratePathsCallback *callback,
+ void *callbackData,
+ const char *ns = 0,
+ const char *path = 0);
+
+ void Remove (const char *ns,
+ const char *path);
+
+ void RemoveProperties (const char *ns);
+
+ void RemoveEmptyStringOrArray (const char *ns,
+ const char *path);
+
+ void RemoveEmptyStringsAndArrays (const char *ns = 0);
+
+ void Set (const char *ns,
+ const char *path,
+ const char *text);
+
+ bool GetString (const char *ns,
+ const char *path,
+ dng_string &s) const;
+
+ void SetString (const char *ns,
+ const char *path,
+ const dng_string &s);
+
+ bool GetStringList (const char *ns,
+ const char *path,
+ dng_string_list &list) const;
+
+ void SetStringList (const char *ns,
+ const char *path,
+ const dng_string_list &list,
+ bool isBag = false);
+
+ void SetStructField (const char *ns,
+ const char *path,
+ const char *fieldNS,
+ const char *fieldName,
+ const dng_string &s);
+
+ void SetStructField (const char *ns,
+ const char *path,
+ const char *fieldNS,
+ const char *fieldName,
+ const char *s);
+
+ void DeleteStructField (const char *ns,
+ const char *path,
+ const char *fieldNS,
+ const char *fieldName);
+
+ bool GetStructField (const char *ns,
+ const char *path,
+ const char *fieldNS,
+ const char *fieldName,
+ dng_string &s) const;
+
+ void SetAltLangDefault (const char *ns,
+ const char *path,
+ const dng_string &s);
+
+ bool GetAltLangDefault (const char *ns,
+ const char *path,
+ dng_string &s) const;
+
+ bool GetBoolean (const char *ns,
+ const char *path,
+ bool &x) const;
+
+ void SetBoolean (const char *ns,
+ const char *path,
+ bool x);
+
+ bool Get_int32 (const char *ns,
+ const char *path,
+ int32 &x) const;
+
+ void Set_int32 (const char *ns,
+ const char *path,
+ int32 x,
+ bool usePlus = false);
+
+ bool Get_uint32 (const char *ns,
+ const char *path,
+ uint32 &x) const;
+
+ void Set_uint32 (const char *ns,
+ const char *path,
+ uint32 x);
+
+ bool Get_real64 (const char *ns,
+ const char *path,
+ real64 &x) const;
+
+ void Set_real64 (const char *ns,
+ const char *path,
+ real64 x,
+ uint32 places = 6,
+ bool trim = true,
+ bool usePlus = false);
+
+ bool Get_urational (const char *ns,
+ const char *path,
+ dng_urational &r) const;
+
+ void Set_urational (const char *ns,
+ const char *path,
+ const dng_urational &r);
+
+ bool Get_srational (const char *ns,
+ const char *path,
+ dng_srational &r) const;
+
+ void Set_srational (const char *ns,
+ const char *path,
+ const dng_srational &r);
+
+ bool GetFingerprint (const char *ns,
+ const char *path,
+ dng_fingerprint &print) const;
+
+ void SetFingerprint (const char *ns,
+ const char *path,
+ const dng_fingerprint &print,
+ bool allowInvalid = false);
+
+ void SetVersion2to4 (const char *ns,
+ const char *path,
+ uint32 version);
+
+ dng_fingerprint GetIPTCDigest () const;
+
+ void SetIPTCDigest (dng_fingerprint &digest);
+
+ void ClearIPTCDigest ();
+
+ void IngestIPTC (dng_metadata &metadata,
+ bool xmpIsNewer = false);
+
+ void RebuildIPTC (dng_metadata &metadata,
+ dng_memory_allocator &allocator,
+ bool padForTIFF);
+
+ virtual void SyncExif (dng_exif &exif,
+ const dng_exif *originalExif = NULL,
+ bool doingUpdateFromXMP = false,
+ bool removeFromXMP = false);
+
+ void ValidateStringList (const char *ns,
+ const char *path);
+
+ void ValidateMetadata ();
+
+ void UpdateDateTime (const dng_date_time_info &dt);
+
+ void UpdateMetadataDate (const dng_date_time_info &dt);
+
+ void UpdateExifDates (dng_exif &exif,
+ bool removeFromXMP = false);
+
+ bool HasOrientation () const;
+
+ dng_orientation GetOrientation () const;
+
+ void ClearOrientation ();
+
+ void SetOrientation (const dng_orientation &orientation);
+
+ void SyncOrientation (dng_negative &negative,
+ bool xmpIsMaster);
+ // FIX_ME_API: Backwards compatibility
+
+ void SyncOrientation (dng_metadata &metadata,
+ bool xmpIsMaster);
+
+ void ClearImageInfo ();
+
+ void SetImageSize (const dng_point &size);
+
+ void SetSampleInfo (uint32 samplesPerPixel,
+ uint32 bitsPerSample);
+
+ void SetPhotometricInterpretation (uint32 pi);
+
+ void SetResolution (const dng_resolution &res);
+
+ void ComposeArrayItemPath (const char *ns,
+ const char *arrayName,
+ int32 itemNumber,
+ dng_string &s) const;
+
+ void ComposeStructFieldPath (const char *ns,
+ const char *structName,
+ const char *fieldNS,
+ const char *fieldName,
+ dng_string &s) const;
+
+ int32 CountArrayItems (const char *ns,
+ const char *path) const;
+
+ void AppendArrayItem (const char *ns,
+ const char *arrayName,
+ const char *itemValue,
+ bool isBag = true,
+ bool propIsStruct = false);
+
+ static dng_string EncodeFingerprint (const dng_fingerprint &f,
+ bool allowInvalid = false);
+
+ static dng_fingerprint DecodeFingerprint (const dng_string &s);
+
+ #if qDNGXMPDocOps
+
+ void DocOpsOpenXMP (const char *srcMIMI);
+
+ void DocOpsPrepareForSave (const char *srcMIMI,
+ const char *dstMIMI,
+ bool newPath = true);
+
+ void DocOpsUpdateMetadata (const char *srcMIMI);
+
+ #endif
+
+ protected:
+
+ static void TrimDecimal (char *s);
+
+ static dng_string EncodeGPSVersion (uint32 version);
+
+ static uint32 DecodeGPSVersion (const dng_string &s);
+
+ static dng_string EncodeGPSCoordinate (const dng_string &ref,
+ const dng_urational *coord);
+
+ static void DecodeGPSCoordinate (const dng_string &s,
+ dng_string &ref,
+ dng_urational *coord);
+
+ static dng_string EncodeGPSDateTime (const dng_string &dateStamp,
+ const dng_urational *timeStamp);
+
+ static void DecodeGPSDateTime (const dng_string &s,
+ dng_string &dateStamp,
+ dng_urational *timeStamp);
+
+ bool SyncString (const char *ns,
+ const char *path,
+ dng_string &s,
+ uint32 options = 0);
+
+ void SyncStringList (const char *ns,
+ const char *path,
+ dng_string_list &list,
+ bool isBag = false,
+ uint32 options = 0);
+
+ bool SyncAltLangDefault (const char *ns,
+ const char *path,
+ dng_string &s,
+ uint32 options = 0);
+
+ void Sync_uint32 (const char *ns,
+ const char *path,
+ uint32 &x,
+ bool isDefault = false,
+ uint32 options = 0);
+
+ void Sync_uint32_array (const char *ns,
+ const char *path,
+ uint32 *data,
+ uint32 &count,
+ uint32 maxCount,
+ uint32 options = 0);
+
+ void Sync_urational (const char *ns,
+ const char *path,
+ dng_urational &r,
+ uint32 options = 0);
+
+ void Sync_srational (const char *ns,
+ const char *path,
+ dng_srational &r,
+ uint32 options = 0);
+
+ void SyncIPTC (dng_iptc &iptc,
+ uint32 options);
+
+ void SyncFlash (uint32 &flashState,
+ uint32 &flashMask,
+ uint32 options);
+
+ bool DateTimeIsDateOnly (const char *ns,
+ const char *path);
+
+ virtual void SyncApproximateFocusDistance (dng_exif &exif,
+ const uint32 readOnly);
+
+ private:
+
+ // Hidden assignment operator.
+
+ dng_xmp & operator= (const dng_xmp &xmp);
+
+ };
+
+/*****************************************************************************/
+
+#endif
+
+/*****************************************************************************/