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

/** \file
 * Indirection mechanism for performance-critical routines that might be replaced
 * with hand-optimized or hardware-specific implementations.
 */

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

#ifndef __dng_bottlenecks__
#define __dng_bottlenecks__

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

#include "dng_classes.h"
#include "dng_types.h"

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

typedef void (ZeroBytesProc)
			 (void *dPtr,
			  uint32 count);

typedef void (CopyBytesProc)
			 (const void *sPtr,
			  void *dPtr,
			  uint32 count);

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

typedef void (SwapBytes16Proc)
			 (uint16 *dPtr,
			  uint32 count);

typedef void (SwapBytes32Proc)
			 (uint32 *dPtr,
			  uint32 count);

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

typedef void (SetArea8Proc)
			 (uint8 *dPtr,
			  uint8 value,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 rowStep,
			  int32 colStep,
			  int32 planeStep);

typedef void (SetArea16Proc)
			 (uint16 *dPtr,
			  uint16 value,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 rowStep,
			  int32 colStep,
			  int32 planeStep);

typedef void (SetArea32Proc)
			 (uint32 *dPtr,
			  uint32 value,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 rowStep,
			  int32 colStep,
			  int32 planeStep);

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

typedef void (CopyArea8Proc)
			 (const uint8 *sPtr,
			  uint8 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 sRowStep,
			  int32 sColStep,
			  int32 sPlaneStep,
			  int32 dRowStep,
			  int32 dColStep,
			  int32 dPlaneStep);

typedef void (CopyArea16Proc)
			 (const uint16 *sPtr,
			  uint16 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 sRowStep,
			  int32 sColStep,
			  int32 sPlaneStep,
			  int32 dRowStep,
			  int32 dColStep,
			  int32 dPlaneStep);

typedef void (CopyArea32Proc)
			 (const uint32 *sPtr,
			  uint32 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 sRowStep,
			  int32 sColStep,
			  int32 sPlaneStep,
			  int32 dRowStep,
			  int32 dColStep,
			  int32 dPlaneStep);

typedef void (CopyArea8_16Proc)
			 (const uint8 *sPtr,
			  uint16 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 sRowStep,
			  int32 sColStep,
			  int32 sPlaneStep,
			  int32 dRowStep,
			  int32 dColStep,
			  int32 dPlaneStep);

typedef void (CopyArea8_S16Proc)
			 (const uint8 *sPtr,
			  int16 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 sRowStep,
			  int32 sColStep,
			  int32 sPlaneStep,
			  int32 dRowStep,
			  int32 dColStep,
			  int32 dPlaneStep);

typedef void (CopyArea8_32Proc)
			 (const uint8 *sPtr,
			  uint32 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 sRowStep,
			  int32 sColStep,
			  int32 sPlaneStep,
			  int32 dRowStep,
			  int32 dColStep,
			  int32 dPlaneStep);

typedef void (CopyArea16_S16Proc)
			 (const uint16 *sPtr,
			  int16 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 sRowStep,
			  int32 sColStep,
			  int32 sPlaneStep,
			  int32 dRowStep,
			  int32 dColStep,
			  int32 dPlaneStep);

typedef void (CopyArea16_32Proc)
			 (const uint16 *sPtr,
			  uint32 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 sRowStep,
			  int32 sColStep,
			  int32 sPlaneStep,
			  int32 dRowStep,
			  int32 dColStep,
			  int32 dPlaneStep);

typedef void (CopyArea8_R32Proc)
			 (const uint8 *sPtr,
			  real32 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 sRowStep,
			  int32 sColStep,
			  int32 sPlaneStep,
			  int32 dRowStep,
			  int32 dColStep,
			  int32 dPlaneStep,
			  uint32 pixelRange);

typedef void (CopyArea16_R32Proc)
			 (const uint16 *sPtr,
			  real32 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 sRowStep,
			  int32 sColStep,
			  int32 sPlaneStep,
			  int32 dRowStep,
			  int32 dColStep,
			  int32 dPlaneStep,
			  uint32 pixelRange);

typedef void (CopyAreaS16_R32Proc)
			 (const int16 *sPtr,
			  real32 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 sRowStep,
			  int32 sColStep,
			  int32 sPlaneStep,
			  int32 dRowStep,
			  int32 dColStep,
			  int32 dPlaneStep,
			  uint32 pixelRange);

typedef void (CopyAreaR32_8Proc)
			 (const real32 *sPtr,
			  uint8 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 sRowStep,
			  int32 sColStep,
			  int32 sPlaneStep,
			  int32 dRowStep,
			  int32 dColStep,
			  int32 dPlaneStep,
			  uint32 pixelRange);

typedef void (CopyAreaR32_16Proc)
			 (const real32 *sPtr,
			  uint16 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 sRowStep,
			  int32 sColStep,
			  int32 sPlaneStep,
			  int32 dRowStep,
			  int32 dColStep,
			  int32 dPlaneStep,
			  uint32 pixelRange);

