/*****************************************************************************/
// Copyright 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_jpeg_image.h#1 $ */ 
/* $DateTime: 2012/05/30 13:28:51 $ */
/* $Change: 832332 $ */
/* $Author: tknoll $ */

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

#ifndef __dng_jpeg_image__
#define __dng_jpeg_image__

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

#include "dng_auto_ptr.h"
#include "dng_memory.h"
#include "dng_point.h"

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

typedef AutoPtr<dng_memory_block> dng_jpeg_image_tile_ptr;

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

class dng_jpeg_image
	{
	
	public:
	
		dng_point fImageSize;
		
		dng_point fTileSize;
		
		bool fUsesStrips;
		
		AutoPtr<dng_memory_block> fJPEGTables;
		
		AutoArray<dng_jpeg_image_tile_ptr> fJPEGData;
		
	public:
	
		dng_jpeg_image ();
		
		uint32 TilesAcross () const
			{
			if (fTileSize.h)
				{
				return (fImageSize.h + fTileSize.h - 1) / fTileSize.h;
				}
			else
				{
				return 0;
				}
			}
		
		uint32 TilesDown () const
			{
			if (fTileSize.v)
				{
				return (fImageSize.v + fTileSize.v - 1) / fTileSize.v;
				}
			else
				{
				return 0;
				}
			}
			
		uint32 TileCount () const
			{
			return TilesAcross () * TilesDown ();
			}
		
		void Encode (dng_host &host,
					 const dng_negative &negative,
					 dng_image_writer &writer,
					 const dng_image &image);
					 
		dng_fingerprint FindDigest (dng_host &host) const;
			
	};

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

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