10b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 20b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// Copyright 2006-2011 Adobe Systems Incorporated 30b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// All Rights Reserved. 40b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// 50b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// NOTICE: Adobe permits you to use, modify, and distribute this file in 60b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// accordance with the terms of the Adobe license agreement accompanying it. 70b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 80b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 90b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_info.h#1 $ */ 100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $DateTime: 2012/05/30 13:28:51 $ */ 110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Change: 832332 $ */ 120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Author: tknoll $ */ 130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/** \file 150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener * Class for holding top-level information about a DNG image. 160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener */ 170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#ifndef __dng_info__ 210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define __dng_info__ 220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_classes.h" 260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_ifd.h" 270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_exif.h" 280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_shared.h" 290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_errors.h" 300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_sdk_limits.h" 310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_auto_ptr.h" 320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \brief Top-level structure of DNG file with access to metadata. 360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// 370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// See \ref spec_dng "DNG 1.1.0 specification" for information on member fields of this class. 380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_info 400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint64 fTIFFBlockOffset; 450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint64 fTIFFBlockOriginalOffset; 470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener bool fBigEndian; 490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fMagic; 510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_exif> fExif; 530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_shared> fShared; 550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener int32 fMainIndex; 570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener int32 fMaskIndex; 590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fIFDCount; 610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_ifd> fIFD [kMaxSubIFDs + 1]; 630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fChainedIFDCount; 650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_ifd> fChainedIFD [kMaxChainedIFDs]; 670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fMakerNoteNextIFD; 710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_info (); 750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual ~dng_info (); 770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Read dng_info from a dng_stream 790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param host DNG host used for progress updating, abort testing, buffer allocation, etc. 800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param stream Stream to read DNG data from. 810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void Parse (dng_host &host, 830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream); 840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Must be called immediately after a successful Parse operation. 860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void PostParse (dng_host &host); 880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Test validity of DNG data. 900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \retval true if stream provided a valid DNG. 910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual bool IsValidDNG (); 930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void ValidateMagic (); 970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void ParseTag (dng_host &host, 990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream, 1000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_exif *exif, 1010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_shared *shared, 1020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_ifd *ifd, 1030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 parentCode, 1040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 tagCode, 1050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 tagType, 1060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 tagCount, 1070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint64 tagOffset, 1080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener int64 offsetDelta); 1090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual bool ValidateIFD (dng_stream &stream, 1110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint64 ifdOffset, 1120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener int64 offsetDelta); 1130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void ParseIFD (dng_host &host, 1150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream, 1160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_exif *exif, 1170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_shared *shared, 1180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_ifd *ifd, 1190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint64 ifdOffset, 1200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener int64 offsetDelta, 1210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 parentCode); 1220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual bool ParseMakerNoteIFD (dng_host &host, 1240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream, 1250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint64 ifdSize, 1260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint64 ifdOffset, 1270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener int64 offsetDelta, 1280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint64 minOffset, 1290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint64 maxOffset, 1300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 parentCode); 1310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void ParseMakerNote (dng_host &host, 1330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream, 1340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 makerNoteCount, 1350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint64 makerNoteOffset, 1360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener int64 offsetDelta, 1370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint64 minOffset, 1380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint64 maxOffset); 1390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void ParseSonyPrivateData (dng_host &host, 1410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream, 1420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint64 count, 1430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint64 oldOffset, 1440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint64 newOffset); 1450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void ParseDNGPrivateData (dng_host &host, 1470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream); 1480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 1500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener // Hidden copy constructor and assignment operator. 1520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_info (const dng_info &info); 1540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_info & operator= (const dng_info &info); 1560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 1580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif 1620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 164