|
|
@ -38,6 +38,7 @@ EXIV2_RCSID("@(#) $Id$")
|
|
|
|
#include "value.hpp"
|
|
|
|
#include "value.hpp"
|
|
|
|
#include "exif.hpp"
|
|
|
|
#include "exif.hpp"
|
|
|
|
#include "i18n.h" // NLS support.
|
|
|
|
#include "i18n.h" // NLS support.
|
|
|
|
|
|
|
|
#include "datasets.hpp"
|
|
|
|
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
#include <string>
|
|
|
|
#include <sstream>
|
|
|
|
#include <sstream>
|
|
|
@ -1928,112 +1929,114 @@ namespace Exiv2 {
|
|
|
|
{ 45861, "Tamron SP AF 35-105mm F2.8 LD Aspherical IF" },
|
|
|
|
{ 45861, "Tamron SP AF 35-105mm F2.8 LD Aspherical IF" },
|
|
|
|
{ 45871, "Tamron AF 70-210mm F2.8 SP LD" },
|
|
|
|
{ 45871, "Tamron AF 70-210mm F2.8 SP LD" },
|
|
|
|
{0xffff, "Manual lens | " // 1
|
|
|
|
{0xffff, "Manual lens | " // 1
|
|
|
|
"Sony E 50mm F1.8 OSS" }, // 2
|
|
|
|
"Sony E 50mm F1.8 OSS | " // 2
|
|
|
|
|
|
|
|
"E PZ 16-50mm F3.5-5.6 OSS" // 3
|
|
|
|
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
// #1145 begin - respect lenses with shared LensID
|
|
|
|
// #1145 begin - respect lenses with shared LensID
|
|
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
#if 0
|
|
|
|
// resolveLensTypeUsingExiftool has been debugged on the Mac
|
|
|
|
// resolveLensTypeUsingExiftool has been debugged on the Mac
|
|
|
|
// It's not in service because:
|
|
|
|
// It's not in service because:
|
|
|
|
// 1 we don't know the path to the file being processed
|
|
|
|
// 1 we don't know the path to the file being processed
|
|
|
|
// 2 can't work for a remote file as exiftool doesn't handle remote IO
|
|
|
|
// 2 can't work for a remote file as exiftool doesn't handle remote IO
|
|
|
|
// 3 almost certainly throws an ugly ugly dos box on the screen in Windows
|
|
|
|
// 3 almost certainly throws an ugly ugly dos box on the screen in Windows
|
|
|
|
// 4 I haven't asked Phil's permission to do this
|
|
|
|
// 4 I haven't asked Phil's permission to do this
|
|
|
|
static std::ostream& resolveLensTypeUsingExiftool(std::ostream& os, const Value& value,
|
|
|
|
static std::ostream& resolveLensTypeUsingExiftool(std::ostream& os, const Value& value,
|
|
|
|
const ExifData* metadata)
|
|
|
|
const ExifData* metadata)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// #if ! defined(WIN32) && ! defined(__CYGWIN__) && ! defined(__MINGW__)
|
|
|
|
// #if ! defined(WIN32) && ! defined(__CYGWIN__) && ! defined(__MINGW__)
|
|
|
|
#ifndef _MSC_VER
|
|
|
|
#ifndef _MSC_VER
|
|
|
|
FILE* f = ::popen("/bin/bash -c \"exiftool ~/temp/screen.jpg | grep 'Lens ID' | cut -d: -f 2 | sed -E -e 's/^ //g'\"","r");
|
|
|
|
FILE* f = ::popen("/bin/bash -c \"exiftool ~/temp/screen.jpg | grep 'Lens ID' | cut -d: -f 2 | sed -E -e 's/^ //g'\"","r");
|
|
|
|
if ( f ) {
|
|
|
|
if ( f ) {
|
|
|
|
char buffer[200];
|
|
|
|
char buffer[200];
|
|
|
|
int n=::fread(buffer,1,sizeof buffer-1,f);
|
|
|
|
int n=::fread(buffer,1,sizeof buffer-1,f);
|
|
|
|
::pclose(f);
|
|
|
|
::pclose(f);
|
|
|
|
// just to be sure, add a null byte
|
|
|
|
// just to be sure, add a null byte
|
|
|
|
if ( 0 <= n && n < (int) sizeof(buffer) ) buffer[n] = 0 ;
|
|
|
|
if ( 0 <= n && n < (int) sizeof(buffer) ) buffer[n] = 0 ;
|
|
|
|
|
|
|
|
|
|
|
|
// and stop at any non-printing character such as line-feed
|
|
|
|
// and stop at any non-printing character such as line-feed
|
|
|
|
for (int c = 0 ; c < 32 ; c++)
|
|
|
|
for (int c = 0 ; c < 32 ; c++)
|
|
|
|
if ( ::strchr(buffer,c) )
|
|
|
|
if ( ::strchr(buffer,c) )
|
|
|
|
*::strchr(buffer,c)=0;
|
|
|
|
*::strchr(buffer,c)=0;
|
|
|
|
return os << buffer;
|
|
|
|
return os << buffer;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
return EXV_PRINT_TAG(minoltaSonyLensID)(os, value, metadata);
|
|
|
|
return EXV_PRINT_TAG(minoltaSonyLensID)(os, value, metadata);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
static std::string getKeyString(const std::string& key,const ExifData* metadata)
|
|
|
|
static std::string getKeyString(const std::string& key,const ExifData* metadata)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
std::string result;
|
|
|
|
std::string result;
|
|
|
|
if ( metadata->findKey(ExifKey(key)) != metadata->end() ) {
|
|
|
|
if ( metadata->findKey(ExifKey(key)) != metadata->end() ) {
|
|
|
|
result = metadata->findKey(ExifKey(key))->toString();
|
|
|
|
result = metadata->findKey(ExifKey(key))->toString();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static long getKeyLong(const std::string& key,const ExifData* metadata,int which=0);
|
|
|
|
static long getKeyLong(const std::string& key,const ExifData* metadata,int which=0);
|
|
|
|
static long getKeyLong(const std::string& key,const ExifData* metadata,int which)
|
|
|
|
static long getKeyLong(const std::string& key,const ExifData* metadata,int which)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
long result = -1;
|
|
|
|
long result = -1;
|
|
|
|
if ( metadata->findKey(ExifKey(key)) != metadata->end() ) {
|
|
|
|
if ( metadata->findKey(ExifKey(key)) != metadata->end() ) {
|
|
|
|
result = (long) metadata->findKey(ExifKey(key))->toFloat(which);
|
|
|
|
result = (long) metadata->findKey(ExifKey(key))->toFloat(which);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// http://stackoverflow.com/questions/1798112/removing-leading-and-trailing-spaces-from-a-string
|
|
|
|
// http://stackoverflow.com/questions/1798112/removing-leading-and-trailing-spaces-from-a-string
|
|
|
|
// trim from left
|
|
|
|
// trim from left
|
|
|
|
inline std::string& ltrim(std::string& s, const char* t = " \t\n\r\f\v")
|
|
|
|
inline std::string& ltrim(std::string& s, const char* t = " \t\n\r\f\v")
|
|
|
|
{
|
|
|
|
{
|
|
|
|
s.erase(0, s.find_first_not_of(t));
|
|
|
|
s.erase(0, s.find_first_not_of(t));
|
|
|
|
return s;
|
|
|
|
return s;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// trim from right
|
|
|
|
// trim from right
|
|
|
|
inline std::string& rtrim(std::string& s, const char* t = " \t\n\r\f\v")
|
|
|
|
inline std::string& rtrim(std::string& s, const char* t = " \t\n\r\f\v")
|
|
|
|
{
|
|
|
|
{
|
|
|
|
s.erase(s.find_last_not_of(t) + 1);
|
|
|
|
s.erase(s.find_last_not_of(t) + 1);
|
|
|
|
return s;
|
|
|
|
return s;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// trim from left & right
|
|
|
|
// trim from left & right
|
|
|
|
inline std::string& trim(std::string& s, const char* t = " \t\n\r\f\v")
|
|
|
|
inline std::string& trim(std::string& s, const char* t = " \t\n\r\f\v")
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return ltrim(rtrim(s, t), t);
|
|
|
|
return ltrim(rtrim(s, t), t);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// http://www.sbin.org/doc/HOWTO/C++Programming-HOWTO-7.html
|
|
|
|
// http://www.sbin.org/doc/HOWTO/C++Programming-HOWTO-7.html
|
|
|
|
static void tokenize(const std::string& str,
|
|
|
|
static void tokenize(const std::string& str,
|
|
|
|
std::vector<std::string>& tokens,
|
|
|
|
std::vector<std::string>& tokens,
|
|
|
|
const std::string& delimiters = " ")
|
|
|
|
const std::string& delimiters = " ")
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// Skip delimiters at beginning.
|
|
|
|
// Skip delimiters at beginning.
|
|
|
|
std::string::size_type lastPos = str.find_first_not_of(delimiters, 0);
|
|
|
|
std::string::size_type lastPos = str.find_first_not_of(delimiters, 0);
|
|
|
|
// Find first "non-delimiter".
|
|
|
|
// Find first "non-delimiter".
|
|
|
|
std::string::size_type pos = str.find_first_of(delimiters, lastPos);
|
|
|
|
std::string::size_type pos = str.find_first_of(delimiters, lastPos);
|
|
|
|
|
|
|
|
|
|
|
|
while (std::string::npos != pos || std::string::npos != lastPos)
|
|
|
|
while (std::string::npos != pos || std::string::npos != lastPos)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// Found a token, add it to the vector.
|
|
|
|
// Found a token, add it to the vector.
|
|
|
|
tokens.push_back(str.substr(lastPos, pos - lastPos));
|
|
|
|
tokens.push_back(str.substr(lastPos, pos - lastPos));
|
|
|
|
// Skip delimiters. Note the "not_of"
|
|
|
|
// Skip delimiters. Note the "not_of"
|
|
|
|
lastPos = str.find_first_not_of(delimiters, pos);
|
|
|
|
lastPos = str.find_first_not_of(delimiters, pos);
|
|
|
|
// Find next "non-delimiter"
|
|
|
|
// Find next "non-delimiter"
|
|
|
|
pos = str.find_first_of(delimiters, lastPos);
|
|
|
|
pos = str.find_first_of(delimiters, lastPos);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static bool inRange(long value,long min,long max)
|
|
|
|
static bool inRange(long value,long min,long max)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return min <= value && value <= max;
|
|
|
|
return min <= value && value <= max;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static std::ostream& resolvedLens(std::ostream& os,long lensID,long index)
|
|
|
|
static std::ostream& resolvedLens(std::ostream& os,long lensID,long index)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
const TagDetails* td = find(minoltaSonyLensID, lensID);
|
|
|
|
const TagDetails* td = find(minoltaSonyLensID, lensID);
|
|
|
|
std::vector<std::string> tokens;
|
|
|
|
std::vector<std::string> tokens;
|
|
|
|
tokenize(td[0].label_,tokens,"|");
|
|
|
|
tokenize(td[0].label_,tokens,"|");
|
|
|
|
return os << exvGettext(trim(tokens[index-1]).c_str());
|
|
|
|
return os << exvGettext(trim(tokens[index-1]).c_str());
|
|
|
@ -2043,13 +2046,13 @@ namespace Exiv2 {
|
|
|
|
const ExifData* metadata)
|
|
|
|
const ExifData* metadata)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
long lensID = 0x1c;
|
|
|
|
long lensID = 0x1c;
|
|
|
|
long index = 0;
|
|
|
|
long index = 0;
|
|
|
|
|
|
|
|
|
|
|
|
std::string model = getKeyString("Exif.Image.Model" ,metadata);
|
|
|
|
std::string model = getKeyString("Exif.Image.Model" ,metadata);
|
|
|
|
std::string lens = getKeyString("Exif.Photo.LensModel",metadata);
|
|
|
|
std::string lens = getKeyString("Exif.Photo.LensModel",metadata);
|
|
|
|
|
|
|
|
|
|
|
|
if ( model == "SLT-A77V" && lens == "100mm F2.8 Macro" ) index=2;
|
|
|
|
if ( model == "SLT-A77V" && lens == "100mm F2.8 Macro" ) index=2;
|
|
|
|
|
|
|
|
|
|
|
|
if ( index > 0 ) return resolvedLens(os,lensID,index);
|
|
|
|
if ( index > 0 ) return resolvedLens(os,lensID,index);
|
|
|
|
} catch (...) {}
|
|
|
|
} catch (...) {}
|
|
|
@ -2060,13 +2063,13 @@ namespace Exiv2 {
|
|
|
|
const ExifData* metadata)
|
|
|
|
const ExifData* metadata)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
long lensID = 0x29;
|
|
|
|
long lensID = 0x29;
|
|
|
|
long index = 0;
|
|
|
|
long index = 0;
|
|
|
|
|
|
|
|
|
|
|
|
std::string model = getKeyString("Exif.Image.Model" ,metadata);
|
|
|
|
std::string model = getKeyString("Exif.Image.Model" ,metadata);
|
|
|
|
std::string lens = getKeyString("Exif.Photo.LensModel",metadata);
|
|
|
|
std::string lens = getKeyString("Exif.Photo.LensModel",metadata);
|
|
|
|
|
|
|
|
|
|
|
|
if ( model == "SLT-A77V" && lens == "DT 11-18mm F4.5-5.6" ) index=2;
|
|
|
|
if ( model == "SLT-A77V" && lens == "DT 11-18mm F4.5-5.6" ) index=2;
|
|
|
|
|
|
|
|
|
|
|
|
if ( index > 0 ) return resolvedLens(os,lensID,index);
|
|
|
|
if ( index > 0 ) return resolvedLens(os,lensID,index);
|
|
|
|
} catch (...) {}
|
|
|
|
} catch (...) {}
|
|
|
@ -2077,16 +2080,16 @@ namespace Exiv2 {
|
|
|
|
const ExifData* metadata)
|
|
|
|
const ExifData* metadata)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
long lensID = 0x34;
|
|
|
|
long lensID = 0x34;
|
|
|
|
long index = 0;
|
|
|
|
long index = 0;
|
|
|
|
|
|
|
|
|
|
|
|
std::string model = getKeyString("Exif.Image.Model" ,metadata);
|
|
|
|
std::string model = getKeyString("Exif.Image.Model" ,metadata);
|
|
|
|
std::string maxAperture = getKeyString("Exif.Photo.MaxApertureValue" ,metadata);
|
|
|
|
std::string maxAperture = getKeyString("Exif.Photo.MaxApertureValue" ,metadata);
|
|
|
|
long focalLength = getKeyLong ("Exif.Photo.FocalLength" ,metadata);
|
|
|
|
long focalLength = getKeyLong ("Exif.Photo.FocalLength" ,metadata);
|
|
|
|
std::string F2_8 = "760/256" ;
|
|
|
|
std::string F2_8 = "760/256" ;
|
|
|
|
|
|
|
|
|
|
|
|
if ( model == "SLT-A77V" && maxAperture == F2_8 ) index=4;
|
|
|
|
if ( model == "SLT-A77V" && maxAperture == F2_8 ) index=4;
|
|
|
|
if ( model == "SLT-A77V" && inRange(focalLength,70,300) ) index=3;
|
|
|
|
if ( model == "SLT-A77V" && inRange(focalLength,70,300) ) index=3;
|
|
|
|
|
|
|
|
|
|
|
|
if ( index > 0 ) return resolvedLens(os,lensID,index);
|
|
|
|
if ( index > 0 ) return resolvedLens(os,lensID,index);
|
|
|
|
} catch (...) {}
|
|
|
|
} catch (...) {}
|
|
|
@ -2097,15 +2100,15 @@ namespace Exiv2 {
|
|
|
|
const ExifData* metadata)
|
|
|
|
const ExifData* metadata)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
long lensID = 0x80;
|
|
|
|
long lensID = 0x80;
|
|
|
|
long index = 0;
|
|
|
|
long index = 0;
|
|
|
|
|
|
|
|
|
|
|
|
std::string model = getKeyString("Exif.Image.Model" ,metadata);
|
|
|
|
std::string model = getKeyString("Exif.Image.Model" ,metadata);
|
|
|
|
std::string maxAperture = getKeyString("Exif.Photo.MaxApertureValue" ,metadata);
|
|
|
|
std::string maxAperture = getKeyString("Exif.Photo.MaxApertureValue" ,metadata);
|
|
|
|
long focalLength = getKeyLong ("Exif.Photo.FocalLength" ,metadata);
|
|
|
|
long focalLength = getKeyLong ("Exif.Photo.FocalLength" ,metadata);
|
|
|
|
std::string F4 = "1024/256";
|
|
|
|
std::string F4 = "1024/256";
|
|
|
|
|
|
|
|
|
|
|
|
if ( model == "SLT-A77V" && maxAperture == F4 && inRange(focalLength,18,200) ) index=2;
|
|
|
|
if ( model == "SLT-A77V" && maxAperture == F4 && inRange(focalLength,18,200) ) index=2;
|
|
|
|
|
|
|
|
|
|
|
|
if ( index > 0 ) return resolvedLens(os,lensID,index);
|
|
|
|
if ( index > 0 ) return resolvedLens(os,lensID,index);
|
|
|
|
} catch (...) {}
|
|
|
|
} catch (...) {}
|
|
|
@ -2119,12 +2122,12 @@ namespace Exiv2 {
|
|
|
|
long lensID = 0xff;
|
|
|
|
long lensID = 0xff;
|
|
|
|
long index = 0 ;
|
|
|
|
long index = 0 ;
|
|
|
|
|
|
|
|
|
|
|
|
std::string model = getKeyString("Exif.Image.Model" ,metadata);
|
|
|
|
std::string model = getKeyString("Exif.Image.Model" ,metadata);
|
|
|
|
long focalLength = getKeyLong ("Exif.Photo.FocalLength" ,metadata);
|
|
|
|
long focalLength = getKeyLong ("Exif.Photo.FocalLength" ,metadata);
|
|
|
|
std::string maxAperture = getKeyString("Exif.Photo.MaxApertureValue" ,metadata);
|
|
|
|
std::string maxAperture = getKeyString("Exif.Photo.MaxApertureValue" ,metadata);
|
|
|
|
std::string F2_8 = "760/256" ;
|
|
|
|
std::string F2_8 = "760/256" ;
|
|
|
|
|
|
|
|
|
|
|
|
if ( model == "SLT-A77V" && maxAperture == F2_8 && inRange(focalLength,17,50) ) index = 1 ;
|
|
|
|
if ( model == "SLT-A77V" && maxAperture == F2_8 && inRange(focalLength,17,50) ) index = 1 ;
|
|
|
|
|
|
|
|
|
|
|
|
if ( index > 0 ) return resolvedLens(os,lensID,index);
|
|
|
|
if ( index > 0 ) return resolvedLens(os,lensID,index);
|
|
|
|
} catch (...) {}
|
|
|
|
} catch (...) {}
|
|
|
@ -2136,19 +2139,33 @@ namespace Exiv2 {
|
|
|
|
{
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
long lensID = 0xffff;
|
|
|
|
long lensID = 0xffff;
|
|
|
|
long index = 0 ;
|
|
|
|
long index = 1 ;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// #1153
|
|
|
|
std::string model = getKeyString("Exif.Image.Model" ,metadata);
|
|
|
|
std::string model = getKeyString("Exif.Image.Model" ,metadata);
|
|
|
|
std::string maxAperture = getKeyString("Exif.Photo.MaxApertureValue" ,metadata);
|
|
|
|
std::string maxAperture = getKeyString("Exif.Photo.MaxApertureValue" ,metadata);
|
|
|
|
std::string F1_8 = "434/256" ;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// #1153
|
|
|
|
std::string F1_8 = "434/256" ;
|
|
|
|
if ( model == "ILCE-6000" && maxAperture == F1_8 ) try {
|
|
|
|
Exiv2::StringSet maxApertures;
|
|
|
|
long focalLength = getKeyLong ("Exif.Photo.FocalLength" ,metadata);
|
|
|
|
maxApertures.insert( "926/256") ; // F3.5
|
|
|
|
long focalL35mm = getKeyLong ("Exif.Photo.FocalLengthIn35mmFilm",metadata);
|
|
|
|
maxApertures.insert("1024/256") ; // F4
|
|
|
|
long focalRatio = (focalL35mm*100)/focalLength;
|
|
|
|
maxApertures.insert("1110/256") ; // F4.5
|
|
|
|
if ( inRange(focalRatio,145,155) ) index = 2 ;
|
|
|
|
maxApertures.insert("1188/256") ; // F5
|
|
|
|
} catch (...) {}
|
|
|
|
maxApertures.insert("1272/256") ; // F5.6
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( model == "ILCE-6000" && maxAperture == F1_8 ) try {
|
|
|
|
|
|
|
|
long focalLength = getKeyLong ("Exif.Photo.FocalLength" ,metadata);
|
|
|
|
|
|
|
|
long focalL35mm = getKeyLong ("Exif.Photo.FocalLengthIn35mmFilm",metadata);
|
|
|
|
|
|
|
|
long focalRatio = (focalL35mm*100)/focalLength;
|
|
|
|
|
|
|
|
if ( inRange(focalRatio,145,155) ) index = 2 ;
|
|
|
|
|
|
|
|
} catch (...) {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( model == "ILCE-6000" && maxApertures.find(maxAperture) != maxApertures.end() ) try {
|
|
|
|
|
|
|
|
long focalLength = getKeyLong ("Exif.Photo.FocalLength" ,metadata);
|
|
|
|
|
|
|
|
long focalL35mm = getKeyLong ("Exif.Photo.FocalLengthIn35mmFilm",metadata);
|
|
|
|
|
|
|
|
long focalRatio = (focalL35mm*100)/focalLength;
|
|
|
|
|
|
|
|
if ( inRange(focalRatio,145,155) ) index = 3 ;
|
|
|
|
|
|
|
|
} catch (...) {}
|
|
|
|
|
|
|
|
|
|
|
|
if ( index > 0 ) return resolvedLens(os,lensID,index);
|
|
|
|
if ( index > 0 ) return resolvedLens(os,lensID,index);
|
|
|
|
} catch (...) {}
|
|
|
|
} catch (...) {}
|
|
|
@ -2182,8 +2199,8 @@ namespace Exiv2 {
|
|
|
|
unsigned long index = value.toLong();
|
|
|
|
unsigned long index = value.toLong();
|
|
|
|
const LensIdFct* lif = find(lensIdFct,index);
|
|
|
|
const LensIdFct* lif = find(lensIdFct,index);
|
|
|
|
if ( lif && metadata ) {
|
|
|
|
if ( lif && metadata ) {
|
|
|
|
if ( lif->fct_ )
|
|
|
|
if ( lif->fct_ )
|
|
|
|
return lif->fct_(os, value, metadata);
|
|
|
|
return lif->fct_(os, value, metadata);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return EXV_PRINT_TAG(minoltaSonyLensID)(os, value, metadata);
|
|
|
|
return EXV_PRINT_TAG(minoltaSonyLensID)(os, value, metadata);
|
|
|
|