/*****************************************************************************/
// Copyright 2007-2011 Adobe Systems Incorporated
// All Rights Reserved.
//
// NOTICE:  Adobe permits you to use, modify, and distribute this file in
// accordance with the terms of the Adobe license agreement accompanying it.
/*****************************************************************************/

/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_preview.h#1 $ */ 
/* $DateTime: 2012/05/30 13:28:51 $ */
/* $Change: 832332 $ */
/* $Author: tknoll $ */

/*****************************************************************************/

#ifndef __dng_preview__
#define __dng_preview__

/*****************************************************************************/

#include "dng_auto_ptr.h"
#include "dng_classes.h"
#include "dng_ifd.h"
#include "dng_opcode_list.h"
#include "dng_point.h"
#include "dng_sdk_limits.h"

/*****************************************************************************/

class dng_preview
	{
	
	public:
	
		dng_preview_info fInfo;
		
	protected:
	
		dng_preview ();
		
	public:
	
		virtual ~dng_preview ();
		
		virtual dng_basic_tag_set * AddTagSet (dng_tiff_directory &directory) const = 0;
		
		virtual void WriteData (dng_host &host,
								dng_image_writer &writer,
								dng_basic_tag_set &basic,
								dng_stream &stream) const = 0;
		
	};
		
/*****************************************************************************/

class dng_image_preview: public dng_preview
	{
	
	public:
	
		AutoPtr<dng_image> fImage;
		
	private:
		
		mutable dng_ifd fIFD;
		
	public:
	
		dng_image_preview ();
		
		virtual ~dng_image_preview ();
		
		virtual dng_basic_tag_set * AddTagSet (dng_tiff_directory &directory) const;
		
		virtual void WriteData (dng_host &host,
								dng_image_writer &writer,
								dng_basic_tag_set &basic,
								dng_stream &stream) const;
		
	private:
	
		// Hidden copy constructor and assignment operator.
		
		dng_image_preview (const dng_image_preview &preview);
		
		dng_image_preview & operator= (const dng_image_preview &preview);
					 
	};

/*****************************************************************************/

class dng_jpeg_preview: public dng_preview
	{
	
	public:
	
		dng_point fPreviewSize;
		
		uint16 fPhotometricInterpretation;
		
		dng_point fYCbCrSubSampling;
		
		uint16 fYCbCrPositioning;
		
		AutoPtr<dng_memory_block> fCompressedData;

	public:
	
		dng_jpeg_preview ();
		
		virtual ~dng_jpeg_preview ();
		
		virtual dng_basic_tag_set * AddTagSet (dng_tiff_directory &directory) const;
		
		virtual void WriteData (dng_host &host,
								dng_image_writer &writer,
								dng_basic_tag_set &basic,
								dng_stream &stream) const;
		
		void SpoolAdobeThumbnail (dng_stream &stream) const;
		
	private:
	
		// Hidden copy constructor and assignment operator.
		
		dng_jpeg_preview (const dng_jpeg_preview &preview);
		
		dng_jpeg_preview & operator= (const dng_jpeg_preview &preview);
					 
	};

/*****************************************************************************/

class dng_raw_preview: public dng_preview
	{
	
	public:
	
		AutoPtr<dng_image> fImage;
		
		AutoPtr<dng_memory_block> fOpcodeList2Data;
		
		int32 fCompressionQuality;

	private:
		
		mutable dng_ifd fIFD;
		
	public:
	
		dng_raw_preview ();
		
		virtual ~dng_raw_preview ();
		
		virtual dng_basic_tag_set * AddTagSet (dng_tiff_directory &directory) const;
		
		virtual void WriteData (dng_host &host,
								dng_image_writer &writer,
								dng_basic_tag_set &basic,
								dng_stream &stream) const;
		
	private:
	
		// Hidden copy constructor and assignment operator.
		
		dng_raw_preview (const dng_raw_preview &preview);
		
		dng_raw_preview & operator= (const dng_raw_preview &preview);
					 
	};

/*****************************************************************************/

class dng_mask_preview: public dng_preview
	{
	
	public:
	
		AutoPtr<dng_image> fImage;
		
		int32 fCompressionQuality;

	private:
		
		mutable dng_ifd fIFD;
		
	public:
	
		dng_mask_preview ();
		
		virtual ~dng_mask_preview ();
		
		virtual dng_basic_tag_set * AddTagSet (dng_tiff_directory &directory) const;
		
		virtual void WriteData (dng_host &host,
								dng_image_writer &writer,
								dng_basic_tag_set &basic,
								dng_stream &stream) const;
		
	private:
	
		// Hidden copy constructor and assignment operator.
		
		dng_mask_preview (const dng_mask_preview &preview);
		
		dng_mask_preview & operator= (const dng_mask_preview &preview);
					 
	};

/*****************************************************************************/

class dng_preview_list
	{
	
	private:
	
		uint32 fCount;
		
		AutoPtr<dng_preview> fPreview [kMaxDNGPreviews];
		
	public:
	
		dng_preview_list ();
		
		~dng_preview_list ();
		
		uint32 Count () const
			{
			return fCount;
			}
			
		const dng_preview & Preview (uint32 index) const
			{
			return *(fPreview [index]);
			}
			
		void Append (AutoPtr<dng_preview> &preview);
	
	};

/*****************************************************************************/

#endif
	
/*****************************************************************************/
