18e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 28e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// Copyright 2008 Adobe Systems Incorporated 38e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// All Rights Reserved. 48e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// 58e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// NOTICE: Adobe permits you to use, modify, and distribute this file in 68e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// accordance with the terms of the Adobe license agreement accompanying it. 78e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 88e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 98e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_opcodes.cpp#1 $ */ 108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $DateTime: 2012/05/30 13:28:51 $ */ 118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $Change: 832332 $ */ 128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $Author: tknoll $ */ 138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_opcodes.h" 178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_bottlenecks.h" 198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_exceptions.h" 208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_filter_task.h" 218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_globals.h" 228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_host.h" 238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_image.h" 248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_negative.h" 258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_parse_utils.h" 268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_stream.h" 278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_tag_values.h" 288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 318e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerdng_opcode::dng_opcode (uint32 opcodeID, 328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 minVersion, 338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 flags) 348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener : fOpcodeID (opcodeID) 368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fMinVersion (minVersion) 378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fFlags (flags) 388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fWasReadFromStream (false) 398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fStage (0) 408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 478e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerdng_opcode::dng_opcode (uint32 opcodeID, 488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_stream &stream, 498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const char *name) 508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener : fOpcodeID (opcodeID) 528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fMinVersion (0) 538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fFlags (0) 548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fWasReadFromStream (true) 558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fStage (0) 568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fMinVersion = stream.Get_uint32 (); 608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fFlags = stream.Get_uint32 (); 618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 628e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener #if qDNGValidate 638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener if (gVerbose) 658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener printf ("\nOpcode: "); 688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener if (name) 708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener printf ("%s", name); 728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 738e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener else 748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener printf ("Unknown (%u)", (unsigned) opcodeID); 768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener printf (", minVersion = %u.%u.%u.%u", 798e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener (unsigned) ((fMinVersion >> 24) & 0x0FF), 808e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener (unsigned) ((fMinVersion >> 16) & 0x0FF), 818e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener (unsigned) ((fMinVersion >> 8) & 0x0FF), 828e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener (unsigned) ((fMinVersion ) & 0x0FF)); 838e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 848e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener printf (", flags = %u\n", (unsigned) fFlags); 858e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 868e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 878e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 888e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener #else 898e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 908e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener (void) name; 918e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 928e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener #endif 938e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 948e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 958e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 968e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 978e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 988e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerdng_opcode::~dng_opcode () 998e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1008e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1018e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1028e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1038e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 1048e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1058e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienervoid dng_opcode::PutData (dng_stream &stream) const 1068e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1078e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1088e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // No data by default 1098e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener stream.Put_uint32 (0); 1118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 1158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1168e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerbool dng_opcode::AboutToApply (dng_host &host, 1178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_negative &negative) 1188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener if (SkipIfPreview () && host.ForPreview ()) 1218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener negative.SetIsPreview (true); 1248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener else if (MinVersion () > dngVersion_Current && 1288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener WasReadFromStream ()) 1298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener if (!Optional ()) 1328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Somebody screwed up computing the DNGBackwardVersion... 1358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener ThrowBadFormat (); 1378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener else if (!IsValidForNegative (negative)) 1438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener ThrowBadFormat (); 1468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener else if (!IsNOP ()) 1508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return true; 1538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return false; 1578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 1618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1628e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerdng_opcode_Unknown::dng_opcode_Unknown (dng_host &host, 1638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 opcodeID, 1648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_stream &stream) 1658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener : dng_opcode (opcodeID, 1678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener stream, 1688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener NULL) 1698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fData () 1718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1738e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 size = stream.Get_uint32 (); 1758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener if (size) 1778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1798e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fData.Reset (host.Allocate (size)); 1808e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1818e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener stream.Get (fData->Buffer (), 1828e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fData->LogicalSize ()); 1838e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1848e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener #if qDNGValidate 1858e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1868e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener if (gVerbose) 1878e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1888e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1898e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener DumpHexAscii (fData->Buffer_uint8 (), 1908e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fData->LogicalSize ()); 1918e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1928e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1938e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1948e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener #endif 1958e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1968e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1978e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1988e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1998e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2008e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 2018e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2028e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienervoid dng_opcode_Unknown::PutData (dng_stream &stream) const 2038e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 2048e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2058e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener if (fData.Get ()) 2068e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 2078e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2088e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener stream.Put_uint32 (fData->LogicalSize ()); 2098e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener stream.Put (fData->Buffer (), 2118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fData->LogicalSize ()); 2128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 2148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener else 2168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 2178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener stream.Put_uint32 (0); 2198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 2218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 2238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 2258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2268e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienervoid dng_opcode_Unknown::Apply (dng_host & /* host */, 2278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_negative & /* negative */, 2288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener AutoPtr<dng_image> & /* image */) 2298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 2308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // We should never need to apply an unknown opcode. 2328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener if (!Optional ()) 2348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 2358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener ThrowBadFormat (); 2378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 2398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 2418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 2438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2448e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerclass dng_filter_opcode_task: public dng_filter_task 2458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 2468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener private: 2488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_filter_opcode &fOpcode; 2508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_negative &fNegative; 2528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener public: 2548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_filter_opcode_task (dng_filter_opcode &opcode, 2568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_negative &negative, 2578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_image &srcImage, 2588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_image &dstImage) 2598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener : dng_filter_task (srcImage, 2618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dstImage) 2628e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fOpcode (opcode) 2648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fNegative (negative) 2658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 2678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fSrcPixelType = fOpcode.BufferPixelType (srcImage.PixelType ()); 2698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fDstPixelType = fSrcPixelType; 2718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fSrcRepeat = opcode.SrcRepeat (); 2738e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 2758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener virtual dng_rect SrcArea (const dng_rect &dstArea) 2778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 2788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2798e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fOpcode.SrcArea (dstArea, 2808e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fDstImage.Bounds ()); 2818e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2828e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 2838e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2848e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener virtual dng_point SrcTileSize (const dng_point &dstTileSize) 2858e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 2868e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2878e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return fOpcode.SrcTileSize (dstTileSize, 2888e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fDstImage.Bounds ()); 2898e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2908e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 2918e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2928e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener virtual void ProcessArea (uint32 threadIndex, 2938e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_pixel_buffer &srcBuffer, 2948e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_pixel_buffer &dstBuffer) 2958e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 2968e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2978e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fOpcode.ProcessArea (fNegative, 2988e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener threadIndex, 2998e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener srcBuffer, 3008e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dstBuffer, 3018e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dstBuffer.Area (), 3028e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fDstImage.Bounds ()); 3038e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3048e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 3058e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3068e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener virtual void Start (uint32 threadCount, 3078e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_point &tileSize, 3088e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_memory_allocator *allocator, 3098e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_abort_sniffer *sniffer) 3108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 3118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_filter_task::Start (threadCount, 3138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener tileSize, 3148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener allocator, 3158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener sniffer); 3168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fOpcode.Prepare (fNegative, 3188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener threadCount, 3198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener tileSize, 3208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fDstImage.Bounds (), 3218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fDstImage.Planes (), 3228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fDstPixelType, 3238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener *allocator); 3248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 3268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener }; 3288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 3308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3318e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerdng_filter_opcode::dng_filter_opcode (uint32 opcodeID, 3328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 minVersion, 3338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 flags) 3348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener : dng_opcode (opcodeID, 3368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener minVersion, 3378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener flags) 3388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 3408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 3428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 3448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3458e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerdng_filter_opcode::dng_filter_opcode (uint32 opcodeID, 3468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_stream &stream, 3478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const char *name) 3488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener : dng_opcode (opcodeID, 3508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener stream, 3518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener name) 3528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 3548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 3568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 3588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3598e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienervoid dng_filter_opcode::Apply (dng_host &host, 3608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_negative &negative, 3618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener AutoPtr<dng_image> &image) 3628e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 3638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_rect modifiedBounds = ModifiedBounds (image->Bounds ()); 3658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener if (modifiedBounds.NotEmpty ()) 3678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 3688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Allocate destination image. 3708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener AutoPtr<dng_image> dstImage; 3728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3738e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // If we are processing the entire image, allocate an 3748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // undefined image. 3758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener if (modifiedBounds == image->Bounds ()) 3778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 3788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3798e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dstImage.Reset (host.Make_dng_image (image->Bounds (), 3808e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener image->Planes (), 3818e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener image->PixelType ())); 3828e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3838e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 3848e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3858e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Else start with a clone of the existing image. 3868e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3878e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener else 3888e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 3898e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3908e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dstImage.Reset (image->Clone ()); 3918e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3928e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 3938e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3948e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Filter the image. 3958e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 3968e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_filter_opcode_task task (*this, 3978e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener negative, 3988e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener *image, 3998e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener *dstImage); 4008e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4018e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener host.PerformAreaTask (task, 4028e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener modifiedBounds); 4038e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4048e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Return the new image. 4058e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4068e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener image.Reset (dstImage.Release ()); 4078e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4088e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 4098e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 4118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 4138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4148e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerclass dng_inplace_opcode_task: public dng_area_task 4158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 4168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener private: 4188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_inplace_opcode &fOpcode; 4208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_negative &fNegative; 4228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_image &fImage; 4248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 fPixelType; 4268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener AutoPtr<dng_memory_block> fBuffer [kMaxMPThreads]; 4288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener public: 4308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_inplace_opcode_task (dng_inplace_opcode &opcode, 4328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_negative &negative, 4338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_image &image) 4348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener : dng_area_task () 4368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fOpcode (opcode) 4388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fNegative (negative) 4398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fImage (image) 4408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , fPixelType (opcode.BufferPixelType (image.PixelType ())) 4418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 4438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 4458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener virtual void Start (uint32 threadCount, 4478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_point &tileSize, 4488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_memory_allocator *allocator, 4498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_abort_sniffer * /* sniffer */) 4508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 4518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 bufferSize = ComputeBufferSize(fPixelType, tileSize, 4538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fImage.Planes(), pad16Bytes); 4548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener for (uint32 threadIndex = 0; threadIndex < threadCount; threadIndex++) 4568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 4578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fBuffer [threadIndex] . Reset (allocator->Allocate (bufferSize)); 4598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 4618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4628e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fOpcode.Prepare (fNegative, 4638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener threadCount, 4648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener tileSize, 4658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fImage.Bounds (), 4668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fImage.Planes (), 4678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fPixelType, 4688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener *allocator); 4698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 4718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener virtual void Process (uint32 threadIndex, 4738e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_rect &tile, 4748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_abort_sniffer * /* sniffer */) 4758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 4768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Setup buffer. 4788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4798e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_pixel_buffer buffer(tile, 0, fImage.Planes (), fPixelType, 4808e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener pcRowInterleavedAlign16, 4818e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fBuffer [threadIndex]->Buffer ()); 4828e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4838e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Get source pixels. 4848e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4858e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fImage.Get (buffer); 4868e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4878e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Process area. 4888e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4898e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fOpcode.ProcessArea (fNegative, 4908e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener threadIndex, 4918e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener buffer, 4928e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener tile, 4938e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fImage.Bounds ()); 4948e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4958e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener // Save result pixels. 4968e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4978e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fImage.Put (buffer); 4988e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 4998e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 5008e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5018e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener }; 5028e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5038e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 5048e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5058e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerdng_inplace_opcode::dng_inplace_opcode (uint32 opcodeID, 5068e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 minVersion, 5078e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 flags) 5088e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5098e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener : dng_opcode (opcodeID, 5108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener minVersion, 5118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener flags) 5128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 5148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 5168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 5188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5198e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerdng_inplace_opcode::dng_inplace_opcode (uint32 opcodeID, 5208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_stream &stream, 5218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const char *name) 5228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener : dng_opcode (opcodeID, 5248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener stream, 5258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener name) 5268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 5288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 5308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 5328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5338e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienervoid dng_inplace_opcode::Apply (dng_host &host, 5348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_negative &negative, 5358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener AutoPtr<dng_image> &image) 5368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 5378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_rect modifiedBounds = ModifiedBounds (image->Bounds ()); 5398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener if (modifiedBounds.NotEmpty ()) 5418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 5428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_inplace_opcode_task task (*this, 5448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener negative, 5458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener *image); 5468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener host.PerformAreaTask (task, 5488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener modifiedBounds); 5498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 5518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 5538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 5548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 555