1 /*****************************************************************************/ 2 // Copyright 2006-2011 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_info.h#1 $ */ 10 /* $DateTime: 2012/05/30 13:28:51 $ */ 11 /* $Change: 832332 $ */ 12 /* $Author: tknoll $ */ 13 14 /** \file 15 * Class for holding top-level information about a DNG image. 16 */ 17 18 /*****************************************************************************/ 19 20 #ifndef __dng_info__ 21 #define __dng_info__ 22 23 /*****************************************************************************/ 24 25 #include "dng_classes.h" 26 #include "dng_ifd.h" 27 #include "dng_exif.h" 28 #include "dng_shared.h" 29 #include "dng_errors.h" 30 #include "dng_sdk_limits.h" 31 #include "dng_auto_ptr.h" 32 33 /*****************************************************************************/ 34 35 /// \brief Top-level structure of DNG file with access to metadata. 36 /// 37 /// See \ref spec_dng "DNG 1.1.0 specification" for information on member fields of this class. 38 39 class dng_info 40 { 41 42 public: 43 44 uint64 fTIFFBlockOffset; 45 46 uint64 fTIFFBlockOriginalOffset; 47 48 bool fBigEndian; 49 50 uint32 fMagic; 51 52 AutoPtr<dng_exif> fExif; 53 54 AutoPtr<dng_shared> fShared; 55 56 int32 fMainIndex; 57 58 int32 fMaskIndex; 59 60 uint32 fIFDCount; 61 62 AutoPtr<dng_ifd> fIFD [kMaxSubIFDs + 1]; 63 64 uint32 fChainedIFDCount; 65 66 AutoPtr<dng_ifd> fChainedIFD [kMaxChainedIFDs]; 67 68 protected: 69 70 uint32 fMakerNoteNextIFD; 71 72 public: 73 74 dng_info (); 75 76 virtual ~dng_info (); 77 78 /// Read dng_info from a dng_stream 79 /// \param host DNG host used for progress updating, abort testing, buffer allocation, etc. 80 /// \param stream Stream to read DNG data from. 81 82 virtual void Parse (dng_host &host, 83 dng_stream &stream); 84 85 /// Must be called immediately after a successful Parse operation. 86 87 virtual void PostParse (dng_host &host); 88 89 /// Test validity of DNG data. 90 /// \retval true if stream provided a valid DNG. 91 92 virtual bool IsValidDNG (); 93 94 protected: 95 96 virtual void ValidateMagic (); 97 98 virtual void ParseTag (dng_host &host, 99 dng_stream &stream, 100 dng_exif *exif, 101 dng_shared *shared, 102 dng_ifd *ifd, 103 uint32 parentCode, 104 uint32 tagCode, 105 uint32 tagType, 106 uint32 tagCount, 107 uint64 tagOffset, 108 int64 offsetDelta); 109 110 virtual bool ValidateIFD (dng_stream &stream, 111 uint64 ifdOffset, 112 int64 offsetDelta); 113 114 virtual void ParseIFD (dng_host &host, 115 dng_stream &stream, 116 dng_exif *exif, 117 dng_shared *shared, 118 dng_ifd *ifd, 119 uint64 ifdOffset, 120 int64 offsetDelta, 121 uint32 parentCode); 122 123 virtual bool ParseMakerNoteIFD (dng_host &host, 124 dng_stream &stream, 125 uint64 ifdSize, 126 uint64 ifdOffset, 127 int64 offsetDelta, 128 uint64 minOffset, 129 uint64 maxOffset, 130 uint32 parentCode); 131 132 virtual void ParseMakerNote (dng_host &host, 133 dng_stream &stream, 134 uint32 makerNoteCount, 135 uint64 makerNoteOffset, 136 int64 offsetDelta, 137 uint64 minOffset, 138 uint64 maxOffset); 139 140 virtual void ParseSonyPrivateData (dng_host &host, 141 dng_stream &stream, 142 uint64 count, 143 uint64 oldOffset, 144 uint64 newOffset); 145 146 virtual void ParseDNGPrivateData (dng_host &host, 147 dng_stream &stream); 148 149 private: 150 151 // Hidden copy constructor and assignment operator. 152 153 dng_info (const dng_info &info); 154 155 dng_info & operator= (const dng_info &info); 156 157 }; 158 159 /*****************************************************************************/ 160 161 #endif 162 163 /*****************************************************************************/ 164