Supported MakerNote byte order and invalidTypeId

v0.27.3
Andreas Huggel 22 years ago
parent f5f515363e
commit 8a776d2f44

@ -20,14 +20,14 @@
*/ */
/* /*
File: exif.cpp File: exif.cpp
Version: $Name: $ $Revision: 1.28 $ Version: $Name: $ $Revision: 1.29 $
Author(s): Andreas Huggel (ahu) <ahuggel@gmx.net> Author(s): Andreas Huggel (ahu) <ahuggel@gmx.net>
History: 26-Jan-04, ahu: created History: 26-Jan-04, ahu: created
11-Feb-04, ahu: isolated as a component 11-Feb-04, ahu: isolated as a component
*/ */
// ***************************************************************************** // *****************************************************************************
#include "rcsid.hpp" #include "rcsid.hpp"
EXIV2_RCSID("@(#) $Name: $ $Revision: 1.28 $ $RCSfile: exif.cpp,v $") EXIV2_RCSID("@(#) $Name: $ $Revision: 1.29 $ $RCSfile: exif.cpp,v $")
// ***************************************************************************** // *****************************************************************************
// included header files // included header files
@ -573,7 +573,7 @@ namespace Exif {
add(ifd0_.begin(), ifd0_.end(), byteOrder()); add(ifd0_.begin(), ifd0_.end(), byteOrder());
add(exifIfd_.begin(), exifIfd_.end(), byteOrder()); add(exifIfd_.begin(), exifIfd_.end(), byteOrder());
if (makerNote_) { if (makerNote_) {
add(makerNote_->begin(), makerNote_->end(), byteOrder()); add(makerNote_->begin(), makerNote_->end(), makerNote_->byteOrder());
} }
add(iopIfd_.begin(), iopIfd_.end(), byteOrder()); add(iopIfd_.begin(), iopIfd_.end(), byteOrder());
add(gpsIfd_.begin(), gpsIfd_.end(), byteOrder()); add(gpsIfd_.begin(), gpsIfd_.end(), byteOrder());
@ -641,7 +641,7 @@ std::cerr << "->>>>>> writing from metadata <<<<<<-\n";
if (makerNote_) { if (makerNote_) {
// Build MakerNote from metadata // Build MakerNote from metadata
makerNote = makerNote_->clone(); makerNote = makerNote_->clone();
addToMakerNote(makerNote, begin(), end(), byteOrder()); addToMakerNote(makerNote, begin(), end(), makerNote_->byteOrder());
// Create a placeholder MakerNote entry of the correct size and // Create a placeholder MakerNote entry of the correct size and
// add it to the Exif IFD (because we don't know the offset yet) // add it to the Exif IFD (because we don't know the offset yet)
Entry e; Entry e;
@ -817,20 +817,23 @@ std::cerr << "->>>>>> writing from metadata <<<<<<-\n";
if (!this->compatible()) return false; if (!this->compatible()) return false;
bool compatible = true; bool compatible = true;
compatible |= updateRange(ifd0_.begin(), ifd0_.end()); compatible |= updateRange(ifd0_.begin(), ifd0_.end(), byteOrder());
compatible |= updateRange(exifIfd_.begin(), exifIfd_.end()); compatible |= updateRange(exifIfd_.begin(), exifIfd_.end(), byteOrder());
if (makerNote_) { if (makerNote_) {
compatible |= updateRange(makerNote_->begin(), makerNote_->end()); compatible |= updateRange(makerNote_->begin(),
makerNote_->end(),
makerNote_->byteOrder());
} }
compatible |= updateRange(iopIfd_.begin(), iopIfd_.end()); compatible |= updateRange(iopIfd_.begin(), iopIfd_.end(), byteOrder());
compatible |= updateRange(gpsIfd_.begin(), gpsIfd_.end()); compatible |= updateRange(gpsIfd_.begin(), gpsIfd_.end(), byteOrder());
compatible |= updateRange(ifd1_.begin(), ifd1_.end()); compatible |= updateRange(ifd1_.begin(), ifd1_.end(), byteOrder());
return compatible; return compatible;
} // ExifData::updateEntries } // ExifData::updateEntries
bool ExifData::updateRange(const Entries::iterator& begin, bool ExifData::updateRange(const Entries::iterator& begin,
const Entries::iterator& end) const Entries::iterator& end,
ByteOrder byteOrder)
{ {
bool compatible = true; bool compatible = true;
for (Entries::iterator entry = begin; entry != end; ++entry) { for (Entries::iterator entry = begin; entry != end; ++entry) {
@ -850,7 +853,7 @@ std::cerr << "->>>>>> writing from metadata <<<<<<-\n";
} }
else { else {
char* buf = new char[md->size()]; char* buf = new char[md->size()];
md->copy(buf, byteOrder()); md->copy(buf, byteOrder);
entry->setValue(md->typeId(), md->count(), buf, md->size()); entry->setValue(md->typeId(), md->count(), buf, md->size());
delete[] buf; delete[] buf;
} }

@ -21,7 +21,7 @@
/*! /*!
@file exif.hpp @file exif.hpp
@brief Encoding and decoding of %Exif data @brief Encoding and decoding of %Exif data
@version $Name: $ $Revision: 1.28 $ @version $Name: $ $Revision: 1.29 $
@author Andreas Huggel (ahu) @author Andreas Huggel (ahu)
<a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a> <a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a>
@date 09-Jan-04, ahu: created @date 09-Jan-04, ahu: created
@ -138,7 +138,8 @@ namespace Exif {
//! Return the tag //! Return the tag
uint16 tag() const { return tag_; } uint16 tag() const { return tag_; }
//! Return the type id of the value //! Return the type id of the value
TypeId typeId() const { return value_ == 0 ? invalid : value_->typeId(); } TypeId typeId() const
{ return value_ == 0 ? invalidTypeId : value_->typeId(); }
//! Return the name of the type //! Return the name of the type
const char* typeName() const { return TypeInfo::typeName(typeId()); } const char* typeName() const { return TypeInfo::typeName(typeId()); }
//! Return the size in bytes of one component of this type //! Return the size in bytes of one component of this type
@ -627,7 +628,8 @@ namespace Exif {
(if any). (if any).
*/ */
bool updateRange(const Entries::iterator& begin, bool updateRange(const Entries::iterator& begin,
const Entries::iterator& end); const Entries::iterator& end,
ByteOrder byteOrder);
/*! /*!
@brief Write Exif data to a data buffer the hard way, return number of @brief Write Exif data to a data buffer the hard way, return number of
bytes written. bytes written.

Loading…
Cancel
Save