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