Exiv2
Loading...
Searching...
No Matches
tiffcomposite_int.hpp
Go to the documentation of this file.
1// ***************************************************************** -*- C++ -*-
2/*
3 * Copyright (C) 2004-2018 Exiv2 authors
4 * This program is part of the Exiv2 distribution.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
19 */
27#ifndef TIFFCOMPOSITE_INT_HPP_
28#define TIFFCOMPOSITE_INT_HPP_
29
30// *****************************************************************************
31// included header files
32#include "value.hpp"
33#include "tifffwd_int.hpp"
34#include "types.hpp"
35
36// + standard includes
37#include <iosfwd>
38#include <vector>
39#include <string>
40#include <cassert>
41
42// *****************************************************************************
43// namespace extensions
44namespace Exiv2 {
45
46 class BasicIo;
47
48 namespace Internal {
49
50// *****************************************************************************
51// class definitions
52
54 typedef uint16_t TiffType;
55
68 const TiffType ttTiffIfd =13;
69
71 TypeId toTypeId(TiffType tiffType, uint16_t tag, IfdId group);
74
78 namespace Tag {
79 const uint32_t none = 0x10000;
80 const uint32_t root = 0x20000;
81 const uint32_t next = 0x30000;
82 const uint32_t all = 0x40000;
83 const uint32_t pana = 0x80000;
84 }
85
91 public:
93
94
96 : extendedTag_(extendedTag), group_(group) {}
98
100
101
102 uint16_t tag() const { return static_cast<uint16_t>(extendedTag_ & 0xffff); }
104 uint32_t extendedTag() const { return extendedTag_; }
106 IfdId group() const { return group_; }
108
109 private:
110 // DATA
111 uint32_t extendedTag_;
112 IfdId group_;
113 }; // class TiffPathItem
114
124 class IoWrapper {
125 public:
127
128
134 IoWrapper(BasicIo& io, const byte* pHeader, long size, OffsetWriter* pow);
136
138
139
145 long write(const byte* pData, long wcount);
152 int putb(byte data);
154 void setTarget(int id, uint32_t target);
156
157 private:
158 // DATA
159 BasicIo& io_;
160 const byte* pHeader_;
161 long size_;
162 bool wroteHeader_;
163 OffsetWriter* pow_;
164 }; // class IoWrapper
165
175 public:
177 typedef std::auto_ptr<TiffComponent> AutoPtr;
179 typedef std::vector<TiffComponent*> Components;
180
182
183
184 TiffComponent(uint16_t tag, IfdId group);
186 virtual ~TiffComponent();
188
190
191
203 TiffComponent* addPath(uint16_t tag,
204 TiffPath& tiffPath,
205 TiffComponent* const pRoot,
206 AutoPtr object =AutoPtr(0));
212 TiffComponent* addChild(AutoPtr tiffComponent);
219 TiffComponent* addNext(AutoPtr tiffComponent);
226 void accept(TiffVisitor& visitor);
232 void setStart(const byte* pStart) { pStart_ = const_cast<byte*>(pStart); }
247 uint32_t write(IoWrapper& ioWrapper,
248 ByteOrder byteOrder,
249 int32_t offset,
250 uint32_t valueIdx,
251 uint32_t dataIdx,
252 uint32_t& imageIdx);
254
256
257
258 uint16_t tag() const { return tag_; }
260 IfdId group() const { return group_; }
262 byte* start() const { return pStart_; }
268 AutoPtr clone() const;
274 uint32_t writeData(IoWrapper& ioWrapper,
275 ByteOrder byteOrder,
276 int32_t offset,
277 uint32_t dataIdx,
278 uint32_t& imageIdx) const;
284 uint32_t writeImage(IoWrapper& ioWrapper,
285 ByteOrder byteOrder) const;
290 uint32_t size() const;
294 uint32_t count() const;
301 uint32_t sizeData() const;
308 uint32_t sizeImage() const;
312 // Todo: This is only implemented in TiffEntryBase. It is needed here so that
313 // we can sort components by tag and idx. Something is not quite right.
314 virtual int idx() const;
316
317 protected:
319
320
321 virtual TiffComponent* doAddPath(uint16_t tag,
322 TiffPath& tiffPath,
323 TiffComponent* const pRoot,
326 virtual TiffComponent* doAddChild(AutoPtr tiffComponent);
328 virtual TiffComponent* doAddNext(AutoPtr tiffComponent);
330 virtual void doAccept(TiffVisitor& visitor) =0;
332 virtual uint32_t doWrite(IoWrapper& ioWrapper,
333 ByteOrder byteOrder,
334 int32_t offset,
335 uint32_t valueIdx,
336 uint32_t dataIdx,
337 uint32_t& imageIdx) =0;
339
341
342
343 virtual TiffComponent* doClone() const =0;
345 virtual uint32_t doWriteData(IoWrapper& ioWrapper,
346 ByteOrder byteOrder,
347 int32_t offset,
348 uint32_t dataIdx,
349 uint32_t& imageIdx) const =0;
351 virtual uint32_t doWriteImage(IoWrapper& ioWrapper,
352 ByteOrder byteOrder) const =0;
354 virtual uint32_t doSize() const =0;
356 virtual uint32_t doCount() const =0;
358 virtual uint32_t doSizeData() const =0;
360 virtual uint32_t doSizeImage() const =0;
362
363 private:
364 // DATA
365 uint16_t tag_;
366 IfdId group_;
371 byte* pStart_;
372
373 }; // class TiffComponent
374
377 struct Key;
386 bool operator==(const Key& key) const;
388 uint16_t tag() const { return static_cast<uint16_t>(extendedTag_ & 0xffff); }
389
390 // DATA
391 const char* make_;
392 uint32_t extendedTag_;
396
397 }; // struct TiffMappingInfo
398
402 Key(const std::string& m, uint32_t e, IfdId g) : m_(m), e_(e), g_(g) {}
403 std::string m_;
404 uint32_t e_;
406 };
407
415 friend class TiffReader;
416 friend class TiffEncoder;
417 friend int selectNikonLd(TiffBinaryArray* const, TiffComponent* const);
418 public:
420
421
424 virtual ~TiffEntryBase();
426
428
429
436 void encode(TiffEncoder& encoder, const Exifdatum* datum);
438 void setOffset(int32_t offset) { offset_ = offset; }
440 void setData(byte* pData, int32_t size);
442 void setData(DataBuf buf);
448 void updateValue(Value::AutoPtr value, ByteOrder byteOrder);
454 void setValue(Value::AutoPtr value);
456
458
459
460 TiffType tiffType() const { return tiffType_; }
465 int32_t offset() const { return offset_; }
469 virtual int idx() const;
474 const byte* pData() const { return pData_; }
476 const Value* pValue() const { return pValue_; }
478
479 protected:
481
482
483 TiffEntryBase(const TiffEntryBase& rhs);
485
487
488
489 virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum) =0;
491 void setCount(uint32_t count) { count_ = count; }
493 void setIdx(int idx) { idx_ = idx; }
499 virtual uint32_t doWrite(IoWrapper& ioWrapper,
500 ByteOrder byteOrder,
501 int32_t offset,
502 uint32_t valueIdx,
503 uint32_t dataIdx,
504 uint32_t& imageIdx);
506
508
509
510 virtual uint32_t doCount() const;
515 virtual uint32_t doWriteData(IoWrapper& ioWrapper,
516 ByteOrder byteOrder,
517 int32_t offset,
518 uint32_t dataIdx,
519 uint32_t& imageIdx) const;
524 virtual uint32_t doWriteImage(IoWrapper& ioWrapper,
525 ByteOrder byteOrder) const;
527 virtual uint32_t doSize() const;
529 virtual uint32_t doSizeData() const;
531 virtual uint32_t doSizeImage() const;
533
535 static uint32_t writeOffset(byte* buf,
536 int32_t offset,
538 ByteOrder byteOrder);
539
540 private:
542
543
544 TiffEntryBase& operator=(const TiffEntryBase& rhs);
546
547 // DATA
548 TiffType tiffType_;
549 uint32_t count_;
550 int32_t offset_;
555 uint32_t size_;
556 byte* pData_;
557 bool isMalloced_;
558 int idx_;
559 Value* pValue_;
560
561 }; // class TiffEntryBase
562
566 class TiffEntry : public TiffEntryBase {
567 public:
569
570
573 virtual ~TiffEntry();
575
576 protected:
578
579 virtual void doAccept(TiffVisitor& visitor);
580 virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum);
582
584
585 virtual TiffEntry* doClone() const;
587
588 }; // class TiffEntry
589
599 public:
601
602
605 szTag_(szTag), szGroup_(szGroup) {}
607 virtual ~TiffDataEntryBase();
609
611
612
621 virtual void setStrips(const Value* pSize,
622 const byte* pData,
623 uint32_t sizeData,
624 uint32_t baseOffset) =0;
626
628
629
630 uint16_t szTag() const { return szTag_; }
632 IfdId szGroup() const { return szGroup_; }
634
635 private:
636 // DATA
637 const uint16_t szTag_;
638 const IfdId szGroup_;
639
640 }; // class TiffDataEntryBase
641
654 friend class TiffEncoder;
655 public:
657
658
661 pDataArea_(0), sizeDataArea_(0) {}
663 virtual ~TiffDataEntry();
665
667
668 virtual void setStrips(const Value* pSize,
669 const byte* pData,
670 uint32_t sizeData,
671 uint32_t baseOffset);
673
674 protected:
676
677 virtual void doAccept(TiffVisitor& visitor);
678 virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum);
690 virtual uint32_t doWrite(IoWrapper& ioWrapper,
691 ByteOrder byteOrder,
692 int32_t offset,
693 uint32_t valueIdx,
694 uint32_t dataIdx,
695 uint32_t& imageIdx);
697
699
700 virtual TiffDataEntry* doClone() const;
705 virtual uint32_t doWriteData(IoWrapper& ioWrapper,
706 ByteOrder byteOrder,
707 int32_t offset,
708 uint32_t dataIdx,
709 uint32_t& imageIdx) const;
710 // Using doWriteImage from base class
711 // Using doSize() from base class
713 virtual uint32_t doSizeData() const;
714 // Using doSizeImage from base class
716
717 private:
718 // DATA
719 byte* pDataArea_;
720 uint32_t sizeDataArea_;
721
722 }; // class TiffDataEntry
723
737 friend class TiffEncoder;
738 public:
740
741
745 virtual ~TiffImageEntry();
747
749
750 virtual void setStrips(const Value* pSize,
751 const byte* pData,
752 uint32_t sizeData,
753 uint32_t baseOffset);
755
756 protected:
758
759 virtual void doAccept(TiffVisitor& visitor);
760 virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum);
766 virtual uint32_t doWrite(IoWrapper& ioWrapper,
767 ByteOrder byteOrder,
768 int32_t offset,
769 uint32_t valueIdx,
770 uint32_t dataIdx,
771 uint32_t& imageIdx);
773
775
776 virtual TiffImageEntry* doClone() const;
785 virtual uint32_t doWriteData(IoWrapper& ioWrapper,
786 ByteOrder byteOrder,
787 int32_t offset,
788 uint32_t dataIdx,
789 uint32_t& imageIdx) const;
794 virtual uint32_t doWriteImage(IoWrapper& ioWrapper,
795 ByteOrder byteOrder) const;
797 virtual uint32_t doSize() const;
799 virtual uint32_t doSizeData() const;
801 virtual uint32_t doSizeImage() const;
803
804 private:
806 typedef std::vector<std::pair<const byte*, uint32_t> > Strips;
807
808 // DATA
809 Strips strips_;
810
811 }; // class TiffImageEntry
812
820 public:
822
823
825 : TiffEntryBase(tag, group), dtTag_(dtTag), dtGroup_(dtGroup) {}
827 virtual ~TiffSizeEntry();
829
831
832
833 uint16_t dtTag() const { return dtTag_; }
835 IfdId dtGroup() const { return dtGroup_; }
837
838 protected:
840
841 virtual void doAccept(TiffVisitor& visitor);
842 virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum);
844
846
847 virtual TiffSizeEntry* doClone() const;
849
850 private:
851 // DATA
852 const uint16_t dtTag_;
853 const IfdId dtGroup_;
854
855 }; // class TiffSizeEntry
856
862 friend class TiffEncoder;
863 public:
865
866
867 TiffDirectory(uint16_t tag, IfdId group, bool hasNext =true)
868 : TiffComponent(tag, group), hasNext_(hasNext), pNext_(0) {}
870 virtual ~TiffDirectory();
872
874
875
876 bool hasNext() const { return hasNext_; }
878
879 protected:
881
882
883 TiffDirectory(const TiffDirectory& rhs);
885
887
888 virtual TiffComponent* doAddPath(uint16_t tag,
889 TiffPath& tiffPath,
890 TiffComponent* const pRoot,
892 virtual TiffComponent* doAddChild(TiffComponent::AutoPtr tiffComponent);
893 virtual TiffComponent* doAddNext(TiffComponent::AutoPtr tiffComponent);
894 virtual void doAccept(TiffVisitor& visitor);
900 virtual uint32_t doWrite(IoWrapper& ioWrapper,
901 ByteOrder byteOrder,
902 int32_t offset,
903 uint32_t valueIdx,
904 uint32_t dataIdx,
905 uint32_t& imageIdx);
907
909
910 virtual TiffDirectory* doClone() const;
915 virtual uint32_t doWriteData(IoWrapper& ioWrapper,
916 ByteOrder byteOrder,
917 int32_t offset,
918 uint32_t dataIdx,
919 uint32_t& imageIdx) const;
926 virtual uint32_t doWriteImage(IoWrapper& ioWrapper,
927 ByteOrder byteOrder) const;
932 virtual uint32_t doSize() const;
937 virtual uint32_t doCount() const;
942 virtual uint32_t doSizeData() const;
947 virtual uint32_t doSizeImage() const;
949
950 private:
952
953
954 TiffDirectory& operator=(const TiffDirectory& rhs);
956
958
959
960 uint32_t writeDirEntry(IoWrapper& ioWrapper,
961 ByteOrder byteOrder,
962 int32_t offset,
963 TiffComponent* pTiffComponent,
964 uint32_t valueIdx,
965 uint32_t dataIdx,
966 uint32_t& imageIdx) const;
968
969 private:
970 // DATA
971 Components components_;
972 const bool hasNext_;
973 TiffComponent* pNext_;
974
975 }; // class TiffDirectory
976
984 class TiffSubIfd : public TiffEntryBase {
985 friend class TiffReader;
986 public:
988
989
990 TiffSubIfd(uint16_t tag, IfdId group, IfdId newGroup);
992 virtual ~TiffSubIfd();
994
995 protected:
997
998
999 TiffSubIfd(const TiffSubIfd& rhs);
1001
1003
1004 virtual TiffComponent* doAddPath(uint16_t tag,
1005 TiffPath& tiffPath,
1006 TiffComponent* const pRoot,
1007 TiffComponent::AutoPtr object);
1008 virtual TiffComponent* doAddChild(TiffComponent::AutoPtr tiffComponent);
1009 virtual void doAccept(TiffVisitor& visitor);
1010 virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum);
1016 virtual uint32_t doWrite(IoWrapper& ioWrapper,
1017 ByteOrder byteOrder,
1018 int32_t offset,
1019 uint32_t valueIdx,
1020 uint32_t dataIdx,
1021 uint32_t& imageIdx);
1023
1025
1026 virtual TiffSubIfd* doClone() const;
1031 virtual uint32_t doWriteData(IoWrapper& ioWrapper,
1032 ByteOrder byteOrder,
1033 int32_t offset,
1034 uint32_t dataIdx,
1035 uint32_t& imageIdx) const;
1040 virtual uint32_t doWriteImage(IoWrapper& ioWrapper,
1041 ByteOrder byteOrder) const;
1043 uint32_t doSize() const;
1045 virtual uint32_t doSizeData() const;
1047 virtual uint32_t doSizeImage() const;
1049
1050 private:
1052
1053
1054 TiffSubIfd& operator=(const TiffSubIfd& rhs);
1056
1058 typedef std::vector<TiffDirectory*> Ifds;
1059
1060 // DATA
1061 IfdId newGroup_;
1062 Ifds ifds_;
1063
1064 }; // class TiffSubIfd
1065
1074 friend class TiffReader;
1075 friend class TiffDecoder;
1076 friend class TiffEncoder;
1077 public:
1079
1080
1081 TiffMnEntry(uint16_t tag, IfdId group, IfdId mnGroup);
1083 virtual ~TiffMnEntry();
1085
1086 protected:
1088
1089 virtual TiffComponent* doAddPath(uint16_t tag,
1090 TiffPath& tiffPath,
1091 TiffComponent* const pRoot,
1092 TiffComponent::AutoPtr object);
1093 virtual TiffComponent* doAddChild(TiffComponent::AutoPtr tiffComponent);
1094 virtual TiffComponent* doAddNext(TiffComponent::AutoPtr tiffComponent);
1095 virtual void doAccept(TiffVisitor& visitor);
1096 virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum);
1101 virtual uint32_t doWrite(IoWrapper& ioWrapper,
1102 ByteOrder byteOrder,
1103 int32_t offset,
1104 uint32_t valueIdx,
1105 uint32_t dataIdx,
1106 uint32_t& imageIdx);
1108
1110
1111 virtual TiffMnEntry* doClone() const;
1113 virtual uint32_t doCount() const;
1114 // Using doWriteData from base class
1115 // Using doWriteImage from base class
1120 virtual uint32_t doSize() const;
1121 // Using doSizeData from base class
1122 // Using doSizeImage from base class
1124
1125 private:
1127
1128
1129 TiffMnEntry(const TiffMnEntry& rhs);
1131 TiffMnEntry& operator=(const TiffMnEntry& rhs);
1133
1134 // DATA
1135 IfdId mnGroup_;
1136 TiffComponent* mn_;
1137
1138 }; // class TiffMnEntry
1139
1150 friend class TiffReader;
1151 public:
1153
1154
1155 TiffIfdMakernote(uint16_t tag,
1156 IfdId group,
1157 IfdId mnGroup,
1158 MnHeader* pHeader,
1159 bool hasNext =true);
1161 virtual ~TiffIfdMakernote();
1163
1165
1166
1171 bool readHeader(const byte* pData, uint32_t size, ByteOrder byteOrder);
1179 void setImageByteOrder(ByteOrder byteOrder) { imageByteOrder_ = byteOrder; }
1181
1183
1184
1185 uint32_t sizeHeader() const;
1187 uint32_t writeHeader(IoWrapper& ioWrapper, ByteOrder byteOrder) const;
1192 uint32_t mnOffset() const;
1198 uint32_t ifdOffset() const;
1205 ByteOrder byteOrder() const;
1209 ByteOrder imageByteOrder() const { return imageByteOrder_; }
1215 uint32_t baseOffset() const;
1217
1218 protected:
1220
1221 virtual TiffComponent* doAddPath(uint16_t tag,
1222 TiffPath& tiffPath,
1223 TiffComponent* const pRoot,
1224 TiffComponent::AutoPtr object);
1225 virtual TiffComponent* doAddChild(TiffComponent::AutoPtr tiffComponent);
1226 virtual TiffComponent* doAddNext(TiffComponent::AutoPtr tiffComponent);
1227 virtual void doAccept(TiffVisitor& visitor);
1233 virtual uint32_t doWrite(IoWrapper& ioWrapper,
1235 int32_t offset,
1236 uint32_t valueIdx,
1237 uint32_t dataIdx,
1238 uint32_t& imageIdx);
1240
1242
1243 virtual TiffIfdMakernote* doClone() const;
1248 virtual uint32_t doWriteData(IoWrapper& ioWrapper,
1250 int32_t offset,
1251 uint32_t dataIdx,
1252 uint32_t& imageIdx) const;
1257 virtual uint32_t doWriteImage(IoWrapper& ioWrapper,
1258 ByteOrder byteOrder) const;
1263 virtual uint32_t doSize() const;
1269 virtual uint32_t doCount() const;
1274 virtual uint32_t doSizeData() const;
1279 virtual uint32_t doSizeImage() const;
1281
1282 private:
1294 TiffIfdMakernote& operator=(const TiffIfdMakernote& rhs);
1296
1297 // DATA
1298 MnHeader* pHeader_;
1299 TiffDirectory ifd_;
1300 uint32_t mnOffset_;
1301 ByteOrder imageByteOrder_;
1302
1303 }; // class TiffIfdMakernote
1304
1309 typedef int (*CfgSelFct)(uint16_t, const byte*, uint32_t, TiffComponent* const);
1310
1312 typedef DataBuf (*CryptFct)(uint16_t, const byte*, uint32_t, TiffComponent* const);
1313
1315 struct ArrayDef {
1317 bool operator==(uint32_t idx) const { return idx_ == idx; }
1319 uint32_t size(uint16_t tag, IfdId group) const;
1320 // DATA
1321 uint32_t idx_;
1323 uint32_t count_;
1324 };
1325
1343
1345 struct ArraySet {
1348 const int defSize_;
1349 };
1350
1357 public:
1359
1360
1361 TiffBinaryArray(uint16_t tag,
1362 IfdId group,
1363 const ArrayCfg* arrayCfg,
1364 const ArrayDef* arrayDef,
1365 int defSize);
1367 TiffBinaryArray(uint16_t tag,
1368 IfdId group,
1369 const ArraySet* arraySet,
1370 int setSize,
1371 CfgSelFct cfgSelFct);
1373 virtual ~TiffBinaryArray();
1375
1377
1378
1379 uint32_t addElement(uint32_t idx, const ArrayDef& def);
1391 bool initialize(IfdId group);
1402 bool initialize(TiffComponent* const pRoot);
1404 void iniOrigDataBuf();
1406 bool updOrigDataBuf(const byte* pData, uint32_t size);
1408 void setDecoded(bool decoded) { decoded_ = decoded; }
1410
1412
1413
1414 const ArrayCfg* cfg() const { return arrayCfg_; }
1416 const ArrayDef* def() const { return arrayDef_; }
1418 int defSize() const { return defSize_; }
1420 bool decoded() const { return decoded_; }
1422
1423 protected:
1425
1426
1427 TiffBinaryArray(const TiffBinaryArray& rhs);
1429
1431
1432
1435 virtual TiffComponent* doAddPath(uint16_t tag,
1436 TiffPath& tiffPath,
1437 TiffComponent* const pRoot,
1438 TiffComponent::AutoPtr object);
1442 virtual TiffComponent* doAddChild(TiffComponent::AutoPtr tiffComponent);
1443 virtual void doAccept(TiffVisitor& visitor);
1444 virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum);
1448 virtual uint32_t doWrite(IoWrapper& ioWrapper,
1449 ByteOrder byteOrder,
1450 int32_t offset,
1451 uint32_t valueIdx,
1452 uint32_t dataIdx,
1453 uint32_t& imageIdx);
1455
1457
1458 virtual TiffBinaryArray* doClone() const;
1460 virtual uint32_t doCount() const;
1461 // Using doWriteData from base class
1462 // Using doWriteImage from base class
1466 virtual uint32_t doSize() const;
1467 // Using doSizeData from base class
1468 // Using doSizeImage from base class
1470
1471 private:
1473
1474
1475 TiffBinaryArray& operator=(const TiffBinaryArray& rhs);
1477
1478 // DATA
1479 const CfgSelFct cfgSelFct_;
1480 const ArraySet* arraySet_;
1481 const ArrayCfg* arrayCfg_;
1482 const ArrayDef* arrayDef_;
1483 int defSize_;
1484 int setSize_;
1485 Components elements_;
1486 byte* origData_;
1487 uint32_t origSize_;
1488 TiffComponent* pRoot_;
1489 bool decoded_;
1490 }; // class TiffBinaryArray
1491
1496 public:
1498
1499
1500 TiffBinaryElement(uint16_t tag, IfdId group);
1502 virtual ~TiffBinaryElement();
1504
1506
1507
1510 void setElDef(const ArrayDef& def) { elDef_ = def; }
1514 void setElByteOrder(ByteOrder byteOrder) { elByteOrder_ = byteOrder; }
1516
1518
1519
1522 const ArrayDef* elDef() const { return &elDef_; }
1526 ByteOrder elByteOrder() const { return elByteOrder_; }
1528
1529 protected:
1531
1532 virtual void doAccept(TiffVisitor& visitor);
1533 virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum);
1537 virtual uint32_t doWrite(IoWrapper& ioWrapper,
1538 ByteOrder byteOrder,
1539 int32_t offset,
1540 uint32_t valueIdx,
1541 uint32_t dataIdx,
1542 uint32_t& imageIdx);
1544
1546
1547 virtual TiffBinaryElement* doClone() const;
1551 virtual uint32_t doCount() const;
1552 // Using doWriteData from base class
1553 // Using doWriteImage from base class
1558 virtual uint32_t doSize() const;
1559 // Using doSizeData from base class
1560 // Using doSizeImage from base class
1562
1563 private:
1564 // DATA
1565 ArrayDef elDef_;
1566 ByteOrder elByteOrder_;
1567
1568 }; // class TiffBinaryElement
1569
1570// *****************************************************************************
1571// template, inline and free functions
1572
1577 bool cmpTagLt(TiffComponent const* lhs, TiffComponent const* rhs);
1578
1583 bool cmpGroupLt(TiffComponent const* lhs, TiffComponent const* rhs);
1584
1586 TiffComponent::AutoPtr newTiffEntry(uint16_t tag, IfdId group);
1587
1589 TiffComponent::AutoPtr newTiffMnEntry(uint16_t tag, IfdId group);
1590
1593
1595 template<IfdId newGroup>
1597 {
1598 return TiffComponent::AutoPtr(new TiffDirectory(tag, newGroup));
1599 }
1600
1602 template<IfdId newGroup>
1604 {
1605 return TiffComponent::AutoPtr(new TiffSubIfd(tag, group, newGroup));
1606 }
1607
1609 template<const ArrayCfg* arrayCfg, int N, const ArrayDef (&arrayDef)[N]>
1611 {
1612 // *& acrobatics is a workaround for a MSVC 7.1 bug
1614 new TiffBinaryArray(tag, group, arrayCfg, *(&arrayDef), N));
1615 }
1616
1618 template<const ArrayCfg* arrayCfg>
1620 {
1622 new TiffBinaryArray(tag, group, arrayCfg, 0, 0));
1623 }
1624
1626 template<const ArraySet* arraySet, int N, CfgSelFct cfgSelFct>
1628 {
1630 new TiffBinaryArray(tag, group, arraySet, N, cfgSelFct));
1631 }
1632
1634 template<uint16_t szTag, IfdId szGroup>
1636 {
1638 new TiffDataEntry(tag, group, szTag, szGroup));
1639 }
1640
1642 template<uint16_t dtTag, IfdId dtGroup>
1644 {
1646 new TiffSizeEntry(tag, group, dtTag, dtGroup));
1647 }
1648
1650 template<uint16_t szTag, IfdId szGroup>
1652 {
1654 new TiffImageEntry(tag, group, szTag, szGroup));
1655 }
1656
1658 template<uint16_t dtTag, IfdId dtGroup>
1660 {
1661 // Todo: Same as newTiffThumbSize - consolidate (rename)?
1663 new TiffSizeEntry(tag, group, dtTag, dtGroup));
1664 }
1665
1666}} // namespace Internal, Exiv2
1667
1668#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:204
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:124
int putb(byte data)
Wraps the corresponding BasicIo::putb() method.
Definition tiffcomposite_int.cpp:78
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:87
long write(const byte *pData, long wcount)
Wraps the corresponding BasicIo::write() method.
Definition tiffcomposite_int.cpp:69
Makernote header interface. This class is used with TIFF makernotes.
Definition makernote_int.hpp:136
Class to insert pointers or offsets to computed addresses at specific locations in an image....
Definition tiffimage_int.hpp:426
Composite to model an array of different tags. The tag types as well as other aspects of the array ar...
Definition tiffcomposite_int.hpp:1356
virtual uint32_t doSize() const
Implements size(). Todo: Document it!
Definition tiffcomposite_int.cpp:1710
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:1388
virtual TiffComponent * doAddChild(TiffComponent::AutoPtr tiffComponent)
Implements addChild(). Todo: Document it!
Definition tiffcomposite_int.cpp:845
virtual TiffComponent * doAddPath(uint16_t tag, TiffPath &tiffPath, TiffComponent *const pRoot, TiffComponent::AutoPtr object)
Implements addPath(). Todo: Document it!
Definition tiffcomposite_int.cpp:764
const ArrayCfg * cfg() const
Return a pointer to the configuration.
Definition tiffcomposite_int.hpp:1414
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:570
void setDecoded(bool decoded)
Set a flag to indicate if the array was decoded.
Definition tiffcomposite_int.hpp:1408
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition tiffcomposite_int.cpp:952
bool decoded() const
Return the flag which indicates if the array was decoded.
Definition tiffcomposite_int.hpp:1420
virtual TiffBinaryArray * doClone() const
Internal virtual copy constructor, implements clone().
Definition tiffcomposite_int.cpp:339
bool updOrigDataBuf(const byte *pData, uint32_t size)
Update the original data buffer and its size, return true if successful.
Definition tiffcomposite_int.cpp:604
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition tiffcomposite_int.cpp:977
void iniOrigDataBuf()
Initialize the original data buffer and its size from the base entry.
Definition tiffcomposite_int.cpp:598
const ArrayDef * def() const
Return a pointer to the definition.
Definition tiffcomposite_int.hpp:1416
int defSize() const
Return the number of elements in the definition.
Definition tiffcomposite_int.hpp:1418
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:614
virtual ~TiffBinaryArray()
Virtual destructor.
Definition tiffcomposite_int.cpp:236
virtual uint32_t doCount() const
Implements count(). Todo: Document it!
Definition tiffcomposite_int.cpp:1043
Element of a TiffBinaryArray.
Definition tiffcomposite_int.hpp:1495
virtual uint32_t doSize() const
Implements size(). Returns count * type-size, both taken from the element definition.
Definition tiffcomposite_int.cpp:1738
void setElDef(const ArrayDef &def)
Set the array definition for this element.
Definition tiffcomposite_int.hpp:1510
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition tiffcomposite_int.cpp:972
virtual ~TiffBinaryElement()
Virtual destructor.
Definition tiffcomposite_int.cpp:243
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition tiffcomposite_int.cpp:962
virtual TiffBinaryElement * doClone() const
Internal virtual copy constructor, implements clone().
Definition tiffcomposite_int.cpp:344
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
const ArrayDef * elDef() const
Return the array definition of this element.
Definition tiffcomposite_int.hpp:1522
void setElByteOrder(ByteOrder byteOrder)
Set the byte order of this element.
Definition tiffcomposite_int.hpp:1514
ByteOrder elByteOrder() const
Return the byte order of this element.
Definition tiffcomposite_int.hpp:1526
virtual uint32_t doCount() const
Implements count(). Returns the count from the element definition.
Definition tiffcomposite_int.cpp:1065
Interface class for components of a TIFF directory hierarchy (Composite pattern). Both TIFF directori...
Definition tiffcomposite_int.hpp:174
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:292
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
byte * start() const
Return a pointer to the start of the binary representation of the component.
Definition tiffcomposite_int.hpp:262
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:1070
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
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 doWriteImage(IoWrapper &ioWrapper, ByteOrder byteOrder) const =0
Implements writeImage().
uint16_t tag() const
Return the tag of this entry.
Definition tiffcomposite_int.hpp:258
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:631
uint32_t count() const
Return the number of components in this component.
Definition tiffcomposite_int.cpp:1012
virtual TiffComponent * doAddNext(AutoPtr tiffComponent)
Implements addNext(). The default implementation does nothing.
Definition tiffcomposite_int.cpp:858
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:232
virtual TiffComponent * doAddChild(AutoPtr tiffComponent)
Implements addChild(). The default implementation does nothing.
Definition tiffcomposite_int.cpp:811
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:349
TiffComponent * addNext(AutoPtr tiffComponent)
Add a "next" component to the component. Default is to do nothing.
Definition tiffcomposite_int.cpp:853
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:639
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
std::vector< TiffComponent * > Components
Container type to hold all metadata.
Definition tiffcomposite_int.hpp:179
virtual uint32_t doSizeImage() const =0
Implements sizeImage().
IfdId group() const
Return the group id of this component.
Definition tiffcomposite_int.hpp:260
TiffComponent * addChild(AutoPtr tiffComponent)
Add a child to the component. Default is to do nothing.
Definition tiffcomposite_int.cpp:806
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:179
std::auto_ptr< TiffComponent > AutoPtr
TiffComponent auto_ptr type.
Definition tiffcomposite_int.hpp:177
void accept(TiffVisitor &visitor)
Interface to accept visitors (Visitor pattern). Visitors can perform operations on all components of ...
Definition tiffcomposite_int.cpp:887
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:1744
Interface for a standard TIFF IFD entry consisting of a value which is a set of offsets to a data are...
Definition tiffcomposite_int.hpp:598
virtual ~TiffDataEntryBase()
Virtual destructor.
Definition tiffcomposite_int.cpp:210
IfdId szGroup() const
Return the group of the entry which has the size.
Definition tiffcomposite_int.hpp:632
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:603
uint16_t szTag() const
Return the group of the entry which has the size.
Definition tiffcomposite_int.hpp:630
A standard TIFF IFD entry consisting of a value which is an offset to a data area and the data area....
Definition tiffcomposite_int.hpp:653
virtual void setStrips(const Value *pSize, const byte *pData, uint32_t sizeData, uint32_t baseOffset)
Set the data areas ("strips").
Definition tiffcomposite_int.cpp:400
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:1283
virtual uint32_t doSizeData() const
Implements sizeData(). Return the size of the data area.
Definition tiffcomposite_int.cpp:1770
virtual TiffDataEntry * doClone() const
Internal virtual copy constructor, implements clone().
Definition tiffcomposite_int.cpp:302
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
TiffDataEntry(uint16_t tag, IfdId group, uint16_t szTag, IfdId szGroup)
Constructor.
Definition tiffcomposite_int.hpp:659
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition tiffcomposite_int.cpp:897
virtual ~TiffDataEntry()
Virtual destructor.
Definition tiffcomposite_int.cpp:214
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition tiffcomposite_int.cpp:982
TIFF composite visitor to decode metadata from the TIFF tree and add it to an Image,...
Definition tiffvisitor_int.hpp:284
This class models a TIFF directory (Ifd). It is a composite component of the TIFF tree.
Definition tiffcomposite_int.hpp:861
TiffDirectory(uint16_t tag, IfdId group, bool hasNext=true)
Default constructor.
Definition tiffcomposite_int.hpp:867
virtual uint32_t doSize() const
Implements size(). Return the size of the TIFF directory, values and additional data,...
Definition tiffcomposite_int.cpp:1655
virtual TiffComponent * doAddNext(TiffComponent::AutoPtr tiffComponent)
Implements addNext(). The default implementation does nothing.
Definition tiffcomposite_int.cpp:863
virtual TiffComponent * doAddChild(TiffComponent::AutoPtr tiffComponent)
Implements addChild(). The default implementation does nothing.
Definition tiffcomposite_int.cpp:816
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:1080
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition tiffcomposite_int.cpp:912
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:1017
virtual TiffDirectory * doClone() const
Internal virtual copy constructor, implements clone().
Definition tiffcomposite_int.cpp:317
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
bool hasNext() const
Return true if the directory has a next pointer.
Definition tiffcomposite_int.hpp:876
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 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
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:647
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 ~TiffDirectory()
Virtual destructor.
Definition tiffcomposite_int.cpp:183
TIFF composite visitor to encode metadata from an image to the TIFF tree. The metadata containers and...
Definition tiffvisitor_int.hpp:384
This abstract base class provides the common functionality of an IFD directory entry and defines an e...
Definition tiffcomposite_int.hpp:414
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:967
virtual uint32_t doSizeData() const
Implements sizeData(). Return 0.
Definition tiffcomposite_int.cpp:1755
void setIdx(int idx)
Set the unique id of the entry in the image.
Definition tiffcomposite_int.hpp:493
void setOffset(int32_t offset)
Set the offset.
Definition tiffcomposite_int.hpp:438
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:366
const byte * pData() const
Return a pointer to the binary representation of the value of this component.
Definition tiffcomposite_int.hpp:474
virtual ~TiffEntryBase()
Virtual destructor.
Definition tiffcomposite_int.cpp:198
TiffType tiffType() const
Return the TIFF type.
Definition tiffcomposite_int.hpp:460
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:1260
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 int idx() const
Return the unique id of the entry in the image.
Definition tiffcomposite_int.cpp:354
virtual uint32_t doSize() const
Implements size(). Return the size of a standard TIFF entry.
Definition tiffcomposite_int.cpp:1682
const Value * pValue() const
Return a const pointer to the converted value of this component.
Definition tiffcomposite_int.hpp:476
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)=0
Implements encode().
virtual uint32_t doCount() const
Implements count().
Definition tiffcomposite_int.cpp:1022
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:465
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:1245
virtual uint32_t doSizeImage() const
Implements sizeImage(). Return 0.
Definition tiffcomposite_int.cpp:1822
void setCount(uint32_t count)
Set the number of components in this entry.
Definition tiffcomposite_int.hpp:491
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
void setValue(Value::AutoPtr value)
Set tag value. Takes ownership of the pointer passed in.
Definition tiffcomposite_int.cpp:391
void updateValue(Value::AutoPtr value, ByteOrder byteOrder)
Update the value. Takes ownership of the pointer passed in.
Definition tiffcomposite_int.cpp:376
A standard TIFF IFD entry.
Definition tiffcomposite_int.hpp:566
virtual TiffEntry * doClone() const
Internal virtual copy constructor, implements clone().
Definition tiffcomposite_int.cpp:297
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition tiffcomposite_int.cpp:892
TiffEntry(uint16_t tag, IfdId group)
Constructor.
Definition tiffcomposite_int.hpp:571
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition tiffcomposite_int.cpp:987
virtual ~TiffEntry()
Virtual destructor.
Definition tiffcomposite_int.cpp:206
Tiff IFD Makernote. This is a concrete class suitable for all IFD makernotes.
Definition tiffcomposite_int.hpp:1149
void setByteOrder(ByteOrder byteOrder)
Set the byte order for the makernote.
Definition tiffcomposite_int.cpp:547
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
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:756
virtual TiffComponent * doAddChild(TiffComponent::AutoPtr tiffComponent)
Implements addChild(). The default implementation does nothing.
Definition tiffcomposite_int.cpp:840
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:539
uint32_t sizeHeader() const
Return the size of the header in bytes.
Definition tiffcomposite_int.cpp:552
ByteOrder imageByteOrder() const
Return the byte order used for the image.
Definition tiffcomposite_int.hpp:1209
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
virtual TiffComponent * doAddNext(TiffComponent::AutoPtr tiffComponent)
Implements addNext(). The default implementation does nothing.
Definition tiffcomposite_int.cpp:882
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition tiffcomposite_int.cpp:944
void setImageByteOrder(ByteOrder byteOrder)
Set the byte order used for the image.
Definition tiffcomposite_int.hpp:1179
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:533
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:1038
uint32_t ifdOffset() const
Return the offset to the start of the Makernote IFD from the start of the Makernote....
Definition tiffcomposite_int.cpp:513
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
ByteOrder byteOrder() const
Return the byte order for the makernote. Requires the image byte order to be set (setImageByteOrder()...
Definition tiffcomposite_int.cpp:519
virtual uint32_t doSizeImage() const
Implements sizeImage(). Return the total image data size of the makernote IFD.
Definition tiffcomposite_int.cpp:1817
virtual TiffIfdMakernote * doClone() const
Internal virtual copy constructor, implements clone().
Definition tiffcomposite_int.cpp:333
uint32_t mnOffset() const
Return the offset to the makernote from the start of the TIFF header.
Definition tiffcomposite_int.cpp:528
virtual ~TiffIfdMakernote()
Virtual destructor.
Definition tiffcomposite_int.cpp:231
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:1371
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:558
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
A standard TIFF IFD entry consisting of a value which is an array of offsets to image data areas....
Definition tiffcomposite_int.hpp:736
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:902
virtual uint32_t doSizeData() const
Implements sizeData(). Return the size of the image data area.
Definition tiffcomposite_int.cpp:1760
virtual TiffImageEntry * doClone() const
Internal virtual copy constructor, implements clone().
Definition tiffcomposite_int.cpp:307
virtual uint32_t doSizeImage() const
Implements sizeImage(). Return the size of the image data area.
Definition tiffcomposite_int.cpp:1827
virtual void setStrips(const Value *pSize, const byte *pData, uint32_t sizeData, uint32_t baseOffset)
Set the data areas ("strips").
Definition tiffcomposite_int.cpp:467
virtual uint32_t doSize() const
Implements size(). Return the size of the strip pointers.
Definition tiffcomposite_int.cpp:1687
TiffImageEntry(uint16_t tag, IfdId group, uint16_t szTag, IfdId szGroup)
Constructor.
Definition tiffcomposite_int.hpp:742
virtual ~TiffImageEntry()
Virtual destructor.
Definition tiffcomposite_int.cpp:218
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition tiffcomposite_int.cpp:992
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 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:1307
This class is the basis for Makernote support in TIFF. It contains a pointer to a concrete Makernote....
Definition tiffcomposite_int.hpp:1073
virtual TiffMnEntry * doClone() const
Internal virtual copy constructor, implements clone().
Definition tiffcomposite_int.cpp:327
virtual ~TiffMnEntry()
Virtual destructor.
Definition tiffcomposite_int.cpp:226
virtual TiffComponent * doAddChild(TiffComponent::AutoPtr tiffComponent)
Implements addChild(). The default implementation does nothing.
Definition tiffcomposite_int.cpp:831
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition tiffcomposite_int.cpp:933
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 TiffComponent * doAddPath(uint16_t tag, TiffPath &tiffPath, TiffComponent *const pRoot, TiffComponent::AutoPtr object)
Implements addPath(). The default implementation does nothing.
Definition tiffcomposite_int.cpp:734
virtual uint32_t doCount() const
Implements count(). Return number of components in the entry.
Definition tiffcomposite_int.cpp:1027
virtual TiffComponent * doAddNext(TiffComponent::AutoPtr tiffComponent)
Implements addNext(). The default implementation does nothing.
Definition tiffcomposite_int.cpp:873
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition tiffcomposite_int.cpp:997
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:1358
A tupel consisting of extended Tag and group used as an item in TIFF paths.
Definition tiffcomposite_int.hpp:90
IfdId group() const
Return the group.
Definition tiffcomposite_int.hpp:106
uint16_t tag() const
Return the tag corresponding to the extended tag.
Definition tiffcomposite_int.hpp:102
TiffPathItem(uint32_t extendedTag, IfdId group)
Constructor.
Definition tiffcomposite_int.hpp:95
uint32_t extendedTag() const
Return the extended tag (32 bit so that it can contain special tags)
Definition tiffcomposite_int.hpp:104
TIFF composite visitor to read the TIFF structure from a block of memory and build the composite from...
Definition tiffvisitor_int.hpp:630
A TIFF IFD entry containing the size of a data area of a related TiffDataEntry. This component is use...
Definition tiffcomposite_int.hpp:819
virtual TiffSizeEntry * doClone() const
Internal virtual copy constructor, implements clone().
Definition tiffcomposite_int.cpp:312
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition tiffcomposite_int.cpp:907
IfdId dtGroup() const
Return the group of the related entry which has the data area.
Definition tiffcomposite_int.hpp:835
virtual ~TiffSizeEntry()
Virtual destructor.
Definition tiffcomposite_int.cpp:222
TiffSizeEntry(uint16_t tag, IfdId group, uint16_t dtTag, IfdId dtGroup)
Constructor.
Definition tiffcomposite_int.hpp:824
virtual void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition tiffcomposite_int.cpp:1002
uint16_t dtTag() const
Return the group of the related entry which has the data area.
Definition tiffcomposite_int.hpp:833
This class models a TIFF sub-directory (sub-IFD). A sub-IFD is an entry with one or more values that ...
Definition tiffcomposite_int.hpp:984
virtual 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
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:699
virtual uint32_t doSizeImage() const
Implements sizeImage(). Return the sum of the image sizes of all sub-IFDs.
Definition tiffcomposite_int.cpp:1808
virtual uint32_t doSizeData() const
Implements sizeData(). Return the sum of the sizes of all sub-IFDs.
Definition tiffcomposite_int.cpp:1776
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:1339
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 void doEncode(TiffEncoder &encoder, const Exifdatum *datum)
Implements encode().
Definition tiffcomposite_int.cpp:1007
virtual TiffSubIfd * doClone() const
Internal virtual copy constructor, implements clone().
Definition tiffcomposite_int.cpp:322
virtual TiffComponent * doAddChild(TiffComponent::AutoPtr tiffComponent)
Implements addChild(). The default implementation does nothing.
Definition tiffcomposite_int.cpp:823
virtual void doAccept(TiffVisitor &visitor)
Implements accept().
Definition tiffcomposite_int.cpp:924
uint32_t doSize() const
Implements size(). Return the size of the sub-Ifd pointers.
Definition tiffcomposite_int.cpp:1692
virtual ~TiffSubIfd()
Virtual destructor.
Definition tiffcomposite_int.cpp:191
Abstract base class defining the interface for TIFF composite visitors (Visitor pattern)
Definition tiffvisitor_int.hpp:73
Common interface for all types of values used with metadata.
Definition value.hpp:60
std::auto_ptr< Value > AutoPtr
Shortcut for a Value auto pointer.
Definition value.hpp:63
const uint32_t none
Dummy tag.
Definition tiffcomposite_int.hpp:79
const uint32_t pana
Special tag: root IFD of Panasonic RAW images.
Definition tiffcomposite_int.hpp:83
const uint32_t root
Special tag: root IFD.
Definition tiffcomposite_int.hpp:80
const uint32_t all
Special tag: all tags in a group.
Definition tiffcomposite_int.hpp:82
const uint32_t next
Special tag: next IFD.
Definition tiffcomposite_int.hpp:81
const TiffType ttTiffFloat
TIFF FLOAT type.
Definition tiffcomposite_int.hpp:66
const TiffType ttUnsignedLong
Exif LONG type.
Definition tiffcomposite_int.hpp:59
const TiffType ttSignedByte
Exif SBYTE type.
Definition tiffcomposite_int.hpp:61
TiffComponent::AutoPtr newTiffBinaryArray2(uint16_t tag, IfdId group)
Function to create and initialize a new complex binary array entry.
Definition tiffcomposite_int.hpp:1627
const TiffType ttUnsignedRational
Exif RATIONAL type.
Definition tiffcomposite_int.hpp:60
const TiffType ttTiffDouble
TIFF DOUBLE type.
Definition tiffcomposite_int.hpp:67
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:1309
TiffComponent::AutoPtr newTiffBinaryElement(uint16_t tag, IfdId group)
Function to create and initialize a new binary array element.
Definition tiffcomposite_int.cpp:1915
void(TiffEncoder::* EncoderFct)(TiffEntryBase *, const Exifdatum *)
Function pointer type for a TiffDecoder member function to decode a TIFF component.
Definition tifffwd_int.hpp:88
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:1643
const TiffType ttTiffIfd
TIFF IFD type.
Definition tiffcomposite_int.hpp:68
const TiffType ttSignedShort
Exif SSHORT type.
Definition tiffcomposite_int.hpp:63
void(TiffDecoder::* DecoderFct)(const TiffEntryBase *)
Function pointer type for a TiffDecoder member function to decode a TIFF component.
Definition tifffwd_int.hpp:83
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:1312
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
uint16_t TiffType
TIFF value type.
Definition tiffcomposite_int.hpp:54
const TiffType ttAsciiString
Exif ASCII type.
Definition tiffcomposite_int.hpp:57
const TiffType ttUnsignedShort
Exif SHORT type.
Definition tiffcomposite_int.hpp:58
const TiffType ttSignedLong
Exif SLONG type.
Definition tiffcomposite_int.hpp:64
TiffComponent::AutoPtr newTiffEntry(uint16_t tag, IfdId group)
Function to create and initialize a new TIFF entry.
Definition tiffcomposite_int.cpp:1905
TiffComponent::AutoPtr newTiffMnEntry(uint16_t tag, IfdId group)
Function to create and initialize a new TIFF makernote entry.
Definition tiffcomposite_int.cpp:1910
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:1659
TiffComponent::AutoPtr newTiffSubIfd(uint16_t tag, IfdId group)
Function to create and initialize a new TIFF sub-directory.
Definition tiffcomposite_int.hpp:1603
std::stack< TiffPathItem > TiffPath
Stack to hold a path from the TIFF root element to a TIFF entry.
Definition tifffwd_int.hpp:111
TiffComponent::AutoPtr newTiffBinaryArray1(uint16_t tag, IfdId group)
Function to create and initialize a new simple binary array entry.
Definition tiffcomposite_int.hpp:1619
IfdId
Type to specify the IFD to which a metadata belongs.
Definition tags_int.hpp:54
const TiffType ttUnsignedByte
Exif BYTE type.
Definition tiffcomposite_int.hpp:56
TiffComponent::AutoPtr newTiffBinaryArray0(uint16_t tag, IfdId group)
Function to create and initialize a new binary array entry.
Definition tiffcomposite_int.hpp:1610
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
TiffType toTiffType(TypeId typeId)
Convert the Exiv2 typeId to a TIFF value type.
Definition tiffcomposite_int.cpp:1877
const TiffType ttUndefined
Exif UNDEFINED type.
Definition tiffcomposite_int.hpp:62
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
TiffComponent::AutoPtr newTiffImageData(uint16_t tag, IfdId group)
Function to create and initialize a new TIFF entry for image data.
Definition tiffcomposite_int.hpp:1651
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:1635
TiffComponent::AutoPtr newTiffDirectory(uint16_t tag, IfdId)
Function to create and initialize a new TIFF directory.
Definition tiffcomposite_int.hpp:1596
const TiffType ttSignedRational
Exif SRATIONAL type.
Definition tiffcomposite_int.hpp:65
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:130
ByteOrder
Type to express the byte order (little or big endian)
Definition types.hpp:113
Additional configuration for a binary array.
Definition tiffcomposite_int.hpp:1327
bool hasSize_
If true, first tag is the size element.
Definition tiffcomposite_int.hpp:1338
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:1332
ArrayDef elDefaultDef_
Default element.
Definition tiffcomposite_int.hpp:1341
bool concat_
If true, concatenate gaps between defined tags to single tags.
Definition tiffcomposite_int.hpp:1340
CryptFct cryptFct_
Crypt function, 0 if not used.
Definition tiffcomposite_int.hpp:1337
TiffType elTiffType_
Type for the array entry and the size element, if any.
Definition tiffcomposite_int.hpp:1336
ByteOrder byteOrder_
Byte order, invalidByteOrder to inherit.
Definition tiffcomposite_int.hpp:1335
IfdId group_
Group for the elements.
Definition tiffcomposite_int.hpp:1334
bool hasFillers_
If true, write all defined tags.
Definition tiffcomposite_int.hpp:1339
Defines one tag in a binary array.
Definition tiffcomposite_int.hpp:1315
TiffType tiffType_
TIFF type of the element.
Definition tiffcomposite_int.hpp:1322
bool operator==(uint32_t idx) const
Comparison with idx.
Definition tiffcomposite_int.hpp:1317
uint32_t count_
Number of components.
Definition tiffcomposite_int.hpp:1323
uint32_t size(uint16_t tag, IfdId group) const
Get the size in bytes of a tag.
Definition tiffcomposite_int.cpp:564
uint32_t idx_
Index in bytes from the start.
Definition tiffcomposite_int.hpp:1321
Combination of array configuration and definition for arrays.
Definition tiffcomposite_int.hpp:1345
const ArrayDef * def_
Binary array definition array.
Definition tiffcomposite_int.hpp:1347
const ArrayCfg cfg_
Binary array configuration.
Definition tiffcomposite_int.hpp:1346
const int defSize_
Size of the array definition array.
Definition tiffcomposite_int.hpp:1348
Search key for TIFF mapping structures.
Definition tiffcomposite_int.hpp:400
Key(const std::string &m, uint32_t e, IfdId g)
Constructor.
Definition tiffcomposite_int.hpp:402
std::string m_
Camera make.
Definition tiffcomposite_int.hpp:403
uint32_t e_
Extended tag.
Definition tiffcomposite_int.hpp:404
IfdId g_
Group
Definition tiffcomposite_int.hpp:405
TIFF mapping table for functions to decode special cases.
Definition tiffcomposite_int.hpp:376
IfdId group_
Group that contains the tag.
Definition tiffcomposite_int.hpp:393
const char * make_
Camera make for which these mapping functions apply.
Definition tiffcomposite_int.hpp:391
uint16_t tag() const
Return the tag corresponding to the extended tag.
Definition tiffcomposite_int.hpp:388
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:55
uint32_t extendedTag_
Tag (32 bit so that it can contain special tags)
Definition tiffcomposite_int.hpp:392
DecoderFct decoderFct_
Decoder function for matching tags.
Definition tiffcomposite_int.hpp:394
EncoderFct encoderFct_
Encoder function for matching tags.
Definition tiffcomposite_int.hpp:395
Internal TIFF parser related typedefs and forward definitions.
Type definitions for Exiv2 and related functionality.
Value interface and concrete subclasses.