1 /*****************************************************************************/
2 // Copyright 2006-2012 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 /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_xmp_sdk.h#2 $ */
10 /* $DateTime: 2012/05/31 09:29:29 $ */
11 /* $Change: 832505 $ */
12 /* $Author: tknoll $ */
13 
14 /*****************************************************************************/
15 
16 #ifndef __dng_xmp_sdk__
17 #define __dng_xmp_sdk__
18 
19 /*****************************************************************************/
20 
21 #include "dng_auto_ptr.h"
22 #include "dng_classes.h"
23 #include "dng_flags.h"
24 #include "dng_types.h"
25 
26 #if qDNGUseXMP
27 
28 /*****************************************************************************/
29 
30 extern const char *XMP_NS_TIFF;
31 extern const char *XMP_NS_EXIF;
32 extern const char *XMP_NS_PHOTOSHOP;
33 extern const char *XMP_NS_XAP;
34 extern const char *XMP_NS_XAP_RIGHTS;
35 extern const char *XMP_NS_DC;
36 extern const char *XMP_NS_XMP_NOTE;
37 extern const char *XMP_NS_MM;
38 
39 extern const char *XMP_NS_CRS;
40 extern const char *XMP_NS_CRSS;
41 
42 extern const char *XMP_NS_LCP;
43 
44 extern const char *XMP_NS_AUX;
45 
46 extern const char *XMP_NS_IPTC;
47 extern const char *XMP_NS_IPTC_EXT;
48 
49 extern const char *XMP_NS_CRX;
50 
51 extern const char *XMP_NS_DNG;
52 
53 /*****************************************************************************/
54 
55 class dng_xmp_private;
56 
57 /*****************************************************************************/
58 
59 typedef bool (IteratePathsCallback) (const char *ns,
60 			  				   	     const char *path,
61 			  				         void *callbackData);
62 
63 /*****************************************************************************/
64 
65 struct dng_xmp_namespace
66 	{
67 	const char * fullName;
68 	const char * shortName;
69 	};
70 
71 /*****************************************************************************/
72 
73 class dng_xmp_sdk
74 	{
75 
76 	private:
77 
78 		dng_xmp_private *fPrivate;
79 
80 	public:
81 
82 		dng_xmp_sdk ();
83 
84 		dng_xmp_sdk (const dng_xmp_sdk &sdk);
85 
86 		virtual ~dng_xmp_sdk ();
87 
88 		static void InitializeSDK (dng_xmp_namespace * extraNamespaces = NULL,
89 								   const char *software = NULL);
90 
91 		static void TerminateSDK ();
92 
93 		bool HasMeta () const;
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) const;
154 
155 		bool GetStructField (const char *ns,
156 							 const char *path,
157 							 const char *fieldNS,
158 							 const char *fieldName,
159 							 dng_string &s) const;
160 
161 		void Set (const char *ns,
162 				  const char *path,
163 				  const char *text);
164 
165 		void SetString (const char *ns,
166 				  		const char *path,
167 				  		const dng_string &s);
168 
169 		void SetStringList (const char *ns,
170 				  		    const char *path,
171 				  		    const dng_string_list &list,
172 				  		    bool isBag);
173 
174 		void SetAltLangDefault (const char *ns,
175 								const char *path,
176 								const dng_string &s);
177 
178 		void SetStructField (const char *ns,
179 							 const char *path,
180 							 const char *fieldNS,
181 							 const char *fieldName,
182 							 const char *text);
183 
184 		void DeleteStructField (const char *ns,
185 								const char *structName,
186 								const char *fieldNS,
187 								const char *fieldName);
188 
189 		dng_memory_block * Serialize (dng_memory_allocator &allocator,
190 									  bool asPacket,
191 									  uint32 targetBytes,
192 									  uint32 padBytes,
193 									  bool forJPEG,
194 									  bool compact) const;
195 
196 		void PackageForJPEG (dng_memory_allocator &allocator,
197 							 AutoPtr<dng_memory_block> &stdBlock,
198 							 AutoPtr<dng_memory_block> &extBlock,
199 							 dng_string &extDigest) const;
200 
201 		void MergeFromJPEG (const dng_xmp_sdk *xmp);
202 
203 		void ReplaceXMP (dng_xmp_sdk *xmp);
204 
205 		bool IteratePaths (IteratePathsCallback *callback,
206 						   void *callbackData = NULL,
207 						   const char *startNS = 0,
208 						   const char *startingPath = 0);
209 
210 		#if qDNGXMPDocOps
211 
212 		void DocOpsOpenXMP (const char *srcMIMI);
213 
214 		void DocOpsPrepareForSave (const char *srcMIMI,
215 								   const char *dstMIMI,
216 								   bool newPath = true);
217 
218 		void DocOpsUpdateMetadata (const char *srcMIMI);
219 
220 		#endif
221 
222 	private:
223 
224 		void ClearMeta ();
225 
226 		void MakeMeta ();
227 
228 		void NeedMeta ();
229 
230 		// Hidden assignment operator.
231 
232 		dng_xmp_sdk & operator= (const dng_xmp_sdk &sdk);
233 
234 	};
235 
236 #endif
237 /*****************************************************************************/
238 
239 #endif
240 
241 /*****************************************************************************/
242