You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
410 lines
10 KiB
410 lines
10 KiB
/*****************************************************************************/
|
|
// 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__
|
|
|
|
#if qDNGUseXMP
|
|
|
|
/*****************************************************************************/
|
|
|
|
#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
|
|
|
|
/*****************************************************************************/
|
|
|
|
#endif
|
|
|
|
/*****************************************************************************/
|