16e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
26e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim// Copyright 2006-2012 Adobe Systems Incorporated
36e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim// All Rights Reserved.
46e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim//
56e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim// NOTICE:  Adobe permits you to use, modify, and distribute this file in
66e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim// accordance with the terms of the Adobe license agreement accompanying it.
76e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
86e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
96e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_host.cpp#2 $ */
106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/* $DateTime: 2012/06/14 20:24:41 $ */
116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/* $Change: 835078 $ */
126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/* $Author: tknoll $ */
136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_host.h"
176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_abort_sniffer.h"
196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_area_task.h"
206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_bad_pixels.h"
216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_exceptions.h"
226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_exif.h"
236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_gain_map.h"
246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_ifd.h"
256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_lens_correction.h"
266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_memory.h"
276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_misc_opcodes.h"
286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_negative.h"
296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_resample.h"
306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_shared.h"
316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_simple_image.h"
32327c6d5fa60ff1df8a421499edff3c6445a9d2e6Kinan Hakim
33327c6d5fa60ff1df8a421499edff3c6445a9d2e6Kinan Hakim#if qDNGUseXMP
346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_xmp.h"
35327c6d5fa60ff1df8a421499edff3c6445a9d2e6Kinan Hakim#endif
366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_host::dng_host (dng_memory_allocator *allocator,
406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim					dng_abort_sniffer *sniffer)
416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	:	fAllocator	(allocator)
436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	,	fSniffer	(sniffer)
446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	,	fNeedsMeta  		(true)
466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	,	fNeedsImage 		(true)
476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	,	fForPreview 		(false)
486e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	,	fMinimumSize 		(0)
496e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	,	fPreferredSize      (0)
506e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	,	fMaximumSize    	(0)
516e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	,	fCropFactor			(1.0)
526e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	,	fSaveDNGVersion		(dngVersion_None)
536e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	,	fSaveLinearDNG		(false)
546e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	,	fKeepOriginalFile	(false)
556e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
566e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
576e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
586e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
596e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
606e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
616e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
626e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_host::~dng_host ()
636e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
646e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
656e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
666e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
676e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
686e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
696e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_memory_allocator & dng_host::Allocator ()
706e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
716e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
726e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	if (fAllocator)
736e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
746e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
756e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		return *fAllocator;
766e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
776e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
786e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
796e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	else
806e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
816e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
826e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		return gDefaultDNGMemoryAllocator;
836e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
846e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
856e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
866e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
876e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
886e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
896e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
906e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_memory_block * dng_host::Allocate (uint32 logicalSize)
916e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
926e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
936e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	return Allocator ().Allocate (logicalSize);
946e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
956e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
966e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
976e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
986e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
996e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimvoid dng_host::SniffForAbort ()
1006e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
1016e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1026e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	dng_abort_sniffer::SniffForAbort (Sniffer ());
1036e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1046e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
1056e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1066e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
1076e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1086e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimvoid dng_host::ValidateSizes ()
1096e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
1106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	// The maximum size limits the other two sizes.
1126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	if (MaximumSize ())
1146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
1156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		SetMinimumSize   (Min_uint32 (MinimumSize   (), MaximumSize ()));
1166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		SetPreferredSize (Min_uint32 (PreferredSize (), MaximumSize ()));
1176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
1186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	// If we have a preferred size, it limits the minimum size.
1206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	if (PreferredSize ())
1226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
1236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		SetMinimumSize (Min_uint32 (MinimumSize (), PreferredSize ()));
1246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
1256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	// Else find default value for preferred size.
1276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	else
1296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
1306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		// If preferred size is zero, then we want the maximim
1326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		// size image.
1336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		if (MaximumSize ())
1356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
1366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			SetPreferredSize (MaximumSize ());
1376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
1386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
1406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	// If we don't have a minimum size, find default.
1426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	if (!MinimumSize ())
1446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
1456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		// A common size for embedded thumbnails is 120 by 160 pixels,
1476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		// So allow 120 by 160 pixels to be used for thumbnails when the
1486e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		// preferred size is 256 pixel.
1496e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1506e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		if (PreferredSize () >= 160 && PreferredSize () <= 256)
1516e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
1526e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			SetMinimumSize (160);
1536e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
1546e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1556e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		// Many sensors are near a multiple of 1024 pixels in size, but after
1566e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		// the default crop, they are a just under.  We can get an extra factor
1576e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		// of size reduction if we allow a slight undershoot in the final size
1586e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		// when computing large previews.
1596e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1606e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		else if (PreferredSize () >= 490 && PreferredSize () <= 512)
1616e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
1626e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			SetMinimumSize (490);
1636e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
1646e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1656e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		else if (PreferredSize () >= 980 && PreferredSize () <= 1024)
1666e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
1676e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			SetMinimumSize (980);
1686e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
1696e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1706e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		else if (PreferredSize () >= 1470 && PreferredSize () <= 1536)
1716e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
1726e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			SetMinimumSize (1470);
1736e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
1746e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1756e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		else if (PreferredSize () >= 1960 && PreferredSize () <= 2048)
1766e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
1776e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			SetMinimumSize (1960);
1786e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
1796e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1806e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		// Else minimum size is same as preferred size.
1816e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1826e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		else
1836e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
1846e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			SetMinimumSize (PreferredSize ());
1856e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
1866e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1876e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
1886e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1896e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
1906e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1916e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
1926e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1936e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimuint32 dng_host::SaveDNGVersion () const
1946e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
1956e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1966e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	return fSaveDNGVersion;
1976e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
1986e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
1996e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2006e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
2016e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2026e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimbool dng_host::SaveLinearDNG (const dng_negative & /* negative */) const
2036e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
2046e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2056e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	return fSaveLinearDNG;
2066e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2076e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
2086e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2096e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
2106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimbool dng_host::IsTransientError (dng_error_code code)
2126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
2136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	switch (code)
2156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
2166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		case dng_error_memory:
2186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		case dng_error_user_canceled:
2196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
2206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			return true;
2216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
2226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		default:
2246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			break;
2256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
2276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	return false;
2296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
2316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
2336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimvoid dng_host::PerformAreaTask (dng_area_task &task,
2356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim								const dng_rect &area)
2366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
2376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	dng_area_task::Perform (task,
2396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim							area,
2406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim							&Allocator (),
2416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim							Sniffer ());
2426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
2446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
2466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimuint32 dng_host::PerformAreaTaskThreads ()
2486e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
2496e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2506e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	return 1;
2516e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2526e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
2536e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2546e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
2556e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2566e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_exif * dng_host::Make_dng_exif ()
2576e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
2586e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2596e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	dng_exif *result = new dng_exif ();
2606e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2616e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	if (!result)
2626e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
2636e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2646e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		ThrowMemoryFull ();
2656e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2666e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
2676e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2686e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	return result;
2696e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2706e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
2716e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2726e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
2736e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
274327c6d5fa60ff1df8a421499edff3c6445a9d2e6Kinan Hakim#if qDNGUseXMP
275327c6d5fa60ff1df8a421499edff3c6445a9d2e6Kinan Hakim
2766e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_xmp * dng_host::Make_dng_xmp ()
2776e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
278c89552e7ed1e0ea69c69addf2bb5de011188d297Florian Kriener
2796e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	dng_xmp *result = new dng_xmp (Allocator ());
2806e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2816e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	if (!result)
2826e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
2836e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2846e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		ThrowMemoryFull ();
2856e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2866e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
2876e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2886e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	return result;
2896e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2906e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
2916e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
292327c6d5fa60ff1df8a421499edff3c6445a9d2e6Kinan Hakim#endif
293327c6d5fa60ff1df8a421499edff3c6445a9d2e6Kinan Hakim
2946e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
2956e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2966e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_shared * dng_host::Make_dng_shared ()
2976e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
2986e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
2996e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	dng_shared *result = new dng_shared ();
3006e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3016e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	if (!result)
3026e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
3036e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3046e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		ThrowMemoryFull ();
3056e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3066e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
3076e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3086e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	return result;
3096e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
3116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
3136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_ifd * dng_host::Make_dng_ifd ()
3156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
3166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	dng_ifd *result = new dng_ifd ();
3186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	if (!result)
3206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
3216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		ThrowMemoryFull ();
3236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
3256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	return result;
3276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
3296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
3316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_negative * dng_host::Make_dng_negative ()
3336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
3346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	return dng_negative::Make (*this);
3366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
3386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
3406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_image * dng_host::Make_dng_image (const dng_rect &bounds,
3426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim									  uint32 planes,
3436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim									  uint32 pixelType)
3446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
3456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	dng_image *result = new dng_simple_image (bounds,
3476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim											  planes,
3486e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim											  pixelType,
3496e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim											  Allocator ());
3506e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3516e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	if (!result)
3526e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
3536e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3546e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		ThrowMemoryFull ();
3556e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3566e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
3576e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3586e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	return result;
3596e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3606e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
3616e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3626e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
3636e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3646e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimdng_opcode * dng_host::Make_dng_opcode (uint32 opcodeID,
3656e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim										dng_stream &stream)
3666e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
3676e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3686e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	dng_opcode *result = NULL;
3696e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3706e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	switch (opcodeID)
3716e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
3726e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3736e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		case dngOpcode_WarpRectilinear:
3746e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
3756e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3766e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			result = new dng_opcode_WarpRectilinear (stream);
3776e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3786e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			break;
3796e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3806e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
3816e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3826e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		case dngOpcode_WarpFisheye:
3836e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
3846e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3856e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			result = new dng_opcode_WarpFisheye (stream);
3866e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3876e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			break;
3886e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3896e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
3906e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3916e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		case dngOpcode_FixVignetteRadial:
3926e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
3936e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3946e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			result = new dng_opcode_FixVignetteRadial (stream);
3956e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3966e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			break;
3976e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
3986e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
3996e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4006e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		case dngOpcode_FixBadPixelsConstant:
4016e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
4026e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4036e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			result = new dng_opcode_FixBadPixelsConstant (stream);
4046e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4056e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			break;
4066e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4076e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
4086e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4096e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		case dngOpcode_FixBadPixelsList:
4106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
4116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			result = new dng_opcode_FixBadPixelsList (stream);
4136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			break;
4156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
4176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		case dngOpcode_TrimBounds:
4196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
4206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			result = new dng_opcode_TrimBounds (stream);
4226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			break;
4246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
4266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		case dngOpcode_MapTable:
4286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
4296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			result = new dng_opcode_MapTable (*this,
4316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim											  stream);
4326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			break;
4346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
4366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		case dngOpcode_MapPolynomial:
4386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
4396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			result = new dng_opcode_MapPolynomial (stream);
4416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			break;
4436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
4456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		case dngOpcode_GainMap:
4476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
4486e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4496e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			result = new dng_opcode_GainMap (*this,
4506e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim											 stream);
4516e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4526e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			break;
4536e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4546e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
4556e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4566e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		case dngOpcode_DeltaPerRow:
4576e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
4586e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4596e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			result = new dng_opcode_DeltaPerRow (*this,
4606e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim											     stream);
4616e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4626e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			break;
4636e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4646e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
4656e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4666e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		case dngOpcode_DeltaPerColumn:
4676e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
4686e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4696e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			result = new dng_opcode_DeltaPerColumn (*this,
4706e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim											        stream);
4716e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4726e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			break;
4736e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4746e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
4756e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4766e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		case dngOpcode_ScalePerRow:
4776e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
4786e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4796e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			result = new dng_opcode_ScalePerRow (*this,
4806e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim											     stream);
4816e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4826e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			break;
4836e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4846e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
4856e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4866e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		case dngOpcode_ScalePerColumn:
4876e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
4886e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4896e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			result = new dng_opcode_ScalePerColumn (*this,
4906e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim											        stream);
4916e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4926e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			break;
4936e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4946e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
4956e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4966e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		default:
4976e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			{
4986e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
4996e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			result = new dng_opcode_Unknown (*this,
5006e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim											 opcodeID,
5016e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim											 stream);
5026e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
5036e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim			}
5046e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
5056e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
5066e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
5076e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	if (!result)
5086e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		{
5096e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
5106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		ThrowMemoryFull ();
5116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
5126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim		}
5136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
5146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	return result;
5156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
5166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
5176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
5186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
5196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
5206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimvoid dng_host::ApplyOpcodeList (dng_opcode_list &list,
5216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim								dng_negative &negative,
5226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim								AutoPtr<dng_image> &image)
5236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
5246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
5256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	list.Apply (*this,
5266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim				negative,
5276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim				image);
5286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
5296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
5306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
5316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
5326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
5336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimvoid dng_host::ResampleImage (const dng_image &srcImage,
5346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim							  dng_image &dstImage)
5356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	{
5366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
5376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	::ResampleImage (*this,
5386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim					 srcImage,
5396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim					 dstImage,
5406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim					 srcImage.Bounds (),
5416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim					 dstImage.Bounds (),
5426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim					 dng_resample_bicubic::Get ());
5436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
5446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim	}
5456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim
5466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/
547