typedef void (CopyAreaR32_S16Proc)
			 (const real32 *sPtr,
			  int16 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 sRowStep,
			  int32 sColStep,
			  int32 sPlaneStep,
			  int32 dRowStep,
			  int32 dColStep,
			  int32 dPlaneStep,
			  uint32 pixelRange);

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

typedef void (RepeatArea8Proc)
			 (const uint8 *sPtr,
			  uint8 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 rowStep,
			  int32 colStep,
			  int32 planeStep,
			  uint32 repeatV,
			  uint32 repeatH,
			  uint32 phaseV,
			  uint32 phaseH);

typedef void (RepeatArea16Proc)
			 (const uint16 *sPtr,
			  uint16 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 rowStep,
			  int32 colStep,
			  int32 planeStep,
			  uint32 repeatV,
			  uint32 repeatH,
			  uint32 phaseV,
			  uint32 phaseH);

typedef void (RepeatArea32Proc)
			 (const uint32 *sPtr,
			  uint32 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 rowStep,
			  int32 colStep,
			  int32 planeStep,
			  uint32 repeatV,
			  uint32 repeatH,
			  uint32 phaseV,
			  uint32 phaseH);

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

typedef void (ShiftRight16Proc)
			 (uint16 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 rowStep,
			  int32 colStep,
			  int32 planeStep,
			  uint32 shift);

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

typedef void (BilinearRow16Proc)
			 (const uint16 *sPtr,
			  uint16 *dPtr,
			  uint32 cols,
			  uint32 patPhase,
			  uint32 patCount,
			  const uint32 * kernCounts,
			  const int32  * const * kernOffsets,
			  const uint16 * const * kernWeights,
			  uint32 sShift);

typedef void (BilinearRow32Proc)
			 (const real32 *sPtr,
			  real32 *dPtr,
			  uint32 cols,
			  uint32 patPhase,
			  uint32 patCount,
			  const uint32 * kernCounts,
			  const int32  * const * kernOffsets,
			  const real32 * const * kernWeights,
			  uint32 sShift);

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

typedef void (BaselineABCtoRGBProc)
			 (const real32 *sPtrA,
			  const real32 *sPtrB,
			  const real32 *sPtrC,
			  real32 *dPtrR,
			  real32 *dPtrG,
			  real32 *dPtrB,
			  uint32 count,
			  const dng_vector &cameraWhite,
			  const dng_matrix &cameraToRGB);

typedef void (BaselineABCDtoRGBProc)
			 (const real32 *sPtrA,
			  const real32 *sPtrB,
			  const real32 *sPtrC,
			  const real32 *sPtrD,
			  real32 *dPtrR,
			  real32 *dPtrG,
			  real32 *dPtrB,
			  uint32 count,
			  const dng_vector &cameraWhite,
			  const dng_matrix &cameraToRGB);

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

typedef void (BaselineHueSatMapProc)
			 (const real32 *sPtrR,
			  const real32 *sPtrG,
			  const real32 *sPtrB,
			  real32 *dPtrR,
			  real32 *dPtrG,
			  real32 *dPtrB,
			  uint32 count,
			  const dng_hue_sat_map &lut,
			  const dng_1d_table *encodeTable,
			  const dng_1d_table *decodeTable);
			 
/*****************************************************************************/

typedef void (BaselineGrayToRGBProc)
			 (const real32 *sPtrR,
			  const real32 *sPtrG,
			  const real32 *sPtrB,
			  real32 *dPtrG,
			  uint32 count,
			  const dng_matrix &matrix);

typedef void (BaselineRGBtoRGBProc)
			 (const real32 *sPtrR,
			  const real32 *sPtrG,
			  const real32 *sPtrB,
			  real32 *dPtrR,
			  real32 *dPtrG,
			  real32 *dPtrB,
			  uint32 count,
			  const dng_matrix &matrix);

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

typedef void (Baseline1DTableProc)
			 (const real32 *sPtr,
			  real32 *dPtr,
			  uint32 count,
			  const dng_1d_table &table);

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

typedef void (BaselineRGBToneProc)
			 (const real32 *sPtrR,
			  const real32 *sPtrG,
			  const real32 *sPtrB,
			  real32 *dPtrR,
			  real32 *dPtrG,
			  real32 *dPtrB,
			  uint32 count,
			  const dng_1d_table &table);

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

typedef void (ResampleDown16Proc)
			 (const uint16 *sPtr,
			  uint16 *dPtr,
			  uint32 sCount,
			  int32 sRowStep,
			  const int16 *wPtr,
			  uint32 wCount,
			  uint32 pixelRange);

typedef void (ResampleDown32Proc)
			 (const real32 *sPtr,
			  real32 *dPtr,
			  uint32 sCount,
			  int32 sRowStep,
			  const real32 *wPtr,
			  uint32 wCount);

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

typedef void (ResampleAcross16Proc)
			 (const uint16 *sPtr,
			  uint16 *dPtr,
			  uint32 dCount,
			  const int32 *coord,
			  const int16 *wPtr,
			  uint32 wCount,
			  uint32 wStep,
			  uint32 pixelRange);
						
