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
37namespace Exiv2 {
38
39 class BasicIo;
40
41 namespace Internal {
42
43// *****************************************************************************
44// class definitions
45
47 typedef uint16_t TiffType;
48
61 const TiffType ttTiffIfd =13;
62
64 TypeId toTypeId(TiffType tiffType, uint16_t tag, IfdId group);
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
88 public:
90
91
93 : extendedTag_(extendedTag), group_(group) {}
95
97
98
99 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
181 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
255 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
318 virtual TiffComponent* doAddPath(uint16_t tag,
319 TiffPath& tiffPath,
320 TiffComponent* const pRoot,
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
340 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_;
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
412 friend class TiffReader;
413 friend class TiffEncoder;
414 friend int selectNikonLd(TiffBinaryArray* const, TiffComponent* const);
415 public:
417
418
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
457 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
480 TiffEntryBase(const TiffEntryBase& rhs);
482
484
485
486 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
507 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,
535 ByteOrder byteOrder);
536
537 private:
539
540
541 TiffEntryBase& operator=(const TiffEntryBase& rhs);
543
544 // DATA
545 TiffType tiffType_;
546 uint32_t count_;
547 int32_t offset_;
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
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
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
627 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
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
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
817 public:
819
820
822 : TiffEntryBase(tag, group), dtTag_(dtTag), dtGroup_(dtGroup) {}
824 virtual ~TiffSizeEntry();
826
828
829
830 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
859 friend class TiffEncoder;
860 friend class TiffDecoder;
861 public:
863
864
865 TiffDirectory(uint16_t tag, IfdId group, bool hasNext =true)
866 : TiffComponent(tag, group), hasNext_(hasNext), pNext_(0) {}
868 virtual ~TiffDirectory();
870
872
873
874 bool hasNext() const { return hasNext_; }
876
877 protected:
879
880
881 TiffDirectory(const TiffDirectory& rhs);
883
885
886 virtual TiffComponent* doAddPath(uint16_t tag,
887 TiffPath& tiffPath,
888 TiffComponent* const pRoot,
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
952 TiffDirectory& operator=(const TiffDirectory& rhs);
954
956
957
958 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
988 TiffSubIfd(uint16_t tag, IfdId group, IfdId newGroup);
990 virtual ~TiffSubIfd();
992
993 protected:
995
996
997 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
1052 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
1072 friend class TiffReader;
1073 friend class TiffDecoder;
1074 friend class TiffEncoder;
1075 public:
1077
1078
1079 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
1127 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
1153 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);
1177 void setImageByteOrder(ByteOrder byteOrder) { imageByteOrder_ = byteOrder; }
1179
1181
1182
1183 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,
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,
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:
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_;
1321 uint32_t count_;
1322 };
1323
1325 struct ArrayCfg {
1330 uint32_t tagStep() const { return elDefaultDef_.size(0, group_); }
1331 //DATA
1338 bool concat_;
1340 };
1341
1343 struct ArraySet {
1346 const int defSize_;
1347 };
1348
1355 public:
1357
1358
1359 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
1377 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
1412 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
1425 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
1473 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
1498 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
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
1612 new TiffBinaryArray(tag, group, arrayCfg, *(&arrayDef), N));
1613 }
1614
1616 template<const ArrayCfg* arrayCfg>
1618 {
1620 new TiffBinaryArray(tag, group, arrayCfg, 0, 0));
1621 }
1622
1624 template<const ArraySet* arraySet, int N, CfgSelFct cfgSelFct>
1626 {
1628 new TiffBinaryArray(tag, group, arraySet, N, cfgSelFct));
1629 }
1630
1632 template<uint16_t szTag, IfdId szGroup>
1634 {
1636 new TiffDataEntry(tag, group, szTag, szGroup));
1637 }
1638
1640 template<uint16_t dtTag, IfdId dtGroup>
1642 {
1644 new TiffSizeEntry(tag, group, dtTag, dtGroup));
1645 }
1646
1648 template<uint16_t szTag, IfdId szGroup>
1650 {
1652 new TiffImageEntry(tag, group, szTag, szGroup));
1653 }
1654
1656 template<uint16_t dtTag, IfdId dtGroup>
1658 {
1659 // Todo: Same as newTiffThumbSize - consolidate (rename)?
1661 new TiffSizeEntry(tag, group, dtTag, dtGroup));
1662 }
1663
1664}} // namespace Internal, Exiv2
1665
1666#endif // #ifndef TIFFCOMPOSITE_INT_HPP_
An interface for simple binary IO.
Definition: basicio.hpp:55
Utility class containing a character array. All it does is to take care of memory allocation and dele...
Definition: types.hpp:193
An Exif metadatum, consisting of an ExifKey and a Value and methods to manipulate these.
Definition: exif.hpp:59
Simple IO wrapper to ensure that the header is only written if there is any other data at all.
Definition: tiffcomposite_int.hpp:121
int putb(byte data)
Wraps the corresponding BasicIo::putb() method.
Definition: tiffcomposite_int.cpp:74
IoWrapper(BasicIo &io, const byte *pHeader, long size, OffsetWriter *pow)
Definition: tiffcomposite_int.cpp:59
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
long write(const byte *pData, long wcount)
Wraps the corresponding BasicIo::write() method.
Definition: tiffcomposite_int.cpp:65
Makernote header interface. This class is used with TIFF makernotes.
Definition: makernote_int.hpp:126
Class to insert pointers or offsets to computed addresses at specific locations in an image....
Definition: tiffimage_int.hpp:419
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
virtual uint32_t doSize() const
Implements size(). Todo: Document it!
Definition: tiffcomposite_int.cpp:1726
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:1396
virtual TiffComponent * doAddChild(TiffComponent::AutoPtr tiffComponent)
Implements addChild(). Todo: Document it!
Definition: tiffcomposite_int.cpp:841
virtual TiffComponent * doAddPath(uint16_t tag, TiffPath &tiffPath, TiffComponent *const pRoot, TiffComponent::AutoPtr object)
Implements addPath(). Todo: Document it!
Definition: tiffcomposite_int.cpp:760
const ArrayCfg * cfg() const
Return a pointer to the configuration.
Definition: tiffcomposite_int.hpp:1412
bool initialize(IfdId group)
Setup cfg and def for the component, in case of a complex binary array. Else do nothing....
Definition: tiffcomposite_int.cpp:566
void setDecoded(bool decoded)
Set a flag to indicate if the array was decoded.
Definition: tiffcomposite_int.hpp:1406
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:948
bool decoded() const
Return the flag which indicates if the array was decoded.
Definition: tiffcomposite_int.hpp:1418
virtual TiffBinaryArray * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:335
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
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition: tiffcomposite_int.cpp:973
void iniOrigDataBuf()
Initialize the original data buffer and its size from the base entry.
Definition: tiffcomposite_int.cpp:594
const ArrayDef * def() const
Return a pointer to the definition.
Definition: tiffcomposite_int.hpp:1414
int defSize() const
Return the number of elements in the definition.
Definition: tiffcomposite_int.hpp:1416
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 ~TiffBinaryArray()
Virtual destructor.
Definition: tiffcomposite_int.cpp:232
TiffBinaryArray(uint16_t tag, IfdId group, const ArrayCfg *arrayCfg, const ArrayDef *arrayDef, int defSize)
Constructor.
Definition: tiffcomposite_int.cpp:124
virtual uint32_t doCount() const
Implements count(). Todo: Document it!
Definition: tiffcomposite_int.cpp:1046
Element of a TiffBinaryArray.
Definition: tiffcomposite_int.hpp:1493
virtual uint32_t doSize() const
Implements size(). Returns count * type-size, both taken from the element definition.
Definition: tiffcomposite_int.cpp:1754
TiffBinaryElement(uint16_t tag, IfdId group)
Constructor.
Definition: tiffcomposite_int.cpp:166
void setElDef(const ArrayDef &def)
Set the array definition for this element.
Definition: tiffcomposite_int.hpp:1508
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition: tiffcomposite_int.cpp:968
virtual ~TiffBinaryElement()
Virtual destructor.
Definition: tiffcomposite_int.cpp:239
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:958
virtual TiffBinaryElement * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:340
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:1462
const ArrayDef * elDef() const
Return the array definition of this element.
Definition: tiffcomposite_int.hpp:1520
void setElByteOrder(ByteOrder byteOrder)
Set the byte order of this element.
Definition: tiffcomposite_int.hpp:1512
ByteOrder elByteOrder() const
Return the byte order of this element.
Definition: tiffcomposite_int.hpp:1524
virtual uint32_t doCount() const
Implements count(). Returns the count from the element definition.
Definition: tiffcomposite_int.cpp:1068
Interface class for components of a TIFF directory hierarchy (Composite pattern). Both TIFF directori...
Definition: tiffcomposite_int.hpp:171
virtual TiffComponent * doClone() const =0
Internal virtual copy constructor, implements clone().
virtual uint32_t doWriteData(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t dataIdx, uint32_t &imageIdx) const =0
Implements writeData().
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
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:1807
byte * start() const
Return a pointer to the start of the binary representation of the component.
Definition: tiffcomposite_int.hpp:259
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:1073
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:1566
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:1666
virtual uint32_t doWriteImage(IoWrapper &ioWrapper, ByteOrder byteOrder) const =0
Implements writeImage().
uint16_t tag() const
Return the tag of this entry.
Definition: tiffcomposite_int.hpp:255
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
uint32_t count() const
Return the number of components in this component.
Definition: tiffcomposite_int.cpp:1008
virtual TiffComponent * doAddNext(AutoPtr tiffComponent)
Implements addNext(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:854
virtual uint32_t doSizeData() const =0
Implements sizeData().
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
virtual TiffComponent * doAddChild(AutoPtr tiffComponent)
Implements addChild(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:807
virtual uint32_t doSize() const =0
Implements size().
virtual void doAccept(TiffVisitor &visitor)=0
Implements accept().
virtual int idx() const
Return the unique id of the entry in the image.
Definition: tiffcomposite_int.cpp:345
TiffComponent * addNext(AutoPtr tiffComponent)
Add a "next" component to the component. Default is to do nothing.
Definition: tiffcomposite_int.cpp:849
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
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:1477
std::vector< TiffComponent * > Components
Container type to hold all metadata.
Definition: tiffcomposite_int.hpp:176
virtual uint32_t doSizeImage() const =0
Implements sizeImage().
IfdId group() const
Return the group id of this component.
Definition: tiffcomposite_int.hpp:257
TiffComponent * addChild(AutoPtr tiffComponent)
Add a child to the component. Default is to do nothing.
Definition: tiffcomposite_int.cpp:802
virtual uint32_t doWrite(IoWrapper &ioWrapper, ByteOrder byteOrder, int32_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t &imageIdx)=0
Implements write().
virtual ~TiffComponent()
Virtual destructor.
Definition: tiffcomposite_int.cpp:175
TiffComponent(uint16_t tag, IfdId group)
Constructor.
Definition: tiffcomposite_int.cpp:88
std::auto_ptr< TiffComponent > AutoPtr
TiffComponent auto_ptr type.
Definition: tiffcomposite_int.hpp:174
void accept(TiffVisitor &visitor)
Interface to accept visitors (Visitor pattern). Visitors can perform operations on all components of ...
Definition: tiffcomposite_int.cpp:883
virtual uint32_t doCount() const =0
Implements count().
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:1760
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 ~TiffDataEntryBase()
Virtual destructor.
Definition: tiffcomposite_int.cpp:206
IfdId szGroup() const
Return the group of the entry which has the size.
Definition: tiffcomposite_int.hpp:629
virtual void setStrips(const Value *pSize, const byte *pData, uint32_t sizeData, uint32_t baseOffset)=0
Set the data areas ("strips").
TiffDataEntryBase(uint16_t tag, IfdId group, uint16_t szTag, IfdId szGroup)
Constructor.
Definition: tiffcomposite_int.hpp:600
uint16_t szTag() const
Return the group of the entry which has the size.
Definition: tiffcomposite_int.hpp:627
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 void setStrips(const Value *pSize, const byte *pData, uint32_t sizeData, uint32_t baseOffset)
Set the data areas ("strips").
Definition: tiffcomposite_int.cpp:396
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:1291
virtual uint32_t doSizeData() const
Implements sizeData(). Return the size of the data area.
Definition: tiffcomposite_int.cpp:1786
virtual TiffDataEntry * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:298
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:1522
TiffDataEntry(uint16_t tag, IfdId group, uint16_t szTag, IfdId szGroup)
Constructor.
Definition: tiffcomposite_int.hpp:656
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:893
virtual ~TiffDataEntry()
Virtual destructor.
Definition: tiffcomposite_int.cpp:210
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition: tiffcomposite_int.cpp:978
TIFF composite visitor to decode metadata from the TIFF tree and add it to an Image,...
Definition: tiffvisitor_int.hpp:276
This class models a TIFF directory (Ifd). It is a composite component of the TIFF tree.
Definition: tiffcomposite_int.hpp:858
TiffDirectory(uint16_t tag, IfdId group, bool hasNext=true)
Default constructor.
Definition: tiffcomposite_int.hpp:865
virtual uint32_t doSize() const
Implements size(). Return the size of the TIFF directory, values and additional data,...
Definition: tiffcomposite_int.cpp:1671
virtual TiffComponent * doAddNext(TiffComponent::AutoPtr tiffComponent)
Implements addNext(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:859
virtual TiffComponent * doAddChild(TiffComponent::AutoPtr tiffComponent)
Implements addChild(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:812
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:1083
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:908
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
virtual TiffDirectory * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:313
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:1812
bool hasNext() const
Return true if the directory has a next pointer.
Definition: tiffcomposite_int.hpp:874
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:1486
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:1765
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 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:1572
virtual ~TiffDirectory()
Virtual destructor.
Definition: tiffcomposite_int.cpp:179
TIFF composite visitor to encode metadata from an image to the TIFF tree. The metadata containers and...
Definition: tiffvisitor_int.hpp:376
This abstract base class provides the common functionality of an IFD directory entry and defines an e...
Definition: tiffcomposite_int.hpp:411
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
virtual uint32_t doSizeData() const
Implements sizeData(). Return 0.
Definition: tiffcomposite_int.cpp:1771
void setIdx(int idx)
Set the unique id of the entry in the image.
Definition: tiffcomposite_int.hpp:490
TiffEntryBase(uint16_t tag, IfdId group, TiffType tiffType=ttUndefined)
Default constructor.
Definition: tiffcomposite_int.cpp:93
void setOffset(int32_t offset)
Set the offset.
Definition: tiffcomposite_int.hpp:435
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
const byte * pData() const
Return a pointer to the binary representation of the value of this component.
Definition: tiffcomposite_int.hpp:471
virtual ~TiffEntryBase()
Virtual destructor.
Definition: tiffcomposite_int.cpp:194
TiffType tiffType() const
Return the TIFF type.
Definition: tiffcomposite_int.hpp:457
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:1268
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:1499
virtual int idx() const
Return the unique id of the entry in the image.
Definition: tiffcomposite_int.cpp:350
virtual uint32_t doSize() const
Implements size(). Return the size of a standard TIFF entry.
Definition: tiffcomposite_int.cpp:1698
const Value * pValue() const
Return a const pointer to the converted value of this component.
Definition: tiffcomposite_int.hpp:473
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)=0
Implements encode().
virtual uint32_t doCount() const
Implements count().
Definition: tiffcomposite_int.cpp:1018
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
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:1253
virtual uint32_t doSizeImage() const
Implements sizeImage(). Return 0.
Definition: tiffcomposite_int.cpp:1838
void setCount(uint32_t count)
Set the number of components in this entry.
Definition: tiffcomposite_int.hpp:488
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:1599
void setValue(Value::AutoPtr value)
Set tag value. Takes ownership of the pointer passed in.
Definition: tiffcomposite_int.cpp:387
void updateValue(Value::AutoPtr value, ByteOrder byteOrder)
Update the value. Takes ownership of the pointer passed in.
Definition: tiffcomposite_int.cpp:372
A standard TIFF IFD entry.
Definition: tiffcomposite_int.hpp:563
virtual TiffEntry * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:293
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:888
TiffEntry(uint16_t tag, IfdId group)
Constructor.
Definition: tiffcomposite_int.hpp:568
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition: tiffcomposite_int.cpp:983
virtual ~TiffEntry()
Virtual destructor.
Definition: tiffcomposite_int.cpp:202
Tiff IFD Makernote. This is a concrete class suitable for all IFD makernotes.
Definition: tiffcomposite_int.hpp:1147
void setByteOrder(ByteOrder byteOrder)
Set the byte order for the makernote.
Definition: tiffcomposite_int.cpp:543
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:1556
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 TiffComponent * doAddChild(TiffComponent::AutoPtr tiffComponent)
Implements addChild(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:836
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
uint32_t sizeHeader() const
Return the size of the header in bytes.
Definition: tiffcomposite_int.cpp:548
ByteOrder imageByteOrder() const
Return the byte order used for the image.
Definition: tiffcomposite_int.hpp:1207
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:1801
virtual TiffComponent * doAddNext(TiffComponent::AutoPtr tiffComponent)
Implements addNext(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:878
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:940
void setImageByteOrder(ByteOrder byteOrder)
Set the byte order used for the image.
Definition: tiffcomposite_int.hpp:1177
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
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:1041
uint32_t ifdOffset() const
Return the offset to the start of the Makernote IFD from the start of the Makernote....
Definition: tiffcomposite_int.cpp:509
virtual uint32_t doSize() const
Implements size(). Return the size of the Makernote header, TIFF directory, values and additional dat...
Definition: tiffcomposite_int.cpp:1721
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 uint32_t doSizeImage() const
Implements sizeImage(). Return the total image data size of the makernote IFD.
Definition: tiffcomposite_int.cpp:1833
virtual TiffIfdMakernote * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:329
uint32_t mnOffset() const
Return the offset to the makernote from the start of the TIFF header.
Definition: tiffcomposite_int.cpp:524
virtual ~TiffIfdMakernote()
Virtual destructor.
Definition: tiffcomposite_int.cpp:227
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:1379
TiffIfdMakernote(uint16_t tag, IfdId group, IfdId mnGroup, MnHeader *pHeader, bool hasNext=true)
Default constructor.
Definition: tiffcomposite_int.cpp:111
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 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:1615
A standard TIFF IFD entry consisting of a value which is an array of offsets to image data areas....
Definition: tiffcomposite_int.hpp:733
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:1508
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:898
virtual uint32_t doSizeData() const
Implements sizeData(). Return the size of the image data area.
Definition: tiffcomposite_int.cpp:1776
virtual TiffImageEntry * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:303
virtual uint32_t doSizeImage() const
Implements sizeImage(). Return the size of the image data area.
Definition: tiffcomposite_int.cpp:1843
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
virtual uint32_t doSize() const
Implements size(). Return the size of the strip pointers.
Definition: tiffcomposite_int.cpp:1703
TiffImageEntry(uint16_t tag, IfdId group, uint16_t szTag, IfdId szGroup)
Constructor.
Definition: tiffcomposite_int.hpp:739
virtual ~TiffImageEntry()
Virtual destructor.
Definition: tiffcomposite_int.cpp:214
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition: tiffcomposite_int.cpp:988
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:1625
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:1315
This class is the basis for Makernote support in TIFF. It contains a pointer to a concrete Makernote....
Definition: tiffcomposite_int.hpp:1071
virtual TiffMnEntry * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:323
virtual ~TiffMnEntry()
Virtual destructor.
Definition: tiffcomposite_int.cpp:222
virtual TiffComponent * doAddChild(TiffComponent::AutoPtr tiffComponent)
Implements addChild(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:827
TiffMnEntry(uint16_t tag, IfdId group, IfdId mnGroup)
Default constructor.
Definition: tiffcomposite_int.cpp:106
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:929
virtual uint32_t doSize() const
Implements size() by forwarding the call to the actual concrete Makernote, if there is one.
Definition: tiffcomposite_int.cpp:1713
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 uint32_t doCount() const
Implements count(). Return number of components in the entry.
Definition: tiffcomposite_int.cpp:1023
virtual TiffComponent * doAddNext(TiffComponent::AutoPtr tiffComponent)
Implements addNext(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:869
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition: tiffcomposite_int.cpp:993
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:1366
A tupel consisting of extended Tag and group used as an item in TIFF paths.
Definition: tiffcomposite_int.hpp:87
IfdId group() const
Return the group.
Definition: tiffcomposite_int.hpp:103
uint16_t tag() const
Return the tag corresponding to the extended tag.
Definition: tiffcomposite_int.hpp:99
TiffPathItem(uint32_t extendedTag, IfdId group)
Constructor.
Definition: tiffcomposite_int.hpp:92
uint32_t extendedTag() const
Return the extended tag (32 bit so that it can contain special tags)
Definition: tiffcomposite_int.hpp:101
TIFF composite visitor to read the TIFF structure from a block of memory and build the composite from...
Definition: tiffvisitor_int.hpp:622
A TIFF IFD entry containing the size of a data area of a related TiffDataEntry. This component is use...
Definition: tiffcomposite_int.hpp:816
virtual TiffSizeEntry * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:308
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:903
IfdId dtGroup() const
Return the group of the related entry which has the data area.
Definition: tiffcomposite_int.hpp:832
virtual ~TiffSizeEntry()
Virtual destructor.
Definition: tiffcomposite_int.cpp:218
TiffSizeEntry(uint16_t tag, IfdId group, uint16_t dtTag, IfdId dtGroup)
Constructor.
Definition: tiffcomposite_int.hpp:821
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition: tiffcomposite_int.cpp:998
uint16_t dtTag() const
Return the group of the related entry which has the data area.
Definition: tiffcomposite_int.hpp:830
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 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:1605
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 uint32_t doSizeImage() const
Implements sizeImage(). Return the sum of the image sizes of all sub-IFDs.
Definition: tiffcomposite_int.cpp:1824
virtual uint32_t doSizeData() const
Implements sizeData(). Return the sum of the sizes of all sub-IFDs.
Definition: tiffcomposite_int.cpp:1792
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:1347
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:1539
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition: tiffcomposite_int.cpp:1003
TiffSubIfd(uint16_t tag, IfdId group, IfdId newGroup)
Default constructor.
Definition: tiffcomposite_int.cpp:101
virtual TiffSubIfd * doClone() const
Internal virtual copy constructor, implements clone().
Definition: tiffcomposite_int.cpp:318
virtual TiffComponent * doAddChild(TiffComponent::AutoPtr tiffComponent)
Implements addChild(). The default implementation does nothing.
Definition: tiffcomposite_int.cpp:819
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition: tiffcomposite_int.cpp:920
uint32_t doSize() const
Implements size(). Return the size of the sub-Ifd pointers.
Definition: tiffcomposite_int.cpp:1708
virtual ~TiffSubIfd()
Virtual destructor.
Definition: tiffcomposite_int.cpp:187
Abstract base class defining the interface for TIFF composite visitors (Visitor pattern)
Definition: tiffvisitor_int.hpp:65
Common interface for all types of values used with metadata.
Definition: value.hpp:51
std::auto_ptr< Value > AutoPtr
Shortcut for a Value auto pointer.
Definition: value.hpp:54
const uint32_t cmt2
Special tag: root IFD of CR3 images.
Definition: tiffcomposite_int.hpp:78
const uint32_t fuji
Special tag: root IFD of Fujifilm RAF images.
Definition: tiffcomposite_int.hpp:77
const uint32_t none
Dummy tag.
Definition: tiffcomposite_int.hpp:72
const uint32_t cmt4
Special tag: root IFD of CR3 images.
Definition: tiffcomposite_int.hpp:80
const uint32_t pana
Special tag: root IFD of Panasonic RAW images.
Definition: tiffcomposite_int.hpp:76
const uint32_t root
Special tag: root IFD.
Definition: tiffcomposite_int.hpp:73
const uint32_t cmt3
Special tag: root IFD of CR3 images.
Definition: tiffcomposite_int.hpp:79
const uint32_t all
Special tag: all tags in a group.
Definition: tiffcomposite_int.hpp:75
const uint32_t next
Special tag: next IFD.
Definition: tiffcomposite_int.hpp:74
const TiffType ttTiffFloat
TIFF FLOAT type.
Definition: tiffcomposite_int.hpp:59
const TiffType ttUnsignedLong
Exif LONG type.
Definition: tiffcomposite_int.hpp:52
const TiffType ttSignedByte
Exif SBYTE type.
Definition: tiffcomposite_int.hpp:54
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 ttUnsignedRational
Exif RATIONAL type.
Definition: tiffcomposite_int.hpp:53
const TiffType ttTiffDouble
TIFF DOUBLE type.
Definition: tiffcomposite_int.hpp:60
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
TiffComponent::AutoPtr newTiffBinaryElement(uint16_t tag, IfdId group)
Function to create and initialize a new binary array element.
Definition: tiffcomposite_int.cpp:1931
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 newTiffThumbSize(uint16_t tag, IfdId group)
Function to create and initialize a new TIFF entry for a thumbnail (size)
Definition: tiffcomposite_int.hpp:1641
const TiffType ttTiffIfd
TIFF IFD type.
Definition: tiffcomposite_int.hpp:61
const TiffType ttSignedShort
Exif SSHORT type.
Definition: tiffcomposite_int.hpp:56
void(TiffDecoder::* DecoderFct)(const TiffEntryBase *)
Function pointer type for a TiffDecoder member function to decode a TIFF component.
Definition: tifffwd_int.hpp:76
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
bool cmpGroupLt(TiffComponent const *lhs, TiffComponent const *rhs)
Compare two TIFF component pointers by group. Return true if the group of component lhs is less than ...
Definition: tiffcomposite_int.cpp:1914
uint16_t TiffType
TIFF value type.
Definition: tiffcomposite_int.hpp:47
const TiffType ttAsciiString
Exif ASCII type.
Definition: tiffcomposite_int.hpp:50
const TiffType ttUnsignedShort
Exif SHORT type.
Definition: tiffcomposite_int.hpp:51
const TiffType ttSignedLong
Exif SLONG type.
Definition: tiffcomposite_int.hpp:57
TiffComponent::AutoPtr newTiffEntry(uint16_t tag, IfdId group)
Function to create and initialize a new TIFF entry.
Definition: tiffcomposite_int.cpp:1921
TiffComponent::AutoPtr newTiffMnEntry(uint16_t tag, IfdId group)
Function to create and initialize a new TIFF makernote entry.
Definition: tiffcomposite_int.cpp:1926
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
TiffComponent::AutoPtr newTiffSubIfd(uint16_t tag, IfdId group)
Function to create and initialize a new TIFF sub-directory.
Definition: tiffcomposite_int.hpp:1601
std::stack< TiffPathItem > TiffPath
Stack to hold a path from the TIFF root element to a TIFF entry.
Definition: tifffwd_int.hpp:104
TiffComponent::AutoPtr newTiffBinaryArray1(uint16_t tag, IfdId group)
Function to create and initialize a new simple binary array entry.
Definition: tiffcomposite_int.hpp:1617
IfdId
Type to specify the IFD to which a metadata belongs.
Definition: tags_int.hpp:46
const TiffType ttUnsignedByte
Exif BYTE type.
Definition: tiffcomposite_int.hpp:49
TiffComponent::AutoPtr newTiffBinaryArray0(uint16_t tag, IfdId group)
Function to create and initialize a new binary array entry.
Definition: tiffcomposite_int.hpp:1608
TypeId toTypeId(TiffType tiffType, uint16_t tag, IfdId group)
Convert the tiffType of a tag and group to an Exiv2 typeId.
Definition: tiffcomposite_int.cpp:1874
TiffType toTiffType(TypeId typeId)
Convert the Exiv2 typeId to a TIFF value type.
Definition: tiffcomposite_int.cpp:1893
const TiffType ttUndefined
Exif UNDEFINED type.
Definition: tiffcomposite_int.hpp:55
bool cmpTagLt(TiffComponent const *lhs, TiffComponent const *rhs)
Compare two TIFF component pointers by tag. Return true if the tag of component lhs is less than that...
Definition: tiffcomposite_int.cpp:1906
TiffComponent::AutoPtr newTiffImageData(uint16_t tag, IfdId group)
Function to create and initialize a new TIFF entry for image data.
Definition: tiffcomposite_int.hpp:1649
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::AutoPtr newTiffDirectory(uint16_t tag, IfdId)
Function to create and initialize a new TIFF directory.
Definition: tiffcomposite_int.hpp:1594
const TiffType ttSignedRational
Exif SRATIONAL type.
Definition: tiffcomposite_int.hpp:58
Provides classes and functions to encode and decode Exif and Iptc data. The libexiv2 API consists of ...
Definition: asfvideo.hpp:36
TypeId
Exiv2 value type identifiers.
Definition: types.hpp:119
ByteOrder
Type to express the byte order (little or big endian)
Definition: types.hpp:102
Additional configuration for a binary array.
Definition: tiffcomposite_int.hpp:1325
bool hasSize_
If true, first tag is the size element.
Definition: tiffcomposite_int.hpp:1336
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
ArrayDef elDefaultDef_
Default element.
Definition: tiffcomposite_int.hpp:1339
bool concat_
If true, concatenate gaps between defined tags to single tags.
Definition: tiffcomposite_int.hpp:1338
CryptFct cryptFct_
Crypt function, 0 if not used.
Definition: tiffcomposite_int.hpp:1335
TiffType elTiffType_
Type for the array entry and the size element, if any.
Definition: tiffcomposite_int.hpp:1334
ByteOrder byteOrder_
Byte order, invalidByteOrder to inherit.
Definition: tiffcomposite_int.hpp:1333
IfdId group_
Group for the elements.
Definition: tiffcomposite_int.hpp:1332
bool hasFillers_
If true, write all defined tags.
Definition: tiffcomposite_int.hpp:1337
Defines one tag in a binary array.
Definition: tiffcomposite_int.hpp:1313
TiffType tiffType_
TIFF type of the element.
Definition: tiffcomposite_int.hpp:1320
bool operator==(uint32_t idx) const
Comparison with idx.
Definition: tiffcomposite_int.hpp:1315
uint32_t count_
Number of components.
Definition: tiffcomposite_int.hpp:1321
uint32_t size(uint16_t tag, IfdId group) const
Get the size in bytes of a tag.
Definition: tiffcomposite_int.cpp:560
uint32_t idx_
Index in bytes from the start.
Definition: tiffcomposite_int.hpp:1319
Combination of array configuration and definition for arrays.
Definition: tiffcomposite_int.hpp:1343
const ArrayDef * def_
Binary array definition array.
Definition: tiffcomposite_int.hpp:1345
const ArrayCfg cfg_
Binary array configuration.
Definition: tiffcomposite_int.hpp:1344
const int defSize_
Size of the array definition array.
Definition: tiffcomposite_int.hpp:1346
Search key for TIFF mapping structures.
Definition: tiffcomposite_int.hpp:397
Key(const std::string &m, uint32_t e, IfdId g)
Constructor.
Definition: tiffcomposite_int.hpp:399
std::string m_
Camera make.
Definition: tiffcomposite_int.hpp:400
uint32_t e_
Extended tag.
Definition: tiffcomposite_int.hpp:401
IfdId g_
Group
Definition: tiffcomposite_int.hpp:402
TIFF mapping table for functions to decode special cases.
Definition: tiffcomposite_int.hpp:373
IfdId group_
Group that contains the tag.
Definition: tiffcomposite_int.hpp:390
const char * make_
Camera make for which these mapping functions apply.
Definition: tiffcomposite_int.hpp:388
uint16_t tag() const
Return the tag corresponding to the extended tag.
Definition: tiffcomposite_int.hpp:385
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
uint32_t extendedTag_
Tag (32 bit so that it can contain special tags)
Definition: tiffcomposite_int.hpp:389
DecoderFct decoderFct_
Decoder function for matching tags.
Definition: tiffcomposite_int.hpp:391
EncoderFct encoderFct_
Encoder function for matching tags.
Definition: tiffcomposite_int.hpp:392