Supported MakerNote byte order and invalidTypeId

This commit is contained in:
Andreas Huggel
2004-03-18 16:04:53 +00:00
parent f5f515363e
commit 8a776d2f44
2 changed files with 20 additions and 15 deletions
+15 -12
View File
@@ -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
View File
@@ -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.