typedef void (ResampleAcross32Proc)
			 (const real32 *sPtr,
			  real32 *dPtr,
			  uint32 dCount,
			  const int32 *coord,
			  const real32 *wPtr,
			  uint32 wCount,
			  uint32 wStep);

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

typedef bool (EqualBytesProc)
			 (const void *sPtr,
			  const void *dPtr,
			  uint32 count);

typedef bool (EqualArea8Proc)
			 (const uint8 *sPtr,
			  const uint8 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 sRowStep,
			  int32 sColStep,
			  int32 sPlaneStep,
			  int32 dRowStep,
			  int32 dColStep,
			  int32 dPlaneStep);

typedef bool (EqualArea16Proc)
			 (const uint16 *sPtr,
			  const uint16 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 sRowStep,
			  int32 sColStep,
			  int32 sPlaneStep,
			  int32 dRowStep,
			  int32 dColStep,
			  int32 dPlaneStep);

typedef bool (EqualArea32Proc)
			 (const uint32 *sPtr,
			  const uint32 *dPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 sRowStep,
			  int32 sColStep,
			  int32 sPlaneStep,
			  int32 dRowStep,
			  int32 dColStep,
			  int32 dPlaneStep);

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

typedef void (VignetteMask16Proc)
			 (uint16 *mPtr,
			  uint32 rows,
			  uint32 cols,
			  int32 rowStep,
			  int64 offsetH,
			  int64 offsetV,
			  int64 stepH,
			  int64 stepV,
			  uint32 tBits,
			  const uint16 *table);

typedef void (Vignette16Proc)
			 (int16 *sPtr,
			  const uint16 *mPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 sRowStep,
			  int32 sPlaneStep,
			  int32 mRowStep,
			  uint32 mBits);

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

typedef void (Vignette32Proc)
			 (real32 *sPtr,
			  const uint16 *mPtr,
			  uint32 rows,
			  uint32 cols,
			  uint32 planes,
			  int32 sRowStep,
			  int32 sPlaneStep,
			  int32 mRowStep,
			  uint32 mBits);

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

typedef void (MapArea16Proc)
			 (uint16 *dPtr,
			  uint32 count0,
			  uint32 count1,
			  uint32 count2,
			  int32 step0,
			  int32 step1,
			  int32 step2,
			  const uint16 *map);

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

struct dng_suite	
	{
	ZeroBytesProc			*ZeroBytes;
	CopyBytesProc			*CopyBytes;
	SwapBytes16Proc			*SwapBytes16;
	SwapBytes32Proc			*SwapBytes32;
	SetArea8Proc			*SetArea8;
	SetArea16Proc			*SetArea16;
	SetArea32Proc			*SetArea32;
	CopyArea8Proc			*CopyArea8;
	CopyArea16Proc			*CopyArea16;
	CopyArea32Proc			*CopyArea32;
	CopyArea8_16Proc		*CopyArea8_16;
	CopyArea8_S16Proc		*CopyArea8_S16;
	CopyArea8_32Proc		*CopyArea8_32;
	CopyArea16_S16Proc		*CopyArea16_S16;
	CopyArea16_32Proc		*CopyArea16_32;
	CopyArea8_R32Proc		*CopyArea8_R32;
	CopyArea16_R32Proc		*CopyArea16_R32;
	CopyAreaS16_R32Proc		*CopyAreaS16_R32;
	CopyAreaR32_8Proc		*CopyAreaR32_8;		
	CopyAreaR32_16Proc		*CopyAreaR32_16;
	CopyAreaR32_S16Proc		*CopyAreaR32_S16;
	RepeatArea8Proc			*RepeatArea8;
	RepeatArea16Proc		*RepeatArea16;
	RepeatArea32Proc		*RepeatArea32;
	ShiftRight16Proc		*ShiftRight16;
	BilinearRow16Proc		*BilinearRow16;
	BilinearRow32Proc		*BilinearRow32;
	BaselineABCtoRGBProc	*BaselineABCtoRGB;
	BaselineABCDtoRGBProc	*BaselineABCDtoRGB;
	BaselineHueSatMapProc	*BaselineHueSatMap;
	BaselineGrayToRGBProc	*BaselineRGBtoGray;
	BaselineRGBtoRGBProc	*BaselineRGBtoRGB;
	Baseline1DTableProc		*Baseline1DTable;
	BaselineRGBToneProc		*BaselineRGBTone;
	ResampleDown16Proc		*ResampleDown16;
	ResampleDown32Proc		*ResampleDown32;
	ResampleAcross16Proc	*ResampleAcross16;
	ResampleAcross32Proc	*ResampleAcross32;
	EqualBytesProc			*EqualBytes;
	EqualArea8Proc			*EqualArea8;
	EqualArea16Proc			*EqualArea16;
	EqualArea32Proc			*EqualArea32;
	VignetteMask16Proc		*VignetteMask16;
	Vignette16Proc			*Vignette16;
	Vignette32Proc			*Vignette32;
	MapArea16Proc			*MapArea16;
	};

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

