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