25 #include "makernotedir.hpp"
26 #include "io/stream.hpp"
27 #include "ifdfilecontainer.hpp"
34 const TagTable empty_tag_names = {};
47 LOGDBG1(
"createMakerNote()\n");
54 return std::make_shared<MakerNoteDir>(
60 return std::make_shared<MakerNoteDir>(
66 file->seek(
offset, SEEK_SET);
67 file->read(&data, 18);
71 if (memcmp(
"Nikon\0", data, 6) == 0) {
73 return std::make_shared<MakerNoteDir>(
76 else if (data[6] == 2) {
78 return std::make_shared<MakerNoteDir>(
82 return std::make_shared<MakerNoteDir>(
90 return std::make_shared<MakerNoteDir>(
94 if (memcmp(
"OLYMPUS\0", data, 8) == 0) {
95 return std::make_shared<MakerNoteDir>(
99 if (memcmp(
"OM SYSTEM", data, 9) == 0) {
100 return std::make_shared<MakerNoteDir>(
104 if (memcmp(
"OLYMP\0", data, 6) == 0) {
105 return std::make_shared<MakerNoteDir>(
110 if (memcmp(
"EPSON\0", data, 6) == 0) {
111 return std::make_shared<MakerNoteDir>(
116 if (memcmp(
"AOC\0", data, 4) == 0) {
117 return std::make_shared<MakerNoteDir>(
121 if (memcmp(
"PENTAX \0", data, 8) == 0) {
122 return std::make_shared<MakerNoteDir>(
126 if (memcmp(
"Panasonic\0", data, 10) == 0) {
127 return std::make_shared<MakerNoteDir>(
131 if (memcmp(
"Ricoh\0", data, 5) == 0) {
132 return std::make_shared<MakerNoteDir>(
136 if (memcmp(
"LEICA CAMERA AG\0", data, 16) == 0) {
142 return std::make_shared<MakerNoteDir>(
147 if (memcmp(
"LEICA", data, 5) == 0) {
148 if (data[5] == 0 && data[6] == 0 && data[7] == 0) {
151 return std::make_shared<MakerNoteDir>(
155 return std::make_shared<MakerNoteDir>(
160 if (data[5] == 0 && data[7] == 0) {
165 return std::make_shared<MakerNoteDir>(
174 return std::make_shared<MakerNoteDir>(
180 if (data[5] == 0x0 && data[6] == 0x02 && data[7] == 0xff) {
181 return std::make_shared<MakerNoteDir>(
186 if (data[5] ==
'0' && data[6] == 0x03 && data[7] == 0) {
187 return std::make_shared<MakerNoteDir>(
192 if (data[5] == 0 && data[6] == 0x02 && data[7] == 0) {
193 return std::make_shared<MakerNoteDir>(
198 if (memcmp(
"YI \0", data, 8) == 0) {
199 return std::make_shared<MakerNoteDir>(
203 if (memcmp(
"Apple iOS\0", data, 10) == 0) {
204 return std::make_shared<MakerNoteDir>(
208 if (memcmp(
"STMN", data, 4) == 0) {
209 if (data[8] == data[9] == data[10] == data[11] == 0) {
210 return std::make_shared<NonMakerNoteDir>(
container,
"Samsung1a");
212 return std::make_shared<NonMakerNoteDir>(
container,
"Samsung1b");
216 if (memcmp(
"FUJIFILM", data, 8) == 0) {
217 auto mnote = std::make_shared<MakerNoteDir>(
223 if (memcmp(
"SIGMA\0", data, 6) == 0) {
224 return std::make_shared<MakerNoteDir>(
228 if (memcmp(
"MLT0", data + 10, 4) == 0) {
229 return std::make_shared<MakerNoteDir>(
236 MakerNoteDir::MakerNoteDir(
RawContainer& _container,
const std::string&
id)
242 MakerNoteDir::MakerNoteDir(IfdDir& ifd,
const std::string&
id,
const TagTable& tag_table)
243 : MakerNoteDir(ifd.offset(), ifd.container(), ifd.offset(), id, tag_table)
248 MakerNoteDir::MakerNoteDir(off_t _offset,
249 RawContainer& _container,
251 const std::string&
id,
252 const TagTable& tag_table)
254 , m_mnote_offset(mnote_offset)
260 MakerNoteDir::~MakerNoteDir()
268 LOGDBG1(
"Coudln't get entry %u\n",
id);
272 uint32_t val_offset = 0;
274 if (entry->type() == 13 || entry->type() == IFD::EXIF_FORMAT_LONG) {
275 val_offset = getEntryValue<uint32_t>(*entry, 0,
true);
276 LOGDBG1(
"Custom IFD offset (uncorrected) = %u\n", val_offset);
277 val_offset +=
container().exifOffsetCorrection() + getMnoteOffset();
280 val_offset = entry->offset();
282 LOGDBG1(
"Custom IFD offset = %u\n", val_offset);
const RawContainer & container() const
The container for the IfdDir, const.
void setBaseOffset(off_t base)
Set the base offset.
IfdEntry::Ref getEntry(uint16_t id) const
Get the IfdEntry for the tag id.
std::shared_ptr< IfdDir > Ref
Shared ptr of an IfdDir.
off_t offset() const
Return the offset.
IfdDir::Ref getIfdInEntry(uint16_t id)
static Ref createMakerNote(off_t offset, RawContainer &container, or_rawfile_type file_type)
Generic interface for the RAW file container.
or_rawfile_type
Types of RAW files.
Global namespace for libopenraw.