10b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 20b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// Copyright 2007-2011 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_preview.cpp#1 $ */ 100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $DateTime: 2012/05/30 13:28:51 $ */ 110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Change: 832332 $ */ 120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Author: tknoll $ */ 130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_preview.h" 170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_assertions.h" 190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_image.h" 200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_image_writer.h" 210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_memory.h" 220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_stream.h" 230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_tag_codes.h" 240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_tag_values.h" 250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_preview_tag_set: public dng_basic_tag_set 290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fApplicationNameTag; 340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fApplicationVersionTag; 360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fSettingsNameTag; 380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_fingerprint fSettingsDigest; 400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint8_ptr fSettingsDigestTag; 420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32 fColorSpaceTag; 440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fDateTimeTag; 460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_real64 fRawToPreviewGainTag; 480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32 fCacheVersionTag; 500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_preview_tag_set (dng_tiff_directory &directory, 540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_preview &preview, 550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_ifd &ifd); 560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual ~dng_preview_tag_set (); 580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_preview_tag_set::dng_preview_tag_set (dng_tiff_directory &directory, 640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_preview &preview, 650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_ifd &ifd) 660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : dng_basic_tag_set (directory, ifd) 680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fApplicationNameTag (tcPreviewApplicationName, 700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener preview.fInfo.fApplicationName, 710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener false) 720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fApplicationVersionTag (tcPreviewApplicationVersion, 740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener preview.fInfo.fApplicationVersion, 750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener false) 760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fSettingsNameTag (tcPreviewSettingsName, 780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener preview.fInfo.fSettingsName, 790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener false) 800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fSettingsDigest (preview.fInfo.fSettingsDigest) 820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fSettingsDigestTag (tcPreviewSettingsDigest, 840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fSettingsDigest.data, 850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 16) 860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fColorSpaceTag (tcPreviewColorSpace, 880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener preview.fInfo.fColorSpace) 890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fDateTimeTag (tcPreviewDateTime, 910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener preview.fInfo.fDateTime, 920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener true) 930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fRawToPreviewGainTag (tcRawToPreviewGain, 950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener preview.fInfo.fRawToPreviewGain) 960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fCacheVersionTag (tcCacheVersion, 980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener preview.fInfo.fCacheVersion) 990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (preview.fInfo.fApplicationName.NotEmpty ()) 1030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener directory.Add (&fApplicationNameTag); 1060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (preview.fInfo.fApplicationVersion.NotEmpty ()) 1100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener directory.Add (&fApplicationVersionTag); 1130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (preview.fInfo.fSettingsName.NotEmpty ()) 1170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener directory.Add (&fSettingsNameTag); 1200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (preview.fInfo.fSettingsDigest.IsValid ()) 1240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener directory.Add (&fSettingsDigestTag); 1270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (preview.fInfo.fColorSpace != previewColorSpace_MaxEnum) 1310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener directory.Add (&fColorSpaceTag); 1340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (preview.fInfo.fDateTime.NotEmpty ()) 1380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener directory.Add (&fDateTimeTag); 1410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (preview.fInfo.fRawToPreviewGain != 1.0) 1450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener directory.Add (&fRawToPreviewGainTag); 1480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (preview.fInfo.fCacheVersion != 0) 1520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener directory.Add (&fCacheVersionTag); 1550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_preview_tag_set::~dng_preview_tag_set () 1630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_preview::dng_preview () 1700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : fInfo () 1720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_preview::~dng_preview () 1800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_image_preview::dng_image_preview () 1870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : fImage () 1890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fIFD () 1900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_image_preview::~dng_image_preview () 1980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 2030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_basic_tag_set * dng_image_preview::AddTagSet (dng_tiff_directory &directory) const 2050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fNewSubFileType = fInfo.fIsPrimary ? sfPreviewImage 2080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : sfAltPreviewImage; 2090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fImageWidth = fImage->Width (); 2110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fImageLength = fImage->Height (); 2120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fSamplesPerPixel = fImage->Planes (); 2140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fPhotometricInterpretation = fIFD.fSamplesPerPixel == 1 ? piBlackIsZero 2160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : piRGB; 2170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fBitsPerSample [0] = TagTypeSize (fImage->PixelType ()) * 8; 2190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener for (uint32 j = 1; j < fIFD.fSamplesPerPixel; j++) 2210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fBitsPerSample [j] = fIFD.fBitsPerSample [0]; 2230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.SetSingleStrip (); 2260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return new dng_preview_tag_set (directory, *this, fIFD); 2280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 2320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienervoid dng_image_preview::WriteData (dng_host &host, 2340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_image_writer &writer, 2350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_basic_tag_set &basic, 2360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream) const 2370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener writer.WriteImage (host, 2400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD, 2410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener basic, 2420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener stream, 2430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener *fImage.Get ()); 2440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 2480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_jpeg_preview_tag_set: public dng_preview_tag_set 2500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 2530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_urational fCoefficientsData [3]; 2550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational_ptr fCoefficientsTag; 2570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint16 fSubSamplingData [2]; 2590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16_ptr fSubSamplingTag; 2610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fPositioningTag; 2630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_urational fReferenceData [6]; 2650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational_ptr fReferenceTag; 2670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 2690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_jpeg_preview_tag_set (dng_tiff_directory &directory, 2710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_jpeg_preview &preview, 2720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_ifd &ifd); 2730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual ~dng_jpeg_preview_tag_set (); 2750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 2770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 2790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_jpeg_preview_tag_set::dng_jpeg_preview_tag_set (dng_tiff_directory &directory, 2810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_jpeg_preview &preview, 2820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_ifd &ifd) 2830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : dng_preview_tag_set (directory, preview, ifd) 2850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fCoefficientsTag (tcYCbCrCoefficients, fCoefficientsData, 3) 2870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fSubSamplingTag (tcYCbCrSubSampling, fSubSamplingData, 2) 2890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fPositioningTag (tcYCbCrPositioning, preview.fYCbCrPositioning) 2910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fReferenceTag (tcReferenceBlackWhite, fReferenceData, 6) 2930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (preview.fPhotometricInterpretation == piYCbCr) 2970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fCoefficientsData [0] = dng_urational (299, 1000); 3000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fCoefficientsData [1] = dng_urational (587, 1000); 3010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fCoefficientsData [2] = dng_urational (114, 1000); 3020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener directory.Add (&fCoefficientsTag); 3040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fSubSamplingData [0] = (uint16) preview.fYCbCrSubSampling.h; 3060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fSubSamplingData [1] = (uint16) preview.fYCbCrSubSampling.v; 3070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener directory.Add (&fSubSamplingTag); 3090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener directory.Add (&fPositioningTag); 3110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fReferenceData [0] = dng_urational ( 0, 1); 3130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fReferenceData [1] = dng_urational (255, 1); 3140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fReferenceData [2] = dng_urational (128, 1); 3150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fReferenceData [3] = dng_urational (255, 1); 3160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fReferenceData [4] = dng_urational (128, 1); 3170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fReferenceData [5] = dng_urational (255, 1); 3180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener directory.Add (&fReferenceTag); 3200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 3260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_jpeg_preview_tag_set::~dng_jpeg_preview_tag_set () 3280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 3330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_jpeg_preview::dng_jpeg_preview () 3350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : fPreviewSize () 3370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fPhotometricInterpretation (piYCbCr) 3380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fYCbCrSubSampling (1, 1) 3390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fYCbCrPositioning (2) 3400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fCompressedData () 3410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 3470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_jpeg_preview::~dng_jpeg_preview () 3490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 3540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_basic_tag_set * dng_jpeg_preview::AddTagSet (dng_tiff_directory &directory) const 3560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_ifd ifd; 3590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener ifd.fNewSubFileType = fInfo.fIsPrimary ? sfPreviewImage 3610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : sfAltPreviewImage; 3620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener ifd.fImageWidth = fPreviewSize.h; 3640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener ifd.fImageLength = fPreviewSize.v; 3650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener ifd.fPhotometricInterpretation = fPhotometricInterpretation; 3670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener ifd.fBitsPerSample [0] = 8; 3690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener ifd.fBitsPerSample [1] = 8; 3700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener ifd.fBitsPerSample [2] = 8; 3710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener ifd.fSamplesPerPixel = (fPhotometricInterpretation == piBlackIsZero ? 1 : 3); 3730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener ifd.fCompression = ccJPEG; 3750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener ifd.fPredictor = cpNullPredictor; 3760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener ifd.SetSingleStrip (); 3780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return new dng_jpeg_preview_tag_set (directory, *this, ifd); 3800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 3840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienervoid dng_jpeg_preview::WriteData (dng_host & /* host */, 3860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_image_writer & /* writer */, 3870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_basic_tag_set &basic, 3880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream) const 3890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener basic.SetTileOffset (0, (uint32) stream.Position ()); 3920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener basic.SetTileByteCount (0, fCompressedData->LogicalSize ()); 3940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener stream.Put (fCompressedData->Buffer (), 3960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fCompressedData->LogicalSize ()); 3970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (fCompressedData->LogicalSize () & 1) 3990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 4000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener stream.Put_uint8 (0); 4010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 4020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 4040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 4060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienervoid dng_jpeg_preview::SpoolAdobeThumbnail (dng_stream &stream) const 4080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 4090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener DNG_ASSERT (fCompressedData.Get (), 4110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener "SpoolAdobeThumbnail: no data"); 4120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener DNG_ASSERT (fPhotometricInterpretation == piYCbCr, 4140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener "SpoolAdobeThumbnail: Non-YCbCr"); 4150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 compressedSize = fCompressedData->LogicalSize (); 4170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener stream.Put_uint32 (DNG_CHAR4 ('8','B','I','M')); 4190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener stream.Put_uint16 (1036); 4200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener stream.Put_uint16 (0); 4210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener stream.Put_uint32 (compressedSize + 28); 4230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 widthBytes = (fPreviewSize.h * 24 + 31) / 32 * 4; 4250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener stream.Put_uint32 (1); 4270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener stream.Put_uint32 (fPreviewSize.h); 4280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener stream.Put_uint32 (fPreviewSize.v); 4290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener stream.Put_uint32 (widthBytes); 4300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener stream.Put_uint32 (widthBytes * fPreviewSize.v); 4310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener stream.Put_uint32 (compressedSize); 4320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener stream.Put_uint16 (24); 4330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener stream.Put_uint16 (1); 4340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener stream.Put (fCompressedData->Buffer (), 4360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener compressedSize); 4370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (compressedSize & 1) 4390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 4400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener stream.Put_uint8 (0); 4410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 4420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 4440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 4460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_raw_preview_tag_set: public dng_preview_tag_set 4480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 4490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 4510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_data_ptr fOpcodeList2Tag; 4530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32_ptr fWhiteLevelTag; 4550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fWhiteLevelData [kMaxColorPlanes]; 4570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 4590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_raw_preview_tag_set (dng_tiff_directory &directory, 4610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_raw_preview &preview, 4620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_ifd &ifd); 4630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual ~dng_raw_preview_tag_set (); 4650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 4670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 4690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_raw_preview_tag_set::dng_raw_preview_tag_set (dng_tiff_directory &directory, 4710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_raw_preview &preview, 4720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_ifd &ifd) 4730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : dng_preview_tag_set (directory, preview, ifd) 4750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fOpcodeList2Tag (tcOpcodeList2, 4770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener ttUndefined, 4780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 0, 4790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener NULL) 4800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fWhiteLevelTag (tcWhiteLevel, 4820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fWhiteLevelData, 4830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener preview.fImage->Planes ()) 4840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 4860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (preview.fOpcodeList2Data.Get ()) 4880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 4890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fOpcodeList2Tag.SetData (preview.fOpcodeList2Data->Buffer ()); 4910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fOpcodeList2Tag.SetCount (preview.fOpcodeList2Data->LogicalSize ()); 4920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener directory.Add (&fOpcodeList2Tag); 4940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 4960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (preview.fImage->PixelType () == ttFloat) 4980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 4990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener for (uint32 j = 0; j < kMaxColorPlanes; j++) 5010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 5020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fWhiteLevelData [j] = 32768; 5030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 5040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener directory.Add (&fWhiteLevelTag); 5060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 5080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 5100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 5120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_raw_preview_tag_set::~dng_raw_preview_tag_set () 5140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 5150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 5170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 5190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_raw_preview::dng_raw_preview () 5210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : fImage () 5230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fOpcodeList2Data () 5240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fCompressionQuality (-1) 5250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fIFD () 5260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 5280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 5300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 5320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_raw_preview::~dng_raw_preview () 5340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 5350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 5370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 5390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_basic_tag_set * dng_raw_preview::AddTagSet (dng_tiff_directory &directory) const 5410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 5420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fNewSubFileType = sfPreviewImage; 5440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fImageWidth = fImage->Width (); 5460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fImageLength = fImage->Height (); 5470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fSamplesPerPixel = fImage->Planes (); 5490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fPhotometricInterpretation = piLinearRaw; 5510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (fImage->PixelType () == ttFloat) 5530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 5540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fCompression = ccDeflate; 5560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fCompressionQuality = fCompressionQuality; 5580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fPredictor = cpFloatingPoint; 5600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener for (uint32 j = 0; j < fIFD.fSamplesPerPixel; j++) 5620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 5630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fBitsPerSample [j] = 16; 5640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fSampleFormat [j] = sfFloatingPoint; 5650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 5660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.FindTileSize (512 * 1024); 5680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 5700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener else 5720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 5730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fCompression = ccLossyJPEG; 5750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fCompressionQuality = fCompressionQuality; 5770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fBitsPerSample [0] = TagTypeSize (fImage->PixelType ()) * 8; 5790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener for (uint32 j = 1; j < fIFD.fSamplesPerPixel; j++) 5810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 5820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fBitsPerSample [j] = fIFD.fBitsPerSample [0]; 5830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 5840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.FindTileSize (512 * 512 * fIFD.fSamplesPerPixel); 5860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 5880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return new dng_raw_preview_tag_set (directory, *this, fIFD); 5900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 5920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 5940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienervoid dng_raw_preview::WriteData (dng_host &host, 5960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_image_writer &writer, 5970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_basic_tag_set &basic, 5980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream) const 5990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 6000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener writer.WriteImage (host, 6020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD, 6030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener basic, 6040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener stream, 6050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener *fImage.Get ()); 6060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 6080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 6100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_mask_preview::dng_mask_preview () 6120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : fImage () 6140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fCompressionQuality (-1) 6150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fIFD () 6160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 6180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 6200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 6220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_mask_preview::~dng_mask_preview () 6240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 6250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 6270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 6290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_basic_tag_set * dng_mask_preview::AddTagSet (dng_tiff_directory &directory) const 6310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 6320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fNewSubFileType = sfPreviewMask; 6340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fImageWidth = fImage->Width (); 6360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fImageLength = fImage->Height (); 6370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fSamplesPerPixel = 1; 6390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fPhotometricInterpretation = piTransparencyMask; 6410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fCompression = ccDeflate; 6430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fPredictor = cpHorizontalDifference; 6440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fCompressionQuality = fCompressionQuality; 6460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.fBitsPerSample [0] = TagTypeSize (fImage->PixelType ()) * 8; 6480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD.FindTileSize (512 * 512 * fIFD.fSamplesPerPixel); 6500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return new dng_basic_tag_set (directory, fIFD); 6520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 6540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 6560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienervoid dng_mask_preview::WriteData (dng_host &host, 6580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_image_writer &writer, 6590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_basic_tag_set &basic, 6600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream) const 6610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 6620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener writer.WriteImage (host, 6640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fIFD, 6650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener basic, 6660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener stream, 6670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener *fImage.Get ()); 6680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 6700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 6720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_preview_list::dng_preview_list () 6740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : fCount (0) 6760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 6780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 6800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 6820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_preview_list::~dng_preview_list () 6840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 6850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 6870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 6890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienervoid dng_preview_list::Append (AutoPtr<dng_preview> &preview) 6910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 6920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (preview.Get ()) 6940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 6950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener DNG_ASSERT (fCount < kMaxDNGPreviews, "DNG preview list overflow"); 6970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener if (fCount < kMaxDNGPreviews) 6990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 7000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fPreview [fCount++] . Reset (preview.Release ()); 7020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 7040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 7060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 7080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 710