Exiv2
Loading...
Searching...
No Matches
tiffvisitor_int.hpp
Go to the documentation of this file.
1// ***************************************************************** -*- C++ -*-
2/*
3 * Copyright (C) 2004-2018 Exiv2 authors
4 * This program is part of the Exiv2 distribution.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
19 */
28#ifndef TIFFVISITOR_INT_HPP_
29#define TIFFVISITOR_INT_HPP_
30
31// *****************************************************************************
32// included header files
33#include "exif.hpp"
34#include "tifffwd_int.hpp"
35#include "types.hpp"
36
37// + standard includes
38#include <memory>
39#include <iostream>
40#include <iomanip>
41#include <cassert>
42#include <map>
43#include <set>
44#include <vector>
45
46// *****************************************************************************
47// namespace extensions
48namespace Exiv2 {
49
50 class IptcData;
51 class XmpData;
52
53 namespace Internal {
54
55// *****************************************************************************
56// class definitions
57
74 public:
76 enum GoEvent {
81 // Note: If you add more events here, adjust the events_ constant too!
82 };
83
84 private:
85 static const int events_ = 2;
86 bool go_[events_];
87
88 public:
90
91
94 virtual ~TiffVisitor();
96
98
99
110 void setGo(GoEvent event, bool go);
112 virtual void visitEntry(TiffEntry* object) =0;
114 virtual void visitDataEntry(TiffDataEntry* object) =0;
116 virtual void visitImageEntry(TiffImageEntry* object) =0;
118 virtual void visitSizeEntry(TiffSizeEntry* object) =0;
120 virtual void visitDirectory(TiffDirectory* object) =0;
125 virtual void visitDirectoryNext(TiffDirectory* object);
130 virtual void visitDirectoryEnd(TiffDirectory* object);
132 virtual void visitSubIfd(TiffSubIfd* object) =0;
134 virtual void visitMnEntry(TiffMnEntry* object) =0;
136 virtual void visitIfdMakernote(TiffIfdMakernote* object) =0;
138 virtual void visitIfdMakernoteEnd(TiffIfdMakernote* object);
140 virtual void visitBinaryArray(TiffBinaryArray* object) =0;
145 virtual void visitBinaryArrayEnd(TiffBinaryArray* object);
147 virtual void visitBinaryElement(TiffBinaryElement* object) =0;
149
151
152
153 bool go(GoEvent event) const;
155
156 }; // class TiffVisitor
157
164 class TiffFinder : public TiffVisitor {
165 public:
167
168
169 TiffFinder(uint16_t tag, IfdId group)
170 : tag_(tag), group_(group), tiffComponent_(0) {}
172 virtual ~TiffFinder();
174
176
177
178 virtual void visitEntry(TiffEntry* object);
180 virtual void visitDataEntry(TiffDataEntry* object);
182 virtual void visitImageEntry(TiffImageEntry* object);
184 virtual void visitSizeEntry(TiffSizeEntry* object);
186 virtual void visitDirectory(TiffDirectory* object);
188 virtual void visitSubIfd(TiffSubIfd* object);
190 virtual void visitMnEntry(TiffMnEntry* object);
192 virtual void visitIfdMakernote(TiffIfdMakernote* object);
194 virtual void visitBinaryArray(TiffBinaryArray* object);
196 virtual void visitBinaryElement(TiffBinaryElement* object);
197
199 void findObject(TiffComponent* object);
201 void init(uint16_t tag, IfdId group);
203
205
206
210 TiffComponent* result() const { return tiffComponent_; }
212
213 private:
214 uint16_t tag_;
215 IfdId group_;
216 TiffComponent* tiffComponent_;
217 }; // class TiffFinder
218
224 class TiffCopier : public TiffVisitor {
225 public:
227
228
237 uint32_t root,
238 const TiffHeaderBase* pHeader,
239 const PrimaryGroups* pPrimaryGroups);
241 virtual ~TiffCopier();
243
245
246
247 virtual void visitEntry(TiffEntry* object);
249 virtual void visitDataEntry(TiffDataEntry* object);
251 virtual void visitImageEntry(TiffImageEntry* object);
253 virtual void visitSizeEntry(TiffSizeEntry* object);
255 virtual void visitDirectory(TiffDirectory* object);
257 virtual void visitSubIfd(TiffSubIfd* object);
259 virtual void visitMnEntry(TiffMnEntry* object);
261 virtual void visitIfdMakernote(TiffIfdMakernote* object);
263 virtual void visitBinaryArray(TiffBinaryArray* object);
265 virtual void visitBinaryElement(TiffBinaryElement* object);
266
268 void copyObject(TiffComponent* object);
270
271 private:
272 TiffComponent* pRoot_;
273 uint32_t root_;
274 const TiffHeaderBase* pHeader_;
275 const PrimaryGroups* pPrimaryGroups_;
276 }; // class TiffCopier
277
284 class TiffDecoder : public TiffVisitor {
285 public:
287
288
294 ExifData& exifData,
295 IptcData& iptcData,
296 XmpData& xmpData,
297 TiffComponent* const pRoot,
298 FindDecoderFct findDecoderFct
299 );
301 virtual ~TiffDecoder();
303
305
306
307 virtual void visitEntry(TiffEntry* object);
309 virtual void visitDataEntry(TiffDataEntry* object);
311 virtual void visitImageEntry(TiffImageEntry* object);
313 virtual void visitSizeEntry(TiffSizeEntry* object);
315 virtual void visitDirectory(TiffDirectory* object);
317 virtual void visitSubIfd(TiffSubIfd* object);
319 virtual void visitMnEntry(TiffMnEntry* object);
321 virtual void visitIfdMakernote(TiffIfdMakernote* object);
323 virtual void visitBinaryArray(TiffBinaryArray* object);
325 virtual void visitBinaryElement(TiffBinaryElement* object);
326
328 void decodeTiffEntry(const TiffEntryBase* object);
330 void decodeStdTiffEntry(const TiffEntryBase* object);
332 void decodeIptc(const TiffEntryBase* object);
334 void decodeXmp(const TiffEntryBase* object);
336 void decodeCanonAFInfo(const TiffEntryBase* object);
338
339 private:
341
342
350 void getObjData(byte const*& pData,
351 long& size,
352 uint16_t tag,
353 IfdId group,
354 const TiffEntryBase* object);
356
357 private:
358 // DATA
359 ExifData& exifData_;
360 IptcData& iptcData_;
361 XmpData& xmpData_;
362 TiffComponent* const pRoot_;
363 const FindDecoderFct findDecoderFct_;
364 std::string make_;
365 bool decodedIptc_;
366
367 }; // class TiffDecoder
368
384 class TiffEncoder : public TiffVisitor {
385 public:
387
388
394 const ExifData& exifData,
395 const IptcData& iptcData,
396 const XmpData& xmpData,
397 TiffComponent* pRoot,
398 const bool isNewImage,
399 const PrimaryGroups* pPrimaryGroups,
400 const TiffHeaderBase* pHeader,
401 FindEncoderFct findEncoderFct
402 );
404 virtual ~TiffEncoder();
406
408
409
410 virtual void visitEntry(TiffEntry* object);
412 virtual void visitDataEntry(TiffDataEntry* object);
414 virtual void visitImageEntry(TiffImageEntry* object);
416 virtual void visitSizeEntry(TiffSizeEntry* object);
418 virtual void visitDirectory(TiffDirectory* object);
420 virtual void visitDirectoryNext(TiffDirectory* object);
422 virtual void visitSubIfd(TiffSubIfd* object);
424 virtual void visitMnEntry(TiffMnEntry* object);
426 virtual void visitIfdMakernote(TiffIfdMakernote* object);
428 virtual void visitIfdMakernoteEnd(TiffIfdMakernote* object);
430 virtual void visitBinaryArray(TiffBinaryArray* object);
432 virtual void visitBinaryArrayEnd(TiffBinaryArray* object);
434 virtual void visitBinaryElement(TiffBinaryElement* object);
435
456 TiffEntryBase* object,
457 const Exifdatum* datum =0
458 );
459
461 void encodeBinaryElement(TiffBinaryElement* object, const Exifdatum* datum);
463 void encodeBinaryArray(TiffBinaryArray* object, const Exifdatum* datum);
465 void encodeDataEntry(TiffDataEntry* object, const Exifdatum* datum);
467 void encodeTiffEntry(TiffEntry* object, const Exifdatum* datum);
469 void encodeImageEntry(TiffImageEntry* object, const Exifdatum* datum);
471 void encodeMnEntry(TiffMnEntry* object, const Exifdatum* datum);
473 void encodeSizeEntry(TiffSizeEntry* object, const Exifdatum* datum);
475 void encodeSubIfd(TiffSubIfd* object, const Exifdatum* datum);
476
478 void encodeTiffEntryBase(TiffEntryBase* object, const Exifdatum* datum);
480 void encodeOffsetEntry(TiffEntryBase* object, const Exifdatum* datum);
481
483 // Todo void encodeNikonSubIfd(TiffEntryBase* object, const Exifdatum* datum);
484
486 void encodeIptc(TiffEntryBase* object, const Exifdatum* datum);
499 void add(
500 TiffComponent* pRootDir,
501 TiffComponent* pSourceDir,
502 uint32_t root
503 );
505 void setDirty(bool flag =true);
507
509
510
514 ByteOrder byteOrder() const { return byteOrder_; }
519 bool dirty() const;
521 WriteMethod writeMethod() const { return writeMethod_; }
523
524 private:
526
527
532 void encodeIptc();
537 void encodeXmp();
539
541
542
547 uint32_t updateDirEntry(byte* buf,
549 TiffComponent* pTiffComponent) const;
559 bool isImageTag(uint16_t tag, IfdId group) const;
561
562 private:
563 // DATA
564 ExifData exifData_;
565 const IptcData& iptcData_;
566 const XmpData& xmpData_;
567 bool del_;
568 const TiffHeaderBase* pHeader_;
569 TiffComponent* pRoot_;
570 const bool isNewImage_;
571 const PrimaryGroups* pPrimaryGroups_;
572 TiffComponent* pSourceTree_;
573 ByteOrder byteOrder_;
574 ByteOrder origByteOrder_;
575 const FindEncoderFct findEncoderFct_;
576 std::string make_;
577 bool dirty_;
578 WriteMethod writeMethod_;
579
580 }; // class TiffEncoder
581
589 public:
591
592
594 uint32_t baseOffset)
595 : byteOrder_(byteOrder),
596 baseOffset_(baseOffset) {}
598
600
601
605 ByteOrder byteOrder() const { return byteOrder_; }
617 uint32_t baseOffset() const { return baseOffset_; }
619
620 private:
621 ByteOrder byteOrder_;
622 uint32_t baseOffset_;
623 }; // TiffRwState
624
630 class TiffReader : public TiffVisitor {
631 public:
633
634
643 TiffReader(const byte* pData,
644 uint32_t size,
645 TiffComponent* pRoot,
646 TiffRwState state);
647
649 virtual ~TiffReader();
651
653
654
655 virtual void visitEntry(TiffEntry* object);
657 virtual void visitDataEntry(TiffDataEntry* object);
659 virtual void visitImageEntry(TiffImageEntry* object);
661 virtual void visitSizeEntry(TiffSizeEntry* object);
663 virtual void visitDirectory(TiffDirectory* object);
665 virtual void visitSubIfd(TiffSubIfd* object);
667 virtual void visitMnEntry(TiffMnEntry* object);
669 virtual void visitIfdMakernote(TiffIfdMakernote* object);
671 virtual void visitIfdMakernoteEnd(TiffIfdMakernote* object);
673 virtual void visitBinaryArray(TiffBinaryArray* object);
675 virtual void visitBinaryElement(TiffBinaryElement* object);
676
678 void readTiffEntry(TiffEntryBase* object);
687 void setMnState(const TiffRwState* state =0);
689 void setOrigState();
691 bool circularReference(const byte* start, IfdId group);
693 int nextIdx(IfdId group);
694
704 void postProcess();
706
708
709
710 ByteOrder byteOrder() const;
712 uint32_t baseOffset() const;
714
715 private:
716 typedef std::map<const byte*, IfdId> DirList;
717 typedef std::map<uint16_t, int> IdxSeq;
718 typedef std::vector<TiffComponent*> PostList;
719
720 // DATA
721 const byte* pData_;
722 const uint32_t size_;
723 const byte* pLast_;
724 TiffComponent* const pRoot_;
725 TiffRwState* pState_;
726 TiffRwState origState_;
727 TiffRwState mnState_;
728 DirList dirList_;
729 IdxSeq idxSeq_;
730 PostList postList_;
731 bool postProc_;
732 }; // class TiffReader
733
734}} // namespace Internal, Exiv2
735
736#endif // #ifndef TIFFVISITOR_INT_HPP_
A container for Exif data. This is a top-level class of the Exiv2 library. The container holds Exifda...
Definition exif.hpp:434
An Exif metadatum, consisting of an ExifKey and a Value and methods to manipulate these.
Definition exif.hpp:59
Composite to model an array of different tags. The tag types as well as other aspects of the array ar...
Definition tiffcomposite_int.hpp:1356
Element of a TiffBinaryArray.
Definition tiffcomposite_int.hpp:1495
Interface class for components of a TIFF directory hierarchy (Composite pattern). Both TIFF directori...
Definition tiffcomposite_int.hpp:174
Copy all image tags from the source tree (the tree that is traversed) to a target tree,...
Definition tiffvisitor_int.hpp:224
virtual void visitEntry(TiffEntry *object)
Copy a TIFF entry if it is an image tag.
Definition tiffvisitor_int.cpp:229
virtual void visitMnEntry(TiffMnEntry *object)
Copy a TIFF makernote if it is an image tag.
Definition tiffvisitor_int.cpp:259
virtual void visitDirectory(TiffDirectory *object)
Copy a TIFF directory if it is an image tag.
Definition tiffvisitor_int.cpp:249
virtual void visitSizeEntry(TiffSizeEntry *object)
Copy a TIFF size entry if it is an image tag.
Definition tiffvisitor_int.cpp:244
virtual void visitIfdMakernote(TiffIfdMakernote *object)
Copy an IFD makernote if it is an image tag.
Definition tiffvisitor_int.cpp:264
virtual void visitBinaryElement(TiffBinaryElement *object)
Copy an element of a binary array if it is an image tag.
Definition tiffvisitor_int.cpp:274
virtual void visitImageEntry(TiffImageEntry *object)
Copy a TIFF image entry if it is an image tag.
Definition tiffvisitor_int.cpp:239
virtual void visitSubIfd(TiffSubIfd *object)
Copy a TIFF sub-IFD if it is an image tag.
Definition tiffvisitor_int.cpp:254
virtual void visitBinaryArray(TiffBinaryArray *object)
Copy a binary array if it is an image tag.
Definition tiffvisitor_int.cpp:269
virtual ~TiffCopier()
Virtual destructor.
Definition tiffvisitor_int.cpp:208
void copyObject(TiffComponent *object)
Check if object is an image tag and if so, copy it to the target tree.
Definition tiffvisitor_int.cpp:212
virtual void visitDataEntry(TiffDataEntry *object)
Copy a TIFF data entry if it is an image tag.
Definition tiffvisitor_int.cpp:234
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:598
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:653
TIFF composite visitor to decode metadata from the TIFF tree and add it to an Image,...
Definition tiffvisitor_int.hpp:284
virtual void visitEntry(TiffEntry *object)
Decode a TIFF entry.
Definition tiffvisitor_int.cpp:312
void decodeStdTiffEntry(const TiffEntryBase *object)
Decode a standard TIFF entry.
Definition tiffvisitor_int.cpp:554
virtual ~TiffDecoder()
Virtual destructor.
Definition tiffvisitor_int.cpp:308
void decodeIptc(const TiffEntryBase *object)
Decode IPTC data from an IPTCNAA tag or Photoshop ImageResources.
Definition tiffvisitor_int.cpp:414
void decodeCanonAFInfo(const TiffEntryBase *object)
Decode Exif.Canon.AFInfo.
Definition tiffvisitor_int.cpp:472
virtual void visitMnEntry(TiffMnEntry *object)
Decode a TIFF makernote.
Definition tiffvisitor_int.cpp:342
virtual void visitBinaryElement(TiffBinaryElement *object)
Decode an element of a binary array.
Definition tiffvisitor_int.cpp:570
virtual void visitDirectory(TiffDirectory *object)
Decode a TIFF directory.
Definition tiffvisitor_int.cpp:332
void decodeTiffEntry(const TiffEntryBase *object)
Entry function, determines how to decode each tag.
Definition tiffvisitor_int.cpp:538
virtual void visitImageEntry(TiffImageEntry *object)
Decode a TIFF image entry.
Definition tiffvisitor_int.cpp:322
virtual void visitIfdMakernote(TiffIfdMakernote *object)
Decode an IFD makernote.
Definition tiffvisitor_int.cpp:348
virtual void visitSubIfd(TiffSubIfd *object)
Decode a TIFF sub-IFD.
Definition tiffvisitor_int.cpp:337
virtual void visitSizeEntry(TiffSizeEntry *object)
Decode a TIFF size entry.
Definition tiffvisitor_int.cpp:327
void decodeXmp(const TiffEntryBase *object)
Decode XMP packet from an XMLPacket tag.
Definition tiffvisitor_int.cpp:387
virtual void visitDataEntry(TiffDataEntry *object)
Decode a TIFF data entry.
Definition tiffvisitor_int.cpp:317
virtual void visitBinaryArray(TiffBinaryArray *object)
Decode a binary array.
Definition tiffvisitor_int.cpp:563
This class models a TIFF directory (Ifd). It is a composite component of the TIFF tree.
Definition tiffcomposite_int.hpp:861
TIFF composite visitor to encode metadata from an image to the TIFF tree. The metadata containers and...
Definition tiffvisitor_int.hpp:384
virtual void visitEntry(TiffEntry *object)
Encode a TIFF entry.
Definition tiffvisitor_int.cpp:725
virtual ~TiffEncoder()
Virtual destructor.
Definition tiffvisitor_int.cpp:624
void encodeMnEntry(TiffMnEntry *object, const Exifdatum *datum)
Callback encoder function for a Makernote entry.
Definition tiffvisitor_int.cpp:1070
void encodeSubIfd(TiffSubIfd *object, const Exifdatum *datum)
Callback encoder function for a sub-IFD entry.
Definition tiffvisitor_int.cpp:1081
virtual void visitSizeEntry(TiffSizeEntry *object)
Encode a TIFF size entry.
Definition tiffvisitor_int.cpp:740
virtual void visitDirectoryNext(TiffDirectory *object)
Update directory entries.
Definition tiffvisitor_int.cpp:750
virtual void visitIfdMakernoteEnd(TiffIfdMakernote *object)
Reset encoder to its original state, undo makernote specific settings.
Definition tiffvisitor_int.cpp:833
void encodeTiffEntryBase(TiffEntryBase *object, const Exifdatum *datum)
Special encoder function for the base part of a TIFF entry.
Definition tiffvisitor_int.cpp:1086
virtual void visitBinaryElement(TiffBinaryElement *object)
Encode an element of a binary array.
Definition tiffvisitor_int.cpp:874
void setDirty(bool flag=true)
Set the dirty flag and end of traversing signal.
Definition tiffvisitor_int.cpp:713
void encodeImageEntry(TiffImageEntry *object, const Exifdatum *datum)
Callback encoder function for an image entry.
Definition tiffvisitor_int.cpp:998
void encodeTiffComponent(TiffEntryBase *object, const Exifdatum *datum=0)
Top level encoder function. Determines how to encode each TIFF component. This function is called by ...
Definition tiffvisitor_int.cpp:891
virtual void visitIfdMakernote(TiffIfdMakernote *object)
Encode an IFD makernote.
Definition tiffvisitor_int.cpp:804
virtual void visitBinaryArrayEnd(TiffBinaryArray *object)
Re-encrypt binary array if necessary.
Definition tiffvisitor_int.cpp:847
void encodeTiffEntry(TiffEntry *object, const Exifdatum *datum)
Callback encoder function for a standard TIFF entry.
Definition tiffvisitor_int.cpp:993
void encodeBinaryArray(TiffBinaryArray *object, const Exifdatum *datum)
Callback encoder function for a binary array.
Definition tiffvisitor_int.cpp:951
void encodeOffsetEntry(TiffEntryBase *object, const Exifdatum *datum)
Special encoder function for an offset entry.
Definition tiffvisitor_int.cpp:1111
void encodeIptc(TiffEntryBase *object, const Exifdatum *datum)
Special encoder function to encode SubIFD contents to Image group if it contains primary image data.
void encodeBinaryElement(TiffBinaryElement *object, const Exifdatum *datum)
Callback encoder function for an element of a binary array.
Definition tiffvisitor_int.cpp:956
bool dirty() const
True if any tag was deleted or allocated in the process of visiting a TIFF composite tree.
Definition tiffvisitor_int.cpp:719
virtual void visitSubIfd(TiffSubIfd *object)
Encode a TIFF sub-IFD.
Definition tiffvisitor_int.cpp:785
virtual void visitImageEntry(TiffImageEntry *object)
Encode a TIFF image entry.
Definition tiffvisitor_int.cpp:735
void add(TiffComponent *pRootDir, TiffComponent *pSourceDir, uint32_t root)
Add metadata from image to the TIFF composite.
Definition tiffvisitor_int.cpp:1137
virtual void visitDirectory(TiffDirectory *object)
Encode a TIFF directory.
Definition tiffvisitor_int.cpp:745
virtual void visitDataEntry(TiffDataEntry *object)
Encode a TIFF data entry.
Definition tiffvisitor_int.cpp:730
void encodeDataEntry(TiffDataEntry *object, const Exifdatum *datum)
Callback encoder function for a data entry.
Definition tiffvisitor_int.cpp:961
void encodeSizeEntry(TiffSizeEntry *object, const Exifdatum *datum)
Callback encoder function for a size entry.
Definition tiffvisitor_int.cpp:1076
virtual void visitBinaryArray(TiffBinaryArray *object)
Encode a binary array.
Definition tiffvisitor_int.cpp:840
ByteOrder byteOrder() const
Return the applicable byte order. May be different for the Makernote and the rest of the TIFF entries...
Definition tiffvisitor_int.hpp:514
virtual void visitMnEntry(TiffMnEntry *object)
Encode a TIFF makernote.
Definition tiffvisitor_int.cpp:790
WriteMethod writeMethod() const
Return the write method used.
Definition tiffvisitor_int.hpp:521
This abstract base class provides the common functionality of an IFD directory entry and defines an e...
Definition tiffcomposite_int.hpp:414
A standard TIFF IFD entry.
Definition tiffcomposite_int.hpp:566
Search the composite for a component with tag and group. Return a pointer to the component or 0,...
Definition tiffvisitor_int.hpp:164
virtual void visitBinaryElement(TiffBinaryElement *object)
Find tag and group in an element of a binary array.
Definition tiffvisitor_int.cpp:189
virtual void visitMnEntry(TiffMnEntry *object)
Find tag and group in a TIFF makernote.
Definition tiffvisitor_int.cpp:174
virtual void visitEntry(TiffEntry *object)
Find tag and group in a TIFF entry.
Definition tiffvisitor_int.cpp:144
virtual void visitImageEntry(TiffImageEntry *object)
Find tag and group in a TIFF image entry.
Definition tiffvisitor_int.cpp:154
virtual void visitSizeEntry(TiffSizeEntry *object)
Find tag and group in a TIFF size entry.
Definition tiffvisitor_int.cpp:159
virtual ~TiffFinder()
Virtual destructor.
Definition tiffvisitor_int.cpp:132
virtual void visitIfdMakernote(TiffIfdMakernote *object)
Find tag and group in an IFD makernote.
Definition tiffvisitor_int.cpp:179
virtual void visitDataEntry(TiffDataEntry *object)
Find tag and group in a TIFF data entry.
Definition tiffvisitor_int.cpp:149
virtual void visitDirectory(TiffDirectory *object)
Find tag and group in a TIFF directory.
Definition tiffvisitor_int.cpp:164
TiffComponent * result() const
Return the search result. 0 if no TIFF component was found for the tag and group combination.
Definition tiffvisitor_int.hpp:210
virtual void visitSubIfd(TiffSubIfd *object)
Find tag and group in a TIFF sub-IFD.
Definition tiffvisitor_int.cpp:169
void init(uint16_t tag, IfdId group)
Initialize the Finder for a new search.
Definition tiffvisitor_int.cpp:124
virtual void visitBinaryArray(TiffBinaryArray *object)
Find tag and group in a binary array.
Definition tiffvisitor_int.cpp:184
TiffFinder(uint16_t tag, IfdId group)
Constructor, taking tag and group of the component to find.
Definition tiffvisitor_int.hpp:169
void findObject(TiffComponent *object)
Check if object matches tag and group.
Definition tiffvisitor_int.cpp:136
Abstract base class defining the interface of an image header. Used internally by classes for TIFF-ba...
Definition tiffimage_int.hpp:59
Tiff IFD Makernote. This is a concrete class suitable for all IFD makernotes.
Definition tiffcomposite_int.hpp:1149
A standard TIFF IFD entry consisting of a value which is an array of offsets to image data areas....
Definition tiffcomposite_int.hpp:736
This class is the basis for Makernote support in TIFF. It contains a pointer to a concrete Makernote....
Definition tiffcomposite_int.hpp:1073
TIFF composite visitor to read the TIFF structure from a block of memory and build the composite from...
Definition tiffvisitor_int.hpp:630
void readDataEntryBase(TiffDataEntryBase *object)
Read a TiffDataEntryBase from the data buffer.
Definition tiffvisitor_int.cpp:1263
ByteOrder byteOrder() const
Return the byte order.
Definition tiffvisitor_int.cpp:1251
virtual void visitIfdMakernote(TiffIfdMakernote *object)
Read an IFD makernote from the data buffer.
Definition tiffvisitor_int.cpp:1488
virtual void visitSizeEntry(TiffSizeEntry *object)
Read a TIFF size entry from the data buffer.
Definition tiffvisitor_int.cpp:1291
void setMnState(const TiffRwState *state=0)
Set the state of the reader to one suitable for the Makernote.
Definition tiffvisitor_int.cpp:1237
virtual void visitBinaryElement(TiffBinaryElement *object)
Read an element of a binary array from the data buffer.
Definition tiffvisitor_int.cpp:1730
int nextIdx(IfdId group)
Return the next idx sequence number for group.
Definition tiffvisitor_int.cpp:1318
void readTiffEntry(TiffEntryBase *object)
Read a standard TIFF entry from the data buffer.
Definition tiffvisitor_int.cpp:1526
virtual void visitImageEntry(TiffImageEntry *object)
Read a TIFF image entry from the data buffer.
Definition tiffvisitor_int.cpp:1286
virtual void visitDataEntry(TiffDataEntry *object)
Read a TIFF data entry from the data buffer.
Definition tiffvisitor_int.cpp:1281
virtual void visitIfdMakernoteEnd(TiffIfdMakernote *object)
Reset reader to its original state, undo makernote specific settings.
Definition tiffvisitor_int.cpp:1520
virtual void visitMnEntry(TiffMnEntry *object)
Read a TIFF makernote entry from the data buffer.
Definition tiffvisitor_int.cpp:1464
virtual void visitEntry(TiffEntry *object)
Read a TIFF entry from the data buffer.
Definition tiffvisitor_int.cpp:1276
virtual void visitBinaryArray(TiffBinaryArray *object)
Read a binary array from the data buffer.
Definition tiffvisitor_int.cpp:1650
void setOrigState()
Set the state to the original state as set in the constructor.
Definition tiffvisitor_int.cpp:1232
uint32_t baseOffset() const
Return the base offset. See class TiffRwState for details.
Definition tiffvisitor_int.cpp:1257
bool circularReference(const byte *start, IfdId group)
Check IFD directory pointer start for circular reference.
Definition tiffvisitor_int.cpp:1304
virtual void visitDirectory(TiffDirectory *object)
Read a TIFF directory from the data buffer.
Definition tiffvisitor_int.cpp:1334
void postProcess()
Read deferred components.
Definition tiffvisitor_int.cpp:1323
virtual void visitSubIfd(TiffSubIfd *object)
Read a TIFF sub-IFD from the data buffer.
Definition tiffvisitor_int.cpp:1414
virtual ~TiffReader()
Virtual destructor.
Definition tiffvisitor_int.cpp:1228
Simple state class containing relevant state information for the TIFF reader. This is in a separate c...
Definition tiffvisitor_int.hpp:588
ByteOrder byteOrder() const
Return the applicable byte order. May be different for the Makernote and the rest of the TIFF entries...
Definition tiffvisitor_int.hpp:605
TiffRwState(ByteOrder byteOrder, uint32_t baseOffset)
Constructor.
Definition tiffvisitor_int.hpp:593
uint32_t baseOffset() const
Return the base offset.
Definition tiffvisitor_int.hpp:617
A TIFF IFD entry containing the size of a data area of a related TiffDataEntry. This component is use...
Definition tiffcomposite_int.hpp:819
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:984
Abstract base class defining the interface for TIFF composite visitors (Visitor pattern)
Definition tiffvisitor_int.hpp:73
virtual void visitDataEntry(TiffDataEntry *object)=0
Operation to perform for a TIFF data entry.
bool go(GoEvent event) const
Check if stop flag for event is clear, return true if it's clear.
Definition tiffvisitor_int.cpp:102
TiffVisitor()
Default constructor. Initialises all stop/go flags to true.
Definition tiffvisitor_int.cpp:85
virtual void visitDirectoryNext(TiffDirectory *object)
Operation to perform for a TIFF directory, after all components and before the next entry is processe...
Definition tiffvisitor_int.cpp:108
virtual ~TiffVisitor()
Virtual destructor.
Definition tiffvisitor_int.cpp:92
virtual void visitBinaryArrayEnd(TiffBinaryArray *object)
Operation to perform for a TIFF binary array, at the end of the processing.
Definition tiffvisitor_int.cpp:120
virtual void visitBinaryElement(TiffBinaryElement *object)=0
Operation to perform for an element of a binary array.
GoEvent
Events for the stop/go flag. See setGo().
Definition tiffvisitor_int.hpp:76
@ geTraverse
Signal to control traversing of the composite tree.
Definition tiffvisitor_int.hpp:78
@ geKnownMakernote
Signal used by TiffReader to signal an unknown makernote.
Definition tiffvisitor_int.hpp:80
virtual void visitBinaryArray(TiffBinaryArray *object)=0
Operation to perform for a binary array.
virtual void visitSubIfd(TiffSubIfd *object)=0
Operation to perform for a TIFF sub-IFD.
virtual void visitDirectory(TiffDirectory *object)=0
Operation to perform for a TIFF directory.
virtual void visitImageEntry(TiffImageEntry *object)=0
Operation to perform for a TIFF image entry.
virtual void visitMnEntry(TiffMnEntry *object)=0
Operation to perform for the makernote component.
virtual void visitIfdMakernote(TiffIfdMakernote *object)=0
Operation to perform for an IFD makernote.
virtual void visitSizeEntry(TiffSizeEntry *object)=0
Operation to perform for a TIFF size entry.
void setGo(GoEvent event, bool go)
Set the stop/go flag: true for go, false for stop.
Definition tiffvisitor_int.cpp:96
virtual void visitEntry(TiffEntry *object)=0
Operation to perform for a TIFF entry.
virtual void visitIfdMakernoteEnd(TiffIfdMakernote *object)
Operation to perform after processing an IFD makernote.
Definition tiffvisitor_int.cpp:116
virtual void visitDirectoryEnd(TiffDirectory *object)
Operation to perform for a TIFF directory, at the end of the processing.
Definition tiffvisitor_int.cpp:112
A container for IPTC data. This is a top-level class of the Exiv2 library.
Definition iptc.hpp:173
A container for XMP data. This is a top-level class of the Exiv2 library.
Definition xmp_exiv2.hpp:173
Encoding and decoding of Exif data.
DecoderFct(* FindDecoderFct)(const std::string &make, uint32_t extendedTag, IfdId group)
Type for a function pointer for a function to decode a TIFF component.
Definition tifffwd_int.hpp:92
std::vector< IfdId > PrimaryGroups
Type for a list of primary image groups.
Definition tifffwd_int.hpp:114
IfdId
Type to specify the IFD to which a metadata belongs.
Definition tags_int.hpp:54
EncoderFct(* FindEncoderFct)(const std::string &make, uint32_t extendedTag, IfdId group)
Type for a function pointer for a function to encode a TIFF component.
Definition tifffwd_int.hpp:98
Provides classes and functions to encode and decode Exif and Iptc data. The libexiv2 API consists of ...
Definition asfvideo.hpp:36
ByteOrder
Type to express the byte order (little or big endian)
Definition types.hpp:113
WriteMethod
Type to indicate write method used by TIFF parsers.
Definition types.hpp:116
Internal TIFF parser related typedefs and forward definitions.
Type definitions for Exiv2 and related functionality.