3 #ifndef TIFFVISITOR_INT_HPP_
4 #define TIFFVISITOR_INT_HPP_
9 #include "tifffwd_int.hpp"
51 static const int events_ = 2;
52 std::array<bool, events_> go_{
true,
true};
116 [[nodiscard]]
bool go(
GoEvent event)
const;
132 constexpr
TiffFinder(uint16_t tag,
IfdId group) : tag_(tag), group_(group) {
136 TiffFinder& operator=(
const TiffFinder&) =
delete;
177 return tiffComponent_;
314 void getObjData(
const byte*& pData,
size_t& size, uint16_t tag,
IfdId group,
const TiffEntryBase*
object);
324 bool decodedIptc_{
false};
467 [[nodiscard]]
bool dirty()
const;
507 [[nodiscard]]
bool isImageTag(uint16_t tag,
IfdId group)
const;
664 using DirList = std::map<const byte*, IfdId>;
665 using IdxSeq = std::map<IfdId, int>;
666 using PostList = std::vector<TiffComponent*>;
679 bool postProc_{
false};
685 #endif // #ifndef TIFFVISITOR_INT_HPP_
This class is the basis for Makernote support in TIFF. It contains a pointer to a concrete Makernote...
Definition: tiffcomposite_int.hpp:1006
void visitDataEntry(TiffDataEntry *object) override
Encode a TIFF data entry.
Definition: tiffvisitor_int.cpp:568
TIFF composite visitor to read the TIFF structure from a block of memory and build the composite from...
Definition: tiffvisitor_int.hpp:579
size_t baseOffset() const
Return the base offset. See class TiffRwState for details.
Definition: tiffvisitor_int.cpp:1007
void encodeIptc(TiffEntryBase *object, const Exifdatum *datum)
Special encoder function to encode SubIFD contents to Image group if it contains primary image data...
void visitBinaryElement(TiffBinaryElement *object) override
Copy an element of a binary array if it is an image tag.
Definition: tiffvisitor_int.cpp:182
void decodeXmp(const TiffEntryBase *object)
Decode XMP packet from an XMLPacket tag.
Definition: tiffvisitor_int.cpp:264
void encodeDataEntry(TiffDataEntry *object, const Exifdatum *datum)
Callback encoder function for a data entry.
Definition: tiffvisitor_int.cpp:763
void visitEntry(TiffEntry *object) override
Find tag and group in a TIFF entry.
Definition: tiffvisitor_int.cpp:88
A container for XMP data. This is a top-level class of the Exiv2 library.
Definition: xmp_exiv2.hpp:138
void visitIfdMakernoteEnd(TiffIfdMakernote *object) override
Reset encoder to its original state, undo makernote specific settings.
Definition: tiffvisitor_int.cpp:655
A container for Exif data. This is a top-level class of the Exiv2 library. The container holds Exifda...
Definition: exif.hpp:373
void visitBinaryArray(TiffBinaryArray *object) override
Copy a binary array if it is an image tag.
Definition: tiffvisitor_int.cpp:178
void encodeSubIfd(TiffSubIfd *object, const Exifdatum *datum)
Callback encoder function for a sub-IFD entry.
Definition: tiffvisitor_int.cpp:873
virtual void visitIfdMakernoteEnd(TiffIfdMakernote *object)
Operation to perform after processing an IFD makernote.
Definition: tiffvisitor_int.cpp:68
Composite to model an array of different tags. The tag types as well as other aspects of the array ar...
Definition: tiffcomposite_int.hpp:1275
virtual void visitSubIfd(TiffSubIfd *object)=0
Operation to perform for a TIFF sub-IFD.
ByteOrder
Type to express the byte order (little or big endian)
Definition: types.hpp:34
std::vector< IfdId > PrimaryGroups
Type for a list of primary image groups.
Definition: tifffwd_int.hpp:80
DecoderFct(*)(const std::string &make, uint32_t extendedTag, IfdId group) FindDecoderFct
Type for a function pointer for a function to decode a TIFF component.
Definition: tifffwd_int.hpp:64
void visitImageEntry(TiffImageEntry *object) override
Encode a TIFF image entry.
Definition: tiffvisitor_int.cpp:572
virtual ~TiffVisitor()=default
Virtual destructor.
void visitSubIfd(TiffSubIfd *object) override
Decode a TIFF sub-IFD.
Definition: tiffvisitor_int.cpp:225
void visitDirectory(TiffDirectory *object) override
Encode a TIFF directory.
Definition: tiffvisitor_int.cpp:580
void setMnState(const TiffRwState *state=nullptr)
Set the state of the reader to one suitable for the Makernote.
Definition: tiffvisitor_int.cpp:991
void visitIfdMakernote(TiffIfdMakernote *object) override
Copy an IFD makernote if it is an image tag.
Definition: tiffvisitor_int.cpp:174
constexpr TiffFinder(uint16_t tag, IfdId group)
Constructor, taking tag and group of the component to find.
Definition: tiffvisitor_int.hpp:133
void visitIfdMakernote(TiffIfdMakernote *object) override
Decode an IFD makernote.
Definition: tiffvisitor_int.cpp:234
void encodeSizeEntry(TiffSizeEntry *object, const Exifdatum *datum)
Callback encoder function for a size entry.
Definition: tiffvisitor_int.cpp:869
void readTiffEntry(TiffEntryBase *object)
Read a standard TIFF entry from the data buffer.
Definition: tiffvisitor_int.cpp:1231
virtual void visitImageEntry(TiffImageEntry *object)=0
Operation to perform for a TIFF image entry.
ByteOrder byteOrder() const
Return the applicable byte order. May be different for the Makernote and the rest of the TIFF entries...
Definition: tiffvisitor_int.hpp:460
void setGo(GoEvent event, bool go)
Set the stop/go flag: true for go, false for stop.
Definition: tiffvisitor_int.cpp:54
TIFF composite visitor to decode metadata from the TIFF tree and add it to an Image, which is supplied in the constructor (Visitor pattern). Used by TiffParser to decode the metadata from a TIFF composite.
Definition: tiffvisitor_int.hpp:251
void visitIfdMakernote(TiffIfdMakernote *object) override
Find tag and group in an IFD makernote.
Definition: tiffvisitor_int.cpp:116
Search the composite for a component with tag and group. Return a pointer to the component or 0...
Definition: tiffvisitor_int.hpp:128
uint8_t byte
1 byte unsigned integer type.
Definition: types.hpp:26
void decodeTiffEntry(const TiffEntryBase *object)
Entry function, determines how to decode each tag.
Definition: tiffvisitor_int.cpp:419
This abstract base class provides the common functionality of an IFD directory entry and defines an e...
Definition: tiffcomposite_int.hpp:380
void copyObject(const TiffComponent *object)
Check if object is an image tag and if so, copy it to the target tree.
Definition: tiffvisitor_int.cpp:133
void encodeOffsetEntry(TiffEntryBase *object, const Exifdatum *datum)
Special encoder function for an offset entry.
Definition: tiffvisitor_int.cpp:897
A TIFF IFD entry containing the size of a data area of a related TiffDataEntry. This component is use...
Definition: tiffcomposite_int.hpp:778
void visitSubIfd(TiffSubIfd *object) override
Find tag and group in a TIFF sub-IFD.
Definition: tiffvisitor_int.cpp:108
void encodeTiffEntry(TiffEntry *object, const Exifdatum *datum)
Callback encoder function for a standard TIFF entry.
Definition: tiffvisitor_int.cpp:791
~TiffReader() override=default
Virtual destructor.
void visitSizeEntry(TiffSizeEntry *object) override
Encode a TIFF size entry.
Definition: tiffvisitor_int.cpp:576
void decodeStdTiffEntry(const TiffEntryBase *object)
Decode a standard TIFF entry.
Definition: tiffvisitor_int.cpp:429
TiffReader(const byte *pData, size_t size, TiffComponent *pRoot, TiffRwState state)
Constructor. The data buffer and table describing the TIFF structure of the data are set in the const...
Definition: tiffvisitor_int.cpp:981
ByteOrder byteOrder() const
Return the byte order.
Definition: tiffvisitor_int.cpp:1003
A container for IPTC data. This is a top-level class of the Exiv2 library.
Definition: iptc.hpp:153
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:649
TiffDecoder(ExifData &exifData, IptcData &iptcData, XmpData &xmpData, TiffComponent *pRoot, FindDecoderFct findDecoderFct)
Constructor, taking metadata containers to add the metadata to, the root element of the composite to ...
Definition: tiffvisitor_int.cpp:186
void encodeTiffEntryBase(TiffEntryBase *object, const Exifdatum *datum)
Special encoder function for the base part of a TIFF entry.
Definition: tiffvisitor_int.cpp:877
IfdId
Type to specify the IFD to which a metadata belongs.
Definition: tags.hpp:34
virtual void visitMnEntry(TiffMnEntry *object)=0
Operation to perform for the makernote component.
WriteMethod
Type to indicate write method used by TIFF parsers.
Definition: types.hpp:41
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:932
virtual void visitDirectoryEnd(TiffDirectory *object)
Operation to perform for a TIFF directory, at the end of the processing.
Definition: tiffvisitor_int.cpp:65
void visitBinaryElement(TiffBinaryElement *object) override
Find tag and group in an element of a binary array.
Definition: tiffvisitor_int.cpp:124
void readDataEntryBase(TiffDataEntryBase *object)
Read a TiffDataEntryBase from the data buffer.
Definition: tiffvisitor_int.cpp:1011
~TiffEncoder() override=default
Virtual destructor.
void visitBinaryArray(TiffBinaryArray *object) override
Decode a binary array.
Definition: tiffvisitor_int.cpp:436
void visitSizeEntry(TiffSizeEntry *object) override
Decode a TIFF size entry.
Definition: tiffvisitor_int.cpp:217
Interface class for components of a TIFF directory hierarchy (Composite pattern). Both TIFF directori...
Definition: tiffcomposite_int.hpp:152
TiffEncoder(ExifData &exifData, IptcData &iptcData, XmpData &xmpData, TiffComponent *pRoot, bool isNewImage, const PrimaryGroups *pPrimaryGroups, const TiffHeaderBase *pHeader, FindEncoderFct findEncoderFct)
Constructor, taking the root element of the composite to encode to, the image with the metadata to en...
Definition: tiffvisitor_int.cpp:446
void decodeIptc(const TiffEntryBase *object)
Decode IPTC data from an IPTCNAA tag or Photoshop ImageResources.
Definition: tiffvisitor_int.cpp:289
void visitDataEntry(TiffDataEntry *object) override
Copy a TIFF data entry if it is an image tag.
Definition: tiffvisitor_int.cpp:150
virtual void visitDataEntry(TiffDataEntry *object)=0
Operation to perform for a TIFF data entry.
void visitBinaryElement(TiffBinaryElement *object) override
Read an element of a binary array from the data buffer.
Definition: tiffvisitor_int.cpp:1415
void visitImageEntry(TiffImageEntry *object) override
Read a TIFF image entry from the data buffer.
Definition: tiffvisitor_int.cpp:1029
Copy all image tags from the source tree (the tree that is traversed) to a target tree...
Definition: tiffvisitor_int.hpp:192
void visitMnEntry(TiffMnEntry *object) override
Read a TIFF makernote entry from the data buffer.
Definition: tiffvisitor_int.cpp:1183
void encodeImageEntry(TiffImageEntry *object, const Exifdatum *datum)
Callback encoder function for an image entry.
Definition: tiffvisitor_int.cpp:795
WriteMethod writeMethod() const
Return the write method used.
Definition: tiffvisitor_int.hpp:469
bool circularReference(const byte *start, IfdId group)
Check IFD directory pointer start for circular reference.
Definition: tiffvisitor_int.cpp:1043
void add(TiffComponent *pRootDir, TiffComponent *pSourceDir, uint32_t root)
Add metadata from image to the TIFF composite.
Definition: tiffvisitor_int.cpp:917
void visitMnEntry(TiffMnEntry *object) override
Encode a TIFF makernote.
Definition: tiffvisitor_int.cpp:614
Abstract base class defining the interface for TIFF composite visitors (Visitor pattern) ...
Definition: tiffvisitor_int.hpp:39
void visitDirectoryNext(TiffDirectory *object) override
Update directory entries.
Definition: tiffvisitor_int.cpp:584
void visitEntry(TiffEntry *object) override
Copy a TIFF entry if it is an image tag.
Definition: tiffvisitor_int.cpp:146
A standard TIFF IFD entry.
Definition: tiffcomposite_int.hpp:568
~TiffFinder() override=default
Virtual destructor.
void postProcess()
Read deferred components.
Definition: tiffvisitor_int.cpp:1059
void visitSubIfd(TiffSubIfd *object) override
Read a TIFF sub-IFD from the data buffer.
Definition: tiffvisitor_int.cpp:1143
void encodeBinaryArray(TiffBinaryArray *object, const Exifdatum *datum)
Callback encoder function for a binary array.
Definition: tiffvisitor_int.cpp:755
virtual void visitBinaryArrayEnd(TiffBinaryArray *object)
Operation to perform for a TIFF binary array, at the end of the processing.
Definition: tiffvisitor_int.cpp:71
void visitSizeEntry(TiffSizeEntry *object) override
Find tag and group in a TIFF size entry.
Definition: tiffvisitor_int.cpp:100
virtual void visitSizeEntry(TiffSizeEntry *object)=0
Operation to perform for a TIFF size entry.
void visitDirectory(TiffDirectory *object) override
Copy a TIFF directory if it is an image tag.
Definition: tiffvisitor_int.cpp:162
void setDirty(bool flag=true)
Set the dirty flag and end of traversing signal.
Definition: tiffvisitor_int.cpp:555
void setOrigState()
Set the state to the original state as set in the constructor.
Definition: tiffvisitor_int.cpp:987
Signal used by TiffReader to signal an unknown makernote.
Definition: tiffvisitor_int.hpp:46
EncoderFct(*)(const std::string &make, uint32_t extendedTag, IfdId group) FindEncoderFct
Type for a function pointer for a function to encode a TIFF component.
Definition: tifffwd_int.hpp:68
void visitIfdMakernoteEnd(TiffIfdMakernote *object) override
Reset reader to its original state, undo makernote specific settings.
Definition: tiffvisitor_int.cpp:1226
void visitBinaryArray(TiffBinaryArray *object) override
Encode a binary array.
Definition: tiffvisitor_int.cpp:661
void visitMnEntry(TiffMnEntry *object) override
Copy a TIFF makernote if it is an image tag.
Definition: tiffvisitor_int.cpp:170
virtual void visitBinaryArray(TiffBinaryArray *object)=0
Operation to perform for a binary array.
void visitSubIfd(TiffSubIfd *object) override
Encode a TIFF sub-IFD.
Definition: tiffvisitor_int.cpp:610
GoEvent
Events for the stop/go flag. See setGo().
Definition: tiffvisitor_int.hpp:42
void visitSizeEntry(TiffSizeEntry *object) override
Read a TIFF size entry from the data buffer.
Definition: tiffvisitor_int.cpp:1033
void visitIfdMakernote(TiffIfdMakernote *object) override
Encode an IFD makernote.
Definition: tiffvisitor_int.cpp:627
bool dirty() const
True if any tag was deleted or allocated in the process of visiting a TIFF composite tree...
Definition: tiffvisitor_int.cpp:560
void decodeCanonAFInfo(const TiffEntryBase *object)
Decode Exif.Canon.AFInfo.
Definition: tiffvisitor_int.cpp:347
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 void visitDirectory(TiffDirectory *object)=0
Operation to perform for a TIFF directory.
bool go(GoEvent event) const
Check if stop flag for event is clear, return true if it's clear.
Definition: tiffvisitor_int.cpp:58
void visitMnEntry(TiffMnEntry *object) override
Find tag and group in a TIFF makernote.
Definition: tiffvisitor_int.cpp:112
Tiff IFD Makernote. This is a concrete class suitable for all IFD makernotes.
Definition: tiffcomposite_int.hpp:1079
A standard TIFF IFD entry consisting of a value which is an array of offsets to image data areas...
Definition: tiffcomposite_int.hpp:714
void encodeTiffComponent(TiffEntryBase *object, const Exifdatum *datum=nullptr)
Top level encoder function. Determines how to encode each TIFF component. This function is called by ...
Definition: tiffvisitor_int.cpp:707
void visitDirectory(TiffDirectory *object) override
Find tag and group in a TIFF directory.
Definition: tiffvisitor_int.cpp:104
void visitEntry(TiffEntry *object) override
Read a TIFF entry from the data buffer.
Definition: tiffvisitor_int.cpp:1021
void visitMnEntry(TiffMnEntry *object) override
Decode a TIFF makernote.
Definition: tiffvisitor_int.cpp:229
void visitIfdMakernote(TiffIfdMakernote *object) override
Read an IFD makernote from the data buffer.
Definition: tiffvisitor_int.cpp:1201
Class CrwImage to access Canon CRW images. References: The Canon RAW (CRW) File Format by Phil Harv...
Definition: asfvideo.hpp:15
virtual void visitBinaryElement(TiffBinaryElement *object)=0
Operation to perform for an element of a binary array.
This class models a TIFF directory (Ifd). It is a composite component of the TIFF tree...
Definition: tiffcomposite_int.hpp:823
void visitImageEntry(TiffImageEntry *object) override
Copy a TIFF image entry if it is an image tag.
Definition: tiffvisitor_int.cpp:154
void visitDirectory(TiffDirectory *object) override
Read a TIFF directory from the data buffer.
Definition: tiffvisitor_int.cpp:1069
void visitEntry(TiffEntry *object) override
Encode a TIFF entry.
Definition: tiffvisitor_int.cpp:564
TIFF composite visitor to encode metadata from an image to the TIFF tree. The metadata containers and...
Definition: tiffvisitor_int.hpp:343
void visitDataEntry(TiffDataEntry *object) override
Decode a TIFF data entry.
Definition: tiffvisitor_int.cpp:209
void visitBinaryArray(TiffBinaryArray *object) override
Read a binary array from the data buffer.
Definition: tiffvisitor_int.cpp:1337
void visitBinaryElement(TiffBinaryElement *object) override
Decode an element of a binary array.
Definition: tiffvisitor_int.cpp:442
Signal to control traversing of the composite tree.
Definition: tiffvisitor_int.hpp:44
An Exif metadatum, consisting of an ExifKey and a Value and methods to manipulate these...
Definition: exif.hpp:41
Element of a TiffBinaryArray.
Definition: tiffcomposite_int.hpp:1406
ByteOrder byteOrder() const
Return the applicable byte order. May be different for the Makernote and the rest of the TIFF entries...
Definition: tiffvisitor_int.hpp:550
constexpr TiffRwState(ByteOrder byteOrder, size_t baseOffset)
Constructor.
Definition: tiffvisitor_int.hpp:540
void visitSizeEntry(TiffSizeEntry *object) override
Copy a TIFF size entry if it is an image tag.
Definition: tiffvisitor_int.cpp:158
~TiffDecoder() override=default
Virtual destructor.
void visitImageEntry(TiffImageEntry *object) override
Decode a TIFF image entry.
Definition: tiffvisitor_int.cpp:213
void encodeBinaryElement(TiffBinaryElement *object, const Exifdatum *datum)
Callback encoder function for an element of a binary array.
Definition: tiffvisitor_int.cpp:759
size_t baseOffset() const
Return the base offset.
Definition: tiffvisitor_int.hpp:564
void visitDataEntry(TiffDataEntry *object) override
Read a TIFF data entry from the data buffer.
Definition: tiffvisitor_int.cpp:1025
virtual void visitDirectoryNext(TiffDirectory *object)
Operation to perform for a TIFF directory, after all components and before the next entry is processe...
Definition: tiffvisitor_int.cpp:62
void visitBinaryArrayEnd(TiffBinaryArray *object) override
Re-encrypt binary array if necessary.
Definition: tiffvisitor_int.cpp:667
void visitSubIfd(TiffSubIfd *object) override
Copy a TIFF sub-IFD if it is an image tag.
Definition: tiffvisitor_int.cpp:166
void visitDataEntry(TiffDataEntry *object) override
Find tag and group in a TIFF data entry.
Definition: tiffvisitor_int.cpp:92
void visitImageEntry(TiffImageEntry *object) override
Find tag and group in a TIFF image entry.
Definition: tiffvisitor_int.cpp:96
Encoding and decoding of Exif data.
TiffComponent * result() const
Return the search result. 0 if no TIFF component was found for the tag and group combination.
Definition: tiffvisitor_int.hpp:176
void visitBinaryElement(TiffBinaryElement *object) override
Encode an element of a binary array.
Definition: tiffvisitor_int.cpp:694
TiffCopier(TiffComponent *pRoot, uint32_t root, const TiffHeaderBase *pHeader, const PrimaryGroups *pPrimaryGroups)
Constructor.
Definition: tiffvisitor_int.cpp:128
void encodeMnEntry(TiffMnEntry *object, const Exifdatum *datum)
Callback encoder function for a Makernote entry.
Definition: tiffvisitor_int.cpp:863
void init(uint16_t tag, IfdId group)
Initialize the Finder for a new search.
Definition: tiffvisitor_int.cpp:74
virtual void visitIfdMakernote(TiffIfdMakernote *object)=0
Operation to perform for an IFD makernote.
virtual void visitEntry(TiffEntry *object)=0
Operation to perform for a TIFF entry.
void visitDirectory(TiffDirectory *object) override
Decode a TIFF directory.
Definition: tiffvisitor_int.cpp:221
Simple state class containing relevant state information for the TIFF reader. This is in a separate c...
Definition: tiffvisitor_int.hpp:535
void visitBinaryArray(TiffBinaryArray *object) override
Find tag and group in a binary array.
Definition: tiffvisitor_int.cpp:120
void findObject(TiffComponent *object)
Check if object matches tag and group.
Definition: tiffvisitor_int.cpp:81
int nextIdx(IfdId group)
Return the next idx sequence number for group.
Definition: tiffvisitor_int.cpp:1055
void visitEntry(TiffEntry *object) override
Decode a TIFF entry.
Definition: tiffvisitor_int.cpp:205
~TiffCopier() override=default
Virtual destructor.