Exiv2
Loading...
Searching...
No Matches
bmffimage.hpp
1// ***************************************************************** -*- C++ -*-
2/*
3 * Copyright (C) 2021 Exiv2 authors
4 * This program is part of the Exiv2 distribution.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
19 */
20
21#pragma once
22
23// *****************************************************************************
24#include "exiv2lib_export.h"
25
26// included header files
27#include "image.hpp"
28#include "iostream"
29
30// *****************************************************************************
31// namespace extensions
32namespace Exiv2
33{
34 EXIV2API bool enableBMFF(bool enable = true);
35}
36
37#ifdef EXV_ENABLE_BMFF
38namespace Exiv2
39{
40 struct Iloc
41 {
42 Iloc(uint32_t ID = 0, uint32_t start = 0, uint32_t length = 0) : ID_(ID), start_(start), length_(length){};
43 virtual ~Iloc(){};
44
45 uint32_t ID_;
46 uint32_t start_;
47 uint32_t length_;
48
49 std::string toString() const;
50 }; // class Iloc
51
52 // *****************************************************************************
53 // class definitions
54
55 // Add Base Media File Format to the supported image formats
56 namespace ImageType
57 {
58 const int bmff = 19;
59 }
60
64 class EXIV2API BmffImage : public Image
65 {
66 public:
68
69
85
87
94 void parseTiff(uint32_t root_tag, uint64_t length);
95 void parseTiff(uint32_t root_tag, uint64_t length,uint64_t start);
97
99
105 void parseXmp(uint64_t length,uint64_t start);
107
109
122 std::ostream &out,
123 bool bTrace,
124 uint8_t version,
125 uint32_t width_offset,
126 uint32_t height_offset,
127 uint32_t size_offset,
128 uint32_t relative_position);
130
132
133 void readMetadata() /* override */;
134 void writeMetadata() /* override */;
135 void setComment(const std::string& comment) /* override */;
136 void printStructure(std::ostream& out, Exiv2::PrintStructureOption option,int depth);
138
140
141 std::string mimeType() const /* override */;
142 int pixelWidth() const;
143 int pixelHeight() const;
145
146 Exiv2::ByteOrder endian_ ;
147
148 private:
149 void openOrThrow();
158 long boxHandler(std::ostream& out, Exiv2::PrintStructureOption option,
159 const long pbox_end, int depth);
160 std::string indent(int i)
161 {
162 return std::string(2*i,' ');
163 }
164
165 uint32_t fileType_;
166 std::set<uint64_t> visits_;
167 uint64_t visits_max_;
168 uint16_t unknownID_; // 0xffff
169 uint16_t exifID_;
170 uint16_t xmpID_;
171 std::map<uint32_t, Iloc> ilocs_;
172 bool bReadMetadata_;
174
178 std::string toAscii(long n);
179 std::string boxName(uint32_t box);
180 bool superBox(uint32_t box);
181 bool fullBox(uint32_t box);
182 std::string uuidName(Exiv2::DataBuf& uuid);
183
184 }; // class BmffImage
185
186 // *****************************************************************************
187 // template, inline and free functions
188
189 // These could be static private functions on Image subclasses but then
190 // ImageFactory needs to be made a friend.
197
199 EXIV2API bool isBmffType(BasicIo& iIo, bool advance);
200} // namespace Exiv2
201#endif // EXV_ENABLE_BMFF
An interface for simple binary IO.
Definition basicio.hpp:55
std::auto_ptr< BasicIo > AutoPtr
BasicIo auto_ptr type.
Definition basicio.hpp:58
void setComment(const std::string &comment)
Set the image comment. The new comment is not written to the image until the writeMetadata() method i...
void writeMetadata()
Write metadata back to the image.
void parseCr3Preview(DataBuf &data, std::ostream &out, bool bTrace, uint8_t version, uint32_t width_offset, uint32_t height_offset, uint32_t size_offset, uint32_t relative_position)
Parse a Canon PRVW or THMB box and add an entry to the set of native previews.
BmffImage(BasicIo::AutoPtr io, bool create)
Constructor to open a BMFF image. Since the constructor can not return a result, callers should check...
void parseXmp(uint64_t length, uint64_t start)
parse embedded xmp/xml
void readMetadata()
Read all metadata supported by a specific image format from the image. Before this method is called,...
void printStructure(std::ostream &out, Exiv2::PrintStructureOption option, int depth)
Print out the structure of image file.
std::string mimeType() const
Return the MIME type of the image.
int pixelWidth() const
Return the pixel width of the image.
int pixelHeight() const
Return the pixel height of the image.
void parseTiff(uint32_t root_tag, uint64_t length)
parse embedded tiff file (Exif metadata)
Utility class containing a character array. All it does is to take care of memory allocation and dele...
Definition types.hpp:193
virtual std::string comment() const
Return a copy of the image comment. May be an empty string.
Definition image.cpp:742
std::auto_ptr< Image > AutoPtr
Image auto_ptr type.
Definition image.hpp:81
virtual BasicIo & io() const
Return a reference to the BasicIo instance being used for Io.
Definition image.cpp:752
Image(int imageType, uint16_t supportedMetadata, BasicIo::AutoPtr io)
Constructor taking the image type, a bitmap of the supported metadata types and an auto-pointer that ...
Definition image.cpp:167
Supported image formats.
Definition asfvideo.hpp:42
const int bmff
BMFF (bmff) image type (see class BMFF).
Definition bmffimage.hpp:58
Provides classes and functions to encode and decode Exif and Iptc data. The libexiv2 API consists of ...
Definition asfvideo.hpp:36
PrintStructureOption
Options for printStructure.
Definition image.hpp:64
EXIV2API const char * version()
Return the version of Exiv2 as "C" string eg "0.27.0.2".
Definition version.cpp:103
EXIV2API Image::AutoPtr newBmffInstance(BasicIo::AutoPtr io, bool create)
Create a new BMFF instance and return an auto-pointer to it. Caller owns the returned object and the ...
ByteOrder
Type to express the byte order (little or big endian).
Definition types.hpp:102
EXIV2API bool isBmffType(BasicIo &iIo, bool advance)
Check if the file iIo is a BMFF image.