dng_pixel_buffer.h revision c89552e7ed1e0ea69c69addf2bb5de011188d297
16e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 26e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim// Copyright 2006-2008 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_pixel_buffer.h#1 $ */ 106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/* $DateTime: 2012/05/30 13:28:51 $ */ 116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/* $Change: 832332 $ */ 126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/* $Author: tknoll $ */ 136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/** \file 156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim * Support for holding buffers of sample data. 166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim */ 176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#ifndef __dng_pixel_buffer__ 216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#define __dng_pixel_buffer__ 226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_assertions.h" 266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_rect.h" 276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_safe_arithmetic.h" 286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#include "dng_tag_types.h" 296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/// Compute best set of step values for a given source and destination area and stride. 336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimvoid OptimizeOrder (const void *&sPtr, 356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void *&dPtr, 366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 sPixelSize, 376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 dPixelSize, 386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 &count0, 396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 &count1, 406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 &count2, 416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 &sStep0, 426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 &sStep1, 436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 &sStep2, 446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 &dStep0, 456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 &dStep1, 466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 &dStep2); 476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 486e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimvoid OptimizeOrder (const void *&sPtr, 496e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 sPixelSize, 506e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 &count0, 516e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 &count1, 526e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 &count2, 536e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 &sStep0, 546e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 &sStep1, 556e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 &sStep2); 566e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 576e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimvoid OptimizeOrder (void *&dPtr, 586e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 dPixelSize, 596e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 &count0, 606e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 &count1, 616e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 &count2, 626e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 &dStep0, 636e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 &dStep1, 646e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 &dStep2); 656e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 666e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 676e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 686e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#define qDebugPixelType 0 696e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 706e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#if qDebugPixelType 716e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 726e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#define ASSERT_PIXEL_TYPE(typeVal) CheckPixelType (typeVal) 736e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 746e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#else 756e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 766e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#define ASSERT_PIXEL_TYPE(typeVal) DNG_ASSERT (fPixelType == typeVal, "Pixel type access mismatch") 776e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 786e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#endif 796e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 806e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 816e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 826e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/// \brief Holds a buffer of pixel data with "pixel geometry" metadata. 836e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/// 846e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/// The pixel geometry describes the layout in terms of how many planes, rows and columns 856e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/// plus the steps (in bytes) between each column, row and plane. 866e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 876e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakimclass dng_pixel_buffer 886e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 896e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 906e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim public: 916e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 926e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // Area this buffer holds. 936e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 946e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_rect fArea; 956e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 966e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // Range of planes this buffer holds. 976e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 986e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 fPlane; 996e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 fPlanes; 1006e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1016e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // Steps between pixels. 1026e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1036e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 fRowStep; 1046e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 fColStep; 1056e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 fPlaneStep; 1066e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1076e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // Basic pixel type (TIFF tag type code). 1086e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1096e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 fPixelType; 1106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // Size of pixel type in bytes. 1126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 fPixelSize; 1146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // Pointer to buffer's data. 1166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void *fData; 1186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // Do we have write-access to this data? 1206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim bool fDirty; 1226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim private: 1246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void * InternalPixel (int32 row, 1266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 col, 1276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane = 0) const 1286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 129c89552e7ed1e0ea69c69addf2bb5de011188d297Florian Kriener 1306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // Ensure pixel to be accessed lies inside valid area. 1316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim if (row < fArea.t || row >= fArea.b || 1326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim col < fArea.l || col >= fArea.r || 1336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim plane < fPlane || (plane - fPlane) >= fPlanes) 1346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 1356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim ThrowProgramError ("Out-of-range pixel access"); 1366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 1376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // Compute offset of pixel. 1396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const int64 rowOffset = SafeInt64Mult(fRowStep, 1406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim static_cast<int64> (row) - static_cast<int64> (fArea.t)); 1416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const int64 colOffset = SafeInt64Mult(fColStep, 1426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim static_cast<int64> (col) - static_cast<int64> (fArea.l)); 1436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const int64 planeOffset = SafeInt64Mult(fPlaneStep, 1446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim static_cast<int64> (plane - fPlane)); 1456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const int64 offset = SafeInt64Mult(static_cast<int64>(fPixelSize), 1466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim SafeInt64Add(SafeInt64Add(rowOffset, colOffset), planeOffset)); 1476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1486e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim // Add offset to buffer base address. 1496e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return static_cast<void *> (static_cast<uint8 *> (fData) + offset); 1506e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1516e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 1526e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1536e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim #if qDebugPixelType 1546e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1556e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void CheckPixelType (uint32 pixelType) const; 1566e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1576e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim #endif 1586e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1596e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim public: 1606e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1616e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_pixel_buffer (); 1626e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1636e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Note: This constructor is for internal use only and should not be 1646e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// considered part of the DNG SDK API. 1656e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// 1666e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Initialize the pixel buffer according to the given parameters (see 1676e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// below). May throw an error if arithmetic overflow occurs when 1686e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// computing the row, column or plane step, or if an invalid value was 1696e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// passed for planarConfiguration. 1706e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// 1716e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param size Area covered by the pixel buffer 1726e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Index of the first plane 1736e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param planes Number of planes 1746e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param pixelType Pixel data type (one of the values defined in 1756e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// dng_tag_types.h) 1766e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param planarConfiguration Layout of the pixel planes in memory: One 1776e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// of pcInterleaved, pcPlanar, or pcRowInterleaved (defined in 1786e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// dng_tag_values.h) 1796e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param data Pointer to the pixel data 1806e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_pixel_buffer (const dng_rect &area, uint32 plane, uint32 planes, 1816e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 pixelType, uint32 planarConfiguration, 1826e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void *data); 1836e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1846e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_pixel_buffer (const dng_pixel_buffer &buffer); 1856e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1866e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim dng_pixel_buffer & operator= (const dng_pixel_buffer &buffer); 1876e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1886e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim virtual ~dng_pixel_buffer (); 1896e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1906e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Get the range of pixel values. 1916e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval Range of value a pixel can take. (Meaning [0, max] for unsigned case. Signed case is biased so [-32768, max - 32768].) 1926e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1936e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 PixelRange () const; 1946e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1956e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Get extent of pixels in buffer 1966e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval Rectangle giving valid extent of buffer. 1976e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 1986e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const dng_rect & Area () const 1996e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2006e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return fArea; 2016e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2026e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2036e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Number of planes of image data. 2046e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval Number of planes held in buffer. 2056e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2066e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 Planes () const 2076e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2086e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return fPlanes; 2096e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Step, in pixels not bytes, between rows of data in buffer. 2126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval row step in pixels. May be negative. 2136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 RowStep () const 2156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return fRowStep; 2176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Step, in pixels not bytes, between planes of data in buffer. 2206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval plane step in pixels. May be negative. 2216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 PlaneStep () const 2236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return fPlaneStep; 2256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Get read-only untyped (void *) pointer to pixel data starting at a specific pixel in the buffer. 2286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param row Start row for buffer pointer. 2296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param col Start column for buffer pointer. 2306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Start plane for buffer pointer. 2316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval Pointer to pixel data as void *. 2326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const void * ConstPixel (int32 row, 2346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 col, 2356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane = 0) const 2366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return InternalPixel (row, col, plane); 2396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Get a writable untyped (void *) pointer to pixel data starting at a specific pixel in the buffer. 2436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param row Start row for buffer pointer. 2446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param col Start column for buffer pointer. 2456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Start plane for buffer pointer. 2466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval Pointer to pixel data as void *. 2476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2486e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void * DirtyPixel (int32 row, 2496e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 col, 2506e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane = 0) 2516e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2526e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2536e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim DNG_ASSERT (fDirty, "Dirty access to const pixel buffer"); 2546e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2556e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return InternalPixel (row, col, plane); 2566e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2576e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2586e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2596e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Get read-only uint8 * to pixel data starting at a specific pixel in the buffer. 2606e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param row Start row for buffer pointer. 2616e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param col Start column for buffer pointer. 2626e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Start plane for buffer pointer. 2636e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval Pointer to pixel data as uint8 *. 2646e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2656e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const uint8 * ConstPixel_uint8 (int32 row, 2666e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 col, 2676e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane = 0) const 2686e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2696e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2706e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim ASSERT_PIXEL_TYPE (ttByte); 2716e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2726e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return (const uint8 *) ConstPixel (row, col, plane); 2736e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2746e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2756e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2766e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Get a writable uint8 * to pixel data starting at a specific pixel in the buffer. 2776e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param row Start row for buffer pointer. 2786e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param col Start column for buffer pointer. 2796e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Start plane for buffer pointer. 2806e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval Pointer to pixel data as uint8 *. 2816e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2826e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint8 * DirtyPixel_uint8 (int32 row, 2836e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 col, 2846e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane = 0) 2856e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 2866e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2876e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim ASSERT_PIXEL_TYPE (ttByte); 2886e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2896e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return (uint8 *) DirtyPixel (row, col, plane); 2906e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2916e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 2926e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2936e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Get read-only int8 * to pixel data starting at a specific pixel in the buffer. 2946e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param row Start row for buffer pointer. 2956e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param col Start column for buffer pointer. 2966e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Start plane for buffer pointer. 2976e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval Pointer to pixel data as int8 *. 2986e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 2996e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const int8 * ConstPixel_int8 (int32 row, 3006e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 col, 3016e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane = 0) const 3026e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 3036e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3046e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim ASSERT_PIXEL_TYPE (ttSByte); 3056e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3066e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return (const int8 *) ConstPixel (row, col, plane); 3076e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3086e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 3096e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Get a writable int8 * to pixel data starting at a specific pixel in the buffer. 3116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param row Start row for buffer pointer. 3126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param col Start column for buffer pointer. 3136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Start plane for buffer pointer. 3146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval Pointer to pixel data as int8 *. 3156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int8 * DirtyPixel_int8 (int32 row, 3176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 col, 3186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane = 0) 3196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 3206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim ASSERT_PIXEL_TYPE (ttSByte); 3226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return (int8 *) DirtyPixel (row, col, plane); 3246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 3266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Get read-only uint16 * to pixel data starting at a specific pixel in the buffer. 3286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param row Start row for buffer pointer. 3296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param col Start column for buffer pointer. 3306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Start plane for buffer pointer. 3316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval Pointer to pixel data as uint16 *. 3326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const uint16 * ConstPixel_uint16 (int32 row, 3346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 col, 3356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane = 0) const 3366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 3376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim ASSERT_PIXEL_TYPE (ttShort); 3396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return (const uint16 *) ConstPixel (row, col, plane); 3416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 3436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Get a writable uint16 * to pixel data starting at a specific pixel in the buffer. 3456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param row Start row for buffer pointer. 3466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param col Start column for buffer pointer. 3476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Start plane for buffer pointer. 3486e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval Pointer to pixel data as uint16 *. 3496e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3506e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint16 * DirtyPixel_uint16 (int32 row, 3516e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 col, 3526e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane = 0) 3536e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 3546e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3556e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim ASSERT_PIXEL_TYPE (ttShort); 3566e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3576e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return (uint16 *) DirtyPixel (row, col, plane); 3586e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3596e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 3606e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3616e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Get read-only int16 * to pixel data starting at a specific pixel in the buffer. 3626e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param row Start row for buffer pointer. 3636e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param col Start column for buffer pointer. 3646e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Start plane for buffer pointer. 3656e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval Pointer to pixel data as int16 *. 3666e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3676e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const int16 * ConstPixel_int16 (int32 row, 3686e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 col, 3696e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane = 0) const 3706e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 3716e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3726e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim ASSERT_PIXEL_TYPE (ttSShort); 3736e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3746e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return (const int16 *) ConstPixel (row, col, plane); 3756e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3766e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 3776e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3786e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Get a writable int16 * to pixel data starting at a specific pixel in the buffer. 3796e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param row Start row for buffer pointer. 3806e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param col Start column for buffer pointer. 3816e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Start plane for buffer pointer. 3826e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval Pointer to pixel data as int16 *. 3836e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3846e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int16 * DirtyPixel_int16 (int32 row, 3856e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 col, 3866e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane = 0) 3876e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 3886e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3896e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim ASSERT_PIXEL_TYPE (ttSShort); 3906e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3916e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return (int16 *) DirtyPixel (row, col, plane); 3926e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3936e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 3946e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 3956e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Get read-only uint32 * to pixel data starting at a specific pixel in the buffer. 3966e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param row Start row for buffer pointer. 3976e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param col Start column for buffer pointer. 3986e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Start plane for buffer pointer. 3996e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval Pointer to pixel data as uint32 *. 4006e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4016e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const uint32 * ConstPixel_uint32 (int32 row, 4026e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 col, 4036e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane = 0) const 4046e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 4056e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4066e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim ASSERT_PIXEL_TYPE (ttLong); 4076e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4086e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return (const uint32 *) ConstPixel (row, col, plane); 4096e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 4116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Get a writable uint32 * to pixel data starting at a specific pixel in the buffer. 4136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param row Start row for buffer pointer. 4146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param col Start column for buffer pointer. 4156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Start plane for buffer pointer. 4166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval Pointer to pixel data as uint32 *. 4176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 * DirtyPixel_uint32 (int32 row, 4196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 col, 4206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane = 0) 4216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 4226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim ASSERT_PIXEL_TYPE (ttLong); 4246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return (uint32 *) DirtyPixel (row, col, plane); 4266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 4286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Get read-only int32 * to pixel data starting at a specific pixel in the buffer. 4306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param row Start row for buffer pointer. 4316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param col Start column for buffer pointer. 4326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Start plane for buffer pointer. 4336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval Pointer to pixel data as int32 *. 4346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const int32 * ConstPixel_int32 (int32 row, 4366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 col, 4376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane = 0) const 4386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 4396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim ASSERT_PIXEL_TYPE (ttSLong); 4416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return (const int32 *) ConstPixel (row, col, plane); 4436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 4456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Get a writable int32 * to pixel data starting at a specific pixel in the buffer. 4476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param row Start row for buffer pointer. 4486e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param col Start column for buffer pointer. 4496e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Start plane for buffer pointer. 4506e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval Pointer to pixel data as int32 *. 4516e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4526e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 * DirtyPixel_int32 (int32 row, 4536e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 col, 4546e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane = 0) 4556e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 4566e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4576e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim ASSERT_PIXEL_TYPE (ttSLong); 4586e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4596e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return (int32 *) DirtyPixel (row, col, plane); 4606e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4616e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 4626e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4636e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Get read-only real32 * to pixel data starting at a specific pixel in the buffer. 4646e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param row Start row for buffer pointer. 4656e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param col Start column for buffer pointer. 4666e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Start plane for buffer pointer. 4676e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval Pointer to pixel data as real32 *. 4686e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4696e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const real32 * ConstPixel_real32 (int32 row, 4706e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 col, 4716e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane = 0) const 4726e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 4736e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4746e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim ASSERT_PIXEL_TYPE (ttFloat); 4756e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4766e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return (const real32 *) ConstPixel (row, col, plane); 4776e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4786e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 4796e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4806e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Get a writable real32 * to pixel data starting at a specific pixel in the buffer. 4816e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param row Start row for buffer pointer. 4826e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param col Start column for buffer pointer. 4836e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Start plane for buffer pointer. 4846e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval Pointer to pixel data as real32 *. 4856e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4866e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim real32 * DirtyPixel_real32 (int32 row, 4876e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int32 col, 4886e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane = 0) 4896e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 4906e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4916e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim ASSERT_PIXEL_TYPE (ttFloat); 4926e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4936e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim return (real32 *) DirtyPixel (row, col, plane); 4946e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4956e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 4966e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 4976e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Initialize a rectangular area of pixel buffer to a constant. 4986e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param area Rectangle of pixel buffer to set. 4996e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Plane to start filling on. 5006e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param planes Number of planes to fill. 5016e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param value Constant value to set pixels to. 5026e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5036e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void SetConstant (const dng_rect &area, 5046e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane, 5056e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 planes, 5066e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 value); 5076e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5086e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Initialize a rectangular area of pixel buffer to a constant unsigned 8-bit value. 5096e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param area Rectangle of pixel buffer to set. 5106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Plane to start filling on. 5116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param planes Number of planes to fill. 5126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param value Constant uint8 value to set pixels to. 5136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void SetConstant_uint8 (const dng_rect &area, 5156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane, 5166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 planes, 5176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint8 value) 5186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 5196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim DNG_ASSERT (fPixelType == ttByte, "Mismatched pixel type"); 5216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim SetConstant (area, plane, planes, (uint32) value); 5236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 5256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Initialize a rectangular area of pixel buffer to a constant unsigned 16-bit value. 5276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param area Rectangle of pixel buffer to set. 5286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Plane to start filling on. 5296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param planes Number of planes to fill. 5306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param value Constant uint16 value to set pixels to. 5316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void SetConstant_uint16 (const dng_rect &area, 5336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane, 5346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 planes, 5356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint16 value) 5366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 5376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim DNG_ASSERT (fPixelType == ttShort, "Mismatched pixel type"); 5396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim SetConstant (area, plane, planes, (uint32) value); 5416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 5436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Initialize a rectangular area of pixel buffer to a constant signed 16-bit value. 5456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param area Rectangle of pixel buffer to set. 5466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Plane to start filling on. 5476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param planes Number of planes to fill. 5486e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param value Constant int16 value to set pixels to. 5496e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5506e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void SetConstant_int16 (const dng_rect &area, 5516e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane, 5526e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 planes, 5536e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim int16 value) 5546e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 5556e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5566e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim DNG_ASSERT (fPixelType == ttSShort, "Mismatched pixel type"); 5576e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5586e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim SetConstant (area, plane, planes, (uint32) (uint16) value); 5596e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5606e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 5616e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5626e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Initialize a rectangular area of pixel buffer to a constant unsigned 32-bit value. 5636e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param area Rectangle of pixel buffer to set. 5646e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Plane to start filling on. 5656e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param planes Number of planes to fill. 5666e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param value Constant uint32 value to set pixels to. 5676e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5686e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void SetConstant_uint32 (const dng_rect &area, 5696e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane, 5706e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 planes, 5716e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 value) 5726e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 5736e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5746e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim DNG_ASSERT (fPixelType == ttLong, "Mismatched pixel type"); 5756e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5766e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim SetConstant (area, plane, planes, value); 5776e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5786e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 5796e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5806e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Initialize a rectangular area of pixel buffer to a constant real 32-bit value. 5816e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param area Rectangle of pixel buffer to set. 5826e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Plane to start filling on. 5836e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param planes Number of planes to fill. 5846e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param value Constant real32 value to set pixels to. 5856e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5866e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void SetConstant_real32 (const dng_rect &area, 5876e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane, 5886e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 planes, 5896e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim real32 value) 5906e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 5916e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5926e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim DNG_ASSERT (fPixelType == ttFloat, "Mismatched pixel type"); 5936e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 5946e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim union 5956e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 5966e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 i; 5976e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim real32 f; 5986e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } x; 5996e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6006e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim x.f = value; 6016e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6026e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim SetConstant (area, plane, planes, x.i); 6036e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6046e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 6056e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6066e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Initialize a rectangular area of pixel buffer to zeros. 6076e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param area Rectangle of pixel buffer to zero. 6086e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param area Area to zero 6096e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Plane to start filling on. 6106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param planes Number of planes to fill. 6116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void SetZero (const dng_rect &area, 6136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane, 6146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 planes); 6156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Copy image data from an area of one pixel buffer to same area of another. 6176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param src Buffer to copy from. 6186e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param area Rectangle of pixel buffer to copy. 6196e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param srcPlane Plane to start copy in src. 6206e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param dstPlane Plane to start copy in dst. 6216e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param planes Number of planes to copy. 6226e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6236e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void CopyArea (const dng_pixel_buffer &src, 6246e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const dng_rect &area, 6256e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 srcPlane, 6266e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 dstPlane, 6276e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 planes); 6286e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6296e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Copy image data from an area of one pixel buffer to same area of another. 6306e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param src Buffer to copy from. 6316e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param area Rectangle of pixel buffer to copy. 6326e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Plane to start copy in src and this. 6336e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param planes Number of planes to copy. 6346e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6356e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void CopyArea (const dng_pixel_buffer &src, 6366e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const dng_rect &area, 6376e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane, 6386e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 planes) 6396e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim { 6406e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6416e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim CopyArea (src, area, plane, plane, planes); 6426e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6436e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim } 6446e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6456e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Calculate the offset phase of destination rectangle relative to source rectangle. 6466e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Phase is based on a 0,0 origin and the notion of repeating srcArea across dstArea. 6476e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// It is the number of pixels into srcArea to start repeating from when tiling dstArea. 6486e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval dng_point containing horizontal and vertical phase. 6496e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6506e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim static dng_point RepeatPhase (const dng_rect &srcArea, 6516e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const dng_rect &dstArea); 6526e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6536e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Repeat the image data in srcArea across dstArea. 6546e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// (Generally used for padding operations.) 6556e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param srcArea Area to repeat from. 6566e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param dstArea Area to fill with data from srcArea. 6576e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6586e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void RepeatArea (const dng_rect &srcArea, 6596e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const dng_rect &dstArea); 6606e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6616e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Replicates a sub-area of a buffer to fill the entire buffer. 6626e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6636e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void RepeatSubArea (const dng_rect subArea, 6646e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 repeatV = 1, 6656e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 repeatH = 1); 6666e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6676e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Apply a right shift (C++ oerpator >>) to all pixel values. Only implemented for 16-bit (signed or unsigned) pixel buffers. 6686e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param shift Number of bits by which to right shift each pixel value. 6696e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6706e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void ShiftRight (uint32 shift); 6716e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6726e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Change metadata so pixels are iterated in opposite horizontal order. 6736e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// This operation does not require movement of actual pixel data. 6746e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6756e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void FlipH (); 6766e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6776e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Change metadata so pixels are iterated in opposite vertical order. 6786e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// This operation does not require movement of actual pixel data. 6796e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6806e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void FlipV (); 6816e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6826e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Change metadata so pixels are iterated in opposite plane order. 6836e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// This operation does not require movement of actual pixel data. 6846e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6856e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim void FlipZ (); // Flip planes 6866e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6876e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Return true if the contents of an area of the pixel buffer area are the same as those of another. 6886e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param rhs Buffer to compare against. 6896e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param area Rectangle of pixel buffer to test. 6906e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Plane to start comparing. 6916e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param planes Number of planes to compare. 6926e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval bool true if areas are equal, false otherwise. 6936e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6946e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim bool EqualArea (const dng_pixel_buffer &rhs, 6956e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const dng_rect &area, 6966e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane, 6976e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 planes) const; 6986e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 6996e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// Return the absolute value of the maximum difference between two pixel buffers. Used for comparison testing with tolerance 7006e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param rhs Buffer to compare against. 7016e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param area Rectangle of pixel buffer to test. 7026e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param plane Plane to start comparing. 7036e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \param planes Number of planes to compare. 7046e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim /// \retval larges absolute value difference between the corresponding pixels each buffer across area. 7056e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 7066e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim real64 MaximumDifference (const dng_pixel_buffer &rhs, 7076e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim const dng_rect &area, 7086e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 plane, 7096e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim uint32 planes) const; 7106e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 7116e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim }; 7126e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 7136e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 7146e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 7156e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim#endif 7166e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim 7176e09dfbee0b1643a5cb2b32d0399c1a0c69551a0Kinan Hakim/*****************************************************************************/ 718