Exiv2
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
48 namespace Exiv2 {
49 
50  class IptcData;
51  class XmpData;
52 
53  namespace Internal {
54 
55 // *****************************************************************************
56 // class definitions
57 
73  class TiffVisitor {
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  TiffVisitor();
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  bool go(GoEvent event) const;
155 
156  }; // class TiffVisitor
157 
164  class TiffFinder : public TiffVisitor {
165  public:
167 
168  TiffFinder(uint16_t tag, IfdId group)
170  : tag_(tag), group_(group), tiffComponent_(0) {}
172  virtual ~TiffFinder();
174 
176 
177  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 
236  TiffCopier( TiffComponent* pRoot,
237  uint32_t root,
238  const TiffHeaderBase* pHeader,
239  const PrimaryGroups* pPrimaryGroups);
241  virtual ~TiffCopier();
243 
245 
246  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 
293  TiffDecoder(
294  ExifData& exifData,
295  IptcData& iptcData,
296  XmpData& xmpData,
297  TiffComponent* const pRoot,
298  FindDecoderFct findDecoderFct
299  );
301  virtual ~TiffDecoder();
303 
305 
306  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 
393  TiffEncoder(
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  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 
455  void encodeTiffComponent(
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 
588  class TiffRwState {
589  public:
591 
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  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);
680  void readDataEntryBase(TiffDataEntryBase* 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  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_
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 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 visitSubIfd(TiffSubIfd *object)
Decode a TIFF sub-IFD.
Definition: tiffvisitor_int.cpp:337
void encodeIptc(TiffEntryBase *object, const Exifdatum *datum)
Special encoder function to encode SubIFD contents to Image group if it contains primary image data.
void decodeXmp(const TiffEntryBase *object)
Decode XMP packet from an XMLPacket tag.
Definition: tiffvisitor_int.cpp:387
virtual void visitSizeEntry(TiffSizeEntry *object)
Copy a TIFF size entry if it is an image tag.
Definition: tiffvisitor_int.cpp:244
void encodeDataEntry(TiffDataEntry *object, const Exifdatum *datum)
Callback encoder function for a data entry.
Definition: tiffvisitor_int.cpp:961
A container for XMP data. This is a top-level class of the Exiv2 library.
Definition: xmp_exiv2.hpp:173
virtual void visitIfdMakernote(TiffIfdMakernote *object)
Encode an IFD makernote.
Definition: tiffvisitor_int.cpp:804
virtual ~TiffEncoder()
Virtual destructor.
Definition: tiffvisitor_int.cpp:624
virtual void visitEntry(TiffEntry *object)
Encode a TIFF entry.
Definition: tiffvisitor_int.cpp:725
A container for Exif data. This is a top-level class of the Exiv2 library. The container holds Exifda...
Definition: exif.hpp:434
virtual ~TiffDecoder()
Virtual destructor.
Definition: tiffvisitor_int.cpp:308
void encodeSubIfd(TiffSubIfd *object, const Exifdatum *datum)
Callback encoder function for a sub-IFD entry.
Definition: tiffvisitor_int.cpp:1081
virtual void visitIfdMakernoteEnd(TiffIfdMakernote *object)
Operation to perform after processing an IFD makernote.
Definition: tiffvisitor_int.cpp:116
Internal TIFF parser related typedefs and forward definitions.
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
virtual void visitSubIfd(TiffSubIfd *object)=0
Operation to perform for a TIFF sub-IFD.
ByteOrder
Type to express the byte order (little or big endian)
Definition: types.hpp:113
virtual void visitIfdMakernote(TiffIfdMakernote *object)
Read an IFD makernote from the data buffer.
Definition: tiffvisitor_int.cpp:1488
virtual ~TiffFinder()
Virtual destructor.
Definition: tiffvisitor_int.cpp:132
virtual void visitIfdMakernote(TiffIfdMakernote *object)
Copy an IFD makernote if it is an image tag.
Definition: tiffvisitor_int.cpp:264
virtual void visitBinaryArray(TiffBinaryArray *object)
Encode a binary array.
Definition: tiffvisitor_int.cpp:840
void encodeSizeEntry(TiffSizeEntry *object, const Exifdatum *datum)
Callback encoder function for a size entry.
Definition: tiffvisitor_int.cpp:1076
virtual ~TiffCopier()
Virtual destructor.
Definition: tiffvisitor_int.cpp:208
void readTiffEntry(TiffEntryBase *object)
Read a standard TIFF entry from the data buffer.
Definition: tiffvisitor_int.cpp:1526
virtual void visitImageEntry(TiffImageEntry *object)=0
Operation to perform for a TIFF image entry.
virtual void visitBinaryArray(TiffBinaryArray *object)
Find tag and group in a binary array.
Definition: tiffvisitor_int.cpp:184
void setGo(GoEvent event, bool go)
Set the stop/go flag: true for go, false for stop.
Definition: tiffvisitor_int.cpp:96
virtual void visitDataEntry(TiffDataEntry *object)
Copy a TIFF data entry if it is an image tag.
Definition: tiffvisitor_int.cpp:234
TIFF composite visitor to decode metadata from the TIFF tree and add it to an Image,...
Definition: tiffvisitor_int.hpp:284
virtual void visitMnEntry(TiffMnEntry *object)
Copy a TIFF makernote if it is an image tag.
Definition: tiffvisitor_int.cpp:259
TiffReader(const byte *pData, uint32_t size, TiffComponent *pRoot, TiffRwState state)
Constructor. The data buffer and table describing the TIFF structure of the data are set in the const...
Definition: tiffvisitor_int.cpp:1210
virtual void visitMnEntry(TiffMnEntry *object)
Decode a TIFF makernote.
Definition: tiffvisitor_int.cpp:342
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 visitDataEntry(TiffDataEntry *object)
Find tag and group in a TIFF data entry.
Definition: tiffvisitor_int.cpp:149
void decodeTiffEntry(const TiffEntryBase *object)
Entry function, determines how to decode each tag.
Definition: tiffvisitor_int.cpp:538
This abstract base class provides the common functionality of an IFD directory entry and defines an e...
Definition: tiffcomposite_int.hpp:414
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
virtual void visitEntry(TiffEntry *object)
Find tag and group in a TIFF entry.
Definition: tiffvisitor_int.cpp:144
void encodeOffsetEntry(TiffEntryBase *object, const Exifdatum *datum)
Special encoder function for an offset entry.
Definition: tiffvisitor_int.cpp:1111
virtual void visitBinaryElement(TiffBinaryElement *object)
Find tag and group in an element of a binary array.
Definition: tiffvisitor_int.cpp:189
Abstract base class defining the interface of an image header. Used internally by classes for TIFF-ba...
Definition: tiffimage_int.hpp:59
A TIFF IFD entry containing the size of a data area of a related TiffDataEntry. This component is use...
Definition: tiffcomposite_int.hpp:819
virtual void visitDataEntry(TiffDataEntry *object)
Encode a TIFF data entry.
Definition: tiffvisitor_int.cpp:730
void encodeTiffEntry(TiffEntry *object, const Exifdatum *datum)
Callback encoder function for a standard TIFF entry.
Definition: tiffvisitor_int.cpp:993
virtual void visitSizeEntry(TiffSizeEntry *object)
Decode a TIFF size entry.
Definition: tiffvisitor_int.cpp:327
void decodeStdTiffEntry(const TiffEntryBase *object)
Decode a standard TIFF entry.
Definition: tiffvisitor_int.cpp:554
Type definitions for Exiv2 and related functionality.
A container for IPTC data. This is a top-level class of the Exiv2 library.
Definition: iptc.hpp:173
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
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 visitImageEntry(TiffImageEntry *object)
Encode a TIFF image entry.
Definition: tiffvisitor_int.cpp:735
virtual void visitMnEntry(TiffMnEntry *object)=0
Operation to perform for the makernote component.
WriteMethod
Type to indicate write method used by TIFF parsers.
Definition: types.hpp:116
virtual void visitImageEntry(TiffImageEntry *object)
Copy a TIFF image entry if it is an image tag.
Definition: tiffvisitor_int.cpp:239
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
virtual void visitIfdMakernote(TiffIfdMakernote *object)
Decode an IFD makernote.
Definition: tiffvisitor_int.cpp:348
virtual void visitMnEntry(TiffMnEntry *object)
Find tag and group in a TIFF makernote.
Definition: tiffvisitor_int.cpp:174
virtual void visitDirectoryEnd(TiffDirectory *object)
Operation to perform for a TIFF directory, at the end of the processing.
Definition: tiffvisitor_int.cpp:112
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 visitBinaryArray(TiffBinaryArray *object)
Decode a binary array.
Definition: tiffvisitor_int.cpp:563
void readDataEntryBase(TiffDataEntryBase *object)
Read a TiffDataEntryBase from the data buffer.
Definition: tiffvisitor_int.cpp:1263
Interface class for components of a TIFF directory hierarchy (Composite pattern). Both TIFF directori...
Definition: tiffcomposite_int.hpp:174
virtual void visitImageEntry(TiffImageEntry *object)
Decode a TIFF image entry.
Definition: tiffvisitor_int.cpp:322
WriteMethod writeMethod() const
Return the write method used.
Definition: tiffvisitor_int.hpp:521
void decodeIptc(const TiffEntryBase *object)
Decode IPTC data from an IPTCNAA tag or Photoshop ImageResources.
Definition: tiffvisitor_int.cpp:414
virtual void visitDataEntry(TiffDataEntry *object)=0
Operation to perform for a TIFF data entry.
virtual void visitBinaryElement(TiffBinaryElement *object)
Read an element of a binary array from the data buffer.
Definition: tiffvisitor_int.cpp:1730
Copy all image tags from the source tree (the tree that is traversed) to a target tree,...
Definition: tiffvisitor_int.hpp:224
void encodeImageEntry(TiffImageEntry *object, const Exifdatum *datum)
Callback encoder function for an image entry.
Definition: tiffvisitor_int.cpp:998
virtual void visitDirectoryNext(TiffDirectory *object)
Update directory entries.
Definition: tiffvisitor_int.cpp:750
bool circularReference(const byte *start, IfdId group)
Check IFD directory pointer start for circular reference.
Definition: tiffvisitor_int.cpp:1304
void add(TiffComponent *pRootDir, TiffComponent *pSourceDir, uint32_t root)
Add metadata from image to the TIFF composite.
Definition: tiffvisitor_int.cpp:1137
Abstract base class defining the interface for TIFF composite visitors (Visitor pattern)
Definition: tiffvisitor_int.hpp:73
virtual void visitIfdMakernoteEnd(TiffIfdMakernote *object)
Reset encoder to its original state, undo makernote specific settings.
Definition: tiffvisitor_int.cpp:833
uint32_t baseOffset() const
Return the base offset.
Definition: tiffvisitor_int.hpp:617
virtual void visitDirectory(TiffDirectory *object)
Decode a TIFF directory.
Definition: tiffvisitor_int.cpp:332
A standard TIFF IFD entry.
Definition: tiffcomposite_int.hpp:566
virtual ~TiffReader()
Virtual destructor.
Definition: tiffvisitor_int.cpp:1228
void postProcess()
Read deferred components.
Definition: tiffvisitor_int.cpp:1323
void encodeBinaryArray(TiffBinaryArray *object, const Exifdatum *datum)
Callback encoder function for a binary array.
Definition: tiffvisitor_int.cpp:951
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 visitSizeEntry(TiffSizeEntry *object)=0
Operation to perform for a TIFF size entry.
void setDirty(bool flag=true)
Set the dirty flag and end of traversing signal.
Definition: tiffvisitor_int.cpp:713
virtual ~TiffVisitor()
Virtual destructor.
Definition: tiffvisitor_int.cpp:92
void setOrigState()
Set the state to the original state as set in the constructor.
Definition: tiffvisitor_int.cpp:1232
Signal used by TiffReader to signal an unknown makernote.
Definition: tiffvisitor_int.hpp:80
virtual void visitDataEntry(TiffDataEntry *object)
Decode a TIFF data entry.
Definition: tiffvisitor_int.cpp:317
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 visitBinaryArray(TiffBinaryArray *object)=0
Operation to perform for a binary array.
virtual void visitBinaryElement(TiffBinaryElement *object)
Encode an element of a binary array.
Definition: tiffvisitor_int.cpp:874
GoEvent
Events for the stop/go flag. See setGo().
Definition: tiffvisitor_int.hpp:76
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 visitIfdMakernoteEnd(TiffIfdMakernote *object)
Reset reader to its original state, undo makernote specific settings.
Definition: tiffvisitor_int.cpp:1520
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
void decodeCanonAFInfo(const TiffEntryBase *object)
Decode Exif.Canon.AFInfo.
Definition: tiffvisitor_int.cpp:472
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
IPTC string type.
Definition: types.hpp:147
virtual void visitDirectory(TiffDirectory *object)=0
Operation to perform for a TIFF directory.
virtual void visitSubIfd(TiffSubIfd *object)
Read a TIFF sub-IFD from the data buffer.
Definition: tiffvisitor_int.cpp:1414
Tiff IFD Makernote. This is a concrete class suitable for all IFD makernotes.
Definition: tiffcomposite_int.hpp:1149
virtual void visitImageEntry(TiffImageEntry *object)
Read a TIFF image entry from the data buffer.
Definition: tiffvisitor_int.cpp:1286
virtual void visitSizeEntry(TiffSizeEntry *object)
Read a TIFF size entry from the data buffer.
Definition: tiffvisitor_int.cpp:1291
virtual void visitIfdMakernote(TiffIfdMakernote *object)
Find tag and group in an IFD makernote.
Definition: tiffvisitor_int.cpp:179
void setMnState(const TiffRwState *state=0)
Set the state of the reader to one suitable for the Makernote.
Definition: tiffvisitor_int.cpp:1237
A standard TIFF IFD entry consisting of a value which is an array of offsets to image data areas....
Definition: tiffcomposite_int.hpp:736
bool go(GoEvent event) const
Check if stop flag for event is clear, return true if it's clear.
Definition: tiffvisitor_int.cpp:102
virtual void visitDataEntry(TiffDataEntry *object)
Read a TIFF data entry from the data buffer.
Definition: tiffvisitor_int.cpp:1281
virtual void visitImageEntry(TiffImageEntry *object)
Find tag and group in a TIFF image entry.
Definition: tiffvisitor_int.cpp:154
virtual void visitMnEntry(TiffMnEntry *object)
Read a TIFF makernote entry from the data buffer.
Definition: tiffvisitor_int.cpp:1464
virtual void visitSubIfd(TiffSubIfd *object)
Copy a TIFF sub-IFD if it is an image tag.
Definition: tiffvisitor_int.cpp:254
Provides classes and functions to encode and decode Exif and Iptc data. The libexiv2 API consists of ...
Definition: asfvideo.hpp:36
virtual void visitBinaryElement(TiffBinaryElement *object)=0
Operation to perform for an element of a binary array.
This class models a TIFF directory (Ifd). It is a composite component of the TIFF tree.
Definition: tiffcomposite_int.hpp:861
virtual void visitDirectory(TiffDirectory *object)
Copy a TIFF directory if it is an image tag.
Definition: tiffvisitor_int.cpp:249
const uint32_t root
Special tag: root IFD.
Definition: tiffcomposite_int.hpp:80
TIFF composite visitor to encode metadata from an image to the TIFF tree. The metadata containers and...
Definition: tiffvisitor_int.hpp:384
TiffDecoder(ExifData &exifData, IptcData &iptcData, XmpData &xmpData, TiffComponent *const pRoot, FindDecoderFct findDecoderFct)
Constructor, taking metadata containers to add the metadata to, the root element of the composite to ...
Definition: tiffvisitor_int.cpp:279
virtual void visitBinaryElement(TiffBinaryElement *object)
Decode an element of a binary array.
Definition: tiffvisitor_int.cpp:570
virtual void visitBinaryArrayEnd(TiffBinaryArray *object)
Re-encrypt binary array if necessary.
Definition: tiffvisitor_int.cpp:847
Signal to control traversing of the composite tree.
Definition: tiffvisitor_int.hpp:78
An Exif metadatum, consisting of an ExifKey and a Value and methods to manipulate these.
Definition: exif.hpp:59
Element of a TiffBinaryArray.
Definition: tiffcomposite_int.hpp:1495
virtual void visitEntry(TiffEntry *object)
Copy a TIFF entry if it is an image tag.
Definition: tiffvisitor_int.cpp:229
virtual void visitDirectory(TiffDirectory *object)
Encode a TIFF directory.
Definition: tiffvisitor_int.cpp:745
void encodeBinaryElement(TiffBinaryElement *object, const Exifdatum *datum)
Callback encoder function for an element of a binary array.
Definition: tiffvisitor_int.cpp:956
ByteOrder byteOrder() const
Return the byte order.
Definition: tiffvisitor_int.cpp:1251
virtual void visitBinaryArray(TiffBinaryArray *object)
Copy a binary array if it is an image tag.
Definition: tiffvisitor_int.cpp:269
virtual void visitSubIfd(TiffSubIfd *object)
Find tag and group in a TIFF sub-IFD.
Definition: tiffvisitor_int.cpp:169
virtual void visitDirectory(TiffDirectory *object)
Find tag and group in a TIFF directory.
Definition: tiffvisitor_int.cpp:164
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 void visitEntry(TiffEntry *object)
Decode a TIFF entry.
Definition: tiffvisitor_int.cpp:312
virtual void visitSubIfd(TiffSubIfd *object)
Encode a TIFF sub-IFD.
Definition: tiffvisitor_int.cpp:785
virtual void visitDirectory(TiffDirectory *object)
Read a TIFF directory from the data buffer.
Definition: tiffvisitor_int.cpp:1334
std::vector< IfdId > PrimaryGroups
Type for a list of primary image groups.
Definition: tifffwd_int.hpp:114
Encoding and decoding of Exif data.
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
TiffEncoder(const ExifData &exifData, const IptcData &iptcData, const XmpData &xmpData, TiffComponent *pRoot, const bool isNewImage, const PrimaryGroups *pPrimaryGroups, const TiffHeaderBase *pHeader, FindEncoderFct findEncoderFct)
Constructor, taking the root element of the composite to encode to, the image with the metadata to en...
Definition: tiffvisitor_int.cpp:575
uint32_t baseOffset() const
Return the base offset. See class TiffRwState for details.
Definition: tiffvisitor_int.cpp:1257
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
virtual void visitSizeEntry(TiffSizeEntry *object)
Encode a TIFF size entry.
Definition: tiffvisitor_int.cpp:740
TiffCopier(TiffComponent *pRoot, uint32_t root, const TiffHeaderBase *pHeader, const PrimaryGroups *pPrimaryGroups)
Constructor.
Definition: tiffvisitor_int.cpp:194
void encodeMnEntry(TiffMnEntry *object, const Exifdatum *datum)
Callback encoder function for a Makernote entry.
Definition: tiffvisitor_int.cpp:1070
void init(uint16_t tag, IfdId group)
Initialize the Finder for a new search.
Definition: tiffvisitor_int.cpp:124
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
IfdId
Type to specify the IFD to which a metadata belongs.
Definition: tags_int.hpp:54
virtual void visitIfdMakernote(TiffIfdMakernote *object)=0
Operation to perform for an IFD makernote.
virtual void visitEntry(TiffEntry *object)=0
Operation to perform for a TIFF entry.
virtual void visitSizeEntry(TiffSizeEntry *object)
Find tag and group in a TIFF size entry.
Definition: tiffvisitor_int.cpp:159
Simple state class containing relevant state information for the TIFF reader. This is in a separate c...
Definition: tiffvisitor_int.hpp:588
virtual void visitMnEntry(TiffMnEntry *object)
Encode a TIFF makernote.
Definition: tiffvisitor_int.cpp:790
TiffRwState(ByteOrder byteOrder, uint32_t baseOffset)
Constructor.
Definition: tiffvisitor_int.hpp:593
TiffFinder(uint16_t tag, IfdId group)
Constructor, taking tag and group of the component to find.
Definition: tiffvisitor_int.hpp:169
virtual void visitBinaryArray(TiffBinaryArray *object)
Read a binary array from the data buffer.
Definition: tiffvisitor_int.cpp:1650
void findObject(TiffComponent *object)
Check if object matches tag and group.
Definition: tiffvisitor_int.cpp:136
int nextIdx(IfdId group)
Return the next idx sequence number for group.
Definition: tiffvisitor_int.cpp:1318
virtual void visitEntry(TiffEntry *object)
Read a TIFF entry from the data buffer.
Definition: tiffvisitor_int.cpp:1276
TiffVisitor()
Default constructor. Initialises all stop/go flags to true.
Definition: tiffvisitor_int.cpp:85