extern dng_suite gDNGSuite;

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

inline void DoZeroBytes (void *dPtr,
						 uint32 count)
	{
	
	(gDNGSuite.ZeroBytes) (dPtr,
						   count);
	
	}

inline void DoCopyBytes (const void *sPtr,
						 void *dPtr,
						 uint32 count)
	{
	
	(gDNGSuite.CopyBytes) (sPtr,
						   dPtr,
						   count);
	
	}

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

inline void DoSwapBytes16 (uint16 *dPtr,
						   uint32 count)
	{
	
	(gDNGSuite.SwapBytes16) (dPtr,
						     count);
	
	}

inline void DoSwapBytes32 (uint32 *dPtr,
						   uint32 count)
	{
	
	(gDNGSuite.SwapBytes32) (dPtr,
						     count);
	
	}

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

inline void DoSetArea8 (uint8 *dPtr,
					    uint8 value,
						uint32 rows,
						uint32 cols,
						uint32 planes,
						int32 rowStep,
						int32 colStep,
						int32 planeStep)
	{
	
	(gDNGSuite.SetArea8) (dPtr,
						  value,
						  rows,
						  cols,
						  planes,
						  rowStep,
						  colStep,
						  planeStep);
	
	}

inline void DoSetArea16 (uint16 *dPtr,
						 uint16 value,
						 uint32 rows,
						 uint32 cols,
						 uint32 planes,
						 int32 rowStep,
						 int32 colStep,
						 int32 planeStep)
	{
	
	(gDNGSuite.SetArea16) (dPtr,
						   value,
						   rows,
						   cols,
						   planes,
						   rowStep,
						   colStep,
						   planeStep);
	
	}

inline void DoSetArea32 (uint32 *dPtr,
						 uint32 value,
						 uint32 rows,
						 uint32 cols,
						 uint32 planes,
						 int32 rowStep,
						 int32 colStep,
						 int32 planeStep)
	{
	
	(gDNGSuite.SetArea32) (dPtr,
						   value,
						   rows,
						   cols,
						   planes,
						   rowStep,
						   colStep,
						   planeStep);
	
	}

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

inline void DoCopyArea8 (const uint8 *sPtr,
						 uint8 *dPtr,
						 uint32 rows,
						 uint32 cols,
						 uint32 planes,
						 int32 sRowStep,
						 int32 sColStep,
						 int32 sPlaneStep,
						 int32 dRowStep,
						 int32 dColStep,
						 int32 dPlaneStep)
	{
	
	(gDNGSuite.CopyArea8) (sPtr,
						   dPtr,
						   rows,
						   cols,
						   planes,
						   sRowStep,
						   sColStep,
						   sPlaneStep,
						   dRowStep,
						   dColStep,
						   dPlaneStep);
	
	}

inline void DoCopyArea16 (const uint16 *sPtr,
						  uint16 *dPtr,
						  uint32 rows,
						  uint32 cols,
						  uint32 planes,
						  int32 sRowStep,
						  int32 sColStep,
						  int32 sPlaneStep,
						  int32 dRowStep,
						  int32 dColStep,
						  int32 dPlaneStep)
	{
	
	(gDNGSuite.CopyArea16) (sPtr,
							dPtr,
							rows,
							cols,
							planes,
							sRowStep,
							sColStep,
							sPlaneStep,
							dRowStep,
							dColStep,
							dPlaneStep);
	
	}

inline void DoCopyArea32 (const uint32 *sPtr,
						  uint32 *dPtr,
						  uint32 rows,
						  uint32 cols,
						  uint32 planes,
						  int32 sRowStep,
						  int32 sColStep,
						  int32 sPlaneStep,
						  int32 dRowStep,
						  int32 dColStep,
						  int32 dPlaneStep)
	{
	
	(gDNGSuite.CopyArea32) (sPtr,
							dPtr,
							rows,
							cols,
							planes,
							sRowStep,
							sColStep,
							sPlaneStep,
							dRowStep,
							dColStep,
							dPlaneStep);
	
	}

inline void DoCopyArea8_16 (const uint8 *sPtr,
						    uint16 *dPtr,
						    uint32 rows,
						    uint32 cols,
						    uint32 planes,
						    int32 sRowStep,
						    int32 sColStep,
						    int32 sPlaneStep,
						    int32 dRowStep,
						    int32 dColStep,
						    int32 dPlaneStep)
	{
	
	(gDNGSuite.CopyArea8_16) (sPtr,
							  dPtr,
							  rows,
							  cols,
							  planes,
							  sRowStep,
							  sColStep,
							  sPlaneStep,
							  dRowStep,
							  dColStep,
							  dPlaneStep);
	
	}

