10b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 20b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// Copyright 2006-2012 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_image_writer.h#3 $ */ 100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $DateTime: 2012/07/31 22:04:34 $ */ 110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Change: 840853 $ */ 120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Author: tknoll $ */ 130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/** \file 150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener * Support for writing DNG images to files. 160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener */ 170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#ifndef __dng_image_writer__ 210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define __dng_image_writer__ 220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_auto_ptr.h" 260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_classes.h" 270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_fingerprint.h" 280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_memory.h" 290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_point.h" 300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_rational.h" 310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_sdk_limits.h" 320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_string.h" 330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_tag_types.h" 340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_tag_values.h" 350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_types.h" 360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \brief Image resolution. 400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_resolution 420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_urational fXResolution; 470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_urational fYResolution; 480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint16 fResolutionUnit; 500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_resolution (); 540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tiff_tag 600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint16 fCode; 650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint16 fType; 670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fCount; 690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tiff_tag (uint16 code, 730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint16 type, 740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 count) 750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : fCode (code) 770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fType (type) 780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fCount (count) 790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual ~tiff_tag () 860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint16 Code () const 900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fCode; 920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint16 Type () const 950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fType; 970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 Count () const 1000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fCount; 1020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void SetCount (uint32 count) 1050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fCount = count; 1070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 Size () const 1100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return TagTypeSize (Type ()) * Count (); 1120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void Put (dng_stream &stream) const = 0; 1150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 1170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener // Hidden copy constructor and assignment operator. 1190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tiff_tag (const tiff_tag &tag); 1210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tiff_tag & operator= (const tiff_tag &tag); 1230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 1250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 1270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_data_ptr: public tiff_tag 1290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 1320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const void *fData; 1340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 1360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_data_ptr (uint16 code, 1380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint16 type, 1390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 count, 1400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const void *data) 1410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : tiff_tag (code, type, count) 1430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fData (data) 1450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void SetData (const void *data) 1500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fData = data; 1520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void Put (dng_stream &stream) const; 1550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 1570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener // Hidden copy constructor and assignment operator. 1590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_data_ptr (const tag_data_ptr &tag); 1610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_data_ptr & operator= (const tag_data_ptr &tag); 1630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 1650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 1670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_string: public tiff_tag 1690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 1720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_string fString; 1740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 1760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string (uint16 code, 1780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_string &s, 1790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener bool forceASCII = true); 1800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void Put (dng_stream &stream) const; 1820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 1840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 1860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_encoded_text: public tiff_tag 1880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 1910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_string fText; 1930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_memory_data fUTF16; 1950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 1970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_encoded_text (uint16 code, 1990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_string &text); 2000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void Put (dng_stream &stream) const; 2020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 2040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 2060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_uint8: public tag_data_ptr 2080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 2110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint8 fValue; 2130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 2150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint8 (uint16 code, 2170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint8 value = 0) 2180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : tag_data_ptr (code, ttByte, 1, &fValue) 2200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fValue (value) 2220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void Set (uint8 value) 2270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fValue = value; 2290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 2320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 2340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_uint8_ptr: public tag_data_ptr 2360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 2390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint8_ptr (uint16 code, 2410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const uint8 *data, 2420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 count = 1) 2430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : tag_data_ptr (code, ttByte, count, data) 2450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 2500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 2520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_uint16: public tag_data_ptr 2540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 2570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint16 fValue; 2590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 2610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 (uint16 code, 2630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint16 value = 0) 2640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : tag_data_ptr (code, ttShort, 1, &fValue) 2660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fValue (value) 2680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void Set (uint16 value) 2730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fValue = value; 2750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 2780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 2800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_int16_ptr: public tag_data_ptr 2820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 2850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_int16_ptr (uint16 code, 2870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const int16 *data, 2880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 count = 1) 2890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : tag_data_ptr (code, ttSShort, count, data) 2910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 2960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 2980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_uint16_ptr: public tag_data_ptr 3000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 3030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16_ptr (uint16 code, 3050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const uint16 *data, 3060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 count = 1) 3070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : tag_data_ptr (code, ttShort, count, data) 3090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 3140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 3160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_uint32: public tag_data_ptr 3180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 3210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fValue; 3230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 3250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32 (uint16 code, 3270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 value = 0) 3280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : tag_data_ptr (code, ttLong, 1, &fValue) 3300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fValue (value) 3320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void Set (uint32 value) 3370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fValue = value; 3390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 3420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 3440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_uint32_ptr: public tag_data_ptr 3460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 3490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32_ptr (uint16 code, 3510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const uint32 *data, 3520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 count = 1) 3530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : tag_data_ptr (code, ttLong, count, data) 3550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 3600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 3620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_urational: public tag_data_ptr 3640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 3670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_urational fValue; 3690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 3710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational (uint16 code, 3730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_urational &value) 3740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : tag_data_ptr (code, ttRational, 1, &fValue) 3760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fValue (value) 3780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 3830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 3850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_urational_ptr: public tag_data_ptr 3870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 3900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational_ptr (uint16 code, 3920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_urational *data = NULL, 3930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 count = 1) 3940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : tag_data_ptr (code, ttRational, count, data) 3960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 4010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 4030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_srational: public tag_data_ptr 4050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 4060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 4080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_srational fValue; 4100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 4120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_srational (uint16 code, 4140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_srational &value) 4150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : tag_data_ptr (code, ttSRational, 1, &fValue) 4170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fValue (value) 4190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 4210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 4220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 4240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 4260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_srational_ptr: public tag_data_ptr 4280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 4290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 4310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_srational_ptr (uint16 code, 4330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_srational *data = NULL, 4340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 count = 1) 4350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : tag_data_ptr (code, ttSRational, count, data) 4370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 4390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 4400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 4420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 4440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_real64: public tag_data_ptr 4460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 4470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 4490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener real64 fValue; 4510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 4530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_real64 (uint16 code, 4550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener real64 value = 0.0) 4560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : tag_data_ptr (code, ttDouble, 1, &fValue) 4580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fValue (value) 4600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 4620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 4630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void Set (real64 value) 4650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 4660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fValue = value; 4670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 4680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 4700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 4720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_matrix: public tag_srational_ptr 4740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 4750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 4770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_srational fEntry [kMaxColorPlanes * 4790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener kMaxColorPlanes]; 4800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 4820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_matrix (uint16 code, 4840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_matrix &m); 4850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 4870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 4890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_icc_profile: public tag_data_ptr 4910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 4920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 4940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_icc_profile (const void *profileData, uint32 profileSize); 4960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 4980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 5000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_cfa_pattern: public tiff_tag 5020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 5030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 5050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fRows; 5070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fCols; 5080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const uint8 *fPattern; 5100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 5120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_cfa_pattern (uint16 code, 5140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 rows, 5150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 cols, 5160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const uint8 *pattern) 5170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : tiff_tag (code, ttUndefined, 4 + rows * cols) 5190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fRows (rows ) 5210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fCols (cols ) 5220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fPattern (pattern) 5230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 5250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 5260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void Put (dng_stream &stream) const; 5280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 5300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener // Hidden copy constructor and assignment operator. 5320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_cfa_pattern (const tag_cfa_pattern &tag); 5340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_cfa_pattern & operator= (const tag_cfa_pattern &tag); 5360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 5380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 5400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_exif_date_time: public tag_data_ptr 5420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 5430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 5450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener char fData [20]; 5470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 5490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_exif_date_time (uint16 code, 5510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_date_time &dt); 5520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 5540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 5560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_iptc: public tiff_tag 5580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 5590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 5610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const void *fData; 5630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fLength; 5650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 5670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_iptc (const void *data, 5690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 length); 5700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void Put (dng_stream &stream) const; 5720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 5740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener // Hidden copy constructor and assignment operator. 5760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_iptc (const tag_iptc &tag); 5780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_iptc & operator= (const tag_iptc &tag); 5800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 5820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 5840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_xmp: public tag_uint8_ptr 5860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 5870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 5890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> fBuffer; 5910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 5930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_xmp (const dng_xmp *xmp); 5950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 5970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 5980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener // Hidden copy constructor and assignment operator. 5990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_xmp (const tag_xmp &tag); 6010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_xmp & operator= (const tag_xmp &tag); 6030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 6050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 6070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_tiff_directory 6090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 6100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 6120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener enum 6140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 6150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener kMaxEntries = 100 6160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 6170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fEntries; 6190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const tiff_tag *fTag [kMaxEntries]; 6210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fChained; 6230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 6250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_tiff_directory () 6270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : fEntries (0) 6290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , fChained (0) 6300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 6320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 6330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual ~dng_tiff_directory () 6350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 6360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 6370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void Add (const tiff_tag *tag); 6390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void SetChained (uint32 offset) 6410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 6420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fChained = offset; 6430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 6440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 Size () const; 6460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener enum OffsetsBase 6480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 6490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener offsetsRelativeToStream = 0, 6500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener offsetsRelativeToExplicitBase = 1, 6510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener offsetsRelativeToIFD = 2 6520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 6530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void Put (dng_stream &stream, 6550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener OffsetsBase offsetsBase = offsetsRelativeToStream, 6560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 explicitBase = 0) const; 6570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 6590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener // Hidden copy constructor and assignment operator. 6610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_tiff_directory (const dng_tiff_directory &dir); 6630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_tiff_directory & operator= (const dng_tiff_directory &dir); 6650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 6670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 6690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_basic_tag_set 6710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 6720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 6740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32 fNewSubFileType; 6760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32 fImageWidth; 6780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32 fImageLength; 6790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fPhotoInterpretation; 6810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fFillOrder; 6830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fSamplesPerPixel; 6850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint16 fBitsPerSampleData [kMaxSamplesPerPixel]; 6870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16_ptr fBitsPerSample; 6890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener bool fStrips; 6910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32 fTileWidth; 6930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32 fTileLength; 6940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_memory_data fTileInfoBuffer; 6960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 *fTileOffsetData; 6980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 6990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32_ptr fTileOffsets; 7000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 *fTileByteCountData; 7020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32_ptr fTileByteCounts; 7040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fPlanarConfiguration; 7060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fCompression; 7080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fPredictor; 7100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint16 fExtraSamplesData [kMaxSamplesPerPixel]; 7120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16_ptr fExtraSamples; 7140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint16 fSampleFormatData [kMaxSamplesPerPixel]; 7160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16_ptr fSampleFormat; 7180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fRowInterleaveFactor; 7200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint16 fSubTileBlockSizeData [2]; 7220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16_ptr fSubTileBlockSize; 7240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 7260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_basic_tag_set (dng_tiff_directory &directory, 7280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_ifd &info); 7290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual ~dng_basic_tag_set () 7310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 7320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 7330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void SetTileOffset (uint32 index, 7350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 offset) 7360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 7370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fTileOffsetData [index] = offset; 7380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 7390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void SetTileByteCount (uint32 index, 7410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 count) 7420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 7430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fTileByteCountData [index] = count; 7440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 7450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener bool WritingStrips () const 7470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 7480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fStrips; 7490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 7500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 7520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener // Hidden copy constructor and assignment operator. 7540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_basic_tag_set (const dng_basic_tag_set &set); 7560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_basic_tag_set & operator= (const dng_basic_tag_set &set); 7580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 7600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 7620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass exif_tag_set 7640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 7650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 7670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_tiff_directory fExifIFD; 7690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_tiff_directory fGPSIFD; 7700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 7720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32 fExifLink; 7740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32 fGPSLink; 7750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener bool fAddedExifLink; 7770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener bool fAddedGPSLink; 7780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint8 fExifVersionData [4]; 7800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_data_ptr fExifVersion; 7820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational fExposureTime; 7840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_srational fShutterSpeedValue; 7850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational fFNumber; 7870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational fApertureValue; 7880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_srational fBrightnessValue; 7900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_srational fExposureBiasValue; 7920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational fMaxApertureValue; 7940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational fSubjectDistance; 7960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational fFocalLength; 7980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 7990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fISOSpeedRatings; 8000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fSensitivityType; 8020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32 fStandardOutputSensitivity; 8030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32 fRecommendedExposureIndex; 8040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32 fISOSpeed; 8050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32 fISOSpeedLatitudeyyy; 8060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32 fISOSpeedLatitudezzz; 8070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fFlash; 8090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fExposureProgram; 8110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fMeteringMode; 8130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fLightSource; 8150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fSensingMethod; 8170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fFocalLength35mm; 8190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint8 fFileSourceData; 8210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_data_ptr fFileSource; 8220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint8 fSceneTypeData; 8240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_data_ptr fSceneType; 8250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_cfa_pattern fCFAPattern; 8270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fCustomRendered; 8290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fExposureMode; 8300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fWhiteBalance; 8310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fSceneCaptureType; 8320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fGainControl; 8330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fContrast; 8340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fSaturation; 8350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fSharpness; 8360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fSubjectDistanceRange; 8370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational fDigitalZoomRatio; 8390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational fExposureIndex; 8410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint32 fImageNumber; 8430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fSelfTimerMode; 8450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fBatteryLevelA; 8470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational fBatteryLevelR; 8480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational fFocalPlaneXResolution; 8500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational fFocalPlaneYResolution; 8510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fFocalPlaneResolutionUnit; 8530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint16 fSubjectAreaData [4]; 8550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16_ptr fSubjectArea; 8570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_urational fLensInfoData [4]; 8590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational_ptr fLensInfo; 8610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_exif_date_time fDateTime; 8630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_exif_date_time fDateTimeOriginal; 8640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_exif_date_time fDateTimeDigitized; 8650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fSubsecTime; 8670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fSubsecTimeOriginal; 8680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fSubsecTimeDigitized; 8690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fMake; 8710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fModel; 8720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fArtist; 8730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fSoftware; 8740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fCopyright; 8750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fImageDescription; 8760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fSerialNumber; 8780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fMakerNoteSafety; 8800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_data_ptr fMakerNote; 8820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_encoded_text fUserComment; 8840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener char fImageUniqueIDData [33]; 8860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_data_ptr fImageUniqueID; 8880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener // EXIF 2.3 tags. 8900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fCameraOwnerName; 8920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fBodySerialNumber; 8930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational_ptr fLensSpecification; 8940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fLensMake; 8950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fLensModel; 8960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fLensSerialNumber; 8970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 8980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint8 fGPSVersionData [4]; 8990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint8_ptr fGPSVersionID; 9010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fGPSLatitudeRef; 9030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational_ptr fGPSLatitude; 9040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fGPSLongitudeRef; 9060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational_ptr fGPSLongitude; 9070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint8 fGPSAltitudeRef; 9090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational fGPSAltitude; 9100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational_ptr fGPSTimeStamp; 9120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fGPSSatellites; 9140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fGPSStatus; 9150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fGPSMeasureMode; 9160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational fGPSDOP; 9180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fGPSSpeedRef; 9200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational fGPSSpeed; 9210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fGPSTrackRef; 9230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational fGPSTrack; 9240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fGPSImgDirectionRef; 9260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational fGPSImgDirection; 9270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fGPSMapDatum; 9290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fGPSDestLatitudeRef; 9310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational_ptr fGPSDestLatitude; 9320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fGPSDestLongitudeRef; 9340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational_ptr fGPSDestLongitude; 9350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fGPSDestBearingRef; 9370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational fGPSDestBearing; 9380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fGPSDestDistanceRef; 9400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational fGPSDestDistance; 9410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_encoded_text fGPSProcessingMethod; 9430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_encoded_text fGPSAreaInformation; 9440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_string fGPSDateStamp; 9460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_uint16 fGPSDifferential; 9480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tag_urational fGPSHPositioningError; 9500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 9520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener exif_tag_set (dng_tiff_directory &directory, 9540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_exif &exif, 9550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener bool makerNoteSafe = false, 9560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const void *makerNoteData = NULL, 9570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 makerNoteLength = 0, 9580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener bool insideDNG = false); 9590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void Locate (uint32 offset) 9610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 9620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fExifLink.Set (offset); 9630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fGPSLink .Set (offset + fExifIFD.Size ()); 9640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 9650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 Size () const 9670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 9680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fExifIFD.Size () + 9690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fGPSIFD .Size (); 9700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 9710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void Put (dng_stream &stream) const 9730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 9740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fExifIFD.Put (stream); 9750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fGPSIFD .Put (stream); 9760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 9770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 9790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void AddLinks (dng_tiff_directory &directory); 9810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 9830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener // Hidden copy constructor and assignment operator. 9850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener exif_tag_set (const exif_tag_set &set); 9870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener exif_tag_set & operator= (const exif_tag_set &set); 9890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 9910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/******************************************************************************/ 9930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tiff_dng_extended_color_profile: private dng_tiff_directory 9950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 9960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 9980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 9990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_camera_profile &fProfile; 10000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 10020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener tiff_dng_extended_color_profile (const dng_camera_profile &profile); 10040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void Put (dng_stream &stream, 10060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener bool includeModelRestriction = true); 10070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 10090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 10110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass tag_dng_noise_profile: public tag_data_ptr 10130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 10140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 10160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener real64 fValues [2 * kMaxColorPlanes]; 10180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 10200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener explicit tag_dng_noise_profile (const dng_noise_profile &profile); 10220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 10240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 10260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// Enum to control the subset of metadata to save to a file. 10280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerenum dng_metadata_subset 10300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 10310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener kMetadataSubset_CopyrightOnly = 0, 10330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener kMetadataSubset_CopyrightAndContact, 10340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener kMetadataSubset_AllExceptCameraInfo, 10350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener kMetadataSubset_All, 10360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener kMetadataSubset_AllExceptLocationInfo, 10370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener kMetadataSubset_AllExceptCameraAndLocation, 10380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener kMetadataSubset_Last = kMetadataSubset_AllExceptCameraAndLocation 10400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 10420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 10440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \brief Support for writing dng_image or dng_negative instances to a 10460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// dng_stream in TIFF or DNG format. 10470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_image_writer 10490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 10500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener friend class dng_jpeg_image; 10520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener friend class dng_jpeg_image_encode_task; 10530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener friend class dng_write_tiles_task; 10540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 10560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener enum 10580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 10590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener // Target size for buffer used to copy data to the image. 10610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener kImageBufferSize = 128 * 1024 10630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 10650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 10670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_image_writer (); 10690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual ~dng_image_writer (); 10710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void EncodeJPEGPreview (dng_host &host, 10730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_image &image, 10740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_jpeg_preview &preview, 10750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener int32 quality = -1); 10760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void WriteImage (dng_host &host, 10780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_ifd &ifd, 10790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_basic_tag_set &basic, 10800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream, 10810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_image &image, 10820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fakeChannels = 1); 10830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Write a dng_image to a dng_stream in TIFF format. 10850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param host Host interface used for progress updates, abort testing, buffer allocation, etc. 10860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param stream The dng_stream on which to write the TIFF. 10870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param image The actual image data to be written. 10880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param photometricInterpretation Either piBlackIsZero for monochrome or piRGB for RGB images. 10890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param compression Must be ccUncompressed. 10900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param negative or metadata If non-NULL, EXIF, IPTC, and XMP metadata from this negative is written to TIFF. 10910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param space If non-null and color space has an ICC profile, TIFF will be tagged with this 10920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// profile. No color space conversion of image data occurs. 10930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param resolution If non-NULL, TIFF will be tagged with this resolution. 10940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param thumbnail If non-NULL, will be stored in TIFF as preview image. 10950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param imageResources If non-NULL, will image resources be stored in TIFF as well. 10960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param metadataSubset The subset of metadata (e.g., copyright only) to include in the TIFF. 10970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 10980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void WriteTIFF (dng_host &host, 10990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream, 11000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_image &image, 11010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 photometricInterpretation, 11020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 compression, 11030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_negative *negative, 11040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_color_space *space = NULL, 11050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_resolution *resolution = NULL, 11060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_jpeg_preview *thumbnail = NULL, 11070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_memory_block *imageResources = NULL, 11080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_metadata_subset metadataSubset = kMetadataSubset_All); 11090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 11100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void WriteTIFF (dng_host &host, 11110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream, 11120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_image &image, 11130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 photometricInterpretation = piBlackIsZero, 11140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 compression = ccUncompressed, 11150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_metadata *metadata = NULL, 11160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_color_space *space = NULL, 11170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_resolution *resolution = NULL, 11180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_jpeg_preview *thumbnail = NULL, 11190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_memory_block *imageResources = NULL, 11200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_metadata_subset metadataSubset = kMetadataSubset_All); 11210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 11220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Write a dng_image to a dng_stream in TIFF format. 11230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param host Host interface used for progress updates, abort testing, buffer allocation, etc. 11240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param stream The dng_stream on which to write the TIFF. 11250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param image The actual image data to be written. 11260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param photometricInterpretation Either piBlackIsZero for monochrome or piRGB for RGB images. 11270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param compression Must be ccUncompressed. 11280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param negative or metadata If non-NULL, EXIF, IPTC, and XMP metadata from this negative is written to TIFF. 11290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param profileData If non-null, TIFF will be tagged with this profile. No color space conversion 11300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// of image data occurs. 11310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param profileSize The size for the profile data. 11320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param resolution If non-NULL, TIFF will be tagged with this resolution. 11330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param thumbnail If non-NULL, will be stored in TIFF as preview image. 11340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param imageResources If non-NULL, will image resources be stored in TIFF as well. 11350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param metadataSubset The subset of metadata (e.g., copyright only) to include in the TIFF. 11360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 11370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void WriteTIFFWithProfile (dng_host &host, 11380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream, 11390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_image &image, 11400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 photometricInterpretation, 11410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 compression, 11420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_negative *negative, 11430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const void *profileData = NULL, 11440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 profileSize = 0, 11450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_resolution *resolution = NULL, 11460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_jpeg_preview *thumbnail = NULL, 11470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_memory_block *imageResources = NULL, 11480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_metadata_subset metadataSubset = kMetadataSubset_All); 11490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 11500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void WriteTIFFWithProfile (dng_host &host, 11510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream, 11520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_image &image, 11530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 photometricInterpretation = piBlackIsZero, 11540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 compression = ccUncompressed, 11550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_metadata *metadata = NULL, 11560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const void *profileData = NULL, 11570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 profileSize = 0, 11580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_resolution *resolution = NULL, 11590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_jpeg_preview *thumbnail = NULL, 11600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_memory_block *imageResources = NULL, 11610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_metadata_subset metadataSubset = kMetadataSubset_All); 11620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 11630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Write a dng_image to a dng_stream in DNG format. 11640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param host Host interface used for progress updates, abort testing, buffer allocation, etc. 11650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param stream The dng_stream on which to write the TIFF. 11660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param negative The image data and metadata (EXIF, IPTC, XMP) to be written. 11670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param previewList List of previews (not counting thumbnail) to write to the file. Defaults to empty. 11680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param maxBackwardVersion The DNG file should be readable by readers at least back to this version. 11690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param uncompressed True to force uncompressed images. Otherwise use normal compression. 11700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 11710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void WriteDNG (dng_host &host, 11720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream, 11730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_negative &negative, 11740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_preview_list *previewList = NULL, 11750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 maxBackwardVersion = dngVersion_SaveDefault, 11760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener bool uncompressed = false); 11770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 11780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Write a dng_image to a dng_stream in DNG format. 11790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param host Host interface used for progress updates, abort testing, buffer allocation, etc. 11800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param stream The dng_stream on which to write the TIFF. 11810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param negative The image data to be written. 11820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param metadata The metadata (EXIF, IPTC, XMP) to be written. 11830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param previewList List of previews (not counting thumbnail) to write to the file. Defaults to empty. 11840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param maxBackwardVersion The DNG file should be readable by readers at least back to this version. 11850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param uncompressed True to force uncompressed images. Otherwise use normal compression. 11860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 11870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void WriteDNG (dng_host &host, 11880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream, 11890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_negative &negative, 11900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_metadata &metadata, 11910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_preview_list *previewList = NULL, 11920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 maxBackwardVersion = dngVersion_SaveDefault, 11930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener bool uncompressed = false); 11940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 11950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Resolve metadata conflicts and apply metadata policies in keeping 11960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// with Metadata Working Group (MWG) guidelines. 11970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 11980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void CleanUpMetadata (dng_host &host, 11990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_metadata &metadata, 12000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_metadata_subset metadataSubset, 12010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const char *dstMIMI, 12020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const char *software = NULL); 12030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 12040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 12050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 12060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual uint32 CompressedBufferSize (const dng_ifd &ifd, 12070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 uncompressedSize); 12080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 12090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void EncodePredictor (dng_host &host, 12100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_ifd &ifd, 12110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_pixel_buffer &buffer, 12120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> &tempBuffer); 12130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 12140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void ByteSwapBuffer (dng_host &host, 12150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_pixel_buffer &buffer); 12160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 12170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void ReorderSubTileBlocks (const dng_ifd &ifd, 12180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_pixel_buffer &buffer, 12190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> &uncompressedBuffer, 12200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> &subTileBlockBuffer); 12210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 12220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void WriteData (dng_host &host, 12230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_ifd &ifd, 12240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream, 12250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_pixel_buffer &buffer, 12260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> &compressedBuffer); 12270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 12280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void WriteTile (dng_host &host, 12290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_ifd &ifd, 12300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_stream &stream, 12310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_image &image, 12320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &tileArea, 12330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fakeChannels, 12340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> &compressedBuffer, 12350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> &uncompressedBuffer, 12360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> &subTileBlockBuffer, 12370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener AutoPtr<dng_memory_block> &tempBuffer); 12380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 12390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 12400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 12410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 12420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 12430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif 12440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 12450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1246