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