inline void DoCopyArea8_S16 (const uint8 *sPtr,
						     int16 *dPtr,
						     uint32 rows,
						     uint32 cols,
						     uint32 planes,
						     int32 sRowStep,
						     int32 sColStep,
						     int32 sPlaneStep,
						     int32 dRowStep,
						     int32 dColStep,
						     int32 dPlaneStep)
	{
	
	(gDNGSuite.CopyArea8_S16) (sPtr,
							   dPtr,
							   rows,
							   cols,
							   planes,
							   sRowStep,
							   sColStep,
							   sPlaneStep,
							   dRowStep,
							   dColStep,
							   dPlaneStep);
	
	}

inline void DoCopyArea8_32 (const uint8 *sPtr,
						    uint32 *dPtr,
						    uint32 rows,
						    uint32 cols,
						    uint32 planes,
						    int32 sRowStep,
						    int32 sColStep,
						    int32 sPlaneStep,
						    int32 dRowStep,
						    int32 dColStep,
						    int32 dPlaneStep)
	{
	
	(gDNGSuite.CopyArea8_32) (sPtr,
							  dPtr,
							  rows,
							  cols,
							  planes,
							  sRowStep,
							  sColStep,
							  sPlaneStep,
							  dRowStep,
							  dColStep,
							  dPlaneStep);
	
	}

inline void DoCopyArea16_S16 (const uint16 *sPtr,
						      int16 *dPtr,
						      uint32 rows,
						      uint32 cols,
						      uint32 planes,
						      int32 sRowStep,
						      int32 sColStep,
						      int32 sPlaneStep,
						      int32 dRowStep,
						      int32 dColStep,
						      int32 dPlaneStep)
	{
	
	(gDNGSuite.CopyArea16_S16) (sPtr,
							    dPtr,
							    rows,
							    cols,
							    planes,
							    sRowStep,
							    sColStep,
							    sPlaneStep,
							    dRowStep,
							    dColStep,
							    dPlaneStep);

	}

inline void DoCopyArea16_32 (const uint16 *sPtr,
						     uint32 *dPtr,
						     uint32 rows,
						     uint32 cols,
						     uint32 planes,
						     int32 sRowStep,
						     int32 sColStep,
						     int32 sPlaneStep,
						     int32 dRowStep,
						     int32 dColStep,
						     int32 dPlaneStep)
	{
	
	(gDNGSuite.CopyArea16_32) (sPtr,
							   dPtr,
							   rows,
							   cols,
							   planes,
							   sRowStep,
							   sColStep,
							   sPlaneStep,
							   dRowStep,
							   dColStep,
							   dPlaneStep);

	}

inline void DoCopyArea8_R32 (const uint8 *sPtr,
							 real32 *dPtr,
							 uint32 rows,
							 uint32 cols,
							 uint32 planes,
							 int32 sRowStep,
							 int32 sColStep,
							 int32 sPlaneStep,
							 int32 dRowStep,
							 int32 dColStep,
							 int32 dPlaneStep,
							 uint32 pixelRange)
	{
	
	(gDNGSuite.CopyArea8_R32) (sPtr,
							   dPtr,
							   rows,
							   cols,
							   planes,
							   sRowStep,
							   sColStep,
							   sPlaneStep,
							   dRowStep,
							   dColStep,
							   dPlaneStep,
							   pixelRange);

	}

inline void DoCopyArea16_R32 (const uint16 *sPtr,
							  real32 *dPtr,
							  uint32 rows,
							  uint32 cols,
							  uint32 planes,
							  int32 sRowStep,
							  int32 sColStep,
							  int32 sPlaneStep,
							  int32 dRowStep,
							  int32 dColStep,
							  int32 dPlaneStep,
							  uint32 pixelRange)
	{
	
	(gDNGSuite.CopyArea16_R32) (sPtr,
							    dPtr,
							    rows,
							    cols,
							    planes,
							    sRowStep,
							    sColStep,
							    sPlaneStep,
							    dRowStep,
							    dColStep,
							    dPlaneStep,
							    pixelRange);

	}

inline void DoCopyAreaS16_R32 (const int16 *sPtr,
							   real32 *dPtr,
							   uint32 rows,
							   uint32 cols,
							   uint32 planes,
							   int32 sRowStep,
							   int32 sColStep,
							   int32 sPlaneStep,
							   int32 dRowStep,
							   int32 dColStep,
							   int32 dPlaneStep,
							   uint32 pixelRange)
	{
	
	(gDNGSuite.CopyAreaS16_R32) (sPtr,
							     dPtr,
							     rows,
							     cols,
							     planes,
							     sRowStep,
							     sColStep,
							     sPlaneStep,
							     dRowStep,
							     dColStep,
							     dPlaneStep,
							     pixelRange);

	}

inline void DoCopyAreaR32_8 (const real32 *sPtr,
							 uint8 *dPtr,
							 uint32 rows,
							 uint32 cols,
							 uint32 planes,
							 int32 sRowStep,
							 int32 sColStep,
							 int32 sPlaneStep,
							 int32 dRowStep,
							 int32 dColStep,
							 int32 dPlaneStep,
							 uint32 pixelRange)
	{
	
	(gDNGSuite.CopyAreaR32_8) (sPtr,
							   dPtr,
							   rows,
							   cols,
							   planes,
							   sRowStep,
							   sColStep,
							   sPlaneStep,
							   dRowStep,
							   dColStep,
							   dPlaneStep,
							   pixelRange);

	}

