Supported MakerNote byte order and invalidTypeId
This commit is contained in:
+15
-12
@@ -20,14 +20,14 @@
|
||||
*/
|
||||
/*
|
||||
File: exif.cpp
|
||||
Version: $Name: $ $Revision: 1.28 $
|
||||
Version: $Name: $ $Revision: 1.29 $
|
||||
Author(s): Andreas Huggel (ahu) <ahuggel@gmx.net>
|
||||
History: 26-Jan-04, ahu: created
|
||||
11-Feb-04, ahu: isolated as a component
|
||||
*/
|
||||
// *****************************************************************************
|
||||
#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
|
||||
@@ -573,7 +573,7 @@ namespace Exif {
|
||||
add(ifd0_.begin(), ifd0_.end(), byteOrder());
|
||||
add(exifIfd_.begin(), exifIfd_.end(), byteOrder());
|
||||
if (makerNote_) {
|
||||
add(makerNote_->begin(), makerNote_->end(), byteOrder());
|
||||
add(makerNote_->begin(), makerNote_->end(), makerNote_->byteOrder());
|
||||
}
|
||||
add(iopIfd_.begin(), iopIfd_.end(), byteOrder());
|
||||
add(gpsIfd_.begin(), gpsIfd_.end(), byteOrder());
|
||||
@@ -641,7 +641,7 @@ std::cerr << "->>>>>> writing from metadata <<<<<<-\n";
|
||||
if (makerNote_) {
|
||||
// Build MakerNote from metadata
|
||||
makerNote = makerNote_->clone();
|
||||
addToMakerNote(makerNote, begin(), end(), byteOrder());
|
||||
addToMakerNote(makerNote, begin(), end(), makerNote_->byteOrder());
|
||||
// Create a placeholder MakerNote entry of the correct size and
|
||||
// add it to the Exif IFD (because we don't know the offset yet)
|
||||
Entry e;
|
||||
@@ -817,20 +817,23 @@ std::cerr << "->>>>>> writing from metadata <<<<<<-\n";
|
||||
if (!this->compatible()) return false;
|
||||
|
||||
bool compatible = true;
|
||||
compatible |= updateRange(ifd0_.begin(), ifd0_.end());
|
||||
compatible |= updateRange(exifIfd_.begin(), exifIfd_.end());
|
||||
compatible |= updateRange(ifd0_.begin(), ifd0_.end(), byteOrder());
|
||||
compatible |= updateRange(exifIfd_.begin(), exifIfd_.end(), byteOrder());
|
||||
if (makerNote_) {
|
||||
compatible |= updateRange(makerNote_->begin(), makerNote_->end());
|
||||
compatible |= updateRange(makerNote_->begin(),
|
||||
makerNote_->end(),
|
||||
makerNote_->byteOrder());
|
||||
}
|
||||
compatible |= updateRange(iopIfd_.begin(), iopIfd_.end());
|
||||
compatible |= updateRange(gpsIfd_.begin(), gpsIfd_.end());
|
||||
compatible |= updateRange(ifd1_.begin(), ifd1_.end());
|
||||
compatible |= updateRange(iopIfd_.begin(), iopIfd_.end(), byteOrder());
|
||||
compatible |= updateRange(gpsIfd_.begin(), gpsIfd_.end(), byteOrder());
|
||||
compatible |= updateRange(ifd1_.begin(), ifd1_.end(), byteOrder());
|
||||
|
||||
return compatible;
|
||||
} // ExifData::updateEntries
|
||||
|
||||
bool ExifData::updateRange(const Entries::iterator& begin,
|
||||
const Entries::iterator& end)
|
||||
const Entries::iterator& end,
|
||||
ByteOrder byteOrder)
|
||||
{
|
||||
bool compatible = true;
|
||||
for (Entries::iterator entry = begin; entry != end; ++entry) {
|
||||
@@ -850,7 +853,7 @@ std::cerr << "->>>>>> writing from metadata <<<<<<-\n";
|
||||
}
|
||||
else {
|
||||
char* buf = new char[md->size()];
|
||||
md->copy(buf, byteOrder());
|
||||
md->copy(buf, byteOrder);
|
||||
entry->setValue(md->typeId(), md->count(), buf, md->size());
|
||||
delete[] buf;
|
||||
}
|
||||
|
||||
+5
-3
@@ -21,7 +21,7 @@
|
||||
/*!
|
||||
@file exif.hpp
|
||||
@brief Encoding and decoding of %Exif data
|
||||
@version $Name: $ $Revision: 1.28 $
|
||||
@version $Name: $ $Revision: 1.29 $
|
||||
@author Andreas Huggel (ahu)
|
||||
<a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a>
|
||||
@date 09-Jan-04, ahu: created
|
||||
@@ -138,7 +138,8 @@ namespace Exif {
|
||||
//! Return the tag
|
||||
uint16 tag() const { return tag_; }
|
||||
//! 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
|
||||
const char* typeName() const { return TypeInfo::typeName(typeId()); }
|
||||
//! Return the size in bytes of one component of this type
|
||||
@@ -627,7 +628,8 @@ namespace Exif {
|
||||
(if any).
|
||||
*/
|
||||
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
|
||||
bytes written.
|
||||
|
||||
Reference in New Issue
Block a user