Exiv2
tiffcomposite_int.hpp
1 // ***************************************************************** -*- C++ -*-
2 /*
3  * Copyright (C) 2004-2021 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  */
20 #ifndef TIFFCOMPOSITE_INT_HPP_
21 #define TIFFCOMPOSITE_INT_HPP_
22 
23 // *****************************************************************************
24 // included header files
25 #include "value.hpp"
26 #include "tifffwd_int.hpp"
27 #include "types.hpp"
28 
29 // + standard includes
30 #include <iosfwd>
31 #include <vector>
32 #include <string>
33 #include <cassert>
34 
35 // *****************************************************************************
36 // namespace extensions
37 namespace Exiv2 {
38 
39  class BasicIo;
40 
41  namespace Internal {
42 
43 // *****************************************************************************
44 // class definitions
45 
47  typedef uint16_t TiffType;
48 
49  const TiffType ttUnsignedByte = 1;
50  const TiffType ttAsciiString = 2;
51  const TiffType ttUnsignedShort = 3;
52  const TiffType ttUnsignedLong = 4;
53  const TiffType ttUnsignedRational = 5;
54  const TiffType ttSignedByte = 6;
55  const TiffType ttUndefined = 7;
56  const TiffType ttSignedShort = 8;
57  const TiffType ttSignedLong = 9;
58  const TiffType ttSignedRational =10;
59  const TiffType ttTiffFloat =11;
60  const TiffType ttTiffDouble =12;
61  const TiffType ttTiffIfd =13;
62 
64  TypeId toTypeId(TiffType tiffType, uint16_t tag, IfdId group);
66  TiffType toTiffType(TypeId typeId);
67 
71  namespace Tag {
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;
81  }
82 
87  class TiffPathItem {
88  public:
90 
93  : extendedTag_(extendedTag), group_(group) {}
95 
97 
98  uint16_t tag() const { return static_cast<uint16_t>(extendedTag_ & 0xffff); }
101  uint32_t extendedTag() const { return extendedTag_; }
103  IfdId group() const { return group_; }
105 
106  private:
107  // DATA
108  uint32_t extendedTag_;
109  IfdId group_;
110  }; // class TiffPathItem
111 
121  class IoWrapper {
122  public:
124 
125 
131  IoWrapper(BasicIo& io, const byte* pHeader, long size, OffsetWriter* pow);
133 
135 
136 
142  long write(const byte* pData, long wcount);
149  int putb(byte data);
151  void setTarget(int id, uint32_t target);
153 
154  private:
155  // DATA
156  BasicIo& io_;
157  const byte* pHeader_;
158  long size_;
159  bool wroteHeader_;
160  OffsetWriter* pow_;
161  }; // class IoWrapper
162 
172  public:
174  typedef std::auto_ptr<TiffComponent> AutoPtr;
176  typedef std::vector<TiffComponent*> Components;
177 
179 
180  TiffComponent(uint16_t tag, IfdId group);
183  virtual ~TiffComponent();
185 
187 
188 
200  TiffComponent* addPath(uint16_t tag,
201  TiffPath& tiffPath,
202  TiffComponent* const pRoot,
203  AutoPtr object =AutoPtr(0));
209  TiffComponent* addChild(AutoPtr tiffComponent);
216  TiffComponent* addNext(AutoPtr tiffComponent);
223  void accept(TiffVisitor& visitor);
229  void setStart(const byte* pStart) { pStart_ = const_cast<byte*>(pStart); }
244  uint32_t write(IoWrapper& ioWrapper,
245  ByteOrder byteOrder,
246  int32_t offset,
247  uint32_t valueIdx,
248  uint32_t dataIdx,
249  uint32_t& imageIdx);
251 
253 
254  uint16_t tag() const { return tag_; }
257  IfdId group() const { return group_; }
259  byte* start() const { return pStart_; }
265  AutoPtr clone() const;
271  uint32_t writeData(IoWrapper& ioWrapper,
272  ByteOrder byteOrder,
273  int32_t offset,
274  uint32_t dataIdx,
275  uint32_t& imageIdx) const;
281  uint32_t writeImage(IoWrapper& ioWrapper,
282  ByteOrder byteOrder) const;
287  uint32_t size() const;
291  uint32_t count() const;
298  uint32_t sizeData() const;
305  uint32_t sizeImage() const;
309  // Todo: This is only implemented in TiffEntryBase. It is needed here so that
310  // we can sort components by tag and idx. Something is not quite right.
311  virtual int idx() const;
313 
314  protected:
316 
317  virtual TiffComponent* doAddPath(uint16_t tag,
319  TiffPath& tiffPath,
320  TiffComponent* const pRoot,
321  TiffComponent::AutoPtr object);
323  virtual TiffComponent* doAddChild(AutoPtr tiffComponent);
325  virtual TiffComponent* doAddNext(AutoPtr tiffComponent);
327  virtual void doAccept(TiffVisitor& visitor) =0;
329  virtual uint32_t doWrite(IoWrapper& ioWrapper,
330  ByteOrder byteOrder,
331  int32_t offset,
332  uint32_t valueIdx,
333  uint32_t dataIdx,
334  uint32_t& imageIdx) =0;
336 
338 
339  virtual TiffComponent* doClone() const =0;
342  virtual uint32_t doWriteData(IoWrapper& ioWrapper,
343  ByteOrder byteOrder,
344  int32_t offset,
345  uint32_t dataIdx,
346  uint32_t& imageIdx) const =0;
348  virtual uint32_t doWriteImage(IoWrapper& ioWrapper,
349  ByteOrder byteOrder) const =0;
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;
359 
360  private:
361  // DATA
362  uint16_t tag_;
363  IfdId group_;
364 
368  byte* pStart_;
369 
370  }; // class TiffComponent
371 
374  struct Key;
383  bool operator==(const Key& key) const;
385  uint16_t tag() const { return static_cast<uint16_t>(extendedTag_ & 0xffff); }
386 
387  // DATA
388  const char* make_;
389  uint32_t extendedTag_;
393 
394  }; // struct TiffMappingInfo
395 
399  Key(const std::string& m, uint32_t e, IfdId g) : m_(m), e_(e), g_(g) {}
400  std::string m_;
401  uint32_t e_;
403  };
404 
411  class TiffEntryBase : public TiffComponent {
412  friend class TiffReader;
413  friend class TiffEncoder;
414  friend int selectNikonLd(TiffBinaryArray* const, TiffComponent* const);
415  public:
417 
418  TiffEntryBase(uint16_t tag, IfdId group, TiffType tiffType =ttUndefined);
421  virtual ~TiffEntryBase();
423 
425 
426 
433  void encode(TiffEncoder& encoder, const Exifdatum* datum);
435  void setOffset(int32_t offset) { offset_ = offset; }
437  void setData(byte* pData, int32_t size);
439  void setData(DataBuf buf);
445  void updateValue(Value::AutoPtr value, ByteOrder byteOrder);
451  void setValue(Value::AutoPtr value);
453 
455 
456  TiffType tiffType() const { return tiffType_; }
462  int32_t offset() const { return offset_; }
466  virtual int idx() const;
471  const byte* pData() const { return pData_; }
473  const Value* pValue() const { return pValue_; }
475 
476  protected:
478 
479  TiffEntryBase(const TiffEntryBase& rhs);
482 
484 
485  virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum) =0;
488  void setCount(uint32_t count) { count_ = count; }
490  void setIdx(int idx) { idx_ = idx; }
496  virtual uint32_t doWrite(IoWrapper& ioWrapper,
497  ByteOrder byteOrder,
498  int32_t offset,
499  uint32_t valueIdx,
500  uint32_t dataIdx,
501  uint32_t& imageIdx);
503 
505 
506  virtual uint32_t doCount() const;
512  virtual uint32_t doWriteData(IoWrapper& ioWrapper,
513  ByteOrder byteOrder,
514  int32_t offset,
515  uint32_t dataIdx,
516  uint32_t& imageIdx) const;
521  virtual uint32_t doWriteImage(IoWrapper& ioWrapper,
522  ByteOrder byteOrder) const;
524  virtual uint32_t doSize() const;
526  virtual uint32_t doSizeData() const;
528  virtual uint32_t doSizeImage() const;
530 
532  static uint32_t writeOffset(byte* buf,
533  int32_t offset,
534  TiffType tiffType,
535  ByteOrder byteOrder);
536 
537  private:
539 
540  TiffEntryBase& operator=(const TiffEntryBase& rhs);
543 
544  // DATA
545  TiffType tiffType_;
546  uint32_t count_;
547  int32_t offset_;
548 
552  uint32_t size_;
553  byte* pData_;
554  bool isMalloced_;
555  int idx_;
556  Value* pValue_;
557 
558  }; // class TiffEntryBase
559 
563  class TiffEntry : public TiffEntryBase {
564  public:
566 
567  TiffEntry(uint16_t tag, IfdId group) : TiffEntryBase(tag, group) {}
570  virtual ~TiffEntry();
572 
573  protected:
575 
576  virtual void doAccept(TiffVisitor& visitor);
577  virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum);
579 
581 
582  virtual TiffEntry* doClone() const;
584 
585  }; // class TiffEntry
586 
596  public:
598 
599  TiffDataEntryBase(uint16_t tag, IfdId group, uint16_t szTag, IfdId szGroup)
601  : TiffEntryBase(tag, group),
602  szTag_(szTag), szGroup_(szGroup) {}
604  virtual ~TiffDataEntryBase();
606 
608 
609 
618  virtual void setStrips(const Value* pSize,
619  const byte* pData,
620  uint32_t sizeData,
621  uint32_t baseOffset) =0;
623 
625 
626  uint16_t szTag() const { return szTag_; }
629  IfdId szGroup() const { return szGroup_; }
631 
632  private:
633  // DATA
634  const uint16_t szTag_;
635  const IfdId szGroup_;
636 
637  }; // class TiffDataEntryBase
638 
651  friend class TiffEncoder;
652  public:
654 
655  TiffDataEntry(uint16_t tag, IfdId group, uint16_t szTag, IfdId szGroup)
657  : TiffDataEntryBase(tag, group, szTag, szGroup),
658  pDataArea_(0), sizeDataArea_(0) {}
660  virtual ~TiffDataEntry();
662 
664 
665  virtual void setStrips(const Value* pSize,
666  const byte* pData,
667  uint32_t sizeData,
668  uint32_t baseOffset);
670 
671  protected:
673 
674  virtual void doAccept(TiffVisitor& visitor);
675  virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum);
687  virtual uint32_t doWrite(IoWrapper& ioWrapper,
688  ByteOrder byteOrder,
689  int32_t offset,
690  uint32_t valueIdx,
691  uint32_t dataIdx,
692  uint32_t& imageIdx);
694 
696 
697  virtual TiffDataEntry* doClone() const;
702  virtual uint32_t doWriteData(IoWrapper& ioWrapper,
703  ByteOrder byteOrder,
704  int32_t offset,
705  uint32_t dataIdx,
706  uint32_t& imageIdx) const;
707  // Using doWriteImage from base class
708  // Using doSize() from base class
710  virtual uint32_t doSizeData() const;
711  // Using doSizeImage from base class
713 
714  private:
715  // DATA
716  byte* pDataArea_;
717  uint32_t sizeDataArea_;
718 
719  }; // class TiffDataEntry
720 
734  friend class TiffEncoder;
735  public:
737 
738  TiffImageEntry(uint16_t tag, IfdId group, uint16_t szTag, IfdId szGroup)
740  : TiffDataEntryBase(tag, group, szTag, szGroup) {}
742  virtual ~TiffImageEntry();
744 
746 
747  virtual void setStrips(const Value* pSize,
748  const byte* pData,
749  uint32_t sizeData,
750  uint32_t baseOffset);
752 
753  protected:
755 
756  virtual void doAccept(TiffVisitor& visitor);
757  virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum);
763  virtual uint32_t doWrite(IoWrapper& ioWrapper,
764  ByteOrder byteOrder,
765  int32_t offset,
766  uint32_t valueIdx,
767  uint32_t dataIdx,
768  uint32_t& imageIdx);
770 
772 
773  virtual TiffImageEntry* doClone() const;
782  virtual uint32_t doWriteData(IoWrapper& ioWrapper,
783  ByteOrder byteOrder,
784  int32_t offset,
785  uint32_t dataIdx,
786  uint32_t& imageIdx) const;
791  virtual uint32_t doWriteImage(IoWrapper& ioWrapper,
792  ByteOrder byteOrder) const;
794  virtual uint32_t doSize() const;
796  virtual uint32_t doSizeData() const;
798  virtual uint32_t doSizeImage() const;
800 
801  private:
803  typedef std::vector<std::pair<const byte*, uint32_t> > Strips;
804 
805  // DATA
806  Strips strips_;
807 
808  }; // class TiffImageEntry
809 
816  class TiffSizeEntry : public TiffEntryBase {
817  public:
819 
820  TiffSizeEntry(uint16_t tag, IfdId group, uint16_t dtTag, IfdId dtGroup)
822  : TiffEntryBase(tag, group), dtTag_(dtTag), dtGroup_(dtGroup) {}
824  virtual ~TiffSizeEntry();
826 
828 
829  uint16_t dtTag() const { return dtTag_; }
832  IfdId dtGroup() const { return dtGroup_; }
834 
835  protected:
837 
838  virtual void doAccept(TiffVisitor& visitor);
839  virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum);
841 
843 
844  virtual TiffSizeEntry* doClone() const;
846 
847  private:
848  // DATA
849  const uint16_t dtTag_;
850  const IfdId dtGroup_;
851 
852  }; // class TiffSizeEntry
853 
858  class TiffDirectory : public TiffComponent {
859  friend class TiffEncoder;
860  friend class TiffDecoder;
861  public:
863 
864  TiffDirectory(uint16_t tag, IfdId group, bool hasNext =true)
866  : TiffComponent(tag, group), hasNext_(hasNext), pNext_(0) {}
868  virtual ~TiffDirectory();
870 
872 
873  bool hasNext() const { return hasNext_; }
876 
877  protected:
879 
880  TiffDirectory(const TiffDirectory& rhs);
883 
885 
886  virtual TiffComponent* doAddPath(uint16_t tag,
887  TiffPath& tiffPath,
888  TiffComponent* const pRoot,
889  TiffComponent::AutoPtr object);
890  virtual TiffComponent* doAddChild(TiffComponent::AutoPtr tiffComponent);
891  virtual TiffComponent* doAddNext(TiffComponent::AutoPtr tiffComponent);
892  virtual void doAccept(TiffVisitor& visitor);
898  virtual uint32_t doWrite(IoWrapper& ioWrapper,
899  ByteOrder byteOrder,
900  int32_t offset,
901  uint32_t valueIdx,
902  uint32_t dataIdx,
903  uint32_t& imageIdx);
905 
907 
908  virtual TiffDirectory* doClone() const;
913  virtual uint32_t doWriteData(IoWrapper& ioWrapper,
914  ByteOrder byteOrder,
915  int32_t offset,
916  uint32_t dataIdx,
917  uint32_t& imageIdx) const;
924  virtual uint32_t doWriteImage(IoWrapper& ioWrapper,
925  ByteOrder byteOrder) const;
930  virtual uint32_t doSize() const;
935  virtual uint32_t doCount() const;
940  virtual uint32_t doSizeData() const;
945  virtual uint32_t doSizeImage() const;
947 
948  private:
950 
951  TiffDirectory& operator=(const TiffDirectory& rhs);
954 
956 
957  uint32_t writeDirEntry(IoWrapper& ioWrapper,
959  ByteOrder byteOrder,
960  int32_t offset,
961  TiffComponent* pTiffComponent,
962  uint32_t valueIdx,
963  uint32_t dataIdx,
964  uint32_t& imageIdx) const;
966 
967  private:
968  // DATA
969  Components components_;
970  const bool hasNext_;
971  TiffComponent* pNext_;
972 
973  }; // class TiffDirectory
974 
982  class TiffSubIfd : public TiffEntryBase {
983  friend class TiffReader;
984  public:
986 
987  TiffSubIfd(uint16_t tag, IfdId group, IfdId newGroup);
990  virtual ~TiffSubIfd();
992 
993  protected:
995 
996  TiffSubIfd(const TiffSubIfd& rhs);
999 
1001 
1002  virtual TiffComponent* doAddPath(uint16_t tag,
1003  TiffPath& tiffPath,
1004  TiffComponent* const pRoot,
1005  TiffComponent::AutoPtr object);
1006  virtual TiffComponent* doAddChild(TiffComponent::AutoPtr tiffComponent);
1007  virtual void doAccept(TiffVisitor& visitor);
1008  virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum);
1014  virtual uint32_t doWrite(IoWrapper& ioWrapper,
1015  ByteOrder byteOrder,
1016  int32_t offset,
1017  uint32_t valueIdx,
1018  uint32_t dataIdx,
1019  uint32_t& imageIdx);
1021 
1023 
1024  virtual TiffSubIfd* doClone() const;
1029  virtual uint32_t doWriteData(IoWrapper& ioWrapper,
1030  ByteOrder byteOrder,
1031  int32_t offset,
1032  uint32_t dataIdx,
1033  uint32_t& imageIdx) const;
1038  virtual uint32_t doWriteImage(IoWrapper& ioWrapper,
1039  ByteOrder byteOrder) const;
1041  uint32_t doSize() const;
1043  virtual uint32_t doSizeData() const;
1045  virtual uint32_t doSizeImage() const;
1047 
1048  private:
1050 
1051  TiffSubIfd& operator=(const TiffSubIfd& rhs);
1054 
1056  typedef std::vector<TiffDirectory*> Ifds;
1057 
1058  // DATA
1059  IfdId newGroup_;
1060  Ifds ifds_;
1061 
1062  }; // class TiffSubIfd
1063 
1071  class TiffMnEntry : public TiffEntryBase {
1072  friend class TiffReader;
1073  friend class TiffDecoder;
1074  friend class TiffEncoder;
1075  public:
1077 
1078  TiffMnEntry(uint16_t tag, IfdId group, IfdId mnGroup);
1081  virtual ~TiffMnEntry();
1083 
1084  protected:
1086 
1087  virtual TiffComponent* doAddPath(uint16_t tag,
1088  TiffPath& tiffPath,
1089  TiffComponent* const pRoot,
1090  TiffComponent::AutoPtr object);
1091  virtual TiffComponent* doAddChild(TiffComponent::AutoPtr tiffComponent);
1092  virtual TiffComponent* doAddNext(TiffComponent::AutoPtr tiffComponent);
1093  virtual void doAccept(TiffVisitor& visitor);
1094  virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum);
1099  virtual uint32_t doWrite(IoWrapper& ioWrapper,
1100  ByteOrder byteOrder,
1101  int32_t offset,
1102  uint32_t valueIdx,
1103  uint32_t dataIdx,
1104  uint32_t& imageIdx);
1106 
1108 
1109  virtual TiffMnEntry* doClone() const;
1111  virtual uint32_t doCount() const;
1112  // Using doWriteData from base class
1113  // Using doWriteImage from base class
1118  virtual uint32_t doSize() const;
1119  // Using doSizeData from base class
1120  // Using doSizeImage from base class
1122 
1123  private:
1125 
1126  TiffMnEntry(const TiffMnEntry& rhs);
1129  TiffMnEntry& operator=(const TiffMnEntry& rhs);
1131 
1132  // DATA
1133  IfdId mnGroup_;
1134  TiffComponent* mn_;
1135 
1136  }; // class TiffMnEntry
1137 
1148  friend class TiffReader;
1149  public:
1151 
1152  TiffIfdMakernote(uint16_t tag,
1154  IfdId group,
1155  IfdId mnGroup,
1156  MnHeader* pHeader,
1157  bool hasNext =true);
1159  virtual ~TiffIfdMakernote();
1161 
1163 
1164 
1169  bool readHeader(const byte* pData, uint32_t size, ByteOrder byteOrder);
1173  void setByteOrder(ByteOrder byteOrder);
1177  void setImageByteOrder(ByteOrder byteOrder) { imageByteOrder_ = byteOrder; }
1179 
1181 
1182  uint32_t sizeHeader() const;
1185  uint32_t writeHeader(IoWrapper& ioWrapper, ByteOrder byteOrder) const;
1190  uint32_t mnOffset() const;
1196  uint32_t ifdOffset() const;
1203  ByteOrder byteOrder() const;
1207  ByteOrder imageByteOrder() const { return imageByteOrder_; }
1213  uint32_t baseOffset() const;
1215 
1216  protected:
1218 
1219  virtual TiffComponent* doAddPath(uint16_t tag,
1220  TiffPath& tiffPath,
1221  TiffComponent* const pRoot,
1222  TiffComponent::AutoPtr object);
1223  virtual TiffComponent* doAddChild(TiffComponent::AutoPtr tiffComponent);
1224  virtual TiffComponent* doAddNext(TiffComponent::AutoPtr tiffComponent);
1225  virtual void doAccept(TiffVisitor& visitor);
1231  virtual uint32_t doWrite(IoWrapper& ioWrapper,
1232  ByteOrder byteOrder,
1233  int32_t offset,
1234  uint32_t valueIdx,
1235  uint32_t dataIdx,
1236  uint32_t& imageIdx);
1238 
1240 
1241  virtual TiffIfdMakernote* doClone() const;
1246  virtual uint32_t doWriteData(IoWrapper& ioWrapper,
1247  ByteOrder byteOrder,
1248  int32_t offset,
1249  uint32_t dataIdx,
1250  uint32_t& imageIdx) const;
1255  virtual uint32_t doWriteImage(IoWrapper& ioWrapper,
1256  ByteOrder byteOrder) const;
1261  virtual uint32_t doSize() const;
1267  virtual uint32_t doCount() const;
1272  virtual uint32_t doSizeData() const;
1277  virtual uint32_t doSizeImage() const;
1279 
1280  private:
1289  TiffIfdMakernote(const TiffIfdMakernote& rhs);
1292  TiffIfdMakernote& operator=(const TiffIfdMakernote& rhs);
1294 
1295  // DATA
1296  MnHeader* pHeader_;
1297  TiffDirectory ifd_;
1298  uint32_t mnOffset_;
1299  ByteOrder imageByteOrder_;
1300 
1301  }; // class TiffIfdMakernote
1302 
1307  typedef int (*CfgSelFct)(uint16_t, const byte*, uint32_t, TiffComponent* const);
1308 
1310  typedef DataBuf (*CryptFct)(uint16_t, const byte*, uint32_t, TiffComponent* const);
1311 
1313  struct ArrayDef {
1315  bool operator==(uint32_t idx) const { return idx_ == idx; }
1317  uint32_t size(uint16_t tag, IfdId group) const;
1318  // DATA
1319  uint32_t idx_;
1320  TiffType tiffType_;
1321  uint32_t count_;
1322  };
1323 
1325  struct ArrayCfg {
1330  uint32_t tagStep() const { return elDefaultDef_.size(0, group_); }
1331  //DATA
1334  TiffType elTiffType_;
1336  bool hasSize_;
1338  bool concat_;
1340  };
1341 
1343  struct ArraySet {
1344  const ArrayCfg cfg_;
1345  const ArrayDef* def_;
1346  const int defSize_;
1347  };
1348 
1355  public:
1357 
1358  TiffBinaryArray(uint16_t tag,
1360  IfdId group,
1361  const ArrayCfg* arrayCfg,
1362  const ArrayDef* arrayDef,
1363  int defSize);
1365  TiffBinaryArray(uint16_t tag,
1366  IfdId group,
1367  const ArraySet* arraySet,
1368  int setSize,
1369  CfgSelFct cfgSelFct);
1371  virtual ~TiffBinaryArray();
1373 
1375 
1376  uint32_t addElement(uint32_t idx, const ArrayDef& def);
1389  bool initialize(IfdId group);
1400  bool initialize(TiffComponent* const pRoot);
1402  void iniOrigDataBuf();
1404  bool updOrigDataBuf(const byte* pData, uint32_t size);
1406  void setDecoded(bool decoded) { decoded_ = decoded; }
1408 
1410 
1411  const ArrayCfg* cfg() const { return arrayCfg_; }
1414  const ArrayDef* def() const { return arrayDef_; }
1416  int defSize() const { return defSize_; }
1418  bool decoded() const { return decoded_; }
1420 
1421  protected:
1423 
1424  TiffBinaryArray(const TiffBinaryArray& rhs);
1427 
1429 
1430 
1433  virtual TiffComponent* doAddPath(uint16_t tag,
1434  TiffPath& tiffPath,
1435  TiffComponent* const pRoot,
1436  TiffComponent::AutoPtr object);
1440  virtual TiffComponent* doAddChild(TiffComponent::AutoPtr tiffComponent);
1441  virtual void doAccept(TiffVisitor& visitor);
1442  virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum);
1446  virtual uint32_t doWrite(IoWrapper& ioWrapper,
1447  ByteOrder byteOrder,
1448  int32_t offset,
1449  uint32_t valueIdx,
1450  uint32_t dataIdx,
1451  uint32_t& imageIdx);
1453 
1455 
1456  virtual TiffBinaryArray* doClone() const;
1458  virtual uint32_t doCount() const;
1459  // Using doWriteData from base class
1460  // Using doWriteImage from base class
1464  virtual uint32_t doSize() const;
1465  // Using doSizeData from base class
1466  // Using doSizeImage from base class
1468 
1469  private:
1471 
1472  TiffBinaryArray& operator=(const TiffBinaryArray& rhs);
1475 
1476  // DATA
1477  const CfgSelFct cfgSelFct_;
1478  const ArraySet* arraySet_;
1479  const ArrayCfg* arrayCfg_;
1480  const ArrayDef* arrayDef_;
1481  int defSize_;
1482  int setSize_;
1483  Components elements_;
1484  byte* origData_;
1485  uint32_t origSize_;
1486  TiffComponent* pRoot_;
1487  bool decoded_;
1488  }; // class TiffBinaryArray
1489 
1494  public:
1496 
1497  TiffBinaryElement(uint16_t tag, IfdId group);
1500  virtual ~TiffBinaryElement();
1502 
1504 
1505 
1508  void setElDef(const ArrayDef& def) { elDef_ = def; }
1512  void setElByteOrder(ByteOrder byteOrder) { elByteOrder_ = byteOrder; }
1514 
1516 
1517 
1520  const ArrayDef* elDef() const { return &elDef_; }
1524  ByteOrder elByteOrder() const { return elByteOrder_; }
1526 
1527  protected:
1529 
1530  virtual void doAccept(TiffVisitor& visitor);
1531  virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum);
1535  virtual uint32_t doWrite(IoWrapper& ioWrapper,
1536  ByteOrder byteOrder,
1537  int32_t offset,
1538  uint32_t valueIdx,
1539  uint32_t dataIdx,
1540  uint32_t& imageIdx);
1542 
1544 
1545  virtual TiffBinaryElement* doClone() const;
1549  virtual uint32_t doCount() const;
1550  // Using doWriteData from base class
1551  // Using doWriteImage from base class
1556  virtual uint32_t doSize() const;
1557  // Using doSizeData from base class
1558  // Using doSizeImage from base class
1560 
1561  private:
1562  // DATA
1563  ArrayDef elDef_;
1564  ByteOrder elByteOrder_;
1565 
1566  }; // class TiffBinaryElement
1567 
1568 // *****************************************************************************
1569 // template, inline and free functions
1570 
1575  bool cmpTagLt(TiffComponent const* lhs, TiffComponent const* rhs);
1576 
1581  bool cmpGroupLt(TiffComponent const* lhs, TiffComponent const* rhs);
1582 
1584  TiffComponent::AutoPtr newTiffEntry(uint16_t tag, IfdId group);
1585 
1587  TiffComponent::AutoPtr newTiffMnEntry(uint16_t tag, IfdId group);
1588 
1590  TiffComponent::AutoPtr newTiffBinaryElement(uint16_t tag, IfdId group);
1591 
1593  template<IfdId newGroup>
1595  {
1596  return TiffComponent::AutoPtr(new TiffDirectory(tag, newGroup));
1597  }
1598 
1600  template<IfdId newGroup>
1602  {
1603  return TiffComponent::AutoPtr(new TiffSubIfd(tag, group, newGroup));
1604  }
1605 
1607  template<const ArrayCfg* arrayCfg, int N, const ArrayDef (&arrayDef)[N]>
1609  {
1610  // *& acrobatics is a workaround for a MSVC 7.1 bug
1611  return TiffComponent::AutoPtr(
1612  new TiffBinaryArray(tag, group, arrayCfg, *(&arrayDef), N));
1613  }
1614 
1616  template<const ArrayCfg* arrayCfg>
1618  {
1619  return TiffComponent::AutoPtr(
1620  new TiffBinaryArray(tag, group, arrayCfg, 0, 0));
1621  }
1622 
1624  template<const ArraySet* arraySet, int N, CfgSelFct cfgSelFct>
1626  {
1627  return TiffComponent::AutoPtr(
1628  new TiffBinaryArray(tag, group, arraySet, N, cfgSelFct));
1629  }
1630 
1632  template<uint16_t szTag, IfdId szGroup>
1634  {
1635  return TiffComponent::AutoPtr(
1636  new TiffDataEntry(tag, group, szTag, szGroup));
1637  }
1638 
1640  template<uint16_t dtTag, IfdId dtGroup>
1642  {
1643  return TiffComponent::AutoPtr(
1644  new TiffSizeEntry(tag, group, dtTag, dtGroup));
1645  }
1646 
1648  template<uint16_t szTag, IfdId szGroup>
1650  {
1651  return TiffComponent::AutoPtr(
1652  new TiffImageEntry(tag, group, szTag, szGroup));
1653  }
1654 
1656  template<uint16_t dtTag, IfdId dtGroup>
1658  {
1659  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1660  return TiffComponent::AutoPtr(
1661  new TiffSizeEntry(tag, group, dtTag, dtGroup));
1662  }
1663 
1664 }} // namespace Internal, Exiv2
1665 
1666 #endif // #ifndef TIFFCOMPOSITE_INT_HPP_
CryptFct cryptFct_
Crypt function, 0 if not used.
Definition: tiffcomposite_int.hpp:1335
uint16_t tag() const
Return the tag corresponding to the extended tag.
Definition: tiffcomposite_int.hpp:99
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
ByteOrder elByteOrder() const
Return the byte order of this element.
Definition: tiffcomposite_int.hpp:1524
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
IfdId group() const
Return the group.
Definition: tiffcomposite_int.hpp:103
TIFF composite visitor to read the TIFF structure from a block of memory and build the composite from...
Definition: tiffvisitor_int.hpp:622
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition: tiffcomposite_int.cpp:968
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
virtual uint32_t doWrite(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t &imageIdx)
Implements write(). Write the value of a standard TIFF entry to the ioWrapper, return the number of b...
Definition: tiffcomposite_int.cpp:1241
virtual uint32_t doSizeImage() const
Implements sizeImage(). Return the sum of the image sizes of all components plus that of the next-IFD...
Definition: tiffcomposite_int.cpp:1796
const uint32_t next
Special tag: next IFD.
Definition: tiffcomposite_int.hpp:74
virtual uint32_t doWriteImage(IoWrapper &ioWrapper, ByteOrder byteOrder) const
Implements writeImage(). Write the image data of each sub-IFD to the ioWrapper. Return the number of ...
Definition: tiffcomposite_int.cpp:1589
An interface for simple binary IO.
Definition: basicio.hpp:55
uint32_t writeImage(IoWrapper &ioWrapper, ByteOrder byteOrder) const
Write the image data of this component to a binary image. Return the number of bytes written...
Definition: tiffcomposite_int.cpp:1554
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition: tiffcomposite_int.cpp:983
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
TiffComponent::AutoPtr newTiffBinaryArray0(uint16_t tag, IfdId group)
Function to create and initialize a new binary array entry.
Definition: tiffcomposite_int.hpp:1608
bool operator==(const Key &key) const
Compare a TiffMappingInfo with a TiffMappingInfo::Key. The two are equal if TiffMappingInfo::make_ eq...
Definition: tiffcomposite_int.cpp:51
uint16_t tag() const
Return the tag corresponding to the extended tag.
Definition: tiffcomposite_int.hpp:385
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
virtual TiffComponent * doAddNext(TiffComponent::AutoPtr tiffComponent)
Implements addNext(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:859
const TiffType ttUnsignedByte
Exif BYTE type.
Definition: tiffcomposite_int.hpp:49
virtual TiffMnEntry * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:323
virtual uint32_t doWrite(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t &imageIdx)=0
Implements write().
uint32_t size(uint16_t tag, IfdId group) const
Get the size in bytes of a tag.
Definition: tiffcomposite_int.cpp:560
void setTarget(int id, uint32_t target)
Wrapper for OffsetWriter::setTarget(), using an int instead of the enum to reduce include deps...
Definition: tiffcomposite_int.cpp:83
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
virtual int idx() const
Return the unique id of the entry in the image.
Definition: tiffcomposite_int.cpp:345
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
virtual uint32_t doSizeImage() const
Implements sizeImage(). Return the sum of the image sizes of all sub-IFDs.
Definition: tiffcomposite_int.cpp:1808
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
AutoPtr clone() const
Return an auto-pointer to a copy of itself (deep copy, but without any children). The caller owns thi...
Definition: tiffcomposite_int.cpp:288
virtual uint32_t doSize() const
Implements size(). Todo: Document it!
Definition: tiffcomposite_int.cpp:1710
const TiffType ttSignedLong
Exif SLONG type.
Definition: tiffcomposite_int.hpp:57
TiffType tiffType_
TIFF type of the element.
Definition: tiffcomposite_int.hpp:1320
virtual uint32_t doWriteImage(IoWrapper &ioWrapper, ByteOrder byteOrder) const
Implements writeImage(). Standard TIFF entries have no image data: write nothing and return 0...
Definition: tiffcomposite_int.cpp:1583
virtual TiffDataEntry * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:298
TiffBinaryArray(uint16_t tag, IfdId group, const ArrayCfg *arrayCfg, const ArrayDef *arrayDef, int defSize)
Constructor.
Definition: tiffcomposite_int.cpp:124
virtual void setStrips(const Value *pSize, const byte *pData, uint32_t sizeData, uint32_t baseOffset)
Set the data areas ("strips").
Definition: tiffcomposite_int.cpp:396
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
uint16_t szTag() const
Return the group of the entry which has the size.
Definition: tiffcomposite_int.hpp:627
Utility class containing a character array. All it does is to take care of memory allocation and dele...
Definition: types.hpp:193
virtual ~TiffDirectory()
Virtual destructor.
Definition: tiffcomposite_int.cpp:179
bool initialize(IfdId group)
Setup cfg and def for the component, in case of a complex binary array. Else do nothing. Return true if the initialization succeeded, else false.
Definition: tiffcomposite_int.cpp:566
ArrayDef elDefaultDef_
Default element.
Definition: tiffcomposite_int.hpp:1339
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:920
const Value * pValue() const
Return a const pointer to the converted value of this component.
Definition: tiffcomposite_int.hpp:473
TiffComponent::AutoPtr newTiffMnEntry(uint16_t tag, IfdId group)
Function to create and initialize a new TIFF makernote entry.
Definition: tiffcomposite_int.cpp:1910
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
virtual void doAccept(TiffVisitor &visitor)=0
Implements accept().
void encode(TiffEncoder &encoder, const Exifdatum *datum)
Encode a TIFF component from the metadatum provided and information from the encoder as needed...
Definition: tiffcomposite_int.cpp:963
ByteOrder imageByteOrder() const
Return the byte order used for the image.
Definition: tiffcomposite_int.hpp:1207
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
const ArrayDef * elDef() const
Return the array definition of this element.
Definition: tiffcomposite_int.hpp:1520
TypeId
Exiv2 value type identifiers.
Definition: types.hpp:119
uint32_t e_
Extended tag.
Definition: tiffcomposite_int.hpp:401
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
IoWrapper(BasicIo &io, const byte *pHeader, long size, OffsetWriter *pow)
Definition: tiffcomposite_int.cpp:59
virtual uint32_t doSizeData() const
Implements sizeData(). Return the size of the data area.
Definition: tiffcomposite_int.cpp:1770
virtual void setStrips(const Value *pSize, const byte *pData, uint32_t sizeData, uint32_t baseOffset)
Set the data areas ("strips").
Definition: tiffcomposite_int.cpp:463
IfdId dtGroup() const
Return the group of the related entry which has the data area.
Definition: tiffcomposite_int.hpp:832
TiffComponent * addNext(AutoPtr tiffComponent)
Add a "next" component to the component. Default is to do nothing.
Definition: tiffcomposite_int.cpp:849
virtual TiffEntry * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:293
virtual uint32_t doCount() const
Implements count(). Returns the count from the element definition.
Definition: tiffcomposite_int.cpp:1061
TiffIfdMakernote(uint16_t tag, IfdId group, IfdId mnGroup, MnHeader *pHeader, bool hasNext=true)
Default constructor.
Definition: tiffcomposite_int.cpp:111
const ArrayCfg cfg_
Binary array configuration.
Definition: tiffcomposite_int.hpp:1344
virtual uint32_t doWriteImage(IoWrapper &ioWrapper, ByteOrder byteOrder) const
Implements writeImage(). Write the image data of the IFD of the Makernote. Return the number of bytes...
Definition: tiffcomposite_int.cpp:1599
const int defSize_
Size of the array definition array.
Definition: tiffcomposite_int.hpp:1346
uint32_t writeHeader(IoWrapper &ioWrapper, ByteOrder byteOrder) const
Write the header to a data buffer, return the number of bytes written.
Definition: tiffcomposite_int.cpp:554
virtual ~TiffDataEntry()
Virtual destructor.
Definition: tiffcomposite_int.cpp:210
void setOffset(int32_t offset)
Set the offset.
Definition: tiffcomposite_int.hpp:435
uint32_t writeData(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t dataIdx, uint32_t &imageIdx) const
Write the IFD data of this component to a binary image. Return the number of bytes written...
Definition: tiffcomposite_int.cpp:1465
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
virtual TiffComponent * doAddChild(AutoPtr tiffComponent)
Implements addChild(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:807
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:940
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
virtual uint32_t doCount() const
Implements count(). Return the number of entries in the TIFF directory. Does not count entries which ...
Definition: tiffcomposite_int.cpp:1013
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
void setByteOrder(ByteOrder byteOrder)
Set the byte order for the makernote.
Definition: tiffcomposite_int.cpp:543
virtual TiffComponent * doClone() const =0
Internal virtual copy constructor, implements clone().
TiffPathItem(uint32_t extendedTag, IfdId group)
Constructor.
Definition: tiffcomposite_int.hpp:92
virtual TiffComponent * doAddPath(uint16_t tag, TiffPath &tiffPath, TiffComponent *const pRoot, TiffComponent::AutoPtr object)
Implements addPath(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:695
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:898
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
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
virtual uint32_t doSizeData() const
This class does not really implement sizeData(), it only has size(). This method must not be called; ...
Definition: tiffcomposite_int.cpp:1749
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
const ArrayDef * def() const
Return a pointer to the definition.
Definition: tiffcomposite_int.hpp:1414
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:1858
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition: tiffcomposite_int.cpp:973
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
virtual uint32_t doWrite(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t &imageIdx)
Implements write(). Write pointers into the data area to the ioWrapper, relative to the offsets in th...
Definition: tiffcomposite_int.cpp:1279
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)=0
Implements encode().
virtual uint32_t doSizeData() const
Implements sizeData(). Return the size of the image data area.
Definition: tiffcomposite_int.cpp:1760
const ArrayDef * def_
Binary array definition array.
Definition: tiffcomposite_int.hpp:1345
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition: tiffcomposite_int.cpp:998
virtual uint32_t doWriteData(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t dataIdx, uint32_t &imageIdx) const
Implements writeData(). Write the data area to the ioWrapper. Return the number of bytes written...
Definition: tiffcomposite_int.cpp:1510
bool readHeader(const byte *pData, uint32_t size, ByteOrder byteOrder)
Read the header from a data buffer, return true if successful.
Definition: tiffcomposite_int.cpp:535
virtual uint32_t doSize() const
Implements size(). Returns count * type-size, both taken from the element definition.
Definition: tiffcomposite_int.cpp:1738
uint32_t write(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t &imageIdx)
Write a TiffComponent to a binary image.
Definition: tiffcomposite_int.cpp:1066
std::stack< TiffPathItem > TiffPath
Stack to hold a path from the TIFF root element to a TIFF entry.
Definition: tifffwd_int.hpp:104
TiffType tiffType() const
Return the TIFF type.
Definition: tiffcomposite_int.hpp:457
TiffType elTiffType_
Type for the array entry and the size element, if any.
Definition: tiffcomposite_int.hpp:1334
TiffSubIfd(uint16_t tag, IfdId group, IfdId newGroup)
Default constructor.
Definition: tiffcomposite_int.cpp:101
uint32_t count() const
Return the number of components in this component.
Definition: tiffcomposite_int.cpp:1008
virtual uint32_t doSizeData() const =0
Implements sizeData().
virtual TiffComponent * doAddPath(uint16_t tag, TiffPath &tiffPath, TiffComponent *const pRoot, TiffComponent::AutoPtr object)
Implements addPath(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:752
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition: tiffcomposite_int.cpp:1003
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:1877
uint32_t ifdOffset() const
Return the offset to the start of the Makernote IFD from the start of the Makernote. Returns 0 if there is no header.
Definition: tiffcomposite_int.cpp:509
virtual uint32_t doWriteData(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t dataIdx, uint32_t &imageIdx) const
Implements writeData(). Write the image data area to the ioWrapper. Return the number of bytes writte...
Definition: tiffcomposite_int.cpp:1496
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:903
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:929
virtual uint32_t doWriteData(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t dataIdx, uint32_t &imageIdx) const
Implements writeData(). Standard TIFF entries have no data: write nothing and return 0...
Definition: tiffcomposite_int.cpp:1487
virtual uint32_t doCount() const =0
Implements count().
byte * start() const
Return a pointer to the start of the binary representation of the component.
Definition: tiffcomposite_int.hpp:259
const TiffType ttTiffFloat
TIFF FLOAT type.
Definition: tiffcomposite_int.hpp:59
virtual uint32_t doWrite(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t &imageIdx)
Implements write(). Todo: Document it!
Definition: tiffcomposite_int.cpp:1384
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition: tiffcomposite_int.cpp:978
void updateValue(Value::AutoPtr value, ByteOrder byteOrder)
Update the value. Takes ownership of the pointer passed in.
Definition: tiffcomposite_int.cpp:372
uint16_t dtTag() const
Return the group of the related entry which has the data area.
Definition: tiffcomposite_int.hpp:830
void accept(TiffVisitor &visitor)
Interface to accept visitors (Visitor pattern). Visitors can perform operations on all components of ...
Definition: tiffcomposite_int.cpp:883
bool hasFillers_
If true, write all defined tags.
Definition: tiffcomposite_int.hpp:1337
virtual TiffComponent * doAddPath(uint16_t tag, TiffPath &tiffPath, TiffComponent *const pRoot, TiffComponent::AutoPtr object)
Implements addPath(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:730
virtual TiffComponent * doAddChild(TiffComponent::AutoPtr tiffComponent)
Implements addChild(). Todo: Document it!
Definition: tiffcomposite_int.cpp:841
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
TiffEntryBase(uint16_t tag, IfdId group, TiffType tiffType=ttUndefined)
Default constructor.
Definition: tiffcomposite_int.cpp:93
virtual uint32_t doCount() const
Implements count(). Return the number of entries in the IFD of the Makernote. Does not count entries ...
Definition: tiffcomposite_int.cpp:1034
virtual uint32_t doWriteImage(IoWrapper &ioWrapper, ByteOrder byteOrder) const
Implements writeImage(). Write the image data of the TIFF directory to the ioWrapper by forwarding th...
Definition: tiffcomposite_int.cpp:1560
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:888
virtual TiffComponent * doAddNext(AutoPtr tiffComponent)
Implements addNext(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:854
Abstract base class defining the interface for TIFF composite visitors (Visitor pattern) ...
Definition: tiffvisitor_int.hpp:65
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:948
virtual TiffComponent * doAddChild(TiffComponent::AutoPtr tiffComponent)
Implements addChild(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:827
void setIdx(int idx)
Set the unique id of the entry in the image.
Definition: tiffcomposite_int.hpp:490
uint32_t addElement(uint32_t idx, const ArrayDef &def)
Add an element to the binary array, return the size of the element.
Definition: tiffcomposite_int.cpp:610
virtual TiffComponent * doAddChild(TiffComponent::AutoPtr tiffComponent)
Implements addChild(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:812
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
virtual ~TiffIfdMakernote()
Virtual destructor.
Definition: tiffcomposite_int.cpp:227
virtual TiffImageEntry * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:303
static uint32_t writeOffset(byte *buf, int32_t offset, TiffType tiffType, ByteOrder byteOrder)
Helper function to write an offset to a preallocated binary buffer.
Definition: tiffcomposite_int.cpp:1256
TiffBinaryElement(uint16_t tag, IfdId group)
Constructor.
Definition: tiffcomposite_int.cpp:166
void setElByteOrder(ByteOrder byteOrder)
Set the byte order of this element.
Definition: tiffcomposite_int.hpp:1512
virtual TiffComponent * doAddPath(uint16_t tag, TiffPath &tiffPath, TiffComponent *const pRoot, TiffComponent::AutoPtr object)
Implements addPath(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:635
const uint32_t pana
Special tag: root IFD of Panasonic RAW images.
Definition: tiffcomposite_int.hpp:76
virtual TiffComponent * doAddChild(TiffComponent::AutoPtr tiffComponent)
Implements addChild(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:836
virtual uint32_t doWriteData(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t dataIdx, uint32_t &imageIdx) const =0
Implements writeData().
const byte * pData() const
Return a pointer to the binary representation of the value of this component.
Definition: tiffcomposite_int.hpp:471
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition: tiffcomposite_int.cpp:993
virtual TiffComponent * doAddPath(uint16_t tag, TiffPath &tiffPath, TiffComponent *const pRoot, TiffComponent::AutoPtr object)
Implements addPath(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:643
virtual ~TiffSizeEntry()
Virtual destructor.
Definition: tiffcomposite_int.cpp:218
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
TiffComponent * addPath(uint16_t tag, TiffPath &tiffPath, TiffComponent *const pRoot, AutoPtr object=AutoPtr(0))
Add a TIFF entry tag to the component. Components on the path to the entry are added if they don't ex...
Definition: tiffcomposite_int.cpp:627
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:958
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:1890
int defSize() const
Return the number of elements in the definition.
Definition: tiffcomposite_int.hpp:1416
TiffDirectory(uint16_t tag, IfdId group, bool hasNext=true)
Default constructor.
Definition: tiffcomposite_int.hpp:865
int putb(byte data)
Wraps the corresponding BasicIo::putb() method.
Definition: tiffcomposite_int.cpp:74
Additional configuration for a binary array.
Definition: tiffcomposite_int.hpp:1325
virtual ~TiffDataEntryBase()
Virtual destructor.
Definition: tiffcomposite_int.cpp:206
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:1905
virtual uint32_t doSizeImage() const =0
Implements sizeImage().
bool decoded() const
Return the flag which indicates if the array was decoded.
Definition: tiffcomposite_int.hpp:1418
uint32_t extendedTag() const
Return the extended tag (32 bit so that it can contain special tags)
Definition: tiffcomposite_int.hpp:101
virtual uint32_t doSize() const
Implements size(). Return the size of the strip pointers.
Definition: tiffcomposite_int.cpp:1687
virtual uint32_t doSizeData() const
This class does not really implement sizeData(), it only has size(). This method must not be called; ...
Definition: tiffcomposite_int.cpp:1785
uint32_t doSize() const
Implements size(). Return the size of the sub-Ifd pointers.
Definition: tiffcomposite_int.cpp:1692
TiffComponent::AutoPtr newTiffSubIfd(uint16_t tag, IfdId group)
Function to create and initialize a new TIFF sub-directory.
Definition: tiffcomposite_int.hpp:1601
virtual TiffComponent * doAddNext(TiffComponent::AutoPtr tiffComponent)
Implements addNext(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:869
virtual TiffSubIfd * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:318
virtual uint32_t doSizeData() const
Implements sizeData(). Return the sum of the sizes of all sub-IFDs.
Definition: tiffcomposite_int.cpp:1776
virtual ~TiffEntry()
Virtual destructor.
Definition: tiffcomposite_int.cpp:202
virtual uint32_t doSizeImage() const
Implements sizeImage(). Return the size of the image data area.
Definition: tiffcomposite_int.cpp:1827
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
virtual uint32_t doWriteData(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t dataIdx, uint32_t &imageIdx) const
This class does not really implement writeData(), it only has write(). This method must not be called...
Definition: tiffcomposite_int.cpp:1544
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
uint32_t baseOffset() const
Return the base offset for use with the makernote IFD entries relative to the start of the TIFF heade...
Definition: tiffcomposite_int.cpp:529
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
virtual ~TiffComponent()
Virtual destructor.
Definition: tiffcomposite_int.cpp:175
const TiffType ttUnsignedLong
Exif LONG type.
Definition: tiffcomposite_int.hpp:52
TiffDataEntry(uint16_t tag, IfdId group, uint16_t szTag, IfdId szGroup)
Constructor.
Definition: tiffcomposite_int.hpp:656
uint32_t sizeImage() const
Return the size in bytes of the image data of this component when written to a binary image...
Definition: tiffcomposite_int.cpp:1791
TiffDataEntryBase(uint16_t tag, IfdId group, uint16_t szTag, IfdId szGroup)
Constructor.
Definition: tiffcomposite_int.hpp:600
virtual ~TiffBinaryArray()
Virtual destructor.
Definition: tiffcomposite_int.cpp:232
TiffComponent::AutoPtr newTiffBinaryArray1(uint16_t tag, IfdId group)
Function to create and initialize a new simple binary array entry.
Definition: tiffcomposite_int.hpp:1617
virtual void setStrips(const Value *pSize, const byte *pData, uint32_t sizeData, uint32_t baseOffset)=0
Set the data areas ("strips").
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 ArrayCfg * cfg() const
Return a pointer to the configuration.
Definition: tiffcomposite_int.hpp:1412
const TiffType ttUndefined
Exif UNDEFINED type.
Definition: tiffcomposite_int.hpp:55
bool operator==(uint32_t idx) const
Comparison with idx.
Definition: tiffcomposite_int.hpp:1315
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
void setData(byte *pData, int32_t size)
Set pointer and size of the entry's data (not taking ownership of the data).
Definition: tiffcomposite_int.cpp:362
virtual uint32_t doCount() const
Implements count(). Todo: Document it!
Definition: tiffcomposite_int.cpp:1039
Makernote header interface. This class is used with TIFF makernotes.
Definition: makernote_int.hpp:126
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition: tiffcomposite_int.cpp:988
EncoderFct encoderFct_
Encoder function for matching tags.
Definition: tiffcomposite_int.hpp:392
virtual TiffBinaryArray * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:335
uint32_t sizeData() const
Return the size in bytes of the IFD data of this component when written to a binary image...
Definition: tiffcomposite_int.cpp:1744
void setValue(Value::AutoPtr value)
Set tag value. Takes ownership of the pointer passed in.
Definition: tiffcomposite_int.cpp:387
TiffMnEntry(uint16_t tag, IfdId group, IfdId mnGroup)
Default constructor.
Definition: tiffcomposite_int.cpp:106
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:1898
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:1915
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:908
uint16_t tag() const
Return the tag of this entry.
Definition: tiffcomposite_int.hpp:255
virtual uint32_t doWriteImage(IoWrapper &ioWrapper, ByteOrder byteOrder) const =0
Implements writeImage().
const TiffType ttTiffIfd
TIFF IFD type.
Definition: tiffcomposite_int.hpp:61
IfdId group() const
Return the group id of this component.
Definition: tiffcomposite_int.hpp:257
Provides classes and functions to encode and decode Exif and Iptc data. The libexiv2 API consists of ...
Definition: asfvideo.hpp:36
virtual TiffDirectory * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:313
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
virtual TiffComponent * doAddPath(uint16_t tag, TiffPath &tiffPath, TiffComponent *const pRoot, TiffComponent::AutoPtr object)
Implements addPath(). Todo: Document it!
Definition: tiffcomposite_int.cpp:760
IfdId szGroup() const
Return the group of the entry which has the size.
Definition: tiffcomposite_int.hpp:629
virtual uint32_t doCount() const
Implements count().
Definition: tiffcomposite_int.cpp:1018
virtual TiffComponent * doAddNext(TiffComponent::AutoPtr tiffComponent)
Implements addNext(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:878
void(TiffDecoder::* DecoderFct)(const TiffEntryBase *)
Function pointer type for a TiffDecoder member function to decode a TIFF component.
Definition: tifffwd_int.hpp:76
TiffComponent(uint16_t tag, IfdId group)
Constructor.
Definition: tiffcomposite_int.cpp:88
TiffImageEntry(uint16_t tag, IfdId group, uint16_t szTag, IfdId szGroup)
Constructor.
Definition: tiffcomposite_int.hpp:739
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
virtual uint32_t doCount() const
Implements count(). Return number of components in the entry.
Definition: tiffcomposite_int.cpp:1023
Element of a TiffBinaryArray.
Definition: tiffcomposite_int.hpp:1493
virtual uint32_t doWrite(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t &imageIdx)
Implements write() by forwarding the call to the actual concrete Makernote, if there is one...
Definition: tiffcomposite_int.cpp:1354
virtual uint32_t doSize() const =0
Implements size().
virtual uint32_t doSizeImage() const
Implements sizeImage(). Return the total image data size of the makernote IFD.
Definition: tiffcomposite_int.cpp:1817
virtual ~TiffMnEntry()
Virtual destructor.
Definition: tiffcomposite_int.cpp:222
TiffSizeEntry(uint16_t tag, IfdId group, uint16_t dtTag, IfdId dtGroup)
Constructor.
Definition: tiffcomposite_int.hpp:821
uint32_t mnOffset() const
Return the offset to the makernote from the start of the TIFF header.
Definition: tiffcomposite_int.cpp:524
virtual ~TiffImageEntry()
Virtual destructor.
Definition: tiffcomposite_int.cpp:214
virtual uint32_t doWriteData(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t dataIdx, uint32_t &imageIdx) const
This class does not really implement writeData(), it only has write(). This method must not be called...
Definition: tiffcomposite_int.cpp:1474
virtual ~TiffBinaryElement()
Virtual destructor.
Definition: tiffcomposite_int.cpp:239
virtual uint32_t doWriteImage(IoWrapper &ioWrapper, ByteOrder byteOrder) const
Implements writeImage(). Write the image data area to the ioWrapper. Return the number of bytes writt...
Definition: tiffcomposite_int.cpp:1609
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:893
virtual ~TiffEntryBase()
Virtual destructor.
Definition: tiffcomposite_int.cpp:194
virtual TiffComponent * doAddChild(TiffComponent::AutoPtr tiffComponent)
Implements addChild(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:819
virtual uint32_t doWrite(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t &imageIdx)
Implements write(). Write the Makernote header, TIFF directory, values and additional data to the ioW...
Definition: tiffcomposite_int.cpp:1367
uint32_t sizeHeader() const
Return the size of the header in bytes.
Definition: tiffcomposite_int.cpp:548
ByteOrder byteOrder() const
Return the byte order for the makernote. Requires the image byte order to be set (setImageByteOrder()...
Definition: tiffcomposite_int.cpp:515
virtual int idx() const
Return the unique id of the entry in the image.
Definition: tiffcomposite_int.cpp:350
const TiffType ttUnsignedRational
Exif RATIONAL type.
Definition: tiffcomposite_int.hpp:53
virtual uint32_t doSizeImage() const
Implements sizeImage(). Return 0.
Definition: tiffcomposite_int.cpp:1822
bool updOrigDataBuf(const byte *pData, uint32_t size)
Update the original data buffer and its size, return true if successful.
Definition: tiffcomposite_int.cpp:600
bool hasNext() const
Return true if the directory has a next pointer.
Definition: tiffcomposite_int.hpp:874
virtual uint32_t doWrite(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t &imageIdx)
Implements write(). Write the sub-IFD pointers to the ioWrapper, return the number of bytes written...
Definition: tiffcomposite_int.cpp:1335
long write(const byte *pData, long wcount)
Wraps the corresponding BasicIo::write() method.
Definition: tiffcomposite_int.cpp:65
virtual uint32_t doSize() const
Implements size(). Return the size of the Makernote header, TIFF directory, values and additional dat...
Definition: tiffcomposite_int.cpp:1705
Defines one tag in a binary array.
Definition: tiffcomposite_int.hpp:1313
virtual TiffIfdMakernote * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:329
A tupel consisting of extended Tag and group used as an item in TIFF paths.
Definition: tiffcomposite_int.hpp:87
virtual uint32_t doWrite(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t &imageIdx)
Implements write(). Write the TIFF directory, values and additional data, including the next-IFD...
Definition: tiffcomposite_int.cpp:1076
uint32_t size() const
Return the size in bytes of the IFD value of this component when written to a binary image...
Definition: tiffcomposite_int.cpp:1650
virtual uint32_t doWrite(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t &imageIdx)
Implements write(). Todo: Document it!
Definition: tiffcomposite_int.cpp:1450
TiffComponent * addChild(AutoPtr tiffComponent)
Add a child to the component. Default is to do nothing.
Definition: tiffcomposite_int.cpp:802
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
virtual uint32_t doWriteData(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t dataIdx, uint32_t &imageIdx) const
Implements writeData(). Write the sub-IFDs to the ioWrapper. Return the number of bytes written...
Definition: tiffcomposite_int.cpp:1527
virtual TiffSizeEntry * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:308
virtual uint32_t doSize() const
Implements size() by forwarding the call to the actual concrete Makernote, if there is one...
Definition: tiffcomposite_int.cpp:1697
virtual uint32_t doWrite(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t &imageIdx)
Implements write(). Write pointers into the image data area to the ioWrapper. Return the number of by...
Definition: tiffcomposite_int.cpp:1303
TIFF mapping table for functions to decode special cases.
Definition: tiffcomposite_int.hpp:373
void iniOrigDataBuf()
Initialize the original data buffer and its size from the base entry.
Definition: tiffcomposite_int.cpp:594
virtual uint32_t doSize() const
Implements size(). Return the size of the TIFF directory, values and additional data, including the next-IFD, if any.
Definition: tiffcomposite_int.cpp:1655
const TiffType ttSignedShort
Exif SSHORT type.
Definition: tiffcomposite_int.hpp:56
virtual TiffBinaryElement * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:340
virtual uint32_t doSize() const
Implements size(). Return the size of a standard TIFF entry.
Definition: tiffcomposite_int.cpp:1682
virtual ~TiffSubIfd()
Virtual destructor.
Definition: tiffcomposite_int.cpp:187
TiffEntry(uint16_t tag, IfdId group)
Constructor.
Definition: tiffcomposite_int.hpp:568
virtual uint32_t doSizeData() const
Implements sizeData(). Return 0.
Definition: tiffcomposite_int.cpp:1755