inline void DoCopyAreaR32_16 (const real32 *sPtr,
							  uint16 *dPtr,
							  uint32 rows,
							  uint32 cols,
							  uint32 planes,
							  int32 sRowStep,
							  int32 sColStep,
							  int32 sPlaneStep,
							  int32 dRowStep,
							  int32 dColStep,
							  int32 dPlaneStep,
							  uint32 pixelRange)
	{
	
	(gDNGSuite.CopyAreaR32_16) (sPtr,
							    dPtr,
							    rows,
							    cols,
							    planes,
							    sRowStep,
							    sColStep,
							    sPlaneStep,
							    dRowStep,
							    dColStep,
							    dPlaneStep,
							    pixelRange);

	}

inline void DoCopyAreaR32_S16 (const real32 *sPtr,
							   int16 *dPtr,
							   uint32 rows,
							   uint32 cols,
							   uint32 planes,
							   int32 sRowStep,
							   int32 sColStep,
							   int32 sPlaneStep,
							   int32 dRowStep,
							   int32 dColStep,
							   int32 dPlaneStep,
							   uint32 pixelRange)
	{
	
	(gDNGSuite.CopyAreaR32_S16) (sPtr,
							     dPtr,
							     rows,
							     cols,
							     planes,
							     sRowStep,
							     sColStep,
							     sPlaneStep,
							     dRowStep,
							     dColStep,
							     dPlaneStep,
							     pixelRange);

	}

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

inline void DoRepeatArea8 (const uint8 *sPtr,
						   uint8 *dPtr,
						   uint32 rows,
						   uint32 cols,
						   uint32 planes,
						   int32 rowStep,
						   int32 colStep,
						   int32 planeStep,
						   uint32 repeatV,
						   uint32 repeatH,
						   uint32 phaseV,
						   uint32 phaseH)
	{
	
	(gDNGSuite.RepeatArea8) (sPtr,
						     dPtr,
						     rows,
						     cols,
						     planes,
						     rowStep,
						     colStep,
						     planeStep,
						     repeatV,
						     repeatH,
						     phaseV,
						     phaseH);

	}

inline void DoRepeatArea16 (const uint16 *sPtr,
							uint16 *dPtr,
							uint32 rows,
							uint32 cols,
							uint32 planes,
							int32 rowStep,
							int32 colStep,
							int32 planeStep,
							uint32 repeatV,
							uint32 repeatH,
							uint32 phaseV,
							uint32 phaseH)
	{
	
	(gDNGSuite.RepeatArea16) (sPtr,
						      dPtr,
						      rows,
						      cols,
						      planes,
						      rowStep,
						      colStep,
						      planeStep,
						      repeatV,
						      repeatH,
						      phaseV,
						      phaseH);

	}

inline void DoRepeatArea32 (const uint32 *sPtr,
							uint32 *dPtr,
							uint32 rows,
							uint32 cols,
							uint32 planes,
							int32 rowStep,
							int32 colStep,
							int32 planeStep,
							uint32 repeatV,
							uint32 repeatH,
							uint32 phaseV,
							uint32 phaseH)
	{
	
	(gDNGSuite.RepeatArea32) (sPtr,
						      dPtr,
						      rows,
						      cols,
						      planes,
						      rowStep,
						      colStep,
						      planeStep,
						      repeatV,
						      repeatH,
						      phaseV,
						      phaseH);

	}
		
/*****************************************************************************/

inline void DoShiftRight16 (uint16 *dPtr,
						    uint32 rows,
						    uint32 cols,
						    uint32 planes,
						    int32 rowStep,
						    int32 colStep,
						    int32 planeStep,
						    uint32 shift)
	{
	
	(gDNGSuite.ShiftRight16) (dPtr,
							  rows,
							  cols,
							  planes,
							  rowStep,
							  colStep,
							  planeStep,
							  shift);
	
	}

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

inline void DoBilinearRow16 (const uint16 *sPtr,
							 uint16 *dPtr,
							 uint32 cols,
							 uint32 patPhase,
							 uint32 patCount,
							 const uint32 * kernCounts,
							 const int32  * const * kernOffsets,
							 const uint16 * const * kernWeights,
							 uint32 sShift)
	{
	
	(gDNGSuite.BilinearRow16) (sPtr,
							   dPtr,
							   cols,
							   patPhase,
							   patCount,
							   kernCounts,
							   kernOffsets,
							   kernWeights,
							   sShift);
	
	}
	
