1/*****************************************************************************/
2// Copyright 2006-2008 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_iptc.h#1 $ */
10/* $DateTime: 2012/05/30 13:28:51 $ */
11/* $Change: 832332 $ */
12/* $Author: tknoll $ */
13
14/** \file
15 * Support for IPTC metadata within DNG files.
16 */
17
18/*****************************************************************************/
19
20#ifndef __dng_iptc__
21#define __dng_iptc__
22
23/*****************************************************************************/
24
25#include "dng_date_time.h"
26#include "dng_string.h"
27#include "dng_string_list.h"
28
29/*****************************************************************************/
30
31/// \brief Class for reading and holding IPTC metadata associated with a DNG file.
32///
33/// See the \ref spec_iptc "IPTC specification"
34/// for information on member fields of this class.
35
36class dng_iptc
37	{
38
39	public:
40
41		dng_string fTitle;
42
43		int32 fUrgency;
44
45		dng_string fCategory;
46
47		dng_string_list fSupplementalCategories;
48
49		dng_string_list fKeywords;
50
51		dng_string fInstructions;
52
53		dng_date_time_info fDateTimeCreated;
54
55		dng_date_time_info fDigitalCreationDateTime;
56
57		dng_string_list fAuthors;
58
59		dng_string fAuthorsPosition;
60
61		dng_string fCity;
62		dng_string fState;
63		dng_string fCountry;
64		dng_string fCountryCode;
65
66		dng_string fLocation;
67
68		dng_string fTransmissionReference;
69
70		dng_string fHeadline;
71
72		dng_string fCredit;
73
74		dng_string fSource;
75
76		dng_string fCopyrightNotice;
77
78		dng_string fDescription;
79		dng_string fDescriptionWriter;
80
81	protected:
82
83		enum DataSet
84			{
85			kRecordVersionSet					= 0,
86			kObjectNameSet						= 5,
87			kUrgencySet							= 10,
88			kCategorySet						= 15,
89			kSupplementalCategoriesSet			= 20,
90			kKeywordsSet						= 25,
91			kSpecialInstructionsSet				= 40,
92			kDateCreatedSet						= 55,
93			kTimeCreatedSet						= 60,
94			kDigitalCreationDateSet				= 62,
95			kDigitalCreationTimeSet				= 63,
96			kBylineSet							= 80,
97			kBylineTitleSet						= 85,
98			kCitySet							= 90,
99			kSublocationSet						= 92,
100			kProvinceStateSet					= 95,
101			kCountryCodeSet						= 100,
102			kCountryNameSet						= 101,
103			kOriginalTransmissionReferenceSet	= 103,
104			kHeadlineSet						= 105,
105			kCreditSet							= 110,
106			kSourceSet							= 115,
107			kCopyrightNoticeSet					= 116,
108			kCaptionSet							= 120,
109			kCaptionWriterSet					= 122
110			};
111
112		enum CharSet
113			{
114			kCharSetUnknown						= 0,
115			kCharSetUTF8						= 1
116			};
117
118	public:
119
120		dng_iptc ();
121
122		virtual ~dng_iptc ();
123
124		/// Test if IPTC metadata exists.
125		/// \retval true if no IPTC metadata exists for this DNG.
126
127		bool IsEmpty () const;
128
129		/// Test if IPTC metadata exists.
130		/// \retval true if IPTC metadata exists for this DNG.
131
132		bool NotEmpty () const
133			{
134			return !IsEmpty ();
135			}
136
137		/// Parse a complete block of IPTC data.
138		/// \param blockData The block of IPTC data.
139		/// \param blockSize Size in bytes of data block.
140		/// \param offsetInOriginalFile Used to enable certain file patching operations such as updating date/time in place.
141
142		void Parse (const void *blockData,
143					uint32 blockSize,
144					uint64 offsetInOriginalFile);
145
146		/// Serialize IPTC data to a memory block.
147		/// \param allocator Memory allocator used to acquire memory block.
148		/// \param padForTIFF Forces length of block to be a multiple of four bytes in accordance with TIFF standard.
149		/// \retval Memory block
150
151		dng_memory_block * Spool (dng_memory_allocator &allocator,
152								  bool padForTIFF);
153
154	protected:
155
156		void ParseString (dng_stream &stream,
157						  dng_string &s,
158						  CharSet charSet);
159
160		void SpoolString (dng_stream &stream,
161						  const dng_string &s,
162						  uint8 dataSet,
163						  uint32 maxChars,
164						  CharSet charSet);
165
166	};
167
168/*****************************************************************************/
169
170#endif
171
172/*****************************************************************************/
173