10b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 20b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// Copyright 2006-2007 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_resample.h#1 $ */ 100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $DateTime: 2012/05/30 13:28:51 $ */ 110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Change: 832332 $ */ 120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Author: tknoll $ */ 130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#ifndef __dng_resample__ 170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define __dng_resample__ 180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_assertions.h" 220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_auto_ptr.h" 230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_classes.h" 240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_memory.h" 250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_point.h" 260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_types.h" 270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_resample_function 310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_resample_function () 360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual ~dng_resample_function () 400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual real64 Extent () const = 0; 440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual real64 Evaluate (real64 x) const = 0; 460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_resample_bicubic: public dng_resample_function 520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual real64 Extent () const; 570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual real64 Evaluate (real64 x) const; 590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener static const dng_resample_function & Get (); 610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerconst uint32 kResampleSubsampleBits = 7; 670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerconst uint32 kResampleSubsampleCount = 1 << kResampleSubsampleBits; 680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerconst uint32 kResampleSubsampleMask = kResampleSubsampleCount - 1; 690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_resample_coords 730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener int32 fOrigin; 780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> fCoords; 800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_resample_coords (); 840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual ~dng_resample_coords (); 860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void Initialize (int32 srcOrigin, 880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener int32 dstOrigin, 890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 srcCount, 900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 dstCount, 910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_memory_allocator &allocator); 920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const int32 * Coords (int32 index) const 940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fCoords->Buffer_int32 () + (index - fOrigin); 960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const int32 Pixel (int32 index) const 990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return Coords (index) [0] >> kResampleSubsampleBits; 1010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 1040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_resample_weights 1080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 1110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fRadius; 1130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fWeightStep; 1150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> fWeights32; 1170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> fWeights16; 1180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 1200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_resample_weights (); 1220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual ~dng_resample_weights (); 1240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void Initialize (real64 scale, 1260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_resample_function &kernel, 1270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_memory_allocator &allocator); 1280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 Radius () const 1300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fRadius; 1320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 Width () const 1350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fRadius * 2; 1370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener int32 Offset () const 1400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return 1 - (int32) fRadius; 1420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 Step () const 1450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fWeightStep; 1470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const real32 *Weights32 (uint32 fract) const 1500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener DNG_ASSERT (fWeights32->Buffer (), "Weights32 is NULL"); 1530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (fract >= kResampleSubsampleCount) 1550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener ThrowBadFormat (); 1580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fWeights32->Buffer_real32 () + fract * fWeightStep; 1620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const int16 *Weights16 (uint32 fract) const 1660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener DNG_ASSERT (fWeights16->Buffer (), "Weights16 is NULL"); 1690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (fract >= kResampleSubsampleCount) 1710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener ThrowBadFormat (); 1740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fWeights16->Buffer_int16 () + fract * fWeightStep; 1780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 1820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerconst uint32 kResampleSubsampleBits2D = 5; 1860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerconst uint32 kResampleSubsampleCount2D = 1 << kResampleSubsampleBits2D; 1870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerconst uint32 kResampleSubsampleMask2D = kResampleSubsampleCount2D - 1; 1880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_resample_weights_2d 1920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 1950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fRadius; 1970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fRowStep; 1990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fColStep; 2000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> fWeights32; 2020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> fWeights16; 2030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 2050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_resample_weights_2d (); 2070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual ~dng_resample_weights_2d (); 2090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void Initialize (const dng_resample_function &kernel, 2110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_memory_allocator &allocator); 2120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 Radius () const 2140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fRadius; 2160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 Width () const 2190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fRadius * 2; 2210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener int32 Offset () const 2240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return 1 - (int32) fRadius; 2260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 RowStep () const 2290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fRowStep; 2310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 ColStep () const 2340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fColStep; 2360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const real32 *Weights32 (dng_point fract) const 2390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener DNG_ASSERT (fWeights32->Buffer (), "Weights32 is NULL"); 2420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (fract.v < 0 || fract.h < 0 2440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener || fract.v >= static_cast<int32>(kResampleSubsampleCount2D) 2450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener || fract.h >= static_cast<int32>(kResampleSubsampleCount2D)) 2460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener ThrowBadFormat (); 2490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const uint32 offset = fract.v * fRowStep + fract.h * fColStep; 253c89552e7ed1e0ea69c69addf2bb5de011188d297Florian Kriener 2540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fWeights32->Buffer_real32 () + offset; 2550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const int16 *Weights16 (dng_point fract) const 2590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener DNG_ASSERT (fWeights16->Buffer (), "Weights16 is NULL"); 2620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (fract.v < 0 || fract.h < 0 2640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener || fract.v >= static_cast<int32>(kResampleSubsampleCount2D) 2650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener || fract.h >= static_cast<int32>(kResampleSubsampleCount2D)) 2660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener ThrowBadFormat (); 2690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const uint32 offset = fract.v * fRowStep + fract.h * fColStep; 2730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fWeights16->Buffer_int16 () + offset; 2750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 2790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 2810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienervoid ResampleImage (dng_host &host, 2830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_image &srcImage, 2840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_image &dstImage, 2850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &srcBounds, 2860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &dstBounds, 2870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_resample_function &kernel); 2880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 2900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif 2920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 294