• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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