inline void DoBilinearRow32 (const real32 *sPtr,
							 real32 *dPtr,
							 uint32 cols,
							 uint32 patPhase,
							 uint32 patCount,
							 const uint32 * kernCounts,
							 const int32  * const * kernOffsets,
							 const real32 * const * kernWeights,
							 uint32 sShift)
	{
	
	(gDNGSuite.BilinearRow32) (sPtr,
							   dPtr,
							   cols,
							   patPhase,
							   patCount,
							   kernCounts,
							   kernOffsets,
							   kernWeights,
							   sShift);
	
	}

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

inline void DoBaselineABCtoRGB (const real32 *sPtrA,
								const real32 *sPtrB,
								const real32 *sPtrC,
								real32 *dPtrR,
								real32 *dPtrG,
								real32 *dPtrB,
								uint32 count,
								const dng_vector &cameraWhite,
								const dng_matrix &cameraToRGB)
	{
	
	(gDNGSuite.BaselineABCtoRGB) (sPtrA,
								  sPtrB,
								  sPtrC,
								  dPtrR,
								  dPtrG,
								  dPtrB,
								  count,
								  cameraWhite,
								  cameraToRGB);
	
	}

inline void DoBaselineABCDtoRGB (const real32 *sPtrA,
								 const real32 *sPtrB,
								 const real32 *sPtrC,
								 const real32 *sPtrD,
								 real32 *dPtrR,
								 real32 *dPtrG,
								 real32 *dPtrB,
								 uint32 count,
								 const dng_vector &cameraWhite,
								 const dng_matrix &cameraToRGB)
	{
	
	(gDNGSuite.BaselineABCDtoRGB) (sPtrA,
								   sPtrB,
								   sPtrC,
								   sPtrD,
								   dPtrR,
								   dPtrG,
								   dPtrB,
								   count,
								   cameraWhite,
								   cameraToRGB);
	
	}

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

inline void DoBaselineHueSatMap (const real32 *sPtrR,
								 const real32 *sPtrG,
								 const real32 *sPtrB,
								 real32 *dPtrR,
								 real32 *dPtrG,
								 real32 *dPtrB,
								 uint32 count,
								 const dng_hue_sat_map &lut,
								 const dng_1d_table *encodeTable,
								 const dng_1d_table *decodeTable)
	{
	
	(gDNGSuite.BaselineHueSatMap) (sPtrR,
								   sPtrG,
								   sPtrB,
								   dPtrR,
								   dPtrG,
								   dPtrB,
								   count,
								   lut,
								   encodeTable,
								   decodeTable);
	
	}

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

inline void DoBaselineRGBtoGray (const real32 *sPtrR,
								 const real32 *sPtrG,
								 const real32 *sPtrB,
								 real32 *dPtrG,
								 uint32 count,
								 const dng_matrix &matrix)
	{
	
	(gDNGSuite.BaselineRGBtoGray) (sPtrR,
								   sPtrG,
								   sPtrB,
								   dPtrG,
								   count,
								   matrix);
	
	}

inline void DoBaselineRGBtoRGB (const real32 *sPtrR,
								const real32 *sPtrG,
								const real32 *sPtrB,
								real32 *dPtrR,
								real32 *dPtrG,
								real32 *dPtrB,
								uint32 count,
								const dng_matrix &matrix)
	{
	
	(gDNGSuite.BaselineRGBtoRGB) (sPtrR,
								  sPtrG,
								  sPtrB,
								  dPtrR,
								  dPtrG,
								  dPtrB,
								  count,
								  matrix);
	
	}

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

inline void DoBaseline1DTable (const real32 *sPtr,
							   real32 *dPtr,
							   uint32 count,
							   const dng_1d_table &table)
	{
	
	(gDNGSuite.Baseline1DTable) (sPtr,
								 dPtr,
								 count,
								 table);
	
	}

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

inline void DoBaselineRGBTone (const real32 *sPtrR,
							   const real32 *sPtrG,
							   const real32 *sPtrB,
							   real32 *dPtrR,
							   real32 *dPtrG,
							   real32 *dPtrB,
							   uint32 count,
							   const dng_1d_table &table)
	{
	
	(gDNGSuite.BaselineRGBTone) (sPtrR,
								 sPtrG,
								 sPtrB,
								 dPtrR,
								 dPtrG,
								 dPtrB,
								 count,
								 table);
	
	}

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

inline void DoResampleDown16 (const uint16 *sPtr,
							  uint16 *dPtr,
							  uint32 sCount,
							  int32 sRowStep,
							  const int16 *wPtr,
							  uint32 wCount,
							  uint32 pixelRange)
	{
	
	(gDNGSuite.ResampleDown16) (sPtr,
								dPtr,
								sCount,
								sRowStep,
								wPtr,
								wCount,
								pixelRange);
	
	}

inline void DoResampleDown32 (const real32 *sPtr,
							  real32 *dPtr,
							  uint32 sCount,
							  int32 sRowStep,
							  const real32 *wPtr,
							  uint32 wCount)
	{
	
	(gDNGSuite.ResampleDown32) (sPtr,
								dPtr,
								sCount,
								sRowStep,
								wPtr,
								wCount);
	
	}

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

