Imported Upstream version 1.2

parent c718f397
$Id: BUGS,v 1.1 2002/09/02 19:27:56 daniel Exp $
The following are known bugs/weaknesses in metacam:
* The mixed-endianness support is weak and I know it, it probably fails
horribly on some systems. On the bright side the endianness detection
and compensation is fairly localized so it'll be easy to fix.
* Error handling when reading corrupt IFD's is mostly non-existant.
* Support for construction of custom IFD's is partially but not
completely implemented.
* I haven't finished library-ifying the guts of metacam so they can be
used in other contexts (such as DeNEF)
......@@ -18,7 +18,7 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# -----------------------------------------------------------------------------
#
# $Id: Makefile,v 1.7 2001/12/25 19:56:44 daniel Exp $
# $Id: Makefile,v 1.12 2002/09/02 20:28:46 daniel Exp $
# Some operating-system dependent choices for compile-time flags. Uncomment
# whichever is most appropriate
......@@ -32,35 +32,40 @@ INCLUDES=
CXXFLAGS=-Wall $(OSCXXFLAGS) -D_GNU_SOURCE -O2 $(INCLUDES)
OBJS=metacam.o rationals.o ifdentry.o ifd.o tifffile.o exiftags.o \
nikontags.o olympustags.o canontags.o casiotags.o dpyfuncs.o
HDRS=metacam.h dpyfuncs.h
LIBOBJS=rationals.o exiftags.o \
nikontags.o olympustags.o canontags.o casiotags.o dpyfuncs.o \
metatiff.o filetiff.o tiffdata.o dataifd.o dataifdentry.o editifd.o \
ocontext.o lookups.o
EXEOBJS=metacam.o
HDRS=metacam.h dpyfuncs.h metatiff.h filetiff.h datatiff.h edittiff.h \
odrivers.h
DEPS=$(OBJS:.o=.dep)
TIFS=$(wildcard *.TIF)
JPGS=$(wildcard *.JPG)
CAMS=$(TIFS:.TIF=.tcam) $(JPGS:.JPG=.jcam)
DEPS=$(LIBOBJS:.o=.dep) $(EXEOBJS:.o=.dep)
##### TARGETS ######
default: metacam
clean:
-rm -f *.o *~
-rm -f *.o *~ *-
tags:
etags *.cc *.h
realclean:
-rm -f metacam
-rm -f *.o *~
-rm -f *.o *~ *-
-rm -f *.dep
-rm -f dependencies
-rm -f TAGS
metacam: $(OBJS)
$(CXX) $(CXXFLAGS) $(OBJS) -o metacam -lm
libmetacam.a: $(LIBOBJS)
rm -f libmetacam.a
ar rsc libmetacam.a- $(LIBOBJS)
mv -f libmetacam.a- libmetacam.a
metacam: $(EXEOBJS) libmetacam.a
$(CXX) $(CXXFLAGS) $(EXEOBJS) -o metacam -lm -L. -lmetacam
# Dependency rules
dependencies: Makefile $(DEPS)
......@@ -76,5 +81,9 @@ dependencies: Makefile $(DEPS)
rm -f $*.dep--
mv -f $*.dep- $*.dep
tar:
-rm -f files.tar
tar -cvf files.tar $(LIBOBJS:.o=.cc) $(EXEOBJS:.o=.cc) $(HDRS) Makefile THANKS $(wildcard README.*) LICENSE.TXT BUGS
include dependencies
dpyfuncs.cc,801
static const char *rcsid=29,1092
dpyISO(32,1182
dpyString(39,1358
void Display_Rational(45,1503
void Display_Rational(56,1672
dpyLens(68,1847
dpyZoom(98,2407
dpyExpAdjust(113,2709
dpyShutter(127,3013
dpyAperture(137,3238
dpyPixels(144,3407
dpySigned(151,3576
dpyUnsigned(162,3804
dpyResolution(169,3962
dpyNULL(179,4212
dpyYes(183,4279
dpyResolutionType(189,4381
dpyBitsPerSample(207,4706
dpyPhotometric(225,5076
dpyCompression(243,5669
dpyYCbCrPositioning(260,6213
dpyExposureProgram(272,6537
dpyMeteringMode(290,7180
dpyLightSource(305,7645
dpyYesNo(320,8094
dpySensingMethod(332,8386
dpyExifVersion(343,8672
dpyExifAperture(357,9006
dpyExifShutter(370,9289
dpyRationalAsDouble(385,9615
dpyOlymSpecialMode(394,9809
dpyOlymJPEGQuality(421,10482
dpyOlymZoom(434,10824
exiftags.cc,123
static const char *rcsid=25,1030
knowntag main_known[31,1266
knowntag exif_known[69,3336
knowntag empty_known[118,5897
ifd.cc,181
static const char *rcsid=27,1052
IFD::IFD(29,1132
IFD::operator=41,1394
IFD::~IFD(67,1882
IFD::IFD(75,1990
IFD::operator[109,2620
if 111,2652
return *table[115,2747
ifdentry.cc,328
static const char *rcsid=27,1052
IFDEntry::Get_UVALUES(30,1158
IFDEntry::Get_SVALUES(50,1639
IFDEntry::Get_RATIONALS(70,2123
IFDEntry::Get_SRATIONALS(84,2443
IFDEntry::Get_STRINGS(98,2756
IFDEntry::Get_OPAQUE(111,3042
IFDEntry::Type_Length(131,3422
static const char *hexdigit=151,4098
IFDEntry::Output_Value(154,4152
metacam.cc,174
static const char *rcsid=41,1288
Process_IFD(44,1384
option opts[54,1621
const char *resolution_unit 61,1743
Display_Tags(64,1787
Clear_Tag_Map(104,2664
main(117,2910
nikontags.cc,64
static const char *rcsid=25,1030
knowntag nikon_known[30,1240
olympustags.cc,66
static const char *rcsid=25,1030
knowntag olympus_known[30,1232
rationals.cc,131
static const char *rcsid=27,1048
unsigned long Euclid(29,1134
tiffRATIONAL::Normalize(38,1290
tiffSRATIONAL::Normalize(47,1438
tifffile.cc,349
static const char *rcsid=30,1115
tiffFile::tiffFile(32,1200
tiffFile::Seek(58,1730
tiffFile::Get_Data(64,1817
tiffFile::Get_UByte(75,2031
tiffFile::Get_UShort(83,2146
tiffFile::Get_ULong(92,2300
tiffFile::Get_SByte(101,2450
tiffFile::Get_SShort(109,2561
tiffFile::Get_SLong(118,2711
tiffFile::Get_IFD(127,2851
tiffFile::Get_IFD(134,2956
dpyfuncs.h,265
#define DPYFUNCS_H_INCLUDED27,1115
extern knowntag main_known[67,3392
extern knowntag exif_known[68,3422
extern knowntag empty_known[69,3452
extern knowntag nikon_known[71,3484
extern knowntag olympus_known[73,3516
extern const char *resolution_unit;75,3550
metacam.h,983
#define METACAM_H_INCLUDED27,1113
class IFD;33,1193
class IFDEntry;34,1204
class istream;35,1220
class ostream;36,1235
typedef unsigned long tiffUNSIGNED;tiffUNSIGNED38,1251
typedef signed long tiffSIGNED;tiffSIGNED39,1287
const unsigned short tBYTE 41,1320
const unsigned short tASCII 42,1357
const unsigned short tSHORT 43,1394
const unsigned short tLONG 44,1431
const unsigned short tRATIONAL 45,1468
const unsigned short tSBYTE 46,1505
const unsigned short tUNDEFINED 47,1542
const unsigned short tSSHORT 48,1579
const unsigned short tSLONG 49,1616
const unsigned short tSRATIONAL 50,1653
const unsigned short tFLOAT 51,1691
const unsigned short tDOUBLE 52,1729
inline ostream &operator << (ostream &os,104,2765
inline ostream &operator << (ostream &os,110,2887
class IFDEntry;150,3733
operator<<(ostream &os,213,5238
typedef map<idpair, IFDEntry*> tagmap;tagmap259,6342
typedef void dpyFunction(dpyFunction261,6382
struct knowntagknowntag263,6455
......@@ -8,6 +8,11 @@ Pat Tullmann
Jan Niehusmann
Holm Sieber
Jeremie Rostand
Vladimir Kondratiev
Fred Albrecht
Doug Larrick
Till Kamppeter
Ro Ro
Also, many thanks to all of the contributors to the various free software
projects which I use on a daily basis, and without which this project (and
......
......@@ -23,25 +23,25 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "dpyfuncs.h"
static const char *rcsid="";
static const char *rcsid __attribute__((unused))="$Id: canontags.cc,v 1.4 2002/09/02 19:20:01 daniel Exp $";
// Initial Canon tag references from
// http://www.butaman.ne.jp/~tsuruzoh/Computer/Digicams/exif-e.html
knowntag canon_known[] = {
{ 0x1, tSHORT, 0, " ", dpyCanonBlock1},
{ 0x1, tSHORT, 0, "" , dpyCanonBlock1, 0},
// 0x2 is unknown
// 0x3 is unknown
{ 0x4, tSHORT, 0, " ", dpyCanonBlock4},
{ 0x8, tLONG, 0, " Image Number", dpyCanonImageNumber},
{ 0x6, tASCII, 0, " Image Type", dpyString},
{ 0x7, tASCII, 0, " Firmware Version", dpyString},
{ 0x9, tASCII, 0, " Owner Name", dpyString},
{ 0xc, tLONG, 0, " Camera Serial Number", dpyCanonSerialNumber},
// { 0xf, tSHORT, 0, " ", dpyCanonCustomTags},
{ 0x4, tSHORT, 0, "" , dpyCanonBlock4, 0},
{ 0x8, tLONG, 0, "Image Number" , dpyCanonImageNumber, 0},
{ 0x6, tASCII, 0, "Image Type" , dpyString, 0},
{ 0x7, tASCII, 0, "Firmware Version" , dpyString, 0},
{ 0x9, tASCII, 0, "Owner Name" , dpyString, 0},
{ 0xc, tLONG, 0, "Camera Serial Number" , dpyCanonSerialNumber, 0},
// { 0xf, tSHORT, 0, "" , dpyCanonCustomTags, 0},
// 0x10 is unknown
{0,0,0,0}
{0,0,0,0,0}
};
......@@ -24,7 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "dpyfuncs.h"
static const char *rcsid="";
static const char *rcsid __attribute__((unused))="$Id: casiotags.cc,v 1.4 2002/09/02 19:20:01 daniel Exp $";
// Initial Casio tag references from
// http://www.ba.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html
......@@ -32,23 +32,23 @@ static const char *rcsid="";
// http://www.dicasoft.de/dicainfo.htm
knowntag casio_known[] = {
{ 0x1, tSHORT, 0, " Recording Mode", dpyCasioRecMode},
{ 0x2, tSHORT, 0, " Quality", dpyCasioQuality},
{ 0x3, tSHORT, 0, " Focusing Mode", dpyCasioFocusMode},
{ 0x4, tSHORT, 0, " Flash Mode", dpyCasioFlashMode},
{ 0x5, tSHORT, 0, " Flash Intensity", dpyCasioFlashInten},
{ 0x6, tLONG, 0, " Object Distance ~", dpyCasioDistance},
{ 0x7, tSHORT, 0, " White Balance", dpyCasioWhiteBalance},
{ 0x1, tSHORT, 0, "Recording Mode" , dpyUnsignedLookup, lookCasioRecMode},
{ 0x2, tSHORT, 0, "Quality" , dpyUnsignedLookup, lookCasioQuality},
{ 0x3, tSHORT, 0, "Focusing Mode" , dpyUnsignedLookup, lookCasioFocusMode},
{ 0x4, tSHORT, 0, "Flash Mode" , dpyUnsignedLookup, lookCasioFlashMode},
{ 0x5, tSHORT, 0, "Flash Intensity" , dpyUnsignedLookup, lookCasioFlashInten},
{ 0x6, tLONG, 0, "Object Distance ~" , dpyCasioDistance, 0},
{ 0x7, tSHORT, 0, "White Balance" , dpyUnsignedLookup, lookCasioWhiteBalance},
// 0x8 is unknown tSHORT
// 0x9 is unknown tSHORT
{ 0xa, tLONG, 0, " Digital Zoom", dpyCasioDigitalZoom},
{ 0xb, tSHORT, 0, " Sharpness", dpyCasioSharpness},
{ 0xc, tSHORT, 0, " Contrast", dpyCasioContrast},
{ 0xd, tSHORT, 0, " Saturation", dpyCasioSaturation},
{ 0xa, tLONG, 0, "Digital Zoom" , dpyUnsignedLookup, lookCasioDigitalZoom},
{ 0xb, tSHORT, 0, "Sharpness" , dpyUnsignedLookup, lookCasioSharpness},
{ 0xc, tSHORT, 0, "Contrast" , dpyUnsignedLookup, lookCasioContrast},
{ 0xd, tSHORT, 0, "Saturation" , dpyUnsignedLookup, lookCasioSaturation},
// 0xe through 0x013 are unknown tSHORT
{ 0x14,tSHORT, 0, " CCD Sensitivity", dpyCasioSensitivity},
{ 0x14,tSHORT, 0, "CCD Sensitivity" , dpyUnsignedLookup, lookCasioSensitivity},
{0,0,0,0}
{0,0,0,0,0}
};
/*
------------------------------------------------------------------------------
MetaCam - Extract EXIF information from digital camera files, with
support for Vendor specific blocks.
Copyright (C) 2000 Daniel Stephens (daniel@cheeseplant.org)
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
------------------------------------------------------------------------------
*/
#include <iostream>
#include "datatiff.h"
static const char *rcsid __attribute__((unused))="$Id: dataifd.cc,v 1.2 2002/09/02 19:20:01 daniel Exp $";
_DataIFD::~_DataIFD()
{
if (entry_count) {
for (int i=0; i<entry_count; ++i) table[i]->delRef();
delete [] table;
}
table = 0;
}
_DataIFD::_DataIFD(const TIFFDataSource &src,
unsigned long o, unsigned long tagofs)
: _IFD(), source(src), ofs(o), table(0)
{
source.seek(ofs);
entry_count = source.getUShort();
table = new _DataIFDEntry *[entry_count];
int i;
unsigned long expofs = source.tell();
for (i=0; i<entry_count; ++i) {
unsigned short tag = source.getUShort() + tagofs;
unsigned short type = source.getUShort();
unsigned long values = source.getULong();
unsigned long offset = 0;
if ((values * _IFDEntry::typeLength(type)) <= 4) {
offset = source.tell();
} else {
offset = source.getULong();
}
table[i] = new _DataIFDEntry(source, offset, tag, type, values);
table[i]->addRef(); // Stop it from deleting itself later!
expofs += 12;
source.seek(expofs);
}
next_ifd_ofs = source.getULong();
}
unsigned short
_DataIFD::entries() const {
return entry_count;
}
IFD
_DataIFD::nextIFD() const
{
if (next_ifd_ofs == 0) return IFD();
return IFD(new _DataIFD(source, next_ifd_ofs, 0));
}
bool _DataIFD::isDynamic() const {
return false;
}
IFDEntry
_DataIFD::operator[](int n) const
{
if ((n<0) || (n>=entry_count)) {
cerr << "_DataIFD Array Bounds Violated" << endl;
exit(2);
}
return IFDEntry(table[n]);
}
IFDEntry
_DataIFD::findEntry(unsigned long tag, _IFDEntry *after) const
{
bool ready_to_return = (after == 0);
for (int i=0; i<entry_count; ++i) {
if (table[i]->getTag() != tag) continue;
if (ready_to_return) return IFDEntry(table[i]);
if (table[i] == after) ready_to_return = true;
}
return IFDEntry();
}
TIFFDataSource
_DataIFD::getSource() const
{
return source;
}
unsigned long
_DataIFD::getSourceOffset() const {
return ofs;
}
......@@ -20,105 +20,121 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
------------------------------------------------------------------------------
*/
#include <iostream.h>
#include <iostream>
#include "metacam.h"
#include "datatiff.h"
static const char *rcsid="$Id: ifdentry.cc,v 1.2 2000/05/29 22:11:28 daniel Exp $";
static const char *rcsid __attribute__((unused))="$Id: dataifdentry.cc,v 1.3 2002/09/02 19:20:01 daniel Exp $";
_DataIFDEntry::_DataIFDEntry(const TIFFDataSource &src, long ofs,
long t, short typ, long vals)
: _IFDEntry(t, typ), source(src), value_count(vals), offset(ofs)
{
}
_DataIFDEntry::~_DataIFDEntry()
{
}
unsigned long
_DataIFDEntry::values() const
{
return value_count;
}
vector<tiffUNSIGNED>
IFDEntry::Get_UVALUES() const
_DataIFDEntry::getUVALUE() const
{
vector<tiffUNSIGNED> v;
if (type == tBYTE) {
file.Seek(offset);
for (unsigned int i=0; i<values; ++i)
v.push_back(file.Get_UByte());
} else if (type == tSHORT) {
file.Seek(offset);
for (unsigned int i=0; i<values; ++i)
v.push_back(file.Get_UShort());
} else if (type == tLONG) {
file.Seek(offset);
for (unsigned int i=0; i<values; ++i)
v.push_back(file.Get_ULong());
if (getRawType() == tBYTE) {
source.seek(offset);
for (unsigned int i=0; i<value_count; ++i)
v.push_back(source.getUByte());
} else if (getRawType() == tSHORT) {
source.seek(offset);
for (unsigned int i=0; i<value_count; ++i)
v.push_back(source.getUShort());
} else if (getRawType() == tLONG) {
source.seek(offset);
for (unsigned int i=0; i<value_count; ++i)
v.push_back(source.getULong());
}
return v;
}
vector<tiffSIGNED>
IFDEntry::Get_SVALUES() const
_DataIFDEntry::getSVALUE() const
{
vector<tiffSIGNED> v;
if (type == tSBYTE) {
file.Seek(offset);
for (unsigned int i=0; i<values; ++i)
v.push_back(file.Get_SByte());
} else if (type == tSSHORT) {
file.Seek(offset);
for (unsigned int i=0; i<values; ++i)
v.push_back(file.Get_SShort());
} else if (type == tSLONG) {
file.Seek(offset);
for (unsigned int i=0; i<values; ++i)
v.push_back(file.Get_SLong());
if (getRawType() == tSBYTE) {
source.seek(offset);
for (unsigned int i=0; i<value_count; ++i)
v.push_back(source.getSByte());
} else if (getRawType() == tSSHORT) {
source.seek(offset);
for (unsigned int i=0; i<value_count; ++i)
v.push_back(source.getSShort());
} else if (getRawType() == tSLONG) {
source.seek(offset);
for (unsigned int i=0; i<value_count; ++i)
v.push_back(source.getSLong());
}
return v;
}
vector<tiffRATIONAL>
IFDEntry::Get_RATIONALS() const
_DataIFDEntry::getRATIONAL() const
{
vector<tiffRATIONAL> v;
if (type != tRATIONAL) {return v;}
file.Seek(offset);
for (unsigned int i=0; i<values; ++i) {
tiffUNSIGNED n = file.Get_ULong();
tiffUNSIGNED d = file.Get_ULong();
if (getRawType() != tRATIONAL) {return v;}
source.seek(offset);
for (unsigned int i=0; i<value_count; ++i) {
tiffUNSIGNED n = source.getULong();
tiffUNSIGNED d = source.getULong();
v.push_back(tiffRATIONAL(n,d));
}
return v;
}
vector<tiffSRATIONAL>
IFDEntry::Get_SRATIONALS() const
_DataIFDEntry::getSRATIONAL() const
{
vector<tiffSRATIONAL> v;
if (type != tSRATIONAL) {return v;}
file.Seek(offset);
for (unsigned int i=0; i<values; ++i) {
tiffSIGNED n = file.Get_SLong();
tiffSIGNED d = file.Get_SLong();
if (getRawType() != tSRATIONAL) {return v;}
source.seek(offset);
for (unsigned int i=0; i<value_count; ++i) {
tiffSIGNED n = source.getSLong();
tiffSIGNED d = source.getSLong();
v.push_back(tiffSRATIONAL(n,d));
}
return v;
}
vector<string>
IFDEntry::Get_STRINGS() const
_DataIFDEntry::getSTRING() const
{
vector<string> v;
if (type != tASCII) {return v;}
if (getRawType() != tASCII) {return v;}
char tmpbuf[1024];
file.Seek(offset);
file.Get_Data((unsigned char *)tmpbuf, values);
tmpbuf[values] = 0;
source.seek(offset);
source.getData((unsigned char *)tmpbuf, value_count);
tmpbuf[value_count] = 0;
v.push_back(string(tmpbuf));
return v;
}
vector<unsigned char>
IFDEntry::Get_OPAQUE() const
_DataIFDEntry::getOPAQUE() const
{
vector<unsigned char> v;
if (type != tUNDEFINED) {return v;}
int toget=values;
file.Seek(offset);
if (getRawType() != tUNDEFINED) {return v;}
int toget=value_count;
source.seek(offset);
while (toget > 0) {
unsigned char tmpbuf[1024];
int g = toget;
if (g>1024) g=1024;
file.Get_Data((unsigned char *)tmpbuf, g);
source.getData((unsigned char *)tmpbuf, g);
for (int i=0; i<g; ++i) {
v.push_back(tmpbuf[i]);
}
......@@ -127,36 +143,28 @@ IFDEntry::Get_OPAQUE() const
return v;
}
int
IFDEntry::Type_Length(unsigned short type)
TIFFDataSource
_DataIFDEntry::getSource() const
{
switch (type) {
case tBYTE: return 1; /* BYTE */
case tASCII: return 1; /* ASCII */
case tSHORT: return 2; /* SHORT */
case tLONG: return 4; /* LONG */
case tRATIONAL: return 8; /* RATIONAL */
case tSBYTE: return 1; /* SBYTE */
case tUNDEFINED: return 1; /* UNDEFINED */
case tSSHORT: return 2; /* SSHORT */
case tSLONG: return 4; /* SLONG */
case tSRATIONAL: return 8; /* SRATIONAL */
case tFLOAT: return 4; /* FLOAT */
case tDOUBLE: return 8; /* DOUBLE */
};
cerr << "WARNING: Unknown field type " << type << endl;
return 0;
return source;
}
unsigned long
_DataIFDEntry::getSourceOffset() const
{
return offset;
}
static const char *hexdigit="0123456789ABCDEF";
void
IFDEntry::Output_Value(ostream &os) const
_DataIFDEntry::outputValue(ostream &os) const
{
switch (type) {
switch (getRawType()) {
case 2:
{
vector<string> v = Get_STRINGS();
vector<string> v = getSTRING();
vector<string>::iterator iter;
for (iter=v.begin(); iter != v.end(); ++iter) {
os << "\"" << (*iter) << "\",";
......@@ -167,7 +175,7 @@ IFDEntry::Output_Value(ostream &os) const
case 3:
case 4:
{
vector<tiffUNSIGNED> v = Get_UVALUES();
vector<tiffUNSIGNED> v = getUVALUE();
vector<tiffUNSIGNED>::iterator iter;
for (iter=v.begin(); iter != v.end(); ++iter) {
os << (*iter) << ",";
......@@ -176,7 +184,7 @@ IFDEntry::Output_Value(ostream &os) const
}
case 5:
{
vector<tiffRATIONAL> v = Get_RATIONALS();
vector<tiffRATIONAL> v = getRATIONAL();
vector<tiffRATIONAL>::iterator iter;
for (iter=v.begin(); iter != v.end(); ++iter) {
os << (*iter) << ",";
......@@ -185,7 +193,7 @@ IFDEntry::Output_Value(ostream &os) const
}
case 7:
{
vector<unsigned char> v = Get_OPAQUE();
vector<unsigned char> v = getOPAQUE();
vector<unsigned char>::iterator iter;
for (iter=v.begin(); iter != v.end(); ++iter) {
unsigned char c=(*iter);
......@@ -197,7 +205,7 @@ IFDEntry::Output_Value(ostream &os) const
case 8:
case 9:
{
vector<tiffSIGNED> v = Get_SVALUES();
vector<tiffSIGNED> v = getSVALUE();
vector<tiffSIGNED>::iterator iter;
for (iter=v.begin(); iter != v.end(); ++iter) {
os << (*iter) << ",";
......@@ -206,7 +214,7 @@ IFDEntry::Output_Value(ostream &os) const
}
case 10:
{
vector<tiffSRATIONAL> v = Get_SRATIONALS();
vector<tiffSRATIONAL> v = getSRATIONAL();
vector<tiffSRATIONAL>::iterator iter;
for (iter=v.begin(); iter != v.end(); ++iter) {
os << (*iter) << ",";
......@@ -217,3 +225,4 @@ IFDEntry::Output_Value(ostream &os) const
// 11 FLOAT
// 12 DOUBLE
}
/*
------------------------------------------------------------------------------
MetaCam - Extract EXIF information from digital camera files, with
support for Vendor specific blocks.
Copyright (C) 2000 Daniel Stephens (daniel@cheeseplant.org)
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
------------------------------------------------------------------------------
*/
#ifndef DATATIFF_H_INCLUDED
#define DATATIFF_H_INCLUDED
#include "metatiff.h"
class _DataIFD;
class _DataIFDEntry;