1 /*****************************************************************************/ 2 // Copyright 2006-2019 Adobe Systems Incorporated 3 // All Rights Reserved. 4 // 5 // NOTICE: Adobe permits you to use, modify, and distribute this file in 6 // accordance with the terms of the Adobe license agreement accompanying it. 7 /*****************************************************************************/ 8 9 #ifndef __dng_xmp_sdk__ 10 #define __dng_xmp_sdk__ 11 12 /*****************************************************************************/ 13 14 #include "dng_auto_ptr.h" 15 #include "dng_classes.h" 16 #include "dng_flags.h" 17 #include "dng_types.h" 18 19 /*****************************************************************************/ 20 21 extern const char *XMP_NS_TIFF; 22 extern const char *XMP_NS_EXIF; 23 extern const char *XMP_NS_EXIFEX; 24 extern const char *XMP_NS_PHOTOSHOP; 25 extern const char *XMP_NS_XAP; 26 extern const char *XMP_NS_XAP_RIGHTS; 27 extern const char *XMP_NS_DC; 28 extern const char *XMP_NS_XMP_NOTE; 29 extern const char *XMP_NS_MM; 30 31 extern const char *XMP_NS_CRS; 32 extern const char *XMP_NS_CRSS; 33 extern const char *XMP_NS_CRD; 34 35 extern const char *XMP_NS_LCP; 36 37 extern const char *XMP_NS_AUX; 38 39 extern const char *XMP_NS_IPTC; 40 extern const char *XMP_NS_IPTC_EXT; 41 42 extern const char *XMP_NS_CRX; 43 44 extern const char *XMP_NS_DNG; 45 46 extern const char *XMP_NS_PANO; 47 48 /*****************************************************************************/ 49 50 class dng_xmp_private; 51 52 /*****************************************************************************/ 53 54 typedef bool (IteratePathsCallback) (const char *ns, 55 const char *path, 56 void *callbackData); 57 58 /*****************************************************************************/ 59 60 struct dng_xmp_namespace 61 { 62 const char * fullName; 63 const char * shortName; 64 }; 65 66 /*****************************************************************************/ 67 68 class dng_xmp_sdk 69 { 70 71 private: 72 73 dng_xmp_private *fPrivate; 74 75 public: 76 77 dng_xmp_sdk (); 78 79 dng_xmp_sdk (const dng_xmp_sdk &sdk); 80 81 virtual ~dng_xmp_sdk (); 82 83 static void InitializeSDK (dng_xmp_namespace * extraNamespaces = NULL, 84 const char *software = NULL); 85 86 static void TerminateSDK (); 87 88 bool HasMeta () const; 89 RequireMeta()90 void RequireMeta () 91 { 92 NeedMeta (); 93 } 94 95 void * GetPrivateMeta (); 96 97 void Parse (dng_host &host, 98 const char *buffer, 99 uint32 count); 100 101 bool Exists (const char *ns, 102 const char *path) const; 103 104 void AppendArrayItem (const char *ns, 105 const char *arrayName, 106 const char *itemValue, 107 bool isBag = true, 108 bool propIsStruct = false); 109 110 int32 CountArrayItems (const char *ns, 111 const char *path) const; 112 113 bool HasNameSpace (const char *ns) const; 114 115 void Remove (const char *ns, 116 const char *path); 117 118 void RemoveProperties (const char *ns); 119 120 bool IsEmptyString (const char *ns, 121 const char *path); 122 123 bool IsEmptyArray (const char *ns, 124 const char *path); 125 126 void ComposeArrayItemPath (const char *ns, 127 const char *arrayName, 128 int32 itemNumber, 129 dng_string &s) const; 130 131 void ComposeStructFieldPath (const char *ns, 132 const char *structName, 133 const char *fieldNS, 134 const char *fieldName, 135 dng_string &s) const; 136 137 bool GetNamespacePrefix (const char *uri, 138 dng_string &s) const; 139 140 bool GetString (const char *ns, 141 const char *path, 142 dng_string &s) const; 143 144 void ValidateStringList (const char *ns, 145 const char *path); 146 147 bool GetStringList (const char *ns, 148 const char *path, 149 dng_string_list &list) const; 150 151 bool GetAltLangDefault (const char *ns, 152 const char *path, 153 dng_string &s, 154 bool silent = false) const; 155 156 bool GetLocalString (const char *ns, 157 const char *path, 158 dng_local_string &s) const; 159 160 bool GetStructField (const char *ns, 161 const char *path, 162 const char *fieldNS, 163 const char *fieldName, 164 dng_string &s) const; 165 166 void Set (const char *ns, 167 const char *path, 168 const char *text); 169 170 void SetString (const char *ns, 171 const char *path, 172 const dng_string &s); 173 174 void SetStringList (const char *ns, 175 const char *path, 176 const dng_string_list &list, 177 bool isBag); 178 179 void SetAltLangDefault (const char *ns, 180 const char *path, 181 const dng_string &s); 182 183 void SetLocalString (const char *ns, 184 const char *path, 185 const dng_local_string &s); 186 187 void SetStructField (const char *ns, 188 const char *path, 189 const char *fieldNS, 190 const char *fieldName, 191 const char *text); 192 193 void DeleteStructField (const char *ns, 194 const char *structName, 195 const char *fieldNS, 196 const char *fieldName); 197 198 dng_memory_block * Serialize (dng_memory_allocator &allocator, 199 bool asPacket, 200 uint32 targetBytes, 201 uint32 padBytes, 202 bool forJPEG, 203 bool compact) const; 204 205 void PackageForJPEG (dng_memory_allocator &allocator, 206 AutoPtr<dng_memory_block> &stdBlock, 207 AutoPtr<dng_memory_block> &extBlock, 208 dng_string &extDigest) const; 209 210 void MergeFromJPEG (const dng_xmp_sdk *xmp); 211 212 void ReplaceXMP (dng_xmp_sdk *xmp); 213 214 bool IteratePaths (IteratePathsCallback *callback, 215 void *callbackData = NULL, 216 const char *startNS = 0, 217 const char *startingPath = 0); 218 219 #if qDNGXMPDocOps 220 221 void DocOpsOpenXMP (const char *srcMIME); 222 223 void DocOpsPrepareForSave (const char *srcMIME, 224 const char *dstMIME, 225 bool newPath = true); 226 227 void DocOpsUpdateMetadata (const char *srcMIME); 228 229 #endif 230 231 private: 232 233 void ClearMeta (); 234 235 void MakeMeta (); 236 237 void NeedMeta (); 238 239 // Hidden assignment operator. 240 241 dng_xmp_sdk & operator= (const dng_xmp_sdk &sdk); 242 243 }; 244 245 /*****************************************************************************/ 246 247 #endif 248 249 /*****************************************************************************/ 250