inline void DoResampleAcross16 (const uint16 *sPtr,
								uint16 *dPtr,
								uint32 dCount,
								const int32 *coord,
								const int16 *wPtr,
								uint32 wCount,
								uint32 wStep,
								uint32 pixelRange)
	{
	
	(gDNGSuite.ResampleAcross16) (sPtr,
								  dPtr,
								  dCount,
								  coord,
								  wPtr,
								  wCount,
								  wStep,
								  pixelRange);
	
	}
						
inline void DoResampleAcross32 (const real32 *sPtr,
								real32 *dPtr,
								uint32 dCount,
								const int32 *coord,
								const real32 *wPtr,
								uint32 wCount,
								uint32 wStep)
	{
	
	(gDNGSuite.ResampleAcross32) (sPtr,
								  dPtr,
								  dCount,
								  coord,
								  wPtr,
								  wCount,
								  wStep);
	
	}

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

inline bool DoEqualBytes (const void *sPtr,
						  const void *dPtr,
						  uint32 count)
	{
	
	return (gDNGSuite.EqualBytes) (sPtr,
								   dPtr,
								   count);
	
	}

inline bool DoEqualArea8 (const uint8 *sPtr,
						  const uint8 *dPtr,
						  uint32 rows,
						  uint32 cols,
						  uint32 planes,
						  int32 sRowStep,
						  int32 sColStep,
						  int32 sPlaneStep,
						  int32 dRowStep,
						  int32 dColStep,
						  int32 dPlaneStep)
	{
	
	return (gDNGSuite.EqualArea8) (sPtr,
								   dPtr,
								   rows,
								   cols,
								   planes,
								   sRowStep,
								   sColStep,
								   sPlaneStep,
								   dRowStep,
								   dColStep,
								   dPlaneStep);
	
	}

inline bool DoEqualArea16 (const uint16 *sPtr,
						   const uint16 *dPtr,
						   uint32 rows,
						   uint32 cols,
						   uint32 planes,
						   int32 sRowStep,
						   int32 sColStep,
						   int32 sPlaneStep,
						   int32 dRowStep,
						   int32 dColStep,
						   int32 dPlaneStep)
	{
	
	return (gDNGSuite.EqualArea16) (sPtr,
									dPtr,
									rows,
									cols,
									planes,
									sRowStep,
									sColStep,
									sPlaneStep,
									dRowStep,
									dColStep,
									dPlaneStep);
	
	}

inline bool DoEqualArea32 (const uint32 *sPtr,
						   const uint32 *dPtr,
						   uint32 rows,
						   uint32 cols,
						   uint32 planes,
						   int32 sRowStep,
						   int32 sColStep,
						   int32 sPlaneStep,
						   int32 dRowStep,
						   int32 dColStep,
						   int32 dPlaneStep)
	{
	
	return (gDNGSuite.EqualArea32) (sPtr,
									dPtr,
									rows,
									cols,
									planes,
									sRowStep,
									sColStep,
									sPlaneStep,
									dRowStep,
									dColStep,
									dPlaneStep);
	
	}

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

inline void DoVignetteMask16 (uint16 *mPtr,
							  uint32 rows,
							  uint32 cols,
							  int32 rowStep,
							  int64 offsetH,
							  int64 offsetV,
							  int64 stepH,
							  int64 stepV,
							  uint32 tBits,
							  const uint16 *table)
	{
	
	(gDNGSuite.VignetteMask16) (mPtr,
								rows,
								cols,
								rowStep,
								offsetH,
								offsetV,
								stepH,
								stepV,
								tBits,
								table);

	}

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

inline void DoVignette16 (int16 *sPtr,
						  const uint16 *mPtr,
						  uint32 rows,
						  uint32 cols,
						  uint32 planes,
						  int32 sRowStep,
						  int32 sPlaneStep,
						  int32 mRowStep,
						  uint32 mBits)
	{
	
	(gDNGSuite.Vignette16) (sPtr,
							mPtr,
							rows,
							cols,
							planes,
							sRowStep,
							sPlaneStep,
							mRowStep,
							mBits);

	}

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

inline void DoVignette32 (real32 *sPtr,
						  const uint16 *mPtr,
						  uint32 rows,
						  uint32 cols,
						  uint32 planes,
						  int32 sRowStep,
						  int32 sPlaneStep,
						  int32 mRowStep,
						  uint32 mBits)
	{
	
	(gDNGSuite.Vignette32) (sPtr,
							mPtr,
							rows,
							cols,
							planes,
							sRowStep,
							sPlaneStep,
							mRowStep,
							mBits);

	}

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

inline void DoMapArea16 (uint16 *dPtr,
						 uint32 count0,
						 uint32 count1,
						 uint32 count2,
						 int32 step0,
						 int32 step1,
						 int32 step2,
						 const uint16 *map)
	{
	
	(gDNGSuite.MapArea16) (dPtr,
						   count0,
						   count1,
						   count2,
						   step0,
						   step1,
						   step2,
						   map);

	}

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

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