10b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 20b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// Copyright 2008-2009 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_misc_opcodes.h#2 $ */ 100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $DateTime: 2012/08/02 06:09:06 $ */ 110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Change: 841096 $ */ 120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Author: erichan $ */ 130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/** \file 150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener * Miscellaneous DNG opcodes. 160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener */ 170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#ifndef __dng_misc_opcodes__ 210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define __dng_misc_opcodes__ 220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_opcodes.h" 260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \brief Opcode to trim image to a specified rectangle. 300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_opcode_TrimBounds: public dng_opcode 320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_rect fBounds; 370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Create opcode to trim image to the specified bounds. 410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_opcode_TrimBounds (const dng_rect &bounds); 430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_opcode_TrimBounds (dng_stream &stream); 450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void PutData (dng_stream &stream) const; 470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void Apply (dng_host &host, 490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_negative &negative, 500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_image> &image); 510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \brief A class to describe an area of an image, including a pixel subrectangle, 570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// plane range, and row/column pitch (e.g., for mosaic images). Useful for 580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// specifying opcodes that only apply to specific color planes or pixel types (e.g., 590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// only one of the two green Bayer pixels). 600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_area_spec 620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener enum 670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener kDataSize = 32 690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_rect fArea; 740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fPlane; 760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fPlanes; 770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fRowPitch; 790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fColPitch; 800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Create an empty area. 840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_area_spec (const dng_rect &area = dng_rect (), 860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 plane = 0, 870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 planes = 1, 880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 rowPitch = 1, 890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 colPitch = 1) 900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : fArea (area) 920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fPlane (plane) 930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fPlanes (planes) 940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fRowPitch (rowPitch) 950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fColPitch (colPitch) 960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// The pixel area. 1010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect & Area () const 1030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fArea; 1050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// The first plane. 1080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const uint32 Plane () const 1100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fPlane; 1120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// The total number of planes. 1150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const uint32 Planes () const 1170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fPlanes; 1190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// The row pitch (i.e., stride). A pitch of 1 means all rows. 1220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const uint32 RowPitch () const 1240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fRowPitch; 1260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// The column pitch (i.e., stride). A pitch of 1 means all columns. 1290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const uint32 ColPitch () const 1310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fColPitch; 1330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Read area data from the specified stream. 1360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void GetData (dng_stream &stream); 1380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Write area data to the specified stream. 1400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void PutData (dng_stream &stream) const; 1420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Compute and return pixel area overlap (i.e., intersection) between this 1440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// area and the specified tile. 1450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_rect Overlap (const dng_rect &tile) const; 1470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 1490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \brief An opcode to apply a 1D function (represented as a 16-bit table) to an 1530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// image area. 1540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_opcode_MapTable: public dng_inplace_opcode 1560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 1590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_area_spec fAreaSpec; 1610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> fTable; 1630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fCount; 1650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 1670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Create a MapTable opcode with the specified area, table, and number of 1690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// table entries. 1700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_opcode_MapTable (dng_host &host, 1720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_area_spec &areaSpec, 1730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const uint16 *table, 1740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 count = 0x10000); 1750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_opcode_MapTable (dng_host &host, 1770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream); 1780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void PutData (dng_stream &stream) const; 1800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual uint32 BufferPixelType (uint32 imagePixelType); 1820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual dng_rect ModifiedBounds (const dng_rect &imageBounds); 1840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void ProcessArea (dng_negative &negative, 1860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 threadIndex, 1870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_pixel_buffer &buffer, 1880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &dstArea, 1890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &imageBounds); 1900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 1920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void ReplicateLastEntry (); 1940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 1960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \brief An opcode to apply a 1D function (represented as a polynomial) to an 2000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// image area. 2010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_opcode_MapPolynomial: public dng_inplace_opcode 2030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 2060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener enum 2080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener kMaxDegree = 8 2100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 2110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 2130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_area_spec fAreaSpec; 2150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fDegree; 2170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener real64 fCoefficient [kMaxDegree + 1]; 2190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener real32 fCoefficient32 [kMaxDegree + 1]; 2210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 2230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Create a MapPolynomial opcode with the specified area, polynomial 2250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// degree, and polynomial coefficients. The function that will be 2260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// applied to each pixel x is: 2270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// 2280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// f (x) = coefficient [0] + ((x * coefficient [1]) + 2290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// (x^2 * coefficient [2]) + 2300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// (x^3 * coefficient [3]) + 2310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// (x^4 * coefficient [4]) ... 2320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_opcode_MapPolynomial (const dng_area_spec &areaSpec, 2340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 degree, 2350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const real64 *coefficient); 2360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_opcode_MapPolynomial (dng_stream &stream); 2380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void PutData (dng_stream &stream) const; 2400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual uint32 BufferPixelType (uint32 imagePixelType); 2420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual dng_rect ModifiedBounds (const dng_rect &imageBounds); 2440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void ProcessArea (dng_negative &negative, 2460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 threadIndex, 2470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_pixel_buffer &buffer, 2480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &dstArea, 2490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &imageBounds); 2500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 2520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 2540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \brief An opcode to apply a delta (i.e., offset) that varies per row. Within 2560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// a row, the same delta value is applied to all specified pixels. 2570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_opcode_DeltaPerRow: public dng_inplace_opcode 2590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 2620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_area_spec fAreaSpec; 2640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> fTable; 2660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener real32 fScale; 2680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 2700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Create a DeltaPerRow opcode with the specified area and row deltas 2720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// (specified as a table of 32-bit floats). 2730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_opcode_DeltaPerRow (const dng_area_spec &areaSpec, 2750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> &table); 2760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_opcode_DeltaPerRow (dng_host &host, 2780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream); 2790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void PutData (dng_stream &stream) const; 2810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual uint32 BufferPixelType (uint32 imagePixelType); 2830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual dng_rect ModifiedBounds (const dng_rect &imageBounds); 2850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void ProcessArea (dng_negative &negative, 2870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 threadIndex, 2880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_pixel_buffer &buffer, 2890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &dstArea, 2900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &imageBounds); 2910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 2930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 2950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \brief An opcode to apply a delta (i.e., offset) that varies per column. 2970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// Within a column, the same delta value is applied to all specified pixels. 2980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_opcode_DeltaPerColumn: public dng_inplace_opcode 3000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 3030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_area_spec fAreaSpec; 3050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> fTable; 3070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener real32 fScale; 3090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 3110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Create a DeltaPerColumn opcode with the specified area and column 3130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// deltas (specified as a table of 32-bit floats). 3140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_opcode_DeltaPerColumn (const dng_area_spec &areaSpec, 3160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> &table); 3170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_opcode_DeltaPerColumn (dng_host &host, 3190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream); 3200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void PutData (dng_stream &stream) const; 3220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual uint32 BufferPixelType (uint32 imagePixelType); 3240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual dng_rect ModifiedBounds (const dng_rect &imageBounds); 3260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void ProcessArea (dng_negative &negative, 3280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 threadIndex, 3290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_pixel_buffer &buffer, 3300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &dstArea, 3310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &imageBounds); 3320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 3340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 3360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \brief An opcode to apply a scale factor that varies per row. Within a row, 3380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// the same scale factor is applied to all specified pixels. 3390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_opcode_ScalePerRow: public dng_inplace_opcode 3410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 3440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_area_spec fAreaSpec; 3460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> fTable; 3480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 3500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Create a ScalePerRow opcode with the specified area and row scale 3520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// factors (specified as a table of 32-bit floats). 3530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_opcode_ScalePerRow (const dng_area_spec &areaSpec, 3550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> &table); 3560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_opcode_ScalePerRow (dng_host &host, 3580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream); 3590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void PutData (dng_stream &stream) const; 3610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual uint32 BufferPixelType (uint32 imagePixelType); 3630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual dng_rect ModifiedBounds (const dng_rect &imageBounds); 3650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void ProcessArea (dng_negative &negative, 3670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 threadIndex, 3680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_pixel_buffer &buffer, 3690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &dstArea, 3700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &imageBounds); 3710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 3730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 3750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \brief An opcode to apply a scale factor that varies per column. Within a 3770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// column, the same scale factor is applied to all specified pixels. 3780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_opcode_ScalePerColumn: public dng_inplace_opcode 3800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 3830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_area_spec fAreaSpec; 3850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> fTable; 3870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 3890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Create a ScalePerColumn opcode with the specified area and column 3910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// scale factors (specified as a table of 32-bit floats). 3920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_opcode_ScalePerColumn (const dng_area_spec &areaSpec, 3940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> &table); 3950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_opcode_ScalePerColumn (dng_host &host, 3970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream); 3980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void PutData (dng_stream &stream) const; 4000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual uint32 BufferPixelType (uint32 imagePixelType); 4020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual dng_rect ModifiedBounds (const dng_rect &imageBounds); 4040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void ProcessArea (dng_negative &negative, 4060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 threadIndex, 4070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_pixel_buffer &buffer, 4080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &dstArea, 4090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &imageBounds); 4100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 4120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 4140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif 4160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 418