20 #ifndef TIFFCOMPOSITE_INT_HPP_ 21 #define TIFFCOMPOSITE_INT_HPP_ 26 #include "tifffwd_int.hpp" 72 const uint32_t
none = 0x10000;
73 const uint32_t
root = 0x20000;
74 const uint32_t
next = 0x30000;
75 const uint32_t
all = 0x40000;
76 const uint32_t
pana = 0x80000;
77 const uint32_t
fuji = 0x100000;
78 const uint32_t
cmt2 = 0x110000;
79 const uint32_t
cmt3 = 0x120000;
80 const uint32_t
cmt4 = 0x130000;
93 : extendedTag_(extendedTag), group_(group) {}
98 uint16_t tag()
const {
return static_cast<uint16_t
>(extendedTag_ & 0xffff); }
108 uint32_t extendedTag_;
142 long write(
const byte* pData,
long wcount);
151 void setTarget(
int id, uint32_t target);
157 const byte* pHeader_;
203 AutoPtr
object =AutoPtr(0));
254 uint16_t tag()
const {
return tag_; }
265 AutoPtr clone()
const;
275 uint32_t& imageIdx)
const;
281 uint32_t writeImage(
IoWrapper& ioWrapper,
287 uint32_t size()
const;
291 uint32_t count()
const;
298 uint32_t sizeData()
const;
305 uint32_t sizeImage()
const;
311 virtual int idx()
const;
329 virtual uint32_t doWrite(
IoWrapper& ioWrapper,
334 uint32_t& imageIdx) =0;
342 virtual uint32_t doWriteData(
IoWrapper& ioWrapper,
346 uint32_t& imageIdx)
const =0;
348 virtual uint32_t doWriteImage(
IoWrapper& ioWrapper,
351 virtual uint32_t doSize()
const =0;
353 virtual uint32_t doCount()
const =0;
355 virtual uint32_t doSizeData()
const =0;
357 virtual uint32_t doSizeImage()
const =0;
385 uint16_t
tag()
const {
return static_cast<uint16_t
>(extendedTag_ & 0xffff); }
399 Key(
const std::string& m, uint32_t e,
IfdId g) : m_(m), e_(e), g_(g) {}
437 void setData(
byte* pData, int32_t size);
456 TiffType tiffType()
const {
return tiffType_; }
462 int32_t
offset()
const {
return offset_; }
466 virtual int idx()
const;
496 virtual uint32_t doWrite(
IoWrapper& ioWrapper,
506 virtual uint32_t doCount()
const;
512 virtual uint32_t doWriteData(
IoWrapper& ioWrapper,
516 uint32_t& imageIdx)
const;
521 virtual uint32_t doWriteImage(
IoWrapper& ioWrapper,
524 virtual uint32_t doSize()
const;
526 virtual uint32_t doSizeData()
const;
528 virtual uint32_t doSizeImage()
const;
532 static uint32_t writeOffset(
byte* buf,
602 szTag_(szTag), szGroup_(szGroup) {}
618 virtual void setStrips(
const Value* pSize,
621 uint32_t baseOffset) =0;
626 uint16_t szTag()
const {
return szTag_; }
634 const uint16_t szTag_;
635 const IfdId szGroup_;
658 pDataArea_(0), sizeDataArea_(0) {}
665 virtual void setStrips(
const Value* pSize,
668 uint32_t baseOffset);
687 virtual uint32_t doWrite(
IoWrapper& ioWrapper,
702 virtual uint32_t doWriteData(
IoWrapper& ioWrapper,
706 uint32_t& imageIdx)
const;
710 virtual uint32_t doSizeData()
const;
717 uint32_t sizeDataArea_;
747 virtual void setStrips(
const Value* pSize,
750 uint32_t baseOffset);
763 virtual uint32_t doWrite(
IoWrapper& ioWrapper,
782 virtual uint32_t doWriteData(
IoWrapper& ioWrapper,
786 uint32_t& imageIdx)
const;
791 virtual uint32_t doWriteImage(
IoWrapper& ioWrapper,
794 virtual uint32_t doSize()
const;
796 virtual uint32_t doSizeData()
const;
798 virtual uint32_t doSizeImage()
const;
803 typedef std::vector<std::pair<const byte*, uint32_t> > Strips;
822 :
TiffEntryBase(tag, group), dtTag_(dtTag), dtGroup_(dtGroup) {}
829 uint16_t dtTag()
const {
return dtTag_; }
849 const uint16_t dtTag_;
850 const IfdId dtGroup_;
873 bool hasNext()
const {
return hasNext_; }
898 virtual uint32_t doWrite(
IoWrapper& ioWrapper,
913 virtual uint32_t doWriteData(
IoWrapper& ioWrapper,
917 uint32_t& imageIdx)
const;
924 virtual uint32_t doWriteImage(
IoWrapper& ioWrapper,
930 virtual uint32_t doSize()
const;
935 virtual uint32_t doCount()
const;
940 virtual uint32_t doSizeData()
const;
945 virtual uint32_t doSizeImage()
const;
957 uint32_t writeDirEntry(
IoWrapper& ioWrapper,
964 uint32_t& imageIdx)
const;
969 Components components_;
1014 virtual uint32_t doWrite(
IoWrapper& ioWrapper,
1019 uint32_t& imageIdx);
1029 virtual uint32_t doWriteData(
IoWrapper& ioWrapper,
1033 uint32_t& imageIdx)
const;
1038 virtual uint32_t doWriteImage(
IoWrapper& ioWrapper,
1041 uint32_t doSize()
const;
1043 virtual uint32_t doSizeData()
const;
1045 virtual uint32_t doSizeImage()
const;
1056 typedef std::vector<TiffDirectory*> Ifds;
1099 virtual uint32_t doWrite(
IoWrapper& ioWrapper,
1104 uint32_t& imageIdx);
1111 virtual uint32_t doCount()
const;
1118 virtual uint32_t doSize()
const;
1157 bool hasNext =
true);
1169 bool readHeader(
const byte* pData, uint32_t size,
ByteOrder byteOrder);
1182 uint32_t sizeHeader()
const;
1190 uint32_t mnOffset()
const;
1196 uint32_t ifdOffset()
const;
1213 uint32_t baseOffset()
const;
1231 virtual uint32_t doWrite(
IoWrapper& ioWrapper,
1236 uint32_t& imageIdx);
1246 virtual uint32_t doWriteData(
IoWrapper& ioWrapper,
1250 uint32_t& imageIdx)
const;
1255 virtual uint32_t doWriteImage(
IoWrapper& ioWrapper,
1261 virtual uint32_t doSize()
const;
1267 virtual uint32_t doCount()
const;
1272 virtual uint32_t doSizeData()
const;
1277 virtual uint32_t doSizeImage()
const;
1317 uint32_t size(uint16_t tag,
IfdId group)
const;
1330 uint32_t
tagStep()
const {
return elDefaultDef_.size(0, group_); }
1376 uint32_t addElement(uint32_t idx,
const ArrayDef& def);
1389 bool initialize(
IfdId group);
1402 void iniOrigDataBuf();
1404 bool updOrigDataBuf(
const byte* pData, uint32_t size);
1411 const ArrayCfg* cfg()
const {
return arrayCfg_; }
1446 virtual uint32_t doWrite(
IoWrapper& ioWrapper,
1451 uint32_t& imageIdx);
1458 virtual uint32_t doCount()
const;
1464 virtual uint32_t doSize()
const;
1483 Components elements_;
1535 virtual uint32_t doWrite(
IoWrapper& ioWrapper,
1540 uint32_t& imageIdx);
1549 virtual uint32_t doCount()
const;
1556 virtual uint32_t doSize()
const;
1593 template<IfdId newGroup>
1600 template<IfdId newGroup>
1607 template<const ArrayCfg* arrayCfg,
int N, const ArrayDef (&arrayDef)[N]>
1616 template<const ArrayCfg* arrayCfg>
1624 template<const ArraySet* arraySet,
int N, CfgSelFct cfgSelFct>
1632 template<u
int16_t szTag, IfdId szGroup>
1640 template<u
int16_t dtTag, IfdId dtGroup>
1648 template<u
int16_t szTag, IfdId szGroup>
1656 template<u
int16_t dtTag, IfdId dtGroup>
1666 #endif // #ifndef TIFFCOMPOSITE_INT_HPP_ CryptFct cryptFct_
Crypt function, 0 if not used.
Definition: tiffcomposite_int.hpp:1335
This class is the basis for Makernote support in TIFF. It contains a pointer to a concrete Makernote...
Definition: tiffcomposite_int.hpp:1071
const TiffType ttTiffDouble
TIFF DOUBLE type.
Definition: tiffcomposite_int.hpp:60
const uint32_t cmt3
Special tag: root IFD of CR3 images.
Definition: tiffcomposite_int.hpp:79
const uint32_t fuji
Special tag: root IFD of Fujifilm RAF images.
Definition: tiffcomposite_int.hpp:77
TIFF composite visitor to read the TIFF structure from a block of memory and build the composite from...
Definition: tiffvisitor_int.hpp:622
bool concat_
If true, concatenate gaps between defined tags to single tags.
Definition: tiffcomposite_int.hpp:1338
Search key for TIFF mapping structures.
Definition: tiffcomposite_int.hpp:397
const uint32_t next
Special tag: next IFD.
Definition: tiffcomposite_int.hpp:74
An interface for simple binary IO.
Definition: basicio.hpp:55
TiffComponent::AutoPtr newTiffBinaryArray0(uint16_t tag, IfdId group)
Function to create and initialize a new binary array entry.
Definition: tiffcomposite_int.hpp:1608
uint32_t extendedTag_
Tag (32 bit so that it can contain special tags)
Definition: tiffcomposite_int.hpp:389
uint32_t count_
Number of components.
Definition: tiffcomposite_int.hpp:1321
std::vector< TiffComponent * > Components
Container type to hold all metadata.
Definition: tiffcomposite_int.hpp:176
const TiffType ttUnsignedByte
Exif BYTE type.
Definition: tiffcomposite_int.hpp:49
int(* CfgSelFct)(uint16_t, const byte *, uint32_t, TiffComponent *const)
Function pointer type for a function to determine which cfg + def of a corresponding array set to use...
Definition: tiffcomposite_int.hpp:1307
bool operator==(const TagDetails &td, const LensTypeAndFocalLengthAndMaxAperture <fl)
Compare tag details with a lens entry.
Definition: canonmn_int.cpp:2820
IfdId dtGroup() const
Return the group of the related entry which has the data area.
Definition: tiffcomposite_int.hpp:832
TiffComponent::AutoPtr newTiffThumbSize(uint16_t tag, IfdId group)
Function to create and initialize a new TIFF entry for a thumbnail (size)
Definition: tiffcomposite_int.hpp:1641
const TiffType ttSignedLong
Exif SLONG type.
Definition: tiffcomposite_int.hpp:57
TiffType tiffType_
TIFF type of the element.
Definition: tiffcomposite_int.hpp:1320
Composite to model an array of different tags. The tag types as well as other aspects of the array ar...
Definition: tiffcomposite_int.hpp:1354
ByteOrder
Type to express the byte order (little or big endian)
Definition: types.hpp:102
Utility class containing a character array. All it does is to take care of memory allocation and dele...
Definition: types.hpp:193
bool operator==(uint32_t idx) const
Comparison with idx.
Definition: tiffcomposite_int.hpp:1315
ArrayDef elDefaultDef_
Default element.
Definition: tiffcomposite_int.hpp:1339
const byte * pData() const
Return a pointer to the binary representation of the value of this component.
Definition: tiffcomposite_int.hpp:471
TiffComponent::AutoPtr newTiffMnEntry(uint16_t tag, IfdId group)
Function to create and initialize a new TIFF makernote entry.
Definition: tiffcomposite_int.cpp:1926
const uint32_t cmt4
Special tag: root IFD of CR3 images.
Definition: tiffcomposite_int.hpp:80
const uint32_t cmt2
Special tag: root IFD of CR3 images.
Definition: tiffcomposite_int.hpp:78
TiffComponent::AutoPtr newTiffDirectory(uint16_t tag, IfdId)
Function to create and initialize a new TIFF directory.
Definition: tiffcomposite_int.hpp:1594
TiffComponent::AutoPtr newTiffImageData(uint16_t tag, IfdId group)
Function to create and initialize a new TIFF entry for image data.
Definition: tiffcomposite_int.hpp:1649
TypeId
Exiv2 value type identifiers.
Definition: types.hpp:119
uint32_t e_
Extended tag.
Definition: tiffcomposite_int.hpp:401
int32_t offset() const
Return the offset to the data area relative to the base for the component (usually the start of the T...
Definition: tiffcomposite_int.hpp:462
TIFF composite visitor to decode metadata from the TIFF tree and add it to an Image, which is supplied in the constructor (Visitor pattern). Used by TiffParser to decode the metadata from a TIFF composite.
Definition: tiffvisitor_int.hpp:276
IfdId group_
Group for the elements.
Definition: tiffcomposite_int.hpp:1332
const ArrayCfg cfg_
Binary array configuration.
Definition: tiffcomposite_int.hpp:1344
const int defSize_
Size of the array definition array.
Definition: tiffcomposite_int.hpp:1346
void setOffset(int32_t offset)
Set the offset.
Definition: tiffcomposite_int.hpp:435
const char * make_
Camera make for which these mapping functions apply.
Definition: tiffcomposite_int.hpp:388
This abstract base class provides the common functionality of an IFD directory entry and defines an e...
Definition: tiffcomposite_int.hpp:411
const uint32_t none
Dummy tag.
Definition: tiffcomposite_int.hpp:72
uint8_t byte
1 byte unsigned integer type.
Definition: types.hpp:94
const uint32_t all
Special tag: all tags in a group.
Definition: tiffcomposite_int.hpp:75
A TIFF IFD entry containing the size of a data area of a related TiffDataEntry. This component is use...
Definition: tiffcomposite_int.hpp:816
Combination of array configuration and definition for arrays.
Definition: tiffcomposite_int.hpp:1343
std::auto_ptr< TiffComponent > AutoPtr
TiffComponent auto_ptr type.
Definition: tiffcomposite_int.hpp:174
byte * start() const
Return a pointer to the start of the binary representation of the component.
Definition: tiffcomposite_int.hpp:259
bool hasSize_
If true, first tag is the size element.
Definition: tiffcomposite_int.hpp:1336
Simple IO wrapper to ensure that the header is only written if there is any other data at all...
Definition: tiffcomposite_int.hpp:121
const ArrayDef * elDef() const
Return the array definition of this element.
Definition: tiffcomposite_int.hpp:1520
A standard TIFF IFD entry consisting of a value which is an offset to a data area and the data area...
Definition: tiffcomposite_int.hpp:650
TiffComponent::AutoPtr newTiffBinaryArray2(uint16_t tag, IfdId group)
Function to create and initialize a new complex binary array entry.
Definition: tiffcomposite_int.hpp:1625
const TiffType ttUnsignedShort
Exif SHORT type.
Definition: tiffcomposite_int.hpp:51
DecoderFct decoderFct_
Decoder function for matching tags.
Definition: tiffcomposite_int.hpp:391
uint32_t extendedTag() const
Return the extended tag (32 bit so that it can contain special tags)
Definition: tiffcomposite_int.hpp:101
TypeId toTypeId(TiffType tiffType, uint16_t tag, IfdId group)
Convert the tiffType of a tag and group to an Exiv2 typeId.
Definition: tiffcomposite_int.cpp:1874
IfdId group() const
Return the group.
Definition: tiffcomposite_int.hpp:103
uint32_t idx_
Index in bytes from the start.
Definition: tiffcomposite_int.hpp:1319
This class models a TIFF sub-directory (sub-IFD). A sub-IFD is an entry with one or more values that ...
Definition: tiffcomposite_int.hpp:982
const ArrayDef * def_
Binary array definition array.
Definition: tiffcomposite_int.hpp:1345
bool decoded() const
Return the flag which indicates if the array was decoded.
Definition: tiffcomposite_int.hpp:1418
std::stack< TiffPathItem > TiffPath
Stack to hold a path from the TIFF root element to a TIFF entry.
Definition: tifffwd_int.hpp:104
TiffType elTiffType_
Type for the array entry and the size element, if any.
Definition: tiffcomposite_int.hpp:1334
Interface class for components of a TIFF directory hierarchy (Composite pattern). Both TIFF directori...
Definition: tiffcomposite_int.hpp:171
const TiffType ttAsciiString
Exif ASCII type.
Definition: tiffcomposite_int.hpp:50
TiffType toTiffType(TypeId typeId)
Convert the Exiv2 typeId to a TIFF value type.
Definition: tiffcomposite_int.cpp:1893
const TiffType ttTiffFloat
TIFF FLOAT type.
Definition: tiffcomposite_int.hpp:59
bool hasFillers_
If true, write all defined tags.
Definition: tiffcomposite_int.hpp:1337
int defSize() const
Return the number of elements in the definition.
Definition: tiffcomposite_int.hpp:1416
Key(const std::string &m, uint32_t e, IfdId g)
Constructor.
Definition: tiffcomposite_int.hpp:399
uint16_t TiffType
TIFF value type.
Definition: tiffcomposite_int.hpp:47
Abstract base class defining the interface for TIFF composite visitors (Visitor pattern) ...
Definition: tiffvisitor_int.hpp:65
void setIdx(int idx)
Set the unique id of the entry in the image.
Definition: tiffcomposite_int.hpp:490
void setCount(uint32_t count)
Set the number of components in this entry.
Definition: tiffcomposite_int.hpp:488
A standard TIFF IFD entry.
Definition: tiffcomposite_int.hpp:563
IfdId szGroup() const
Return the group of the entry which has the size.
Definition: tiffcomposite_int.hpp:629
void setElByteOrder(ByteOrder byteOrder)
Set the byte order of this element.
Definition: tiffcomposite_int.hpp:1512
const uint32_t pana
Special tag: root IFD of Panasonic RAW images.
Definition: tiffcomposite_int.hpp:76
TiffComponent::AutoPtr newTiffThumbData(uint16_t tag, IfdId group)
Function to create and initialize a new TIFF entry for a thumbnail (data)
Definition: tiffcomposite_int.hpp:1633
Exiv2::Exifdatum & setValue(Exiv2::Exifdatum &exifDatum, const T &value)
Set the value of exifDatum to value. If the object already has a value, it is replaced. Otherwise a new ValueType<T> value is created and set to value.
Definition: exif.cpp:193
Additional configuration for a binary array.
Definition: tiffcomposite_int.hpp:1325
void(TiffEncoder::* EncoderFct)(TiffEntryBase *, const Exifdatum *)
Function pointer type for a TiffDecoder member function to decode a TIFF component.
Definition: tifffwd_int.hpp:81
TiffComponent::AutoPtr newTiffEntry(uint16_t tag, IfdId group)
Function to create and initialize a new TIFF entry.
Definition: tiffcomposite_int.cpp:1921
TiffComponent::AutoPtr newTiffSubIfd(uint16_t tag, IfdId group)
Function to create and initialize a new TIFF sub-directory.
Definition: tiffcomposite_int.hpp:1601
Interface for a standard TIFF IFD entry consisting of a value which is a set of offsets to a data are...
Definition: tiffcomposite_int.hpp:595
void setDecoded(bool decoded)
Set a flag to indicate if the array was decoded.
Definition: tiffcomposite_int.hpp:1406
void setStart(const byte *pStart)
Set a pointer to the start of the binary representation of the component in a memory buffer...
Definition: tiffcomposite_int.hpp:229
Class to insert pointers or offsets to computed addresses at specific locations in an image...
Definition: tiffimage_int.hpp:419
const TiffType ttSignedByte
Exif SBYTE type.
Definition: tiffcomposite_int.hpp:54
Tiff IFD Makernote. This is a concrete class suitable for all IFD makernotes.
Definition: tiffcomposite_int.hpp:1147
Common interface for all types of values used with metadata.
Definition: value.hpp:51
std::auto_ptr< Value > AutoPtr
Shortcut for a Value auto pointer.
Definition: value.hpp:54
const TiffType ttUnsignedLong
Exif LONG type.
Definition: tiffcomposite_int.hpp:52
TiffComponent::AutoPtr newTiffBinaryArray1(uint16_t tag, IfdId group)
Function to create and initialize a new simple binary array entry.
Definition: tiffcomposite_int.hpp:1617
std::string m_
Camera make.
Definition: tiffcomposite_int.hpp:400
A standard TIFF IFD entry consisting of a value which is an array of offsets to image data areas...
Definition: tiffcomposite_int.hpp:733
const TiffType ttUndefined
Exif UNDEFINED type.
Definition: tiffcomposite_int.hpp:55
IfdId g_
Group
Definition: tiffcomposite_int.hpp:402
void setElDef(const ArrayDef &def)
Set the array definition for this element.
Definition: tiffcomposite_int.hpp:1508
uint16_t tag() const
Return the tag corresponding to the extended tag.
Definition: tiffcomposite_int.hpp:385
ByteOrder elByteOrder() const
Return the byte order of this element.
Definition: tiffcomposite_int.hpp:1524
bool cmpGroupLt(TiffComponent const *lhs, TiffComponent const *rhs)
Compare two TIFF component pointers by group. Return true if the group of component lhs is less than ...
Definition: tiffcomposite_int.cpp:1914
uint32_t tagStep() const
Return the size of the default tag, which is used to calculate tag numbers as idx/tagStep.
Definition: tiffcomposite_int.hpp:1330
EncoderFct encoderFct_
Encoder function for matching tags.
Definition: tiffcomposite_int.hpp:392
IfdId group_
Group that contains the tag.
Definition: tiffcomposite_int.hpp:390
DataBuf(* CryptFct)(uint16_t, const byte *, uint32_t, TiffComponent *const)
Function pointer type for a crypt function used for binary arrays.
Definition: tiffcomposite_int.hpp:1310
TiffComponent::AutoPtr newTiffBinaryElement(uint16_t tag, IfdId group)
Function to create and initialize a new binary array element.
Definition: tiffcomposite_int.cpp:1931
const TiffType ttTiffIfd
TIFF IFD type.
Definition: tiffcomposite_int.hpp:61
Provides classes and functions to encode and decode Exif and Iptc data. The libexiv2 API consists of ...
Definition: asfvideo.hpp:36
void setImageByteOrder(ByteOrder byteOrder)
Set the byte order used for the image.
Definition: tiffcomposite_int.hpp:1177
This class models a TIFF directory (Ifd). It is a composite component of the TIFF tree...
Definition: tiffcomposite_int.hpp:858
const uint32_t root
Special tag: root IFD.
Definition: tiffcomposite_int.hpp:73
TIFF composite visitor to encode metadata from an image to the TIFF tree. The metadata containers and...
Definition: tiffvisitor_int.hpp:376
void(TiffDecoder::* DecoderFct)(const TiffEntryBase *)
Function pointer type for a TiffDecoder member function to decode a TIFF component.
Definition: tifffwd_int.hpp:76
bool cmpTagLt(TiffComponent const *lhs, TiffComponent const *rhs)
Compare two TIFF component pointers by tag. Return true if the tag of component lhs is less than that...
Definition: tiffcomposite_int.cpp:1906
TiffComponent::AutoPtr newTiffImageSize(uint16_t tag, IfdId group)
Function to create and initialize a new TIFF entry for image data (size)
Definition: tiffcomposite_int.hpp:1657
An Exif metadatum, consisting of an ExifKey and a Value and methods to manipulate these...
Definition: exif.hpp:59
IfdId group() const
Return the group id of this component.
Definition: tiffcomposite_int.hpp:257
Element of a TiffBinaryArray.
Definition: tiffcomposite_int.hpp:1493
const ArrayDef * def() const
Return a pointer to the definition.
Definition: tiffcomposite_int.hpp:1414
const Value * pValue() const
Return a const pointer to the converted value of this component.
Definition: tiffcomposite_int.hpp:473
ByteOrder imageByteOrder() const
Return the byte order used for the image.
Definition: tiffcomposite_int.hpp:1207
const TiffType ttUnsignedRational
Exif RATIONAL type.
Definition: tiffcomposite_int.hpp:53
Defines one tag in a binary array.
Definition: tiffcomposite_int.hpp:1313
A tupel consisting of extended Tag and group used as an item in TIFF paths.
Definition: tiffcomposite_int.hpp:87
ByteOrder byteOrder_
Byte order, invalidByteOrder to inherit.
Definition: tiffcomposite_int.hpp:1333
IfdId
Type to specify the IFD to which a metadata belongs.
Definition: tags_int.hpp:46
const TiffType ttSignedRational
Exif SRATIONAL type.
Definition: tiffcomposite_int.hpp:58
TIFF mapping table for functions to decode special cases.
Definition: tiffcomposite_int.hpp:373
const TiffType ttSignedShort
Exif SSHORT type.
Definition: tiffcomposite_int.hpp:56