18e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/
28e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// Copyright 2006-2008 Adobe Systems Incorporated
38e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// All Rights Reserved.
48e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener//
58e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// NOTICE:  Adobe permits you to use, modify, and distribute this file in
68e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// accordance with the terms of the Adobe license agreement accompanying it.
78e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/
88e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
98e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_iptc.h#1 $ */
108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $DateTime: 2012/05/30 13:28:51 $ */
118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $Change: 832332 $ */
128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $Author: tknoll $ */
138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/** \file
158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener * Support for IPTC metadata within DNG files.
168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener */
178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/
198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#ifndef __dng_iptc__
218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#define __dng_iptc__
228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/
248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_date_time.h"
268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_string.h"
278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_string_list.h"
288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/
308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/// \brief Class for reading and holding IPTC metadata associated with a DNG file.
328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener///
338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/// See the \ref spec_iptc "IPTC specification"
348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/// for information on member fields of this class.
358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
368e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerclass dng_iptc
378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener	{
388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener	public:
408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_string fTitle;
428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		int32 fUrgency;
448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_string fCategory;
468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_string_list fSupplementalCategories;
488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_string_list fKeywords;
508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_string fInstructions;
528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_date_time_info fDateTimeCreated;
548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_date_time_info fDigitalCreationDateTime;
568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_string_list fAuthors;
588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_string fAuthorsPosition;
608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_string fCity;
628e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_string fState;
638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_string fCountry;
648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_string fCountryCode;
658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_string fLocation;
678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_string fTransmissionReference;
698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_string fHeadline;
718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_string fCredit;
738e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_string fSource;
758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_string fCopyrightNotice;
778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_string fDescription;
798e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_string fDescriptionWriter;
808e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
818e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener	protected:
828e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
838e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		enum DataSet
848e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			{
858e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kRecordVersionSet					= 0,
868e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kObjectNameSet						= 5,
878e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kUrgencySet							= 10,
888e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kCategorySet						= 15,
898e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kSupplementalCategoriesSet			= 20,
908e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kKeywordsSet						= 25,
918e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kSpecialInstructionsSet				= 40,
928e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kDateCreatedSet						= 55,
938e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kTimeCreatedSet						= 60,
948e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kDigitalCreationDateSet				= 62,
958e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kDigitalCreationTimeSet				= 63,
968e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kBylineSet							= 80,
978e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kBylineTitleSet						= 85,
988e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kCitySet							= 90,
998e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kSublocationSet						= 92,
1008e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kProvinceStateSet					= 95,
1018e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kCountryCodeSet						= 100,
1028e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kCountryNameSet						= 101,
1038e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kOriginalTransmissionReferenceSet	= 103,
1048e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kHeadlineSet						= 105,
1058e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kCreditSet							= 110,
1068e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kSourceSet							= 115,
1078e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kCopyrightNoticeSet					= 116,
1088e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kCaptionSet							= 120,
1098e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kCaptionWriterSet					= 122
1108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			};
1118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
1128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		enum CharSet
1138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			{
1148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kCharSetUnknown						= 0,
1158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			kCharSetUTF8						= 1
1168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			};
1178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
1188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener	public:
1198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
1208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_iptc ();
1218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
1228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		virtual ~dng_iptc ();
1238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
1248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		/// Test if IPTC metadata exists.
1258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		/// \retval true if no IPTC metadata exists for this DNG.
1268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
1278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		bool IsEmpty () const;
1288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
1298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		/// Test if IPTC metadata exists.
1308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		/// \retval true if IPTC metadata exists for this DNG.
1318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
1328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		bool NotEmpty () const
1338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			{
1348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			return !IsEmpty ();
1358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener			}
1368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
1378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		/// Parse a complete block of IPTC data.
1388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		/// \param blockData The block of IPTC data.
1398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		/// \param blockSize Size in bytes of data block.
1408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		/// \param offsetInOriginalFile Used to enable certain file patching operations such as updating date/time in place.
1418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
1428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		void Parse (const void *blockData,
1438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener					uint32 blockSize,
1448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener					uint64 offsetInOriginalFile);
1458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
1468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		/// Serialize IPTC data to a memory block.
1478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		/// \param allocator Memory allocator used to acquire memory block.
1488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		/// \param padForTIFF Forces length of block to be a multiple of four bytes in accordance with TIFF standard.
1498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		/// \retval Memory block
1508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
1518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		dng_memory_block * Spool (dng_memory_allocator &allocator,
1528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener								  bool padForTIFF);
1538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
1548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener	protected:
1558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
1568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		void ParseString (dng_stream &stream,
1578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener						  dng_string &s,
1588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener						  CharSet charSet);
1598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
1608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener		void SpoolString (dng_stream &stream,
1618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener						  const dng_string &s,
1628e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener						  uint8 dataSet,
1638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener						  uint32 maxChars,
1648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener						  CharSet charSet);
1658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
1668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener	};
1678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
1688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/
1698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
1708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#endif
1718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener
1728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/
173