/src/exiv2/src/tiffcomposite_int.hpp
Line | Count | Source |
1 | | // SPDX-License-Identifier: GPL-2.0-or-later |
2 | | |
3 | | #ifndef TIFFCOMPOSITE_INT_HPP_ |
4 | | #define TIFFCOMPOSITE_INT_HPP_ |
5 | | |
6 | | // ***************************************************************************** |
7 | | // included header files |
8 | | #include "tifffwd_int.hpp" |
9 | | #include "types.hpp" |
10 | | |
11 | | #include <cstddef> |
12 | | #include <cstdint> |
13 | | #include <memory> |
14 | | #include <string_view> |
15 | | #include <utility> |
16 | | #include <vector> |
17 | | |
18 | | // ***************************************************************************** |
19 | | // namespace extensions |
20 | | namespace Exiv2 { |
21 | | class BasicIo; |
22 | | class Value; |
23 | | |
24 | | namespace Internal { |
25 | | // ***************************************************************************** |
26 | | // class definitions |
27 | | |
28 | | //! TIFF value type. |
29 | | enum TiffType : uint16_t { |
30 | | ttUnsignedByte = 1, //!< Exif BYTE type |
31 | | ttAsciiString = 2, //!< Exif ASCII type |
32 | | ttUnsignedShort = 3, //!< Exif SHORT type |
33 | | ttUnsignedLong = 4, //!< Exif LONG type |
34 | | ttUnsignedRational = 5, //!< Exif RATIONAL type |
35 | | ttSignedByte = 6, //!< Exif SBYTE type |
36 | | ttUndefined = 7, //!< Exif UNDEFINED type |
37 | | ttSignedShort = 8, //!< Exif SSHORT type |
38 | | ttSignedLong = 9, //!< Exif SLONG type |
39 | | ttSignedRational = 10, //!< Exif SRATIONAL type |
40 | | ttTiffFloat = 11, //!< TIFF FLOAT type |
41 | | ttTiffDouble = 12, //!< TIFF DOUBLE type |
42 | | ttTiffIfd = 13, //!< TIFF IFD type |
43 | | }; |
44 | | |
45 | | //! Convert the \em tiffType of a \em tag and \em group to an Exiv2 \em typeId. |
46 | | TypeId toTypeId(TiffType tiffType, uint16_t tag, IfdId group); |
47 | | //! Convert the %Exiv2 \em typeId to a TIFF value type. |
48 | | TiffType toTiffType(TypeId typeId); |
49 | | |
50 | | /*! |
51 | | Special TIFF tags for the use in TIFF structures only |
52 | | */ |
53 | | enum Tag { |
54 | | none = 0x10000, //!< Dummy tag |
55 | | root = 0x20000, //!< Special tag: root IFD |
56 | | next = 0x30000, //!< Special tag: next IFD |
57 | | all = 0x40000, //!< Special tag: all tags in a group |
58 | | pana = 0x80000, //!< Special tag: root IFD of Panasonic RAW images |
59 | | fuji = 0x100000, //!< Special tag: root IFD of Fujifilm RAF images |
60 | | cmt2 = 0x110000, //!< Special tag: root IFD of CR3 images |
61 | | cmt3 = 0x120000, //!< Special tag: root IFD of CR3 images |
62 | | cmt4 = 0x130000, //!< Special tag: root IFD of CR3 images |
63 | | }; |
64 | | |
65 | | /*! |
66 | | @brief A tuple consisting of extended Tag and group used as an item in |
67 | | TIFF paths. |
68 | | */ |
69 | | class TiffPathItem { |
70 | | public: |
71 | | //! @name Creators |
72 | | //@{ |
73 | | //! Constructor |
74 | 0 | constexpr TiffPathItem(uint32_t extendedTag, IfdId group) : extendedTag_(extendedTag), group_(group) { |
75 | 0 | } |
76 | | //@} |
77 | | |
78 | | //! @name Accessors |
79 | | //@{ |
80 | | //! Return the tag corresponding to the extended tag |
81 | 0 | [[nodiscard]] uint16_t tag() const { |
82 | 0 | return static_cast<uint16_t>(extendedTag_); |
83 | 0 | } |
84 | | //! Return the extended tag (32 bit so that it can contain special tags) |
85 | 0 | [[nodiscard]] uint32_t extendedTag() const { |
86 | 0 | return extendedTag_; |
87 | 0 | } |
88 | | //! Return the group |
89 | 0 | [[nodiscard]] IfdId group() const { |
90 | 0 | return group_; |
91 | 0 | } |
92 | | //@} |
93 | | |
94 | | private: |
95 | | // DATA |
96 | | uint32_t extendedTag_; |
97 | | IfdId group_; |
98 | | }; |
99 | | |
100 | | /*! |
101 | | @brief Simple IO wrapper to ensure that the header is only written if there is |
102 | | any other data at all. |
103 | | |
104 | | The wrapper is initialized with an IO reference and a pointer to a TIFF header. |
105 | | Subsequently the wrapper is used by all TIFF write methods. It takes care that |
106 | | the TIFF header is written to the IO first before any other output and only if |
107 | | there is any other data. |
108 | | */ |
109 | | class IoWrapper { |
110 | | public: |
111 | | //! @name Creators |
112 | | //@{ |
113 | | /*! |
114 | | brief Constructor. |
115 | | |
116 | | The IO wrapper owns none of the objects passed in so the caller is |
117 | | responsible to keep them alive. |
118 | | */ |
119 | | IoWrapper(BasicIo& io, const byte* pHeader, size_t size, OffsetWriter* pow); |
120 | | //@} |
121 | | |
122 | | //! @name Manipulators |
123 | | //@{ |
124 | | /*! |
125 | | @brief Wraps the corresponding BasicIo::write() method. |
126 | | |
127 | | Writes the TIFF header to the IO, if it hasn't been written yet, followed |
128 | | by the data passed in the arguments. |
129 | | */ |
130 | | size_t write(const byte* pData, size_t wcount); |
131 | | /*! |
132 | | @brief Wraps the corresponding BasicIo::putb() method. |
133 | | |
134 | | Writes the TIFF header to the IO, if it hasn't been written yet, followed |
135 | | by the data passed in the argument. |
136 | | */ |
137 | | int putb(byte data); |
138 | | //! Wrapper for OffsetWriter::setTarget(), using an int instead of the enum to reduce include deps |
139 | | void setTarget(int id, size_t target); |
140 | | //@} |
141 | | |
142 | | private: |
143 | | // DATA |
144 | | BasicIo& io_; //! Reference for the IO instance. |
145 | | const byte* pHeader_; //! Pointer to the header data. |
146 | | size_t size_; //! Size of the header data. |
147 | | bool wroteHeader_{false}; //! Indicates if the header has been written. |
148 | | OffsetWriter* pow_; //! Pointer to an offset-writer, if any, or 0 |
149 | | }; |
150 | | |
151 | | /*! |
152 | | @brief Interface class for components of a TIFF directory hierarchy |
153 | | (Composite pattern). Both TIFF directories as well as entries |
154 | | implement this interface. A component can be uniquely identified |
155 | | by a tag, group tuple. This class is implemented as a NVI |
156 | | (Non-Virtual Interface) and it has an interface for visitors |
157 | | (Visitor pattern) to perform operations on all components. |
158 | | */ |
159 | | class TiffComponent { |
160 | | public: |
161 | | //! TiffComponent auto_ptr type |
162 | | using UniquePtr = std::unique_ptr<TiffComponent>; |
163 | | using SharedPtr = std::shared_ptr<TiffComponent>; |
164 | | //! Container type to hold all metadata |
165 | | using Components = std::vector<SharedPtr>; |
166 | | |
167 | | //! @name Creators |
168 | | //@{ |
169 | | //! Constructor |
170 | 134k | constexpr TiffComponent(uint16_t tag, IfdId group) : tag_(tag), group_(group) { |
171 | 134k | } |
172 | | //! Virtual destructor. |
173 | 134k | virtual ~TiffComponent() = default; |
174 | | //@} |
175 | | |
176 | | //! @name Manipulators |
177 | | //@{ |
178 | | /*! |
179 | | @brief Add a TIFF entry \em tag to the component. Components on |
180 | | the path to the entry are added if they don't exist yet. |
181 | | |
182 | | @param tag The tag of the new entry |
183 | | @param tiffPath A path from the TIFF root element to a TIFF entry. |
184 | | @param pRoot Pointer to the root component of the TIFF composite. |
185 | | @param object TIFF component to add. If 0, the correct entry will be |
186 | | created. |
187 | | |
188 | | @return A pointer to the newly added TIFF entry. |
189 | | */ |
190 | | TiffComponent* addPath(uint16_t tag, TiffPath& tiffPath, TiffComponent* pRoot, UniquePtr object = nullptr); |
191 | | /*! |
192 | | @brief Add a child to the component. Default is to do nothing. |
193 | | @param tiffComponent Auto pointer to the component to add. |
194 | | @return Return a pointer to the newly added child element or 0. |
195 | | */ |
196 | | TiffComponent* addChild(SharedPtr tiffComponent); |
197 | | /*! |
198 | | @brief Add a "next" component to the component. Default is to do |
199 | | nothing. |
200 | | @param tiffComponent Auto pointer to the component to add. |
201 | | @return Return a pointer to the newly added "next" element or 0. |
202 | | */ |
203 | | TiffComponent* addNext(UniquePtr tiffComponent); |
204 | | /*! |
205 | | @brief Interface to accept visitors (Visitor pattern). Visitors |
206 | | can perform operations on all components of the composite. |
207 | | |
208 | | @param visitor The visitor. |
209 | | */ |
210 | | void accept(TiffVisitor& visitor); |
211 | | /*! |
212 | | @brief Set a pointer to the start of the binary representation of the |
213 | | component in a memory buffer. The buffer must be allocated and |
214 | | freed outside of this class. |
215 | | */ |
216 | 134k | void setStart(const byte* pStart) { |
217 | 134k | pStart_ = const_cast<byte*>(pStart); |
218 | 134k | } |
219 | | /*! |
220 | | @brief Write a TiffComponent to a binary image. |
221 | | |
222 | | @param ioWrapper IO wrapper to which the TiffComponent is written. |
223 | | @param byteOrder Applicable byte order (little or big endian). |
224 | | @param offset Offset from the start of the image (TIFF header) to |
225 | | the component. |
226 | | @param valueIdx Index of the component to be written relative to offset. |
227 | | @param dataIdx Index of the data area of the component relative to offset. |
228 | | @param imageIdx Index of the image data area relative to offset. |
229 | | @return Number of bytes written to the IO wrapper including all |
230 | | nested components. |
231 | | @throw Error If the component cannot be written. |
232 | | */ |
233 | | size_t write(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx, |
234 | | size_t& imageIdx); |
235 | | //@} |
236 | | |
237 | | //! @name Accessors |
238 | | //@{ |
239 | | //! Return the tag of this entry. |
240 | 697k | [[nodiscard]] uint16_t tag() const { |
241 | 697k | return tag_; |
242 | 697k | } |
243 | | //! Return the group id of this component |
244 | 637k | [[nodiscard]] IfdId group() const { |
245 | 637k | return group_; |
246 | 637k | } |
247 | | //! Return a pointer to the start of the binary representation of the component |
248 | 140k | [[nodiscard]] byte* start() const { |
249 | 140k | return pStart_; |
250 | 140k | } |
251 | | /*! |
252 | | @brief Return an auto-pointer to a copy of itself (deep copy, but |
253 | | without any children). The caller owns this copy and the |
254 | | auto-pointer ensures that it will be deleted. |
255 | | */ |
256 | | [[nodiscard]] UniquePtr clone() const; |
257 | | /*! |
258 | | @brief Write the IFD data of this component to a binary image. |
259 | | Return the number of bytes written. Components derived from |
260 | | TiffEntryBase implement this method if needed. |
261 | | */ |
262 | | size_t writeData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t dataIdx, size_t& imageIdx) const; |
263 | | /*! |
264 | | @brief Write the image data of this component to a binary image. |
265 | | Return the number of bytes written. TIFF components implement |
266 | | this method if needed. |
267 | | */ |
268 | | size_t writeImage(IoWrapper& ioWrapper, ByteOrder byteOrder) const; |
269 | | /*! |
270 | | @brief Return the size in bytes of the IFD value of this component |
271 | | when written to a binary image. |
272 | | */ |
273 | | [[nodiscard]] size_t size() const; |
274 | | /*! |
275 | | @brief Return the number of components in this component. |
276 | | */ |
277 | | [[nodiscard]] size_t count() const; |
278 | | /*! |
279 | | @brief Return the size in bytes of the IFD data of this component when |
280 | | written to a binary image. This is a support function for |
281 | | write(). Components derived from TiffEntryBase implement this |
282 | | method corresponding to their implementation of writeData(). |
283 | | */ |
284 | | [[nodiscard]] size_t sizeData() const; |
285 | | /*! |
286 | | @brief Return the size in bytes of the image data of this component |
287 | | when written to a binary image. This is a support function for |
288 | | write(). TIFF components implement this method corresponding to |
289 | | their implementation of writeImage(). |
290 | | */ |
291 | | [[nodiscard]] size_t sizeImage() const; |
292 | | /*! |
293 | | @brief Return the unique id of the entry in the image. |
294 | | */ |
295 | | // Todo: This is only implemented in TiffEntryBase. It is needed here so that |
296 | | // we can sort components by tag and idx. Something is not quite right. |
297 | | [[nodiscard]] virtual int idx() const; |
298 | | //@} |
299 | | |
300 | | protected: |
301 | | //! @name Protected Manipulators |
302 | | //@{ |
303 | | //! Implements addPath(). The default implementation does nothing. |
304 | | virtual TiffComponent* doAddPath(uint16_t tag, TiffPath& tiffPath, TiffComponent* pRoot, UniquePtr object); |
305 | | //! Implements addChild(). The default implementation does nothing. |
306 | | virtual TiffComponent* doAddChild(SharedPtr tiffComponent); |
307 | | //! Implements addNext(). The default implementation does nothing. |
308 | | virtual TiffComponent* doAddNext(UniquePtr tiffComponent); |
309 | | //! Implements accept(). |
310 | | virtual void doAccept(TiffVisitor& visitor) = 0; |
311 | | //! Implements write(). |
312 | | virtual size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx, |
313 | | size_t& imageIdx) = 0; |
314 | | //@} |
315 | | |
316 | | //! @name Protected Accessors |
317 | | //@{ |
318 | | //! Internal virtual copy constructor, implements clone(). |
319 | | [[nodiscard]] virtual TiffComponent* doClone() const = 0; |
320 | | //! Implements writeData(). |
321 | | virtual size_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t dataIdx, |
322 | | size_t& imageIdx) const = 0; |
323 | | //! Implements writeImage(). |
324 | | virtual size_t doWriteImage(IoWrapper& ioWrapper, ByteOrder byteOrder) const = 0; |
325 | | //! Implements size(). |
326 | | [[nodiscard]] virtual size_t doSize() const = 0; |
327 | | //! Implements count(). |
328 | | [[nodiscard]] virtual size_t doCount() const = 0; |
329 | | //! Implements sizeData(). |
330 | | [[nodiscard]] virtual size_t doSizeData() const = 0; |
331 | | //! Implements sizeImage(). |
332 | | [[nodiscard]] virtual size_t doSizeImage() const = 0; |
333 | | //@} |
334 | | |
335 | | private: |
336 | | // DATA |
337 | | uint16_t tag_; //!< Tag that identifies the component |
338 | | IfdId group_; //!< Group id for this component |
339 | | /*! |
340 | | Pointer to the start of the binary representation of the component in |
341 | | a memory buffer. The buffer is allocated and freed outside of this class. |
342 | | */ |
343 | | byte* pStart_{}; |
344 | | }; |
345 | | |
346 | | //! TIFF mapping table for functions to decode special cases |
347 | | struct TiffMappingInfo { |
348 | | struct Key; |
349 | | /*! |
350 | | @brief Compare a TiffMappingInfo with a TiffMappingInfo::Key. |
351 | | The two are equal if TiffMappingInfo::make_ equals a substring |
352 | | of the key of the same size. E.g., mapping info = "OLYMPUS", |
353 | | key = "OLYMPUS OPTICAL CO.,LTD" (found in the image) match, |
354 | | the extendedTag is Tag::all or equal to the extended tag of the |
355 | | key, and the group is equal to that of the key. |
356 | | */ |
357 | | bool operator==(const Key& key) const; |
358 | | //! Return the tag corresponding to the extended tag |
359 | 0 | [[nodiscard]] uint16_t tag() const { |
360 | 0 | return static_cast<uint16_t>(extendedTag_); |
361 | 0 | } |
362 | | |
363 | | // DATA |
364 | | std::string_view make_; //!< Camera make for which these mapping functions apply |
365 | | uint32_t extendedTag_; //!< Tag (32 bit so that it can contain special tags) |
366 | | IfdId group_; //!< Group that contains the tag |
367 | | DecoderFct decoderFct_; //!< Decoder function for matching tags |
368 | | EncoderFct encoderFct_; //!< Encoder function for matching tags |
369 | | |
370 | | }; // struct TiffMappingInfo |
371 | | |
372 | | //! Search key for TIFF mapping structures. |
373 | | struct TiffMappingInfo::Key { |
374 | | std::string_view m_; //!< Camera make |
375 | | uint32_t e_; //!< Extended tag |
376 | | IfdId g_; //!< %Group |
377 | | }; |
378 | | |
379 | | /*! |
380 | | @brief This abstract base class provides the common functionality of an |
381 | | IFD directory entry and defines an extended interface for derived |
382 | | concrete entries, which allows access to the attributes of the |
383 | | entry. |
384 | | */ |
385 | | class TiffEntryBase : public TiffComponent { |
386 | | friend class TiffReader; |
387 | | friend class TiffEncoder; |
388 | | |
389 | | public: |
390 | | //! @name Creators |
391 | | //@{ |
392 | | //! Default constructor. |
393 | | TiffEntryBase(uint16_t tag, IfdId group, TiffType tiffType = ttUndefined); |
394 | | |
395 | | //! Virtual destructor. |
396 | | ~TiffEntryBase() override; |
397 | | //@} |
398 | | |
399 | | //! @name NOT implemented |
400 | | //@{ |
401 | | //! Assignment operator. |
402 | | TiffEntryBase& operator=(const TiffEntryBase&) = delete; |
403 | | //@} |
404 | | |
405 | | //! @name Manipulators |
406 | | //@{ |
407 | | /*! |
408 | | @brief Encode a TIFF component from the metadatum provided and |
409 | | information from the \em encoder as needed. |
410 | | |
411 | | Implemented as double-dispatch calls back to one of the specific |
412 | | encoding functions at the \em encoder. |
413 | | */ |
414 | | void encode(TiffEncoder& encoder, const Exifdatum* datum); |
415 | | //! Set the offset |
416 | 117k | void setOffset(size_t offset) { |
417 | 117k | offset_ = offset; |
418 | 117k | } |
419 | | /*! |
420 | | @brief Set pointer and size of the entry's data (not taking ownership of the data). |
421 | | |
422 | | @param storage Usually, pData is a pointer into a copy of the image file, which |
423 | | means that it points to memory which is guaranteed to live longer |
424 | | than this class. However, sometimes pData is pointer into a |
425 | | DataBuf that was allocated by another node in the component tree. |
426 | | If so, we need to make sure that the DataBuf doesn't get freed too |
427 | | early. We use a std::shared_ptr to hold a reference to the DataBuf |
428 | | to ensure that it will be kept alive. The storage parameter is |
429 | | assigned to the storage_ field. In the more common scenario where |
430 | | pData points to a copy of the image, rather than a DataBuf, then |
431 | | you should pass std::shared_ptr<DataBuf>(), which is essentially |
432 | | a nullptr. |
433 | | */ |
434 | | void setData(byte* pData, size_t size, std::shared_ptr<DataBuf> storage); |
435 | | /*! |
436 | | @brief Set the entry's data buffer. A shared_ptr is used to manage the DataBuf |
437 | | because TiffEntryBase has a clone method so it is possible (in theory) for |
438 | | the DataBuf to have multiple owners. |
439 | | */ |
440 | | void setData(std::shared_ptr<DataBuf> buf); |
441 | | /*! |
442 | | @brief Update the value. Takes ownership of the pointer passed in. |
443 | | |
444 | | Update binary value data and call setValue(). |
445 | | */ |
446 | | void updateValue(std::unique_ptr<Value> value, ByteOrder byteOrder); |
447 | | /*! |
448 | | @brief Set tag value. Takes ownership of the pointer passed in. |
449 | | |
450 | | Update type, count and the pointer to the value. |
451 | | */ |
452 | | void setValue(std::unique_ptr<Value> value); |
453 | | //@} |
454 | | |
455 | | //! @name Accessors |
456 | | //@{ |
457 | | //! Return the TIFF type |
458 | 3.04k | [[nodiscard]] TiffType tiffType() const { |
459 | 3.04k | return tiffType_; |
460 | 3.04k | } |
461 | | /*! |
462 | | @brief Return the offset to the data area relative to the base |
463 | | for the component (usually the start of the TIFF header) |
464 | | */ |
465 | 0 | [[nodiscard]] size_t offset() const { |
466 | 0 | return offset_; |
467 | 0 | } |
468 | | /*! |
469 | | @brief Return the unique id of the entry in the image |
470 | | */ |
471 | | [[nodiscard]] int idx() const override; |
472 | | /*! |
473 | | @brief Return a pointer to the binary representation of the |
474 | | value of this component. |
475 | | */ |
476 | 62.9k | [[nodiscard]] const byte* pData() const { |
477 | 62.9k | return pData_; |
478 | 62.9k | } |
479 | | //! Return a const pointer to the converted value of this component |
480 | 274k | [[nodiscard]] const Value* pValue() const { |
481 | 274k | return pValue_.get(); |
482 | 274k | } |
483 | | //@} |
484 | | |
485 | | protected: |
486 | | //! @name Protected Creators |
487 | | //@{ |
488 | | //! Copy constructor (used to implement clone()). |
489 | | TiffEntryBase(const TiffEntryBase& rhs); |
490 | | //@} |
491 | | |
492 | | //! @name Protected Manipulators |
493 | | //@{ |
494 | | //! Implements encode(). |
495 | | virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum) = 0; |
496 | | //! Set the number of components in this entry |
497 | 0 | void setCount(size_t count) { |
498 | 0 | count_ = count; |
499 | 0 | } |
500 | | //! Set the unique id of the entry in the image |
501 | 117k | void setIdx(int idx) { |
502 | 117k | idx_ = idx; |
503 | 117k | } |
504 | | /*! |
505 | | @brief Implements write(). Write the value of a standard TIFF entry to |
506 | | the \em ioWrapper, return the number of bytes written. Only the |
507 | | \em ioWrapper and \em byteOrder arguments are used. |
508 | | */ |
509 | | size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx, |
510 | | size_t& imageIdx) override; |
511 | | //@} |
512 | | |
513 | | //! @name Protected Accessors |
514 | | //@{ |
515 | | //! Implements count(). |
516 | | [[nodiscard]] size_t doCount() const override; |
517 | | /*! |
518 | | @brief Implements writeData(). Standard TIFF entries have no data: |
519 | | write nothing and return 0. |
520 | | */ |
521 | | size_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t dataIdx, |
522 | | size_t& imageIdx) const override; |
523 | | /*! |
524 | | @brief Implements writeImage(). Standard TIFF entries have no image data: |
525 | | write nothing and return 0. |
526 | | */ |
527 | | size_t doWriteImage(IoWrapper& ioWrapper, ByteOrder byteOrder) const override; |
528 | | //! Implements size(). Return the size of a standard TIFF entry |
529 | | [[nodiscard]] size_t doSize() const override; |
530 | | //! Implements sizeData(). Return 0. |
531 | | [[nodiscard]] size_t doSizeData() const override; |
532 | | //! Implements sizeImage(). Return 0. |
533 | | [[nodiscard]] size_t doSizeImage() const override; |
534 | | //@} |
535 | | |
536 | | //! Helper function to write an \em offset to a preallocated binary buffer |
537 | | static size_t writeOffset(byte* buf, size_t offset, TiffType tiffType, ByteOrder byteOrder); |
538 | | |
539 | | //! Used (internally) to create another reference to the DataBuf reference by storage_. |
540 | 29.3k | [[nodiscard]] std::shared_ptr<DataBuf> storage() const { |
541 | 29.3k | return storage_; |
542 | 29.3k | } |
543 | | |
544 | | private: |
545 | | // DATA |
546 | | TiffType tiffType_; //!< Field TIFF type |
547 | | size_t count_{}; //!< The number of values of the indicated type |
548 | | size_t offset_{}; //!< Offset to the data area |
549 | | size_t size_{}; //!< Size of the data buffer holding the value in bytes, there is no minimum size. |
550 | | |
551 | | // Notes on the ownership model of pData_: pData_ is a always a |
552 | | // pointer to a buffer owned by somebody else. Usually it is a |
553 | | // pointer into a copy of the image file, but if |
554 | | // TiffEntryBase::setData is used then it is a pointer into the |
555 | | // storage_ DataBuf below. |
556 | | byte* pData_{}; //!< Pointer to the data area |
557 | | |
558 | | int idx_{}; //!< Unique id of the entry in the image |
559 | | std::unique_ptr<Value> pValue_; //!< Converted data value |
560 | | |
561 | | // This DataBuf is only used when TiffEntryBase::setData is called. |
562 | | // Otherwise, it remains empty. It is wrapped in a shared_ptr because |
563 | | // TiffEntryBase has a clone method, which could lead to the DataBuf |
564 | | // having multiple owners. |
565 | | std::shared_ptr<DataBuf> storage_; |
566 | | }; |
567 | | |
568 | | /*! |
569 | | @brief A standard TIFF IFD entry. |
570 | | */ |
571 | | class TiffEntry : public TiffEntryBase { |
572 | | public: |
573 | | using TiffEntryBase::TiffEntryBase; |
574 | | |
575 | | protected: |
576 | | //! @name Manipulators |
577 | | //@{ |
578 | | void doAccept(TiffVisitor& visitor) override; |
579 | | void doEncode(TiffEncoder& encoder, const Exifdatum* datum) override; |
580 | | //@} |
581 | | |
582 | | //! @name Protected Accessors |
583 | | //@{ |
584 | | [[nodiscard]] TiffEntry* doClone() const override; |
585 | | //@} |
586 | | }; |
587 | | |
588 | | /*! |
589 | | @brief Interface for a standard TIFF IFD entry consisting of a value |
590 | | which is a set of offsets to a data area. The sizes of these "strips" |
591 | | are provided in a related TiffSizeEntry, tag and group of which are |
592 | | set in the constructor. The implementations of this interface differ |
593 | | in whether the data areas are extracted to the higher level metadata |
594 | | (TiffDataEntry) or not (TiffImageEntry). |
595 | | */ |
596 | | class TiffDataEntryBase : public TiffEntryBase { |
597 | | public: |
598 | | //! @name Creators |
599 | | //@{ |
600 | | //! Constructor |
601 | | TiffDataEntryBase(uint16_t tag, IfdId group, uint16_t szTag, IfdId szGroup); |
602 | | //@} |
603 | | |
604 | | ~TiffDataEntryBase() override; |
605 | | |
606 | | //! @name Manipulators |
607 | | //@{ |
608 | | /*! |
609 | | @brief Set the data areas ("strips"). |
610 | | |
611 | | @param pSize Pointer to the Value holding the sizes corresponding |
612 | | to this data entry. |
613 | | @param pData Pointer to the data area. |
614 | | @param sizeData Size of the data area. |
615 | | @param baseOffset Base offset into the data area. |
616 | | */ |
617 | | virtual void setStrips(const Value* pSize, const byte* pData, size_t sizeData, size_t baseOffset) = 0; |
618 | | //@} |
619 | | |
620 | | //! @name Accessors |
621 | | //@{ |
622 | | //! Return the group of the entry which has the size |
623 | 172 | [[nodiscard]] uint16_t szTag() const { |
624 | 172 | return szTag_; |
625 | 172 | } |
626 | | //! Return the group of the entry which has the size |
627 | 172 | [[nodiscard]] IfdId szGroup() const { |
628 | 172 | return szGroup_; |
629 | 172 | } |
630 | | //@} |
631 | | |
632 | | private: |
633 | | // DATA |
634 | | uint16_t szTag_; //!< Tag of the entry with the size |
635 | | IfdId szGroup_; //!< Group of the entry with the size |
636 | | }; |
637 | | |
638 | | /*! |
639 | | @brief A standard TIFF IFD entry consisting of a value which is an offset |
640 | | to a data area and the data area. The size of the data area is |
641 | | provided in a related TiffSizeEntry, tag and group of which are set |
642 | | in the constructor. |
643 | | |
644 | | This component extracts the data areas ("strips") and makes them |
645 | | available in the higher level metadata. It is used, e.g., for |
646 | | \em Exif.Thumbnail.JPEGInterchangeFormat for which the size |
647 | | is provided in \em Exif.Thumbnail.JPEGInterchangeFormatLength. |
648 | | */ |
649 | | class TiffDataEntry : public TiffDataEntryBase { |
650 | | friend class TiffEncoder; |
651 | | |
652 | | public: |
653 | | using TiffDataEntryBase::TiffDataEntryBase; |
654 | | |
655 | | //! @name Manipulators |
656 | | //@{ |
657 | | void setStrips(const Value* pSize, const byte* pData, size_t sizeData, size_t baseOffset) override; |
658 | | //@} |
659 | | |
660 | | protected: |
661 | | //! @name Protected Manipulators |
662 | | //@{ |
663 | | void doAccept(TiffVisitor& visitor) override; |
664 | | void doEncode(TiffEncoder& encoder, const Exifdatum* datum) override; |
665 | | /*! |
666 | | @brief Implements write(). Write pointers into the data area to the |
667 | | \em ioWrapper, relative to the offsets in the value. Return the |
668 | | number of bytes written. The \em valueIdx argument is not used. |
669 | | |
670 | | The number of components in the value determines how many offsets are |
671 | | written. Set the first value to 0, the second to the size of the first |
672 | | data area, etc. when creating a new data entry. Offsets will be adjusted |
673 | | on write. The type of the value can only be signed or unsigned short or |
674 | | long. |
675 | | */ |
676 | | size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx, |
677 | | size_t& imageIdx) override; |
678 | | //@} |
679 | | |
680 | | //! @name Protected Accessors |
681 | | //@{ |
682 | | [[nodiscard]] TiffDataEntry* doClone() const override; |
683 | | /*! |
684 | | @brief Implements writeData(). Write the data area to the \em ioWrapper. |
685 | | Return the number of bytes written. |
686 | | */ |
687 | | size_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t dataIdx, |
688 | | size_t& imageIdx) const override; |
689 | | // Using doWriteImage from base class |
690 | | // Using doSize() from base class |
691 | | //! Implements sizeData(). Return the size of the data area. |
692 | | [[nodiscard]] size_t doSizeData() const override; |
693 | | // Using doSizeImage from base class |
694 | | //@} |
695 | | |
696 | | private: |
697 | | // DATA |
698 | | byte* pDataArea_{}; //!< Pointer to the data area (never alloc'd) |
699 | | size_t sizeDataArea_{}; //!< Size of the data area |
700 | | }; |
701 | | |
702 | | /*! |
703 | | @brief A standard TIFF IFD entry consisting of a value which is an array |
704 | | of offsets to image data areas. The sizes of the image data areas are |
705 | | provided in a related TiffSizeEntry, tag and group of which are set |
706 | | in the constructor. |
707 | | |
708 | | The data is not extracted into the higher level metadata tags, it is |
709 | | only copied to the target image when the image is written. |
710 | | This component is used, e.g., for |
711 | | \em Exif.Image.StripOffsets for which the sizes are provided in |
712 | | \em Exif.Image.StripByteCounts. |
713 | | */ |
714 | | class TiffImageEntry : public TiffDataEntryBase { |
715 | | friend class TiffEncoder; |
716 | | using TiffDataEntryBase::TiffDataEntryBase; |
717 | | |
718 | | public: |
719 | | //! @name Manipulators |
720 | | //@{ |
721 | | void setStrips(const Value* pSize, const byte* pData, size_t sizeData, size_t baseOffset) override; |
722 | | //@} |
723 | | |
724 | | protected: |
725 | | //! @name Protected Manipulators |
726 | | //@{ |
727 | | void doAccept(TiffVisitor& visitor) override; |
728 | | void doEncode(TiffEncoder& encoder, const Exifdatum* datum) override; |
729 | | /*! |
730 | | @brief Implements write(). Write pointers into the image data area to the |
731 | | \em ioWrapper. Return the number of bytes written. The \em valueIdx |
732 | | and \em dataIdx arguments are not used. |
733 | | */ |
734 | | size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx, |
735 | | size_t& imageIdx) override; |
736 | | //@} |
737 | | |
738 | | //! @name Protected Accessors |
739 | | //@{ |
740 | | [[nodiscard]] TiffImageEntry* doClone() const override; |
741 | | /*! |
742 | | @brief Implements writeData(). Write the image data area to the \em ioWrapper. |
743 | | Return the number of bytes written. |
744 | | |
745 | | This function writes the image data to the data area of the current |
746 | | directory. It is used for TIFF image entries in the makernote (large |
747 | | preview images) so that the image data remains in the makernote IFD. |
748 | | */ |
749 | | size_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t dataIdx, |
750 | | size_t& imageIdx) const override; |
751 | | /*! |
752 | | @brief Implements writeImage(). Write the image data area to the \em ioWrapper. |
753 | | Return the number of bytes written. |
754 | | */ |
755 | | size_t doWriteImage(IoWrapper& ioWrapper, ByteOrder byteOrder) const override; |
756 | | //! Implements size(). Return the size of the strip pointers. |
757 | | [[nodiscard]] size_t doSize() const override; |
758 | | //! Implements sizeData(). Return the size of the image data area. |
759 | | [[nodiscard]] size_t doSizeData() const override; |
760 | | //! Implements sizeImage(). Return the size of the image data area. |
761 | | [[nodiscard]] size_t doSizeImage() const override; |
762 | | //@} |
763 | | |
764 | | private: |
765 | | //! Pointers to the image data (strips) and their sizes. |
766 | | using Strips = std::vector<std::pair<const byte*, size_t>>; |
767 | | |
768 | | // DATA |
769 | | Strips strips_; //!< Image strips data (never alloc'd) and sizes |
770 | | }; |
771 | | |
772 | | /*! |
773 | | @brief A TIFF IFD entry containing the size of a data area of a related |
774 | | TiffDataEntry. This component is used, e.g. for |
775 | | \em Exif.Thumbnail.JPEGInterchangeFormatLength, which contains the |
776 | | size of \em Exif.Thumbnail.JPEGInterchangeFormat. |
777 | | */ |
778 | | class TiffSizeEntry : public TiffEntryBase { |
779 | | public: |
780 | | //! @name Creators |
781 | | //@{ |
782 | | //! Constructor |
783 | | TiffSizeEntry(uint16_t tag, IfdId group, uint16_t dtTag, IfdId dtGroup); |
784 | | //@} |
785 | | |
786 | | //! @name Accessors |
787 | | //@{ |
788 | | //! Return the group of the related entry which has the data area |
789 | 83 | [[nodiscard]] uint16_t dtTag() const { |
790 | 83 | return dtTag_; |
791 | 83 | } |
792 | | //! Return the group of the related entry which has the data area |
793 | 83 | [[nodiscard]] IfdId dtGroup() const { |
794 | 83 | return dtGroup_; |
795 | 83 | } |
796 | | //@} |
797 | | |
798 | | protected: |
799 | | //! @name Protected Manipulators |
800 | | //@{ |
801 | | void doAccept(TiffVisitor& visitor) override; |
802 | | void doEncode(TiffEncoder& encoder, const Exifdatum* datum) override; |
803 | | //@} |
804 | | |
805 | | //! @name Protected Accessors |
806 | | //@{ |
807 | | [[nodiscard]] TiffSizeEntry* doClone() const override; |
808 | | //@} |
809 | | |
810 | | private: |
811 | | // DATA |
812 | | uint16_t dtTag_; //!< Tag of the entry with the data area |
813 | | IfdId dtGroup_; //!< Group of the entry with the data area |
814 | | }; |
815 | | |
816 | | /*! |
817 | | @brief This class models a TIFF directory (%Ifd). It is a composite |
818 | | component of the TIFF tree. |
819 | | */ |
820 | | class TiffDirectory : public TiffComponent { |
821 | | friend class TiffEncoder; |
822 | | friend class TiffDecoder; |
823 | | |
824 | | public: |
825 | | //! @name Creators |
826 | | //@{ |
827 | | //! Default constructor |
828 | | TiffDirectory(uint16_t tag, IfdId group, bool hasNext = true); |
829 | | //! Virtual destructor |
830 | 7.10k | ~TiffDirectory() override = default; |
831 | | //@} |
832 | | |
833 | | //! @name NOT implemented |
834 | | //@{ |
835 | | //! Assignment operator. |
836 | | TiffDirectory& operator=(const TiffDirectory&) = delete; |
837 | | //@} |
838 | | |
839 | | //! @name Accessors |
840 | | //@{ |
841 | | //! Return true if the directory has a next pointer |
842 | 5.69k | [[nodiscard]] bool hasNext() const { |
843 | 5.69k | return hasNext_; |
844 | 5.69k | } |
845 | | //@} |
846 | | |
847 | | protected: |
848 | | //! @name Protected Creators |
849 | | //@{ |
850 | | //! Copy constructor (used to implement clone()). |
851 | | TiffDirectory(const TiffDirectory& rhs); |
852 | | //@} |
853 | | |
854 | | //! @name Protected Manipulators |
855 | | //@{ |
856 | | TiffComponent* doAddPath(uint16_t tag, TiffPath& tiffPath, TiffComponent* pRoot, UniquePtr object) override; |
857 | | TiffComponent* doAddChild(SharedPtr tiffComponent) override; |
858 | | TiffComponent* doAddNext(UniquePtr tiffComponent) override; |
859 | | void doAccept(TiffVisitor& visitor) override; |
860 | | /*! |
861 | | @brief Implements write(). Write the TIFF directory, values and |
862 | | additional data, including the next-IFD, if any, to the |
863 | | \em ioWrapper, return the number of bytes written. |
864 | | */ |
865 | | size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx, |
866 | | size_t& imageIdx) override; |
867 | | //@} |
868 | | |
869 | | //! @name Protected Accessors |
870 | | //@{ |
871 | | [[nodiscard]] TiffDirectory* doClone() const override; |
872 | | /*! |
873 | | @brief This class does not really implement writeData(), it only has |
874 | | write(). This method must not be called; it commits suicide. |
875 | | */ |
876 | | size_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t dataIdx, |
877 | | size_t& imageIdx) const override; |
878 | | /*! |
879 | | @brief Implements writeImage(). Write the image data of the TIFF |
880 | | directory to the \em ioWrapper by forwarding the call to each |
881 | | component as well as the next-IFD, if there is any. Return the |
882 | | number of bytes written. |
883 | | */ |
884 | | size_t doWriteImage(IoWrapper& ioWrapper, ByteOrder byteOrder) const override; |
885 | | /*! |
886 | | @brief Implements size(). Return the size of the TIFF directory, |
887 | | values and additional data, including the next-IFD, if any. |
888 | | */ |
889 | | [[nodiscard]] size_t doSize() const override; |
890 | | /*! |
891 | | @brief Implements count(). Return the number of entries in the TIFF |
892 | | directory. Does not count entries which are marked as deleted. |
893 | | */ |
894 | | [[nodiscard]] size_t doCount() const override; |
895 | | /*! |
896 | | @brief This class does not really implement sizeData(), it only has |
897 | | size(). This method must not be called; it commits suicide. |
898 | | */ |
899 | | [[nodiscard]] size_t doSizeData() const override; |
900 | | /*! |
901 | | @brief Implements sizeImage(). Return the sum of the image sizes of |
902 | | all components plus that of the next-IFD, if there is any. |
903 | | */ |
904 | | [[nodiscard]] size_t doSizeImage() const override; |
905 | | //@} |
906 | | |
907 | | private: |
908 | | //! @name Private Accessors |
909 | | //@{ |
910 | | //! Write a binary directory entry for a TIFF component. |
911 | | static size_t writeDirEntry(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, TiffComponent* pTiffComponent, |
912 | | size_t valueIdx, size_t dataIdx, size_t& imageIdx); |
913 | | //@} |
914 | | |
915 | | // DATA |
916 | | Components components_; //!< List of components in this directory |
917 | | bool hasNext_; //!< True if the directory has a next pointer |
918 | | UniquePtr pNext_; //!< Pointer to the next IFD |
919 | | }; |
920 | | |
921 | | /*! |
922 | | @brief This class models a TIFF sub-directory (sub-IFD). A sub-IFD |
923 | | is an entry with one or more values that are pointers to IFD |
924 | | structures containing an IFD. The TIFF standard defines |
925 | | some important tags to be sub-IFDs, including the %Exif and |
926 | | GPS tags. |
927 | | */ |
928 | | class TiffSubIfd : public TiffEntryBase { |
929 | | friend class TiffReader; |
930 | | |
931 | | public: |
932 | | //! @name Creators |
933 | | //@{ |
934 | | //! Default constructor |
935 | | TiffSubIfd(uint16_t tag, IfdId group, IfdId newGroup); |
936 | | //! Virtual destructor |
937 | 2.99k | ~TiffSubIfd() override = default; |
938 | | //@} |
939 | | |
940 | | //! @name NOT implemented |
941 | | //@{ |
942 | | //! Assignment operator. |
943 | | TiffSubIfd& operator=(const TiffSubIfd&) = delete; |
944 | | //@} |
945 | | |
946 | | protected: |
947 | | //! @name Protected Creators |
948 | | //@{ |
949 | | //! Copy constructor (used to implement clone()). |
950 | | TiffSubIfd(const TiffSubIfd& rhs); |
951 | | //@} |
952 | | |
953 | | //! @name Protected Manipulators |
954 | | //@{ |
955 | | TiffComponent* doAddPath(uint16_t tag, TiffPath& tiffPath, TiffComponent* pRoot, UniquePtr object) override; |
956 | | TiffComponent* doAddChild(SharedPtr tiffComponent) override; |
957 | | void doAccept(TiffVisitor& visitor) override; |
958 | | void doEncode(TiffEncoder& encoder, const Exifdatum* datum) override; |
959 | | /*! |
960 | | @brief Implements write(). Write the sub-IFD pointers to the \em ioWrapper, |
961 | | return the number of bytes written. The \em valueIdx and |
962 | | \em imageIdx arguments are not used. |
963 | | */ |
964 | | size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx, |
965 | | size_t& imageIdx) override; |
966 | | //@} |
967 | | |
968 | | //! @name Protected Accessors |
969 | | //@{ |
970 | | [[nodiscard]] TiffSubIfd* doClone() const override; |
971 | | /*! |
972 | | @brief Implements writeData(). Write the sub-IFDs to the \em ioWrapper. |
973 | | Return the number of bytes written. |
974 | | */ |
975 | | size_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t dataIdx, |
976 | | size_t& imageIdx) const override; |
977 | | /*! |
978 | | @brief Implements writeImage(). Write the image data of each sub-IFD to |
979 | | the \em ioWrapper. Return the number of bytes written. |
980 | | */ |
981 | | size_t doWriteImage(IoWrapper& ioWrapper, ByteOrder byteOrder) const override; |
982 | | //! Implements size(). Return the size of the sub-Ifd pointers. |
983 | | [[nodiscard]] size_t doSize() const override; |
984 | | //! Implements sizeData(). Return the sum of the sizes of all sub-IFDs. |
985 | | [[nodiscard]] size_t doSizeData() const override; |
986 | | //! Implements sizeImage(). Return the sum of the image sizes of all sub-IFDs. |
987 | | [[nodiscard]] size_t doSizeImage() const override; |
988 | | //@} |
989 | | |
990 | | private: |
991 | | //! A collection of TIFF directories (IFDs) |
992 | | using Ifds = std::vector<std::shared_ptr<TiffDirectory>>; |
993 | | |
994 | | // DATA |
995 | | IfdId newGroup_; //!< Start of the range of group numbers for the sub-IFDs |
996 | | Ifds ifds_; //!< The subdirectories |
997 | | }; |
998 | | |
999 | | /*! |
1000 | | @brief This class is the basis for Makernote support in TIFF. It contains |
1001 | | a pointer to a concrete Makernote. The TiffReader visitor has the |
1002 | | responsibility to create the correct Make/Model specific Makernote |
1003 | | for a particular TIFF file. Calls to child management methods are |
1004 | | forwarded to the concrete Makernote, if there is one. |
1005 | | */ |
1006 | | class TiffMnEntry : public TiffEntryBase { |
1007 | | friend class TiffReader; |
1008 | | friend class TiffDecoder; |
1009 | | friend class TiffEncoder; |
1010 | | |
1011 | | public: |
1012 | | //! @name Creators |
1013 | | //@{ |
1014 | | //! Default constructor |
1015 | | TiffMnEntry(uint16_t tag, IfdId group, IfdId mnGroup); |
1016 | | ~TiffMnEntry() override; |
1017 | | |
1018 | | protected: |
1019 | | //! @name Protected Manipulators |
1020 | | //@{ |
1021 | | TiffComponent* doAddPath(uint16_t tag, TiffPath& tiffPath, TiffComponent* pRoot, UniquePtr object) override; |
1022 | | TiffComponent* doAddChild(SharedPtr tiffComponent) override; |
1023 | | TiffComponent* doAddNext(UniquePtr tiffComponent) override; |
1024 | | void doAccept(TiffVisitor& visitor) override; |
1025 | | void doEncode(TiffEncoder& encoder, const Exifdatum* datum) override; |
1026 | | /*! |
1027 | | @brief Implements write() by forwarding the call to the actual |
1028 | | concrete Makernote, if there is one. |
1029 | | */ |
1030 | | size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx, |
1031 | | size_t& imageIdx) override; |
1032 | | //@} |
1033 | | |
1034 | | //! @name Protected Accessors |
1035 | | //@{ |
1036 | | [[nodiscard]] TiffMnEntry* doClone() const override; |
1037 | | //! Implements count(). Return number of components in the entry. |
1038 | | [[nodiscard]] size_t doCount() const override; |
1039 | | // Using doWriteData from base class |
1040 | | // Using doWriteImage from base class |
1041 | | /*! |
1042 | | @brief Implements size() by forwarding the call to the actual |
1043 | | concrete Makernote, if there is one. |
1044 | | */ |
1045 | | [[nodiscard]] size_t doSize() const override; |
1046 | | // Using doSizeData from base class |
1047 | | // Using doSizeImage from base class |
1048 | | //@} |
1049 | | |
1050 | | private: |
1051 | | // DATA |
1052 | | IfdId mnGroup_; //!< New group for concrete mn |
1053 | | std::unique_ptr<TiffIfdMakernote> mn_; //!< The Makernote |
1054 | | }; |
1055 | | |
1056 | | /*! |
1057 | | @brief Tiff IFD Makernote. This is a concrete class suitable for all |
1058 | | IFD makernotes. |
1059 | | |
1060 | | Contains a makernote header (which can be 0) and an IFD and |
1061 | | implements child mgmt functions to deal with the IFD entries. The |
1062 | | various makernote weirdnesses are taken care of in the makernote |
1063 | | header (and possibly in special purpose IFD entries). |
1064 | | */ |
1065 | | class TiffIfdMakernote : public TiffComponent { |
1066 | | friend class TiffReader; |
1067 | | |
1068 | | public: |
1069 | | //! @name Creators |
1070 | | //@{ |
1071 | | //! Default constructor |
1072 | | TiffIfdMakernote(uint16_t tag, IfdId group, IfdId mnGroup, std::unique_ptr<MnHeader> pHeader, bool hasNext = true); |
1073 | | //! Virtual destructor |
1074 | | ~TiffIfdMakernote() override; |
1075 | | //@} |
1076 | | |
1077 | | /*! |
1078 | | @name NOT implemented |
1079 | | |
1080 | | Implementing the copy constructor and assignment operator will require |
1081 | | cloning the header, i.e., clone() functionality on the MnHeader |
1082 | | hierarchy. |
1083 | | */ |
1084 | | //@{ |
1085 | | //! Copy constructor. |
1086 | | TiffIfdMakernote(const TiffIfdMakernote&) = delete; |
1087 | | //! Assignment operator. |
1088 | | TiffIfdMakernote& operator=(const TiffIfdMakernote&) = delete; |
1089 | | //@} |
1090 | | |
1091 | | //! @name Manipulators |
1092 | | //@{ |
1093 | | /*! |
1094 | | @brief Read the header from a data buffer, return true if successful. |
1095 | | |
1096 | | The default implementation simply returns true. |
1097 | | */ |
1098 | | bool readHeader(const byte* pData, size_t size, ByteOrder byteOrder); |
1099 | | /*! |
1100 | | @brief Set the byte order for the makernote. |
1101 | | */ |
1102 | | void setByteOrder(ByteOrder byteOrder); |
1103 | | /*! |
1104 | | @brief Set the byte order used for the image. |
1105 | | */ |
1106 | 86 | void setImageByteOrder(ByteOrder byteOrder) { |
1107 | 86 | imageByteOrder_ = byteOrder; |
1108 | 86 | } |
1109 | | //@} |
1110 | | |
1111 | | //! @name Accessors |
1112 | | //@{ |
1113 | | //! Return the size of the header in bytes. |
1114 | | [[nodiscard]] size_t sizeHeader() const; |
1115 | | //! Write the header to a data buffer, return the number of bytes written. |
1116 | | size_t writeHeader(IoWrapper& ioWrapper, ByteOrder byteOrder) const; |
1117 | | /*! |
1118 | | @brief Return the offset to the makernote from the start of the |
1119 | | TIFF header. |
1120 | | */ |
1121 | | [[nodiscard]] size_t mnOffset() const; |
1122 | | /*! |
1123 | | @brief Return the offset to the start of the Makernote IFD from |
1124 | | the start of the Makernote. |
1125 | | Returns 0 if there is no header. |
1126 | | */ |
1127 | | [[nodiscard]] size_t ifdOffset() const; |
1128 | | /*! |
1129 | | @brief Return the byte order for the makernote. Requires the image |
1130 | | byte order to be set (setImageByteOrder()). Returns the byte |
1131 | | order for the image if there is no header or the byte order for |
1132 | | the header is \c invalidByteOrder. |
1133 | | */ |
1134 | | [[nodiscard]] ByteOrder byteOrder() const; |
1135 | | |
1136 | | /*! |
1137 | | @brief Return the base offset for use with the makernote IFD entries |
1138 | | relative to the start of the TIFF header. |
1139 | | Returns 0 if there is no header. |
1140 | | */ |
1141 | | [[nodiscard]] size_t baseOffset() const; |
1142 | | //@} |
1143 | | |
1144 | | protected: |
1145 | | //! @name Protected Manipulators |
1146 | | //@{ |
1147 | | TiffComponent* doAddPath(uint16_t tag, TiffPath& tiffPath, TiffComponent* pRoot, UniquePtr object) override; |
1148 | | TiffComponent* doAddChild(SharedPtr tiffComponent) override; |
1149 | | TiffComponent* doAddNext(UniquePtr tiffComponent) override; |
1150 | | void doAccept(TiffVisitor& visitor) override; |
1151 | | /*! |
1152 | | @brief Implements write(). Write the Makernote header, TIFF directory, |
1153 | | values and additional data to the \em ioWrapper, return the |
1154 | | number of bytes written. |
1155 | | */ |
1156 | | size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx, |
1157 | | size_t& imageIdx) override; |
1158 | | //@} |
1159 | | |
1160 | | //! @name Protected Accessors |
1161 | | //@{ |
1162 | | [[nodiscard]] TiffIfdMakernote* doClone() const override; |
1163 | | /*! |
1164 | | @brief This class does not really implement writeData(), it only has |
1165 | | write(). This method must not be called; it commits suicide. |
1166 | | */ |
1167 | | size_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t dataIdx, |
1168 | | size_t& imageIdx) const override; |
1169 | | /*! |
1170 | | @brief Implements writeImage(). Write the image data of the IFD of |
1171 | | the Makernote. Return the number of bytes written. |
1172 | | */ |
1173 | | size_t doWriteImage(IoWrapper& ioWrapper, ByteOrder byteOrder) const override; |
1174 | | /*! |
1175 | | @brief Implements size(). Return the size of the Makernote header, |
1176 | | TIFF directory, values and additional data. |
1177 | | */ |
1178 | | [[nodiscard]] size_t doSize() const override; |
1179 | | /*! |
1180 | | @brief Implements count(). Return the number of entries in the IFD |
1181 | | of the Makernote. Does not count entries which are marked as |
1182 | | deleted. |
1183 | | */ |
1184 | | [[nodiscard]] size_t doCount() const override; |
1185 | | /*! |
1186 | | @brief This class does not really implement sizeData(), it only has |
1187 | | size(). This method must not be called; it commits suicide. |
1188 | | */ |
1189 | | [[nodiscard]] size_t doSizeData() const override; |
1190 | | /*! |
1191 | | @brief Implements sizeImage(). Return the total image data size of the |
1192 | | makernote IFD. |
1193 | | */ |
1194 | | [[nodiscard]] size_t doSizeImage() const override; |
1195 | | //@} |
1196 | | |
1197 | | private: |
1198 | | // DATA |
1199 | | std::unique_ptr<MnHeader> pHeader_; //!< Makernote header |
1200 | | TiffDirectory ifd_; //!< Makernote IFD |
1201 | | size_t mnOffset_{}; //!< Makernote offset |
1202 | | ByteOrder imageByteOrder_{invalidByteOrder}; //!< Byte order for the image |
1203 | | }; |
1204 | | |
1205 | | /*! |
1206 | | @brief Function pointer type for a function to determine which cfg + def |
1207 | | of a corresponding array set to use. |
1208 | | */ |
1209 | | using CfgSelFct = int (*)(uint16_t, const byte*, size_t, TiffComponent*); |
1210 | | |
1211 | | //! Function pointer type for a crypt function used for binary arrays. |
1212 | | using CryptFct = DataBuf (*)(uint16_t, const byte*, size_t, TiffComponent*); |
1213 | | |
1214 | | //! Defines one tag in a binary array |
1215 | | struct ArrayDef { |
1216 | | //! Comparison with idx |
1217 | 9.12k | bool operator==(size_t idx) const { |
1218 | 9.12k | return idx_ == idx; |
1219 | 9.12k | } |
1220 | | //! Get the size in bytes of a tag. |
1221 | | [[nodiscard]] size_t size(uint16_t tag, IfdId group) const; |
1222 | | // DATA |
1223 | | size_t idx_; //!< Index in bytes from the start |
1224 | | TiffType tiffType_; //!< TIFF type of the element |
1225 | | size_t count_; //!< Number of components |
1226 | | }; |
1227 | | |
1228 | | //! Additional configuration for a binary array. |
1229 | | struct ArrayCfg { |
1230 | | /*! |
1231 | | @brief Return the size of the default tag, which is used |
1232 | | to calculate tag numbers as idx/tagStep |
1233 | | */ |
1234 | 29.3k | [[nodiscard]] size_t tagStep() const { |
1235 | 29.3k | return elDefaultDef_.size(0, group_); |
1236 | 29.3k | } |
1237 | | // DATA |
1238 | | IfdId group_; //!< Group for the elements |
1239 | | ByteOrder byteOrder_; //!< Byte order, invalidByteOrder to inherit |
1240 | | TiffType elTiffType_; //!< Type for the array entry and the size element, if any |
1241 | | CryptFct cryptFct_; //!< Crypt function, 0 if not used |
1242 | | bool hasSize_; //!< If true, first tag is the size element |
1243 | | bool hasFillers_; //!< If true, write all defined tags |
1244 | | bool concat_; //!< If true, concatenate gaps between defined tags to single tags |
1245 | | ArrayDef elDefaultDef_; //!< Default element |
1246 | | }; |
1247 | | |
1248 | | //! Combination of array configuration and definition for arrays |
1249 | | struct ArraySet { |
1250 | | ArrayCfg cfg_; //!< Binary array configuration |
1251 | | const ArrayDef* def_; //!< Binary array definition array |
1252 | | size_t defSize_; //!< Size of the array definition array |
1253 | | }; |
1254 | | |
1255 | | /*! |
1256 | | @brief Composite to model an array of different tags. The tag types as well |
1257 | | as other aspects of the array are configurable. The elements of this |
1258 | | component are of type TiffBinaryElement. |
1259 | | */ |
1260 | | class TiffBinaryArray : public TiffEntryBase { |
1261 | | public: |
1262 | | //! @name Creators |
1263 | | //@{ |
1264 | | //! Constructor |
1265 | | TiffBinaryArray(uint16_t tag, IfdId group, const ArrayCfg& arrayCfg, const ArrayDef* arrayDef, size_t defSize); |
1266 | | //! Constructor for a complex binary array |
1267 | | TiffBinaryArray(uint16_t tag, IfdId group, const ArraySet* arraySet, size_t setSize, CfgSelFct cfgSelFct); |
1268 | | //! Virtual destructor |
1269 | 1.15k | ~TiffBinaryArray() override = default; |
1270 | | //@} |
1271 | | |
1272 | | //! @name NOT implemented |
1273 | | //@{ |
1274 | | //! Assignment operator. |
1275 | | TiffBinaryArray& operator=(const TiffBinaryArray&) = delete; |
1276 | | //@} |
1277 | | |
1278 | | //! @name Manipulators |
1279 | | //@{ |
1280 | | //! Add an element to the binary array, return the size of the element |
1281 | | size_t addElement(size_t idx, const ArrayDef& def); |
1282 | | /*! |
1283 | | @brief Setup cfg and def for the component, in case of a complex binary array. |
1284 | | Else do nothing. Return true if the initialization succeeded, else false. |
1285 | | |
1286 | | This version of initialize() is used during intrusive writing. It determines the |
1287 | | correct settings based on the \em group passed in (which is the group of the first |
1288 | | tag that is added to the array). It doesn't require cfgSelFct_. |
1289 | | |
1290 | | @param group Group to setup the binary array for. |
1291 | | @return true if the initialization succeeded, else false. |
1292 | | */ |
1293 | | bool initialize(IfdId group); |
1294 | | /*! |
1295 | | @brief Setup cfg and def for the component, in case of a complex binary array. |
1296 | | Else do nothing. Return true if the initialization succeeded, else false. |
1297 | | |
1298 | | This version of initialize() is used for reading and non-intrusive writing. It |
1299 | | calls cfgSelFct_ to determine the correct settings. |
1300 | | |
1301 | | @param pRoot Pointer to the root component of the TIFF tree. |
1302 | | @return true if the initialization succeeded, else false. |
1303 | | */ |
1304 | | bool initialize(TiffComponent* pRoot); |
1305 | | //! Initialize the original data buffer and its size from the base entry. |
1306 | | void iniOrigDataBuf(); |
1307 | | //! Update the original data buffer and its size, return true if successful. |
1308 | | bool updOrigDataBuf(const byte* pData, size_t size); |
1309 | | //! Set a flag to indicate if the array was decoded |
1310 | 29.7k | void setDecoded(bool decoded) { |
1311 | 29.7k | decoded_ = decoded; |
1312 | 29.7k | } |
1313 | | //@} |
1314 | | |
1315 | | //! @name Accessors |
1316 | | //@{ |
1317 | | //! Return a pointer to the configuration |
1318 | 119k | [[nodiscard]] const ArrayCfg* cfg() const { |
1319 | 119k | return arrayCfg_; |
1320 | 119k | } |
1321 | | //! Return a pointer to the definition |
1322 | 740 | [[nodiscard]] const ArrayDef* def() const { |
1323 | 740 | return arrayDef_; |
1324 | 740 | } |
1325 | | //! Return the number of elements in the definition |
1326 | 740 | [[nodiscard]] size_t defSize() const { |
1327 | 740 | return defSize_; |
1328 | 740 | } |
1329 | | //! Return the flag which indicates if the array was decoded |
1330 | 1.15k | [[nodiscard]] bool decoded() const { |
1331 | 1.15k | return decoded_; |
1332 | 1.15k | } |
1333 | | //@} |
1334 | | |
1335 | | protected: |
1336 | | //! @name Protected Creators |
1337 | | //@{ |
1338 | | //! Copy constructor (used to implement clone()). |
1339 | | TiffBinaryArray(const TiffBinaryArray& rhs); |
1340 | | //@} |
1341 | | |
1342 | | //! @name Protected Manipulators |
1343 | | //@{ |
1344 | | /*! |
1345 | | @brief Implements addPath(). Todo: Document it! |
1346 | | */ |
1347 | | TiffComponent* doAddPath(uint16_t tag, TiffPath& tiffPath, TiffComponent* pRoot, UniquePtr object) override; |
1348 | | /*! |
1349 | | @brief Implements addChild(). Todo: Document it! |
1350 | | */ |
1351 | | TiffComponent* doAddChild(SharedPtr tiffComponent) override; |
1352 | | void doAccept(TiffVisitor& visitor) override; |
1353 | | void doEncode(TiffEncoder& encoder, const Exifdatum* datum) override; |
1354 | | /*! |
1355 | | @brief Implements write(). Todo: Document it! |
1356 | | */ |
1357 | | size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx, |
1358 | | size_t& imageIdx) override; |
1359 | | //@} |
1360 | | |
1361 | | //! @name Protected Accessors |
1362 | | //@{ |
1363 | | [[nodiscard]] TiffBinaryArray* doClone() const override; |
1364 | | //! Implements count(). Todo: Document it! |
1365 | | [[nodiscard]] size_t doCount() const override; |
1366 | | // Using doWriteData from base class |
1367 | | // Using doWriteImage from base class |
1368 | | /*! |
1369 | | @brief Implements size(). Todo: Document it! |
1370 | | */ |
1371 | | [[nodiscard]] size_t doSize() const override; |
1372 | | // Using doSizeData from base class |
1373 | | // Using doSizeImage from base class |
1374 | | //@} |
1375 | | |
1376 | | private: |
1377 | | // DATA |
1378 | | CfgSelFct cfgSelFct_{}; //!< Pointer to a function to determine which cfg to use (may be 0) |
1379 | | const ArraySet* arraySet_{}; //!< Pointer to the array set, if any (may be 0) |
1380 | | const ArrayCfg* arrayCfg_{}; //!< Pointer to the array configuration (must not be 0, except for |
1381 | | //!< unrecognized complex binary arrays) |
1382 | | const ArrayDef* arrayDef_{}; //!< Pointer to the array definition (may be 0) |
1383 | | size_t defSize_{}; //!< Size of the array definition array (may be 0) |
1384 | | size_t setSize_{}; //!< Size of the array set (may be 0) |
1385 | | Components elements_; //!< List of elements in this composite |
1386 | | byte* origData_{}; //!< Pointer to the original data buffer (unencrypted) |
1387 | | size_t origSize_{}; //!< Size of the original data buffer |
1388 | | TiffComponent* pRoot_{}; //!< Pointer to the root component of the TIFF tree. (Only used for intrusive writing.) |
1389 | | bool decoded_{}; //!< Flag to indicate if the array was decoded |
1390 | | }; |
1391 | | |
1392 | | /*! |
1393 | | @brief Element of a TiffBinaryArray. |
1394 | | */ |
1395 | | class TiffBinaryElement : public TiffEntryBase { |
1396 | | using TiffEntryBase::TiffEntryBase; |
1397 | | |
1398 | | public: |
1399 | | //! @name Manipulators |
1400 | | //@{ |
1401 | | /*! |
1402 | | @brief Set the array definition for this element. |
1403 | | */ |
1404 | 29.3k | void setElDef(const ArrayDef& def) { |
1405 | 29.3k | elDef_ = def; |
1406 | 29.3k | } |
1407 | | /*! |
1408 | | @brief Set the byte order of this element. |
1409 | | */ |
1410 | 29.3k | void setElByteOrder(ByteOrder byteOrder) { |
1411 | 29.3k | elByteOrder_ = byteOrder; |
1412 | 29.3k | } |
1413 | | //@} |
1414 | | |
1415 | | //! @name Accessors |
1416 | | //@{ |
1417 | | /*! |
1418 | | @brief Return the array definition of this element. |
1419 | | */ |
1420 | 29.3k | [[nodiscard]] const ArrayDef* elDef() const { |
1421 | 29.3k | return &elDef_; |
1422 | 29.3k | } |
1423 | | /*! |
1424 | | @brief Return the byte order of this element. |
1425 | | */ |
1426 | 29.3k | [[nodiscard]] ByteOrder elByteOrder() const { |
1427 | 29.3k | return elByteOrder_; |
1428 | 29.3k | } |
1429 | | //@} |
1430 | | |
1431 | | protected: |
1432 | | //! @name Protected Manipulators |
1433 | | //@{ |
1434 | | void doAccept(TiffVisitor& visitor) override; |
1435 | | void doEncode(TiffEncoder& encoder, const Exifdatum* datum) override; |
1436 | | /*! |
1437 | | @brief Implements write(). Todo: Document it! |
1438 | | */ |
1439 | | size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx, |
1440 | | size_t& imageIdx) override; |
1441 | | //@} |
1442 | | |
1443 | | //! @name Protected Accessors |
1444 | | //@{ |
1445 | | [[nodiscard]] TiffBinaryElement* doClone() const override; |
1446 | | /*! |
1447 | | @brief Implements count(). Returns the count from the element definition. |
1448 | | */ |
1449 | | [[nodiscard]] size_t doCount() const override; |
1450 | | // Using doWriteData from base class |
1451 | | // Using doWriteImage from base class |
1452 | | /*! |
1453 | | @brief Implements size(). Returns count * type-size, both taken from |
1454 | | the element definition. |
1455 | | */ |
1456 | | [[nodiscard]] size_t doSize() const override; |
1457 | | // Using doSizeData from base class |
1458 | | // Using doSizeImage from base class |
1459 | | //@} |
1460 | | |
1461 | | private: |
1462 | | // DATA |
1463 | | ArrayDef elDef_{0, ttUndefined, 0}; //!< The array element definition |
1464 | | ByteOrder elByteOrder_{invalidByteOrder}; //!< Byte order to read/write the element |
1465 | | }; |
1466 | | |
1467 | | // ***************************************************************************** |
1468 | | // template, inline and free functions |
1469 | | |
1470 | | /*! |
1471 | | @brief Compare two TIFF component pointers by tag. Return true if the tag |
1472 | | of component lhs is less than that of rhs. |
1473 | | */ |
1474 | | bool cmpTagLt(const TiffComponent::SharedPtr& lhs, const TiffComponent::SharedPtr& rhs); |
1475 | | |
1476 | | //! Function to create and initialize a new TIFF entry |
1477 | | TiffComponent::UniquePtr newTiffEntry(uint16_t tag, IfdId group); |
1478 | | |
1479 | | //! Function to create and initialize a new TIFF makernote entry |
1480 | | TiffComponent::UniquePtr newTiffMnEntry(uint16_t tag, IfdId group); |
1481 | | |
1482 | | //! Function to create and initialize a new binary array element |
1483 | | TiffComponent::UniquePtr newTiffBinaryElement(uint16_t tag, IfdId group); |
1484 | | |
1485 | | //! Function to create and initialize a new TIFF directory |
1486 | | template <IfdId newGroup> |
1487 | 4.08k | TiffComponent::UniquePtr newTiffDirectory(uint16_t tag, IfdId /*group*/) { |
1488 | 4.08k | return std::make_unique<TiffDirectory>(tag, newGroup); |
1489 | 4.08k | } std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffDirectory<(Exiv2::IfdId)1>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1487 | 2.25k | TiffComponent::UniquePtr newTiffDirectory(uint16_t tag, IfdId /*group*/) { | 1488 | 2.25k | return std::make_unique<TiffDirectory>(tag, newGroup); | 1489 | 2.25k | } |
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffDirectory<(Exiv2::IfdId)56>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffDirectory<(Exiv2::IfdId)5>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffDirectory<(Exiv2::IfdId)21>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffDirectory<(Exiv2::IfdId)6>(unsigned short, Exiv2::IfdId) std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffDirectory<(Exiv2::IfdId)2>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1487 | 1.66k | TiffComponent::UniquePtr newTiffDirectory(uint16_t tag, IfdId /*group*/) { | 1488 | 1.66k | return std::make_unique<TiffDirectory>(tag, newGroup); | 1489 | 1.66k | } |
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffDirectory<(Exiv2::IfdId)3>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1487 | 130 | TiffComponent::UniquePtr newTiffDirectory(uint16_t tag, IfdId /*group*/) { | 1488 | 130 | return std::make_unique<TiffDirectory>(tag, newGroup); | 1489 | 130 | } |
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffDirectory<(Exiv2::IfdId)4>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1487 | 32 | TiffComponent::UniquePtr newTiffDirectory(uint16_t tag, IfdId /*group*/) { | 1488 | 32 | return std::make_unique<TiffDirectory>(tag, newGroup); | 1489 | 32 | } |
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffDirectory<(Exiv2::IfdId)19>(unsigned short, Exiv2::IfdId) |
1490 | | |
1491 | | //! Function to create and initialize a new TIFF sub-directory |
1492 | | template <IfdId newGroup> |
1493 | 2.99k | TiffComponent::UniquePtr newTiffSubIfd(uint16_t tag, IfdId group) { |
1494 | 2.99k | return std::make_unique<TiffSubIfd>(tag, group, newGroup); |
1495 | 2.99k | } Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)56>(unsigned short, Exiv2::IfdId) std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)5>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1493 | 1.29k | TiffComponent::UniquePtr newTiffSubIfd(uint16_t tag, IfdId group) { | 1494 | 1.29k | return std::make_unique<TiffSubIfd>(tag, group, newGroup); | 1495 | 1.29k | } |
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)6>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1493 | 1.12k | TiffComponent::UniquePtr newTiffSubIfd(uint16_t tag, IfdId group) { | 1494 | 1.12k | return std::make_unique<TiffSubIfd>(tag, group, newGroup); | 1495 | 1.12k | } |
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)9>(unsigned short, Exiv2::IfdId) std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)7>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1493 | 577 | TiffComponent::UniquePtr newTiffSubIfd(uint16_t tag, IfdId group) { | 1494 | 577 | return std::make_unique<TiffSubIfd>(tag, group, newGroup); | 1495 | 577 | } |
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)18>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)100>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)99>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)101>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)102>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)103>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)104>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)105>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)106>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)107>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)108>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)109>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)110>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)111>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)112>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)113>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)114>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)65>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)119>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)124>(unsigned short, Exiv2::IfdId) |
1496 | | |
1497 | | //! Function to create and initialize a new binary array entry |
1498 | | template <const ArrayCfg& arrayCfg, size_t N, const ArrayDef (&arrayDef)[N]> |
1499 | 491 | TiffComponent::UniquePtr newTiffBinaryArray0(uint16_t tag, IfdId group) { |
1500 | 491 | static_assert(N > 0, "Passed zero length newTiffBinaryArray0"); |
1501 | 491 | return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, arrayDef, N); |
1502 | 491 | } tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10canonCsCfgEELm1ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10canonCsDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE Line | Count | Source | 1499 | 374 | TiffComponent::UniquePtr newTiffBinaryArray0(uint16_t tag, IfdId group) { | 1500 | 374 | static_assert(N > 0, "Passed zero length newTiffBinaryArray0"); | 1501 | 374 | return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, arrayDef, N); | 1502 | 374 | } |
tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10canonFiCfgEELm1ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10canonFiDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE Line | Count | Source | 1499 | 63 | TiffComponent::UniquePtr newTiffBinaryArray0(uint16_t tag, IfdId group) { | 1500 | 63 | static_assert(N > 0, "Passed zero length newTiffBinaryArray0"); | 1501 | 63 | return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, arrayDef, N); | 1502 | 63 | } |
tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10canonLeCfgEELm2ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10canonLeDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE Line | Count | Source | 1499 | 54 | TiffComponent::UniquePtr newTiffBinaryArray0(uint16_t tag, IfdId group) { | 1500 | 54 | static_assert(N > 0, "Passed zero length newTiffBinaryArray0"); | 1501 | 54 | return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, arrayDef, N); | 1502 | 54 | } |
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10nikonVrCfgEELm2ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10nikonVrDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10nikonPcCfgEELm13ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10nikonPcDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10nikonWtCfgEELm3ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10nikonWtDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10nikonIiCfgEELm5ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10nikonIiDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10nikonAfCfgEELm3ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10nikonAfDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10nikonMeCfgEELm4ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10nikonMeDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10nikonFiCfgEELm3ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10nikonFiDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L11nikonAFTCfgEELm3ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L11nikonAFTDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L12samsungPwCfgEELm5ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L12samsungPwDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L12sonyMisc1CfgEELm1ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L12sonyMisc1DefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L13sonySInfo1CfgEELm5ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L13sonySInfo1DefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L12sony1MCs7CfgEELm2ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10minoCs7DefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L15sony1MCsA100CfgEELm3ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L15sony1MCsA100DefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10minoCs7CfgEELm2ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10minoCs7DefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10minoCs5CfgEELm1ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10minoCs5DefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE |
1503 | | |
1504 | | //! Function to create and initialize a new simple binary array entry |
1505 | | template <const ArrayCfg& arrayCfg> |
1506 | 663 | TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) { |
1507 | 663 | return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0); |
1508 | 663 | } Unexecuted instantiation: tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::minoCsoCfg>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::minoCsnCfg>(unsigned short, Exiv2::IfdId) tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonSiCfg>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1506 | 141 | TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) { | 1507 | 141 | return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0); | 1508 | 141 | } |
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonPaCfg>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1506 | 13 | TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) { | 1507 | 13 | return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0); | 1508 | 13 | } |
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonCfCfg>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1506 | 5 | TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) { | 1507 | 5 | return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0); | 1508 | 5 | } |
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonPiCfg>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1506 | 6 | TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) { | 1507 | 6 | return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0); | 1508 | 6 | } |
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonTiCfg>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1506 | 66 | TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) { | 1507 | 66 | return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0); | 1508 | 66 | } |
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonPrCfg>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1506 | 61 | TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) { | 1507 | 61 | return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0); | 1508 | 61 | } |
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonAfMiAdjCfg>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1506 | 54 | TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) { | 1507 | 54 | return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0); | 1508 | 54 | } |
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonVigCor2Cfg>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1506 | 54 | TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) { | 1507 | 54 | return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0); | 1508 | 54 | } |
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonLiOpCfg>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1506 | 54 | TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) { | 1507 | 54 | return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0); | 1508 | 54 | } |
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonAmCfg>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1506 | 54 | TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) { | 1507 | 54 | return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0); | 1508 | 54 | } |
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonMeCfg>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1506 | 54 | TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) { | 1507 | 54 | return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0); | 1508 | 54 | } |
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonFilCfg>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1506 | 50 | TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) { | 1507 | 50 | return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0); | 1508 | 50 | } |
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonHdrCfg>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1506 | 51 | TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) { | 1507 | 51 | return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0); | 1508 | 51 | } |
Unexecuted instantiation: tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonAfCCfg>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonRawBCfg>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::sony1MCsoCfg>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::sony1MCsnCfg>(unsigned short, Exiv2::IfdId) |
1509 | | |
1510 | | //! Function to create and initialize a new complex binary array entry |
1511 | | template <size_t N, const ArraySet (&arraySet)[N], CfgSelFct cfgSelFct> |
1512 | 0 | TiffComponent::UniquePtr newTiffBinaryArray2(uint16_t tag, IfdId group) { |
1513 | 0 | static_assert(N > 0, "Passed zero length newTiffBinaryArray2"); |
1514 | 0 | return std::make_unique<TiffBinaryArray>(tag, group, arraySet, N, cfgSelFct); |
1515 | 0 | } Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm6ETnRAT__KNS0_8ArraySetEL_ZNS0_L10nikonSiSetEEXadL_ZNS0_13nikonSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm6ETnRAT__KNS0_8ArraySetEL_ZNS0_L10nikonCbSetEEXadL_ZNS0_13nikonSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm4ETnRAT__KNS0_8ArraySetEL_ZNS0_L10nikonLdSetEEXadL_ZNS0_13nikonSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm5ETnRAT__KNS0_8ArraySetEL_ZNS0_L10nikonFlSetEEXadL_ZNS0_13nikonSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm2ETnRAT__KNS0_8ArraySetEL_ZNS0_L11nikonAf2SetEEXadL_ZNS0_13nikonSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm1ETnRAT__KNS0_8ArraySetEL_ZNS0_L12sony2010eSetEEXadL_ZNS0_17sony2010eSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm1ETnRAT__KNS0_8ArraySetEL_ZNS0_L10sony2FpSetEEXadL_ZNS0_15sony2FpSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm1ETnRAT__KNS0_8ArraySetEL_ZNS0_L13sonyMisc2bSetEEXadL_ZNS0_18sonyMisc2bSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm1ETnRAT__KNS0_8ArraySetEL_ZNS0_L13sonyMisc3cSetEEXadL_ZNS0_18sonyMisc3cSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm2ETnRAT__KNS0_8ArraySetEL_ZNS0_L10sony1CsSetEEXadL_ZNS0_14sonyCsSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm2ETnRAT__KNS0_8ArraySetEL_ZNS0_L10sony2CsSetEEXadL_ZNS0_14sonyCsSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE |
1516 | | |
1517 | | //! Function to create and initialize a new TIFF entry for a thumbnail (data) |
1518 | | template <uint16_t szTag, IfdId szGroup> |
1519 | 71 | TiffComponent::UniquePtr newTiffThumbData(uint16_t tag, IfdId group) { |
1520 | 71 | return std::make_unique<TiffDataEntry>(tag, group, szTag, szGroup); |
1521 | 71 | } std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbData<(unsigned short)279, (Exiv2::IfdId)2>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1519 | 15 | TiffComponent::UniquePtr newTiffThumbData(uint16_t tag, IfdId group) { | 1520 | 15 | return std::make_unique<TiffDataEntry>(tag, group, szTag, szGroup); | 1521 | 15 | } |
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbData<(unsigned short)514, (Exiv2::IfdId)2>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1519 | 56 | TiffComponent::UniquePtr newTiffThumbData(uint16_t tag, IfdId group) { | 1520 | 56 | return std::make_unique<TiffDataEntry>(tag, group, szTag, szGroup); | 1521 | 56 | } |
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbData<(unsigned short)514, (Exiv2::IfdId)65>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbData<(unsigned short)3, (Exiv2::IfdId)117>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbData<(unsigned short)3, (Exiv2::IfdId)116>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbData<(unsigned short)514, (Exiv2::IfdId)119>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbData<(unsigned short)137, (Exiv2::IfdId)124>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbData<(unsigned short)137, (Exiv2::IfdId)57>(unsigned short, Exiv2::IfdId) |
1522 | | |
1523 | | //! Function to create and initialize a new TIFF entry for a thumbnail (size) |
1524 | | template <uint16_t dtTag, IfdId dtGroup> |
1525 | 29 | TiffComponent::UniquePtr newTiffThumbSize(uint16_t tag, IfdId group) { |
1526 | 29 | return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup); |
1527 | 29 | } Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbSize<(unsigned short)273, (Exiv2::IfdId)2>(unsigned short, Exiv2::IfdId) std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbSize<(unsigned short)513, (Exiv2::IfdId)2>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1525 | 29 | TiffComponent::UniquePtr newTiffThumbSize(uint16_t tag, IfdId group) { | 1526 | 29 | return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup); | 1527 | 29 | } |
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbSize<(unsigned short)513, (Exiv2::IfdId)65>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbSize<(unsigned short)4, (Exiv2::IfdId)117>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbSize<(unsigned short)4, (Exiv2::IfdId)116>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbSize<(unsigned short)513, (Exiv2::IfdId)119>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbSize<(unsigned short)136, (Exiv2::IfdId)124>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbSize<(unsigned short)136, (Exiv2::IfdId)57>(unsigned short, Exiv2::IfdId) |
1528 | | |
1529 | | //! Function to create and initialize a new TIFF entry for image data |
1530 | | template <uint16_t szTag, IfdId szGroup> |
1531 | 101 | TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) { |
1532 | 101 | return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup); |
1533 | 101 | } std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)1>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1531 | 5 | TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) { | 1532 | 5 | return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup); | 1533 | 5 | } |
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)1>(unsigned short, Exiv2::IfdId) std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)1>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1531 | 96 | TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) { | 1532 | 96 | return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup); | 1533 | 96 | } |
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)9>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)9>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)9>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)10>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)10>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)10>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)11>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)11>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)11>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)12>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)12>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)12>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)13>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)13>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)13>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)14>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)14>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)14>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)15>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)15>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)15>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)16>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)16>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)16>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)17>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)17>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)17>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)2>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)18>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)18>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)18>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)3>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)3>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)3>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)4>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)4>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)4>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)258, (Exiv2::IfdId)99>(unsigned short, Exiv2::IfdId) |
1534 | | |
1535 | | //! Function to create and initialize a new TIFF entry for image data (size) |
1536 | | template <uint16_t dtTag, IfdId dtGroup> |
1537 | 54 | TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) { |
1538 | | // Todo: Same as newTiffThumbSize - consolidate (rename)? |
1539 | 54 | return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup); |
1540 | 54 | } Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)1>(unsigned short, Exiv2::IfdId) std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)1>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1537 | 7 | TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) { | 1538 | | // Todo: Same as newTiffThumbSize - consolidate (rename)? | 1539 | 7 | return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup); | 1540 | 7 | } |
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)1>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1537 | 46 | TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) { | 1538 | | // Todo: Same as newTiffThumbSize - consolidate (rename)? | 1539 | 46 | return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup); | 1540 | 46 | } |
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)9>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)9>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)9>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)10>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)10>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)10>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)11>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)11>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)11>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)12>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)12>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)12>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)13>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)13>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)13>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)14>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)14>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)14>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)15>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)15>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)15>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)16>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)16>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)16>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)17>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)17>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)17>(unsigned short, Exiv2::IfdId) std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)2>(unsigned short, Exiv2::IfdId) Line | Count | Source | 1537 | 1 | TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) { | 1538 | | // Todo: Same as newTiffThumbSize - consolidate (rename)? | 1539 | 1 | return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup); | 1540 | 1 | } |
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)18>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)18>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)18>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)3>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)3>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)3>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)4>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)4>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)4>(unsigned short, Exiv2::IfdId) Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)257, (Exiv2::IfdId)99>(unsigned short, Exiv2::IfdId) |
1541 | | |
1542 | | } // namespace Internal |
1543 | | } // namespace Exiv2 |
1544 | | |
1545 | | #endif // #ifndef TIFFCOMPOSITE_INT_HPP_ |