Solving issue 466: "DNG makerNote"
This commit is contained in:
parent
78bd70ad12
commit
6fabd082d4
@ -213,11 +213,17 @@ void ImageData::extractInfo () {
|
|||||||
// guess lens...
|
// guess lens...
|
||||||
lens = "Unknown";
|
lens = "Unknown";
|
||||||
|
|
||||||
// Sometimes (e.g. DNG) EXIF already contains lens data
|
// Sometimes (e.g. DNG) EXIF already contains lens data
|
||||||
|
|
||||||
if (exif->getTag ("MakerNote")) {
|
if (root->findTag("MakerNote")) {
|
||||||
rtexif::TagDirectory* mnote = exif->getTag ("MakerNote")->getDirectory();
|
rtexif::TagDirectory* mnote = root->findTag("MakerNote")->getDirectory();
|
||||||
if (mnote && !make.compare (0, 5, "NIKON")) {
|
if (mnote && !make.compare (0, 5, "NIKON")) {
|
||||||
|
// ISO at max value supported, check manufacturer specific
|
||||||
|
if (iso_speed == 65535 || iso_speed == 0) {
|
||||||
|
rtexif::Tag* isoTag = mnote->getTagP("ISOInfo/ISO");
|
||||||
|
if (isoTag)
|
||||||
|
iso_speed = isoTag->toInt();
|
||||||
|
}
|
||||||
bool lensOk = false;
|
bool lensOk = false;
|
||||||
if (mnote->getTag ("LensData")) {
|
if (mnote->getTag ("LensData")) {
|
||||||
std::string ldata = mnote->getTag ("LensData")->valueToString ();
|
std::string ldata = mnote->getTag ("LensData")->valueToString ();
|
||||||
@ -252,22 +258,28 @@ void ImageData::extractInfo () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (mnote && !make.compare (0, 5, "Canon")) {
|
else if (mnote && !make.compare (0, 5, "Canon")) {
|
||||||
int found=false;
|
// ISO at max value supported, check manufacturer specific
|
||||||
// canon EXIF have a string for lens model
|
if (iso_speed == 65535 || iso_speed == 0) {
|
||||||
rtexif::Tag *lt = mnote->getTag("LensType");
|
rtexif::Tag* baseIsoTag = mnote->getTagP("CanonShotInfo/BaseISO");
|
||||||
|
if (baseIsoTag)
|
||||||
|
iso_speed = baseIsoTag->toInt();
|
||||||
|
}
|
||||||
|
int found=false;
|
||||||
|
// canon EXIF have a string for lens model
|
||||||
|
rtexif::Tag *lt = mnote->getTag("LensType");
|
||||||
if ( lt ) {
|
if ( lt ) {
|
||||||
std::string ldata = lt->valueToString ();
|
std::string ldata = lt->valueToString ();
|
||||||
if (ldata.size()>1) {
|
if (ldata.size()>1) {
|
||||||
found=true;
|
found=true;
|
||||||
lens = "Canon " + ldata;
|
lens = "Canon " + ldata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( !found || lens.substr(lens.find(' ')).length() < 7 ){
|
if( !found || lens.substr(lens.find(' ')).length() < 7 ){
|
||||||
lt = mnote->findTag("LensID");
|
lt = mnote->findTag("LensID");
|
||||||
if ( lt ) {
|
if ( lt ) {
|
||||||
std::string ldata = lt->valueToString ();
|
std::string ldata = lt->valueToString ();
|
||||||
if (ldata.size()>1) {
|
if (ldata.size()>1) {
|
||||||
lens = ldata;
|
lens = ldata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -275,6 +287,18 @@ void ImageData::extractInfo () {
|
|||||||
else if (mnote && !make.compare (0, 6, "PENTAX")) {
|
else if (mnote && !make.compare (0, 6, "PENTAX")) {
|
||||||
if (mnote->getTag ("LensType"))
|
if (mnote->getTag ("LensType"))
|
||||||
lens = mnote->getTag ("LensType")->valueToString ();
|
lens = mnote->getTag ("LensType")->valueToString ();
|
||||||
|
|
||||||
|
// Try to get the FocalLength from the LensInfo structure, where length below 10mm will be correctly set
|
||||||
|
rtexif::Tag* flt=mnote->getTagP ("LensInfo/FocalLength");
|
||||||
|
if (flt)
|
||||||
|
focal_len = flt->toDouble ();
|
||||||
|
else if ((flt = mnote->getTagP ("FocalLength"))) {
|
||||||
|
rtexif::Tag* flt = mnote->getTag ("FocalLength");
|
||||||
|
focal_len = flt->toDouble ();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mnote->getTag ("FocalLengthIn35mmFilm"))
|
||||||
|
focal_len35mm = mnote->getTag ("FocalLengthIn35mmFilm")->toDouble ();
|
||||||
}
|
}
|
||||||
else if (mnote && (!make.compare (0, 4, "SONY") || !make.compare (0, 6, "KONICA"))) {
|
else if (mnote && (!make.compare (0, 4, "SONY") || !make.compare (0, 6, "KONICA"))) {
|
||||||
if (mnote->getTag ("LensID"))
|
if (mnote->getTag ("LensID"))
|
||||||
@ -288,11 +312,11 @@ void ImageData::extractInfo () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (exif->getTag ("DNGLensInfo")) {
|
} else if (exif->getTag ("DNGLensInfo")) {
|
||||||
lens = exif->getTag ("DNGLensInfo")->valueToString ();
|
lens = exif->getTag ("DNGLensInfo")->valueToString ();
|
||||||
} else if (exif->getTag ("LensModel")) {
|
} else if (exif->getTag ("LensModel")) {
|
||||||
lens = exif->getTag ("LensModel")->valueToString ();
|
lens = exif->getTag ("LensModel")->valueToString ();
|
||||||
} else if (exif->getTag ("LensInfo")) {
|
} else if (exif->getTag ("LensInfo")) {
|
||||||
lens = exif->getTag ("LensInfo")->valueToString ();
|
lens = exif->getTag ("LensInfo")->valueToString ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -406,30 +406,31 @@ CAFocalInterpreter caFocalInterpreter;
|
|||||||
|
|
||||||
class CALensInterpreter : public IntLensInterpreter< int > {
|
class CALensInterpreter : public IntLensInterpreter< int > {
|
||||||
public:
|
public:
|
||||||
CALensInterpreter () {
|
CALensInterpreter () { // From EXIFTOOL database 'Canon.pm' V3.19
|
||||||
choices.insert(p_t(1, "Canon EF 50mm f/1.8"));
|
choices.insert(p_t(1, "Canon EF 50mm f/1.8"));
|
||||||
choices.insert(p_t(2, "Canon EF 28mm f/2.8"));
|
choices.insert(p_t(2, "Canon EF 28mm f/2.8"));
|
||||||
choices.insert(p_t(3, "Canon EF 135mm f/2.8 Soft"));
|
choices.insert(p_t(3, "Canon EF 135mm f/2.8 Soft"));
|
||||||
choices.insert(p_t(4, "Canon EF 35-105mm f/3.5-4.5"));
|
choices.insert(p_t(4, "Canon EF 35-105mm f/3.5-4.5"));
|
||||||
choices.insert(p_t(4, "Sigma UC Zoom 35.135mm f/4-5.6"));
|
choices.insert(p_t(4, "Sigma UC Zoom 35-135mm f/4-5.6"));
|
||||||
choices.insert(p_t(5, "Canon EF 35-70mm f/3.5-4.5"));
|
choices.insert(p_t(5, "Canon EF 35-70mm f/3.5-4.5"));
|
||||||
choices.insert(p_t(6, "Canon EF 28-70mm f/3.5-4.5"));
|
choices.insert(p_t(6, "Canon EF 28-70mm f/3.5-4.5"));
|
||||||
choices.insert(p_t(6, "Sigma 18-50mm f/3.5-5.6 DC"));
|
choices.insert(p_t(6, "Sigma 18-50mm f/3.5-5.6 DC"));
|
||||||
choices.insert(p_t(6, "Sigma 18-125mm f/3.5-5.6 DC IF ASP"));
|
choices.insert(p_t(6, "Sigma 18-125mm f/3.5-5.6 DC IF ASP"));
|
||||||
choices.insert(p_t(6, "Sigma 28-80mm f/3.5-5.6 II Macro"));
|
|
||||||
choices.insert(p_t(6, "Tokina AF 193-2 19-35mm f/3.5-4.5"));
|
choices.insert(p_t(6, "Tokina AF 193-2 19-35mm f/3.5-4.5"));
|
||||||
|
choices.insert(p_t(6, "Sigma 28-80mm f/3.5-5.6 II Macro"));
|
||||||
choices.insert(p_t(7, "Canon EF 100-300mm f/5.6L"));
|
choices.insert(p_t(7, "Canon EF 100-300mm f/5.6L"));
|
||||||
choices.insert(p_t(8, "Canon EF 100-300mm f/5.6"));
|
choices.insert(p_t(8, "Canon EF 100-300mm f/5.6"));
|
||||||
choices.insert(p_t(8, "Sigma 70-300mm f/4-5.6 APO DG Macro"));
|
choices.insert(p_t(8, "Sigma 70-300mm f/4-5.6 [APO] DG Macro"));
|
||||||
choices.insert(p_t(8, "Tokina AT-X242AF 24-200mm f/3.5-5.6"));
|
choices.insert(p_t(8, "Tokina AT-X 242 AF 24-200mm f/3.5-5.6"));
|
||||||
choices.insert(p_t(9, "Canon EF 70-210mm f/4"));
|
choices.insert(p_t(9, "Canon EF 70-210mm f/4"));
|
||||||
choices.insert(p_t(9, "Sigma 55-200mm f/4-5.6 DC"));
|
choices.insert(p_t(9, "Sigma 55-200mm f/4-5.6 DC"));
|
||||||
choices.insert(p_t(10, "Canon EF 50mm f/2.5 Macro"));
|
choices.insert(p_t(10, "Canon EF 50mm f/2.5 Macro"));
|
||||||
choices.insert(p_t(10, "Sigma 50mm f/2.8 EX"));
|
choices.insert(p_t(10, "Sigma 50mm f/2.8 EX"));
|
||||||
choices.insert(p_t(10, "Sigma 28mm f/1.8"));
|
choices.insert(p_t(10, "Sigma 28mm f/1.8"));
|
||||||
choices.insert(p_t(10, "Sigma 105mm f/2.8 Macro EX"));
|
choices.insert(p_t(10, "Sigma 105mm f/2.8 Macro EX"));
|
||||||
|
choices.insert(p_t(10, "Sigma 70mm f/2.8 EX DG Macro EF"));
|
||||||
choices.insert(p_t(11, "Canon EF 35mm f/2"));
|
choices.insert(p_t(11, "Canon EF 35mm f/2"));
|
||||||
choices.insert(p_t(13, "Canon EF 15mm f/2.8"));
|
choices.insert(p_t(13, "Canon EF 15mm f/2.8 Fisheye"));
|
||||||
choices.insert(p_t(14, "Canon EF 50-200mm f/3.5-4.5L"));
|
choices.insert(p_t(14, "Canon EF 50-200mm f/3.5-4.5L"));
|
||||||
choices.insert(p_t(15, "Canon EF 50-200mm f/3.5-4.5"));
|
choices.insert(p_t(15, "Canon EF 50-200mm f/3.5-4.5"));
|
||||||
choices.insert(p_t(16, "Canon EF 35-135mm f/3.5-4.5"));
|
choices.insert(p_t(16, "Canon EF 35-135mm f/3.5-4.5"));
|
||||||
@ -438,7 +439,7 @@ class CALensInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(20, "Canon EF 100-200mm f/4.5A"));
|
choices.insert(p_t(20, "Canon EF 100-200mm f/4.5A"));
|
||||||
choices.insert(p_t(21, "Canon EF 80-200mm f/2.8L"));
|
choices.insert(p_t(21, "Canon EF 80-200mm f/2.8L"));
|
||||||
choices.insert(p_t(22, "Canon EF 20-35mm f/2.8L"));
|
choices.insert(p_t(22, "Canon EF 20-35mm f/2.8L"));
|
||||||
choices.insert(p_t(22, "Tokina AT-X280AF PRO 28-80mm f/2.8 Aspherical"));
|
choices.insert(p_t(22, "Tokina AT-X 280 AF Pro 28-80mm f/2.8 Aspherical"));
|
||||||
choices.insert(p_t(23, "Canon EF 35-105mm f/3.5-4.5"));
|
choices.insert(p_t(23, "Canon EF 35-105mm f/3.5-4.5"));
|
||||||
choices.insert(p_t(24, "Canon EF 35-80mm f/4-5.6 Power Zoom"));
|
choices.insert(p_t(24, "Canon EF 35-80mm f/4-5.6 Power Zoom"));
|
||||||
choices.insert(p_t(25, "Canon EF 35-80mm f/4-5.6 Power Zoom"));
|
choices.insert(p_t(25, "Canon EF 35-80mm f/4-5.6 Power Zoom"));
|
||||||
@ -459,7 +460,12 @@ class CALensInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(31, "Tamron SP AF 300mm f/2.8 LD IF"));
|
choices.insert(p_t(31, "Tamron SP AF 300mm f/2.8 LD IF"));
|
||||||
choices.insert(p_t(32, "Canon EF 24mm f/2.8"));
|
choices.insert(p_t(32, "Canon EF 24mm f/2.8"));
|
||||||
choices.insert(p_t(32, "Sigma 15mm f/2.8 EX Fisheye"));
|
choices.insert(p_t(32, "Sigma 15mm f/2.8 EX Fisheye"));
|
||||||
|
choices.insert(p_t(33, "Voigtlander or Carl Zeiss Lens"));
|
||||||
choices.insert(p_t(33, "Voigtlander Ultron 40mm f/2 SLII Aspherical"));
|
choices.insert(p_t(33, "Voigtlander Ultron 40mm f/2 SLII Aspherical"));
|
||||||
|
choices.insert(p_t(33, "Carl Zeiss Distagon T* 15mm f/2.8 ZE"));
|
||||||
|
choices.insert(p_t(33, "Carl Zeiss Distagon T* 18mm f/3.5 ZE"));
|
||||||
|
choices.insert(p_t(33, "Carl Zeiss Distagon T* 21mm f/2.8 ZE"));
|
||||||
|
choices.insert(p_t(33, "Carl Zeiss Distagon T* 28mm f/2 ZE"));
|
||||||
choices.insert(p_t(33, "Carl Zeiss Distagon T* 35mm f/2 ZE"));
|
choices.insert(p_t(33, "Carl Zeiss Distagon T* 35mm f/2 ZE"));
|
||||||
choices.insert(p_t(35, "Canon EF 35-80mm f/4-5.6"));
|
choices.insert(p_t(35, "Canon EF 35-80mm f/4-5.6"));
|
||||||
choices.insert(p_t(36, "Canon EF 38-76mm f/4.5-5.6"));
|
choices.insert(p_t(36, "Canon EF 38-76mm f/4.5-5.6"));
|
||||||
@ -476,12 +482,15 @@ class CALensInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(42, "Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical IF Macro (A20)"));
|
choices.insert(p_t(42, "Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical IF Macro (A20)"));
|
||||||
choices.insert(p_t(43, "Canon EF 28-105mm f/4-5.6"));
|
choices.insert(p_t(43, "Canon EF 28-105mm f/4-5.6"));
|
||||||
choices.insert(p_t(44, "Canon EF 90-300mm f/4.5-5.6"));
|
choices.insert(p_t(44, "Canon EF 90-300mm f/4.5-5.6"));
|
||||||
choices.insert(p_t(45, "Canon EF-S 18-55mm f/3.5-5.6"));
|
choices.insert(p_t(45, "Canon EF-S 18-55mm f/3.5-5.6 II"));
|
||||||
choices.insert(p_t(46, "Canon EF 28-90mm f/4-5.6"));
|
choices.insert(p_t(46, "Canon EF 28-90mm f/4-5.6"));
|
||||||
choices.insert(p_t(48, "Canon EF-S 18-55mm f/3.5-5.6 IS"));
|
choices.insert(p_t(48, "Canon EF-S 18-55mm f/3.5-5.6 IS"));
|
||||||
choices.insert(p_t(49, "Canon EF-S 55-250mm f/4-5.6 IS"));
|
choices.insert(p_t(49, "Canon EF-S 55-250mm f/4-5.6 IS"));
|
||||||
choices.insert(p_t(50, "Canon EF-S 18-200mm f/3.5-5.6 IS"));
|
choices.insert(p_t(50, "Canon EF-S 18-200mm f/3.5-5.6 IS"));
|
||||||
choices.insert(p_t(51, "Canon EF-S 18-135mm f/3.5-5.6 IS"));
|
choices.insert(p_t(51, "Canon EF-S 18-135mm f/3.5-5.6 IS"));
|
||||||
|
choices.insert(p_t(52, "Canon EF-S 18-55mm f/3.5-5.6 IS II"));
|
||||||
|
choices.insert(p_t(53, "Canon EF-S 18-55mm f/3.5-5.6 III"));
|
||||||
|
choices.insert(p_t(54, "Canon EF-S 55-250mm f/4-5.6 IS II"));
|
||||||
choices.insert(p_t(94, "Canon TS-E 17mm f/4L"));
|
choices.insert(p_t(94, "Canon TS-E 17mm f/4L"));
|
||||||
choices.insert(p_t(95, "Canon TS-E 24mm f/3.5 L II"));
|
choices.insert(p_t(95, "Canon TS-E 24mm f/3.5 L II"));
|
||||||
choices.insert(p_t(124, "Canon MP-E 65mm f/2.8 1-5x Macro Photo"));
|
choices.insert(p_t(124, "Canon MP-E 65mm f/2.8 1-5x Macro Photo"));
|
||||||
@ -496,6 +505,8 @@ class CALensInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(131, "Sigma 17-70mm f/2.8-4.5 DC Macro"));
|
choices.insert(p_t(131, "Sigma 17-70mm f/2.8-4.5 DC Macro"));
|
||||||
choices.insert(p_t(131, "Sigma APO 50-150mm f/2.8 EX DC HSM II"));
|
choices.insert(p_t(131, "Sigma APO 50-150mm f/2.8 EX DC HSM II"));
|
||||||
choices.insert(p_t(131, "Sigma APO 120-300mm f/2.8 EX DG HSM"));
|
choices.insert(p_t(131, "Sigma APO 120-300mm f/2.8 EX DG HSM"));
|
||||||
|
choices.insert(p_t(131, "Sigma 4.5mm f/2.8 EX DC HSM Circular Fisheye"));
|
||||||
|
choices.insert(p_t(131, "Sigma 70-200mm f/2.8 APO EX HSM"));
|
||||||
choices.insert(p_t(132, "Canon EF 1200mm f/5.6L"));
|
choices.insert(p_t(132, "Canon EF 1200mm f/5.6L"));
|
||||||
choices.insert(p_t(134, "Canon EF 600mm f/4L IS"));
|
choices.insert(p_t(134, "Canon EF 600mm f/4L IS"));
|
||||||
choices.insert(p_t(135, "Canon EF 200mm f/1.8L"));
|
choices.insert(p_t(135, "Canon EF 200mm f/1.8L"));
|
||||||
@ -507,6 +518,14 @@ class CALensInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(137, "Sigma 24-70mm f/2.8 IF EX DG HSM"));
|
choices.insert(p_t(137, "Sigma 24-70mm f/2.8 IF EX DG HSM"));
|
||||||
choices.insert(p_t(137, "Sigma 18-125mm f/3.8-5.6 DC OS HSM"));
|
choices.insert(p_t(137, "Sigma 18-125mm f/3.8-5.6 DC OS HSM"));
|
||||||
choices.insert(p_t(137, "Sigma 17-70mm f/2.8-4 DC Macro OS HSM"));
|
choices.insert(p_t(137, "Sigma 17-70mm f/2.8-4 DC Macro OS HSM"));
|
||||||
|
choices.insert(p_t(137, "Sigma 17-50mm f/2.8 OS HSM"));
|
||||||
|
choices.insert(p_t(137, "Sigma 18-200mm f/3.5-6.3 II DC OS HSM"));
|
||||||
|
choices.insert(p_t(137, "Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD"));
|
||||||
|
choices.insert(p_t(137, "Sigma 8-16mm f/4.5-5.6 DC HSM"));
|
||||||
|
choices.insert(p_t(137, "Tamron SP 17-50mm f/2.8 XR Di II VC"));
|
||||||
|
choices.insert(p_t(137, "Tamron SP 60mm f/2 Macro Di II"));
|
||||||
|
choices.insert(p_t(137, "Sigma 10-20mm f/3.5 EX DC HSM"));
|
||||||
|
choices.insert(p_t(137, "Tamron SP 24-70mm f/2.8 Di VC USD"));
|
||||||
choices.insert(p_t(138, "Canon EF 28-80mm f/2.8-4L"));
|
choices.insert(p_t(138, "Canon EF 28-80mm f/2.8-4L"));
|
||||||
choices.insert(p_t(139, "Canon EF 400mm f/2.8L"));
|
choices.insert(p_t(139, "Canon EF 400mm f/2.8L"));
|
||||||
choices.insert(p_t(140, "Canon EF 500mm f/4.5L"));
|
choices.insert(p_t(140, "Canon EF 500mm f/4.5L"));
|
||||||
@ -518,7 +537,7 @@ class CALensInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(146, "Canon EF 70-210mm f/3.5-4.5 USM"));
|
choices.insert(p_t(146, "Canon EF 70-210mm f/3.5-4.5 USM"));
|
||||||
choices.insert(p_t(147, "Canon EF 35-135mm f/4-5.6 USM"));
|
choices.insert(p_t(147, "Canon EF 35-135mm f/4-5.6 USM"));
|
||||||
choices.insert(p_t(148, "Canon EF 28-80mm f/3.5-5.6 USM"));
|
choices.insert(p_t(148, "Canon EF 28-80mm f/3.5-5.6 USM"));
|
||||||
choices.insert(p_t(149, "Canon EF 100mm f/2"));
|
choices.insert(p_t(149, "Canon EF 100mm f/2 USM"));
|
||||||
choices.insert(p_t(150, "Canon EF 14mm f/2.8L"));
|
choices.insert(p_t(150, "Canon EF 14mm f/2.8L"));
|
||||||
choices.insert(p_t(150, "Sigma 20mm f/1.8 EX"));
|
choices.insert(p_t(150, "Sigma 20mm f/1.8 EX"));
|
||||||
choices.insert(p_t(150, "Sigma 24mm f/1.8 DG Macro EX"));
|
choices.insert(p_t(150, "Sigma 24mm f/1.8 DG Macro EX"));
|
||||||
@ -530,7 +549,7 @@ class CALensInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(152, "Sigma 10-20mm f/4-5.6"));
|
choices.insert(p_t(152, "Sigma 10-20mm f/4-5.6"));
|
||||||
choices.insert(p_t(152, "Sigma 100-300mm f/4"));
|
choices.insert(p_t(152, "Sigma 100-300mm f/4"));
|
||||||
choices.insert(p_t(153, "Canon EF 35-350mm f/3.5-5.6L"));
|
choices.insert(p_t(153, "Canon EF 35-350mm f/3.5-5.6L"));
|
||||||
choices.insert(p_t(153, "Sigma APO 50-500mm f/4-6.3 HSM EX"));
|
choices.insert(p_t(153, "Sigma 50-500mm f/4-6.3 APO HSM EX"));
|
||||||
choices.insert(p_t(153, "Tamron AF 28-300mm f/3.5-6.3 XR LD Aspherical IF Macro"));
|
choices.insert(p_t(153, "Tamron AF 28-300mm f/3.5-6.3 XR LD Aspherical IF Macro"));
|
||||||
choices.insert(p_t(153, "Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical IF Macro (A14)"));
|
choices.insert(p_t(153, "Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical IF Macro (A14)"));
|
||||||
choices.insert(p_t(153, "Tamron 18-250mm f/3.5-6.3 Di II LD Aspherical IF Macro"));
|
choices.insert(p_t(153, "Tamron 18-250mm f/3.5-6.3 Di II LD Aspherical IF Macro"));
|
||||||
@ -540,11 +559,15 @@ class CALensInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(156, "Tamron SP 70-300mm f/4-5.6 Di VC USD"));
|
choices.insert(p_t(156, "Tamron SP 70-300mm f/4-5.6 Di VC USD"));
|
||||||
choices.insert(p_t(160, "Canon EF 20-35mm f/3.5-4.5 USM"));
|
choices.insert(p_t(160, "Canon EF 20-35mm f/3.5-4.5 USM"));
|
||||||
choices.insert(p_t(160, "Tamron AF 19-35mm f/3.5-4.5"));
|
choices.insert(p_t(160, "Tamron AF 19-35mm f/3.5-4.5"));
|
||||||
|
choices.insert(p_t(160, "Tokina AT-X 124 AF Pro DX 12-24mm f/4"));
|
||||||
|
choices.insert(p_t(160, "Tokina AT-X 107 AF DX 10-17mm f/3.5-4.5 Fisheye"));
|
||||||
|
choices.insert(p_t(160, "Tokina AT-X 116 AF Pro DX 11-16mm f/2.8"));
|
||||||
choices.insert(p_t(161, "Canon EF 28-70mm f/2.8L"));
|
choices.insert(p_t(161, "Canon EF 28-70mm f/2.8L"));
|
||||||
choices.insert(p_t(161, "Sigma 24-70mm f/2.8 EX"));
|
choices.insert(p_t(161, "Sigma 24-70mm f/2.8 EX"));
|
||||||
choices.insert(p_t(161, "Sigma 28-70mm f/2.8 EX"));
|
choices.insert(p_t(161, "Sigma 28-70mm f/2.8 EX"));
|
||||||
choices.insert(p_t(161, "Tamron AF 17-50mm f/2.8 Di-II LD Aspherical"));
|
choices.insert(p_t(161, "Tamron AF 17-50mm f/2.8 Di-II LD Aspherical"));
|
||||||
choices.insert(p_t(161, "Tamron 90mm f/2.8"));
|
choices.insert(p_t(161, "Tamron 90mm f/2.8"));
|
||||||
|
choices.insert(p_t(161, "Sigma 24-60mm f/2.8 EX DG"));
|
||||||
choices.insert(p_t(162, "Canon EF 200mm f/2.8L"));
|
choices.insert(p_t(162, "Canon EF 200mm f/2.8L"));
|
||||||
choices.insert(p_t(163, "Canon EF 300mm f/4L"));
|
choices.insert(p_t(163, "Canon EF 300mm f/4L"));
|
||||||
choices.insert(p_t(164, "Canon EF 400mm f/5.6L"));
|
choices.insert(p_t(164, "Canon EF 400mm f/5.6L"));
|
||||||
@ -559,6 +582,7 @@ class CALensInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(169, "Sigma 30mm f/1.4 EX DC HSM"));
|
choices.insert(p_t(169, "Sigma 30mm f/1.4 EX DC HSM"));
|
||||||
choices.insert(p_t(169, "Sigma 50mm f/1.4 EX DG HSM"));
|
choices.insert(p_t(169, "Sigma 50mm f/1.4 EX DG HSM"));
|
||||||
choices.insert(p_t(169, "Sigma 85mm f/1.4 EX DG HSM"));
|
choices.insert(p_t(169, "Sigma 85mm f/1.4 EX DG HSM"));
|
||||||
|
choices.insert(p_t(169, "Sigma 35mm f/1.4 DG HSM"));
|
||||||
choices.insert(p_t(170, "Canon EF 200mm f/2.8L II"));
|
choices.insert(p_t(170, "Canon EF 200mm f/2.8L II"));
|
||||||
choices.insert(p_t(171, "Canon EF 300mm f/4L"));
|
choices.insert(p_t(171, "Canon EF 300mm f/4L"));
|
||||||
choices.insert(p_t(172, "Canon EF 400mm f/5.6L"));
|
choices.insert(p_t(172, "Canon EF 400mm f/5.6L"));
|
||||||
@ -566,16 +590,19 @@ class CALensInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(173, "Sigma 180mm f/3.5 EX HSM Macro"));
|
choices.insert(p_t(173, "Sigma 180mm f/3.5 EX HSM Macro"));
|
||||||
choices.insert(p_t(173, "Sigma APO 150mm f/2.8 EX DG HSM Macro"));
|
choices.insert(p_t(173, "Sigma APO 150mm f/2.8 EX DG HSM Macro"));
|
||||||
choices.insert(p_t(174, "Canon EF 135mm f/2L"));
|
choices.insert(p_t(174, "Canon EF 135mm f/2L"));
|
||||||
choices.insert(p_t(174, "Sigma APO 70-200mm f/2.8 EX DG OS HSM"));
|
choices.insert(p_t(174, "Sigma 70-200mm f/2.8 EX DG APO OS HSM"));
|
||||||
|
choices.insert(p_t(174, "Sigma 50-500mm f/4.5-6.3 APO DG OS HSM"));
|
||||||
choices.insert(p_t(175, "Canon EF 400mm f/2.8L"));
|
choices.insert(p_t(175, "Canon EF 400mm f/2.8L"));
|
||||||
choices.insert(p_t(176, "Canon EF 24-85mm f/3.5-4.5 USM"));
|
choices.insert(p_t(176, "Canon EF 24-85mm f/3.5-4.5 USM"));
|
||||||
choices.insert(p_t(177, "Canon EF 300mm f/4L IS"));
|
choices.insert(p_t(177, "Canon EF 300mm f/4L IS"));
|
||||||
choices.insert(p_t(178, "Canon EF 28-135mm f/3.5-5.6 IS"));
|
choices.insert(p_t(178, "Canon EF 28-135mm f/3.5-5.6 IS"));
|
||||||
choices.insert(p_t(179, "Canon EF 24mm f/1.4L USM"));
|
choices.insert(p_t(179, "Canon EF 24mm f/1.4L"));
|
||||||
choices.insert(p_t(180, "Canon EF 35mm f/1.4L"));
|
choices.insert(p_t(180, "Canon EF 35mm f/1.4L"));
|
||||||
choices.insert(p_t(181, "Canon EF 100-400mm f/4.5-5.6L IS + x1.4"));
|
choices.insert(p_t(181, "Canon EF 100-400mm f/4.5-5.6L IS + x1.4"));
|
||||||
choices.insert(p_t(182, "Canon EF 100-400mm f/4.5-5.6L IS + x2"));
|
choices.insert(p_t(182, "Canon EF 100-400mm f/4.5-5.6L IS + x2"));
|
||||||
choices.insert(p_t(183, "Canon EF 100-400mm f/4.5-5.6L IS"));
|
choices.insert(p_t(183, "Canon EF 100-400mm f/4.5-5.6L IS"));
|
||||||
|
choices.insert(p_t(183, "Sigma 150mm f/2.8 EX DG OS HSM APO Macro"));
|
||||||
|
choices.insert(p_t(183, "Sigma 105mm f/2.8 EX DG OS HSM Macro"));
|
||||||
choices.insert(p_t(184, "Canon EF 400mm f/2.8L + x2"));
|
choices.insert(p_t(184, "Canon EF 400mm f/2.8L + x2"));
|
||||||
choices.insert(p_t(185, "Canon EF 600mm f/4L IS"));
|
choices.insert(p_t(185, "Canon EF 600mm f/4L IS"));
|
||||||
choices.insert(p_t(186, "Canon EF 70-200mm f/4L"));
|
choices.insert(p_t(186, "Canon EF 70-200mm f/4L"));
|
||||||
@ -588,7 +615,7 @@ class CALensInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(194, "Canon EF 80-200mm f/4.5-5.6 USM"));
|
choices.insert(p_t(194, "Canon EF 80-200mm f/4.5-5.6 USM"));
|
||||||
choices.insert(p_t(195, "Canon EF 35-105mm f/4.5-5.6 USM"));
|
choices.insert(p_t(195, "Canon EF 35-105mm f/4.5-5.6 USM"));
|
||||||
choices.insert(p_t(196, "Canon EF 75-300mm f/4-5.6 USM"));
|
choices.insert(p_t(196, "Canon EF 75-300mm f/4-5.6 USM"));
|
||||||
choices.insert(p_t(197, "Canon EF 75-300mm f/4-5.6 IS"));
|
choices.insert(p_t(197, "Canon EF 75-300mm f/4-5.6 IS USM"));
|
||||||
choices.insert(p_t(198, "Canon EF 50mm f/1.4 USM"));
|
choices.insert(p_t(198, "Canon EF 50mm f/1.4 USM"));
|
||||||
choices.insert(p_t(199, "Canon EF 28-80mm f/3.5-5.6 USM"));
|
choices.insert(p_t(199, "Canon EF 28-80mm f/3.5-5.6 USM"));
|
||||||
choices.insert(p_t(200, "Canon EF 75-300mm f/4-5.6 USM"));
|
choices.insert(p_t(200, "Canon EF 75-300mm f/4-5.6 USM"));
|
||||||
@ -597,15 +624,15 @@ class CALensInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(208, "Canon EF 22-55mm f/4-5.6 USM"));
|
choices.insert(p_t(208, "Canon EF 22-55mm f/4-5.6 USM"));
|
||||||
choices.insert(p_t(209, "Canon EF 55-200mm f/4.5-5.6"));
|
choices.insert(p_t(209, "Canon EF 55-200mm f/4.5-5.6"));
|
||||||
choices.insert(p_t(210, "Canon EF 28-90mm f/4-5.6 USM"));
|
choices.insert(p_t(210, "Canon EF 28-90mm f/4-5.6 USM"));
|
||||||
choices.insert(p_t(211, "Canon EF 28-200mm f/3.5-5.6"));
|
choices.insert(p_t(211, "Canon EF 28-200mm f/3.5-5.6 USM"));
|
||||||
choices.insert(p_t(212, "Canon EF 28-105mm f/4-5.6 USM"));
|
choices.insert(p_t(212, "Canon EF 28-105mm f/4-5.6 USM"));
|
||||||
choices.insert(p_t(213, "Canon EF 90-300mm f/4.5-5.6"));
|
choices.insert(p_t(213, "Canon EF 90-300mm f/4.5-5.6 USM"));
|
||||||
choices.insert(p_t(214, "Canon EF-S 18-55mm f/3.5-4.5 USM"));
|
choices.insert(p_t(214, "Canon EF-S 18-55mm f/3.5-5.6 USM"));
|
||||||
choices.insert(p_t(215, "Canon EF 55-200mm f/4.5-5.6 II USM"));
|
choices.insert(p_t(215, "Canon EF 55-200mm f/4.5-5.6 II USM"));
|
||||||
choices.insert(p_t(224, "Canon EF 70-200mm f/2.8L IS USM"));
|
choices.insert(p_t(224, "Canon EF 70-200mm f/2.8L IS"));
|
||||||
choices.insert(p_t(225, "Canon EF 70-200mm f/2.8L IS USM + x1.4"));
|
choices.insert(p_t(225, "Canon EF 70-200mm f/2.8L IS + x1.4"));
|
||||||
choices.insert(p_t(226, "Canon EF 70-200mm f/2.8L IS USM + x2"));
|
choices.insert(p_t(226, "Canon EF 70-200mm f/2.8L IS + x2"));
|
||||||
choices.insert(p_t(227, "Canon EF 70-200mm f/2.8L IS + 2.8x"));
|
choices.insert(p_t(227, "Canon EF 70-200mm f/2.8L IS + x2.8"));
|
||||||
choices.insert(p_t(228, "Canon EF 28-105mm f/3.5-4.5 USM"));
|
choices.insert(p_t(228, "Canon EF 28-105mm f/3.5-4.5 USM"));
|
||||||
choices.insert(p_t(229, "Canon EF 16-35mm f/2.8L"));
|
choices.insert(p_t(229, "Canon EF 16-35mm f/2.8L"));
|
||||||
choices.insert(p_t(230, "Canon EF 24-70mm f/2.8L"));
|
choices.insert(p_t(230, "Canon EF 24-70mm f/2.8L"));
|
||||||
@ -617,10 +644,10 @@ class CALensInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(236, "Canon EF-S 60mm f/2.8 Macro USM"));
|
choices.insert(p_t(236, "Canon EF-S 60mm f/2.8 Macro USM"));
|
||||||
choices.insert(p_t(237, "Canon EF 24-105mm f/4L IS"));
|
choices.insert(p_t(237, "Canon EF 24-105mm f/4L IS"));
|
||||||
choices.insert(p_t(238, "Canon EF 70-300mm f/4-5.6 IS USM"));
|
choices.insert(p_t(238, "Canon EF 70-300mm f/4-5.6 IS USM"));
|
||||||
choices.insert(p_t(239, "Canon EF 85mm f/1.2L II USM"));
|
choices.insert(p_t(239, "Canon EF 85mm f/1.2L II"));
|
||||||
choices.insert(p_t(240, "Canon EF-S 17-55mm f/2.8 IS USM"));
|
choices.insert(p_t(240, "Canon EF-S 17-55mm f/2.8 IS USM"));
|
||||||
choices.insert(p_t(241, "Canon EF 50mm f/1.2L USM"));
|
choices.insert(p_t(241, "Canon EF 50mm f/1.2L"));
|
||||||
choices.insert(p_t(242, "Canon EF 70-200mm f/4L IS USM"));
|
choices.insert(p_t(242, "Canon EF 70-200mm f/4L IS"));
|
||||||
choices.insert(p_t(243, "Canon EF 70-200mm f/4L IS + 1.4x"));
|
choices.insert(p_t(243, "Canon EF 70-200mm f/4L IS + 1.4x"));
|
||||||
choices.insert(p_t(244, "Canon EF 70-200mm f/4L IS + 2x"));
|
choices.insert(p_t(244, "Canon EF 70-200mm f/4L IS + 2x"));
|
||||||
choices.insert(p_t(245, "Canon EF 70-200mm f/4L IS + 2.8x"));
|
choices.insert(p_t(245, "Canon EF 70-200mm f/4L IS + 2.8x"));
|
||||||
@ -630,8 +657,28 @@ class CALensInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(249, "Canon EF 800mm f/5.6L IS"));
|
choices.insert(p_t(249, "Canon EF 800mm f/5.6L IS"));
|
||||||
choices.insert(p_t(250, "Canon EF 24mm f/1.4L II"));
|
choices.insert(p_t(250, "Canon EF 24mm f/1.4L II"));
|
||||||
choices.insert(p_t(251, "Canon EF 70-200mm f/2.8L IS II USM"));
|
choices.insert(p_t(251, "Canon EF 70-200mm f/2.8L IS II USM"));
|
||||||
|
choices.insert(p_t(252, "Canon EF 70-200mm f/2.8L IS II USM + x1.4"));
|
||||||
|
choices.insert(p_t(253, "Canon EF 70-200mm f/2.8L IS II USM + x2"));
|
||||||
choices.insert(p_t(254, "Canon EF 100mm f/2.8L Macro IS USM"));
|
choices.insert(p_t(254, "Canon EF 100mm f/2.8L Macro IS USM"));
|
||||||
choices.insert(p_t(488, "Canon EF-S 15-85mm f/3.5-5.6 IS USM"));
|
choices.insert(p_t(488, "Canon EF-S 15-85mm f/3.5-5.6 IS USM"));
|
||||||
|
choices.insert(p_t(489, "Canon EF 70-300mm f/4-5.6L IS USM"));
|
||||||
|
choices.insert(p_t(490, "Canon EF 8-15mm f/4L USM"));
|
||||||
|
choices.insert(p_t(491, "Canon EF 300mm f/2.8L IS II USM"));
|
||||||
|
choices.insert(p_t(492, "Canon EF 400mm f/2.8L IS II USM"));
|
||||||
|
choices.insert(p_t(493, "Canon EF 24-105mm f/4L IS USM"));
|
||||||
|
choices.insert(p_t(494, "Canon EF 600mm f/4.0L IS II USM"));
|
||||||
|
choices.insert(p_t(495, "Canon EF 24-70mm f/2.8L II USM"));
|
||||||
|
choices.insert(p_t(496, "Canon EF 200-400mm f/4L IS USM"));
|
||||||
|
choices.insert(p_t(502, "Canon EF 28mm f/2.8 IS USM"));
|
||||||
|
choices.insert(p_t(503, "Canon EF 24mm f/2.8 IS USM"));
|
||||||
|
choices.insert(p_t(504, "Canon EF 24-70mm f/4L IS USM"));
|
||||||
|
choices.insert(p_t(505, "Canon EF 35mm f/2 IS USM"));
|
||||||
|
choices.insert(p_t(4142, "Canon EF-S 18-135mm f/3.5-5.6 IS STM"));
|
||||||
|
choices.insert(p_t(4143, "Canon EF-M 18-55mm f/3.5-5.6 IS STM"));
|
||||||
|
choices.insert(p_t(4144, "Canon EF 40mm f/2.8 STM"));
|
||||||
|
choices.insert(p_t(4145, "Canon EF-M 22mm f/2 STM"));
|
||||||
|
choices.insert(p_t(4146, "Canon EF-S 18-55mm f/3.5-5.6 IS STM"));
|
||||||
|
choices.insert(p_t(4147, "Canon EF-M 11-22mm f/4-5.6 IS STM"));
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual std::string toString (Tag* t)
|
virtual std::string toString (Tag* t)
|
||||||
@ -1256,205 +1303,205 @@ public:
|
|||||||
CAAspectRatioInterpreter caAspectRatioInterpreter;
|
CAAspectRatioInterpreter caAspectRatioInterpreter;
|
||||||
|
|
||||||
const TagAttrib canonCameraSettingsAttribs[] = {
|
const TagAttrib canonCameraSettingsAttribs[] = {
|
||||||
{0, 1, 0, 0, 1, "MacroMode", &caMacroModeInterpreter},
|
{0, AC_WRITE, 0, 0, 1, AUTO, "MacroMode", &caMacroModeInterpreter},
|
||||||
{0, 1, 0, 0, 2, "SelfTimer", &caSelfTimerInterpreter},
|
{0, AC_WRITE, 0, 0, 2, AUTO, "SelfTimer", &caSelfTimerInterpreter},
|
||||||
{0, 1, 0, 0, 3, "Quality", &caQualityInterpreter},
|
{0, AC_WRITE, 0, 0, 3, AUTO, "Quality", &caQualityInterpreter},
|
||||||
{0, 1, 0, 0, 4, "CanonFlashMode", &caFlashModeInterpreter},
|
{0, AC_WRITE, 0, 0, 4, AUTO, "CanonFlashMode", &caFlashModeInterpreter},
|
||||||
{0, 1, 0, 0, 5, "ContinuousDrive", &caContinuousDriveInterpreter},
|
{0, AC_WRITE, 0, 0, 5, AUTO, "ContinuousDrive", &caContinuousDriveInterpreter},
|
||||||
{0, 1, 0, 0, 7, "FocusMode", &caFocusModeInterpreter},
|
{0, AC_WRITE, 0, 0, 7, AUTO, "FocusMode", &caFocusModeInterpreter},
|
||||||
{0, 1, 0, 0, 9, "RecordMode", &caRecordModeInterpreter},
|
{0, AC_WRITE, 0, 0, 9, AUTO, "RecordMode", &caRecordModeInterpreter},
|
||||||
{0, 1, 0, 0, 10, "CanonImageSize", &caImageSizeInterpreter},
|
{0, AC_WRITE, 0, 0, 10, AUTO, "CanonImageSize", &caImageSizeInterpreter},
|
||||||
{0, 1, 0, 0, 11, "EasyMode", &caEasyModeInterpreter},
|
{0, AC_WRITE, 0, 0, 11, AUTO, "EasyMode", &caEasyModeInterpreter},
|
||||||
{0, 1, 0, 0, 12, "DigitalZoom", &caDigitalZoomInterpreter},
|
{0, AC_WRITE, 0, 0, 12, AUTO, "DigitalZoom", &caDigitalZoomInterpreter},
|
||||||
{0, 1, 0, 0, 13, "Contrast", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 13, AUTO, "Contrast", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 14, "Saturation", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 14, AUTO, "Saturation", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 15, "Sharpness", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 15, AUTO, "Sharpness", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 16, "CameraISO", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 16, AUTO, "CameraISO", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 17, "MeteringMode", &caMeteringModeInterpreter},
|
{0, AC_WRITE, 0, 0, 17, AUTO, "MeteringMode", &caMeteringModeInterpreter},
|
||||||
{0, 1, 0, 0, 18, "FocusRange", &caFocusRangeInterpreter},
|
{0, AC_WRITE, 0, 0, 18, AUTO, "FocusRange", &caFocusRangeInterpreter},
|
||||||
{0, 1, 0, 0, 19, "AFPoint", &caAFPointInterpreter},
|
{0, AC_WRITE, 0, 0, 19, AUTO, "AFPoint", &caAFPointInterpreter},
|
||||||
{0, 1, 0, 0, 20, "CanonExposureMode", &caExposureModeInterpreter},
|
{0, AC_WRITE, 0, 0, 20, AUTO, "CanonExposureMode", &caExposureModeInterpreter},
|
||||||
{0, 1, 0, 0, 22, "LensID", &caLensInterpreter},
|
{0, AC_WRITE, 0, 0, 22, AUTO, "LensID", &caLensInterpreter},
|
||||||
{0, 1, 0, 0, 23, "LongFocal", &caFocalInterpreter},
|
{0, AC_WRITE, 0, 0, 23, AUTO, "LongFocal", &caFocalInterpreter},
|
||||||
{0, 1, 0, 0, 24, "ShortFocal", &caFocalInterpreter},
|
{0, AC_WRITE, 0, 0, 24, AUTO, "ShortFocal", &caFocalInterpreter},
|
||||||
{0, 1, 0, 0, 25, "FocalUnits", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 25, AUTO, "FocalUnits", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 26, "MaxAperture", &caApertureInterpreter},
|
{0, AC_WRITE, 0, 0, 26, AUTO, "MaxAperture", &caApertureInterpreter},
|
||||||
{0, 1, 0, 0, 27, "MinAperture", &caApertureInterpreter},
|
{0, AC_WRITE, 0, 0, 27, AUTO, "MinAperture", &caApertureInterpreter},
|
||||||
{0, 1, 0, 0, 28, "FlashActivity", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 28, AUTO, "FlashActivity", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 29, "FlashBits", &caFlashBitsInterpreter},
|
{0, AC_WRITE, 0, 0, 29, AUTO, "FlashBits", &caFlashBitsInterpreter},
|
||||||
{0, 1, 0, 0, 32, "FocusContinuous", &caFocusContinuousInterpreter},
|
{0, AC_WRITE, 0, 0, 32, AUTO, "FocusContinuous", &caFocusContinuousInterpreter},
|
||||||
{0, 1, 0, 0, 33, "AESetting", &caAESettingsInterpreter},
|
{0, AC_WRITE, 0, 0, 33, AUTO, "AESetting", &caAESettingsInterpreter},
|
||||||
{0, 1, 0, 0, 34, "ImageStabilization", &caStabilizationInterpreter},
|
{0, AC_WRITE, 0, 0, 34, AUTO, "ImageStabilization", &caStabilizationInterpreter},
|
||||||
{0, 1, 0, 0, 35, "DisplayAperture", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 35, AUTO, "DisplayAperture", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 36, "ZoomSourceWidth", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 36, AUTO, "ZoomSourceWidth", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 37, "ZoomTargetWidth", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 37, AUTO, "ZoomTargetWidth", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 39, "SpotMeteringMode", &caSpotMeteringInterpreter},
|
{0, AC_WRITE, 0, 0, 39, AUTO, "SpotMeteringMode", &caSpotMeteringInterpreter},
|
||||||
{0, 1, 0, 0, 40, "PhotoEffect", &caPhotoEffectInterpreter},
|
{0, AC_WRITE, 0, 0, 40, AUTO, "PhotoEffect", &caPhotoEffectInterpreter},
|
||||||
{0, 1, 0, 0, 41, "ManualFlashOutput", &caManualFlashInterpreter},
|
{0, AC_WRITE, 0, 0, 41, AUTO, "ManualFlashOutput", &caManualFlashInterpreter},
|
||||||
{0, 1, 0, 0, 42, "ColorTone", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 42, AUTO, "ColorTone", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 46, "SRAWQuality", &caRAWQualityInterpreter},
|
{0, AC_WRITE, 0, 0, 46, AUTO, "SRAWQuality", &caRAWQualityInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
const TagAttrib canonFocalLengthAttribs[] = {
|
const TagAttrib canonFocalLengthAttribs[] = {
|
||||||
{0, 1, 0, 0, 0, "FocalType", &caFocalTypeInterpreter},
|
{0, AC_WRITE, 0, 0, 0, AUTO, "FocalType", &caFocalTypeInterpreter},
|
||||||
{0, 1, 0, 0, 1, "FocalLength", &caFocalInterpreter},
|
{0, AC_WRITE, 0, 0, 1, AUTO, "FocalLength", &caFocalInterpreter},
|
||||||
{0, 1, 0, 0, 2, "FocalPlaneXSize", &caFocalPlaneInterpreter},
|
{0, AC_WRITE, 0, 0, 2, AUTO, "FocalPlaneXSize", &caFocalPlaneInterpreter},
|
||||||
{0, 1, 0, 0, 3, "FocalPlaneYSize", &caFocalPlaneInterpreter},
|
{0, AC_WRITE, 0, 0, 3, AUTO, "FocalPlaneYSize", &caFocalPlaneInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
const TagAttrib canonShotInfoAttribs[] = {
|
const TagAttrib canonShotInfoAttribs[] = {
|
||||||
{0, 1, 0, 0, 1, "AutoISO", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 1, AUTO, "AutoISO", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 2, "BaseISO" ,&caBaseISOInterpreter},
|
{0, AC_WRITE, 0, 0, 2, AUTO, "BaseISO" ,&caBaseISOInterpreter},
|
||||||
{0, 1, 0, 0, 3, "MeasuredEV", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 3, AUTO, "MeasuredEV", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 4, "TargetAperture", &caApertureInterpreter},
|
{0, AC_WRITE, 0, 0, 4, AUTO, "TargetAperture", &caApertureInterpreter},
|
||||||
{0, 1, 0, 0, 5, "TargetExposureTime",&caExposureTimeInterpreter},
|
{0, AC_WRITE, 0, 0, 5, AUTO, "TargetExposureTime",&caExposureTimeInterpreter},
|
||||||
{0, 1, 0, 0, 6, "ExposureCompensation",&caEVInterpreter},
|
{0, AC_WRITE, 0, 0, 6, AUTO, "ExposureCompensation",&caEVInterpreter},
|
||||||
{0, 1, 0, 0, 7, "WhiteBalance",&caWhiteBalanceInterpreter},
|
{0, AC_WRITE, 0, 0, 7, AUTO, "WhiteBalance",&caWhiteBalanceInterpreter},
|
||||||
{0, 1, 0, 0, 8, "SlowShutter",&caSlowShutterInterpreter},
|
{0, AC_WRITE, 0, 0, 8, AUTO, "SlowShutter",&caSlowShutterInterpreter},
|
||||||
{0, 1, 0, 0, 9, "SequenceNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 9, AUTO, "SequenceNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0,10, "OpticalZoomCode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0,10, AUTO, "OpticalZoomCode", &stdInterpreter},
|
||||||
{0, 1, 0, 0,13, "FlashGuideNumber" , &caFlashGuideNumberInterpreter},
|
{0, AC_WRITE, 0, 0,13, AUTO, "FlashGuideNumber" , &caFlashGuideNumberInterpreter},
|
||||||
{0, 1, 0, 0,14, "AFPointsInFocus", &caAFPointsInFocusInterpreter},
|
{0, AC_WRITE, 0, 0,14, AUTO, "AFPointsInFocus", &caAFPointsInFocusInterpreter},
|
||||||
{0, 1, 0, 0,15, "FlashExposureComp", &stdInterpreter},
|
{0, AC_WRITE, 0, 0,15, AUTO, "FlashExposureComp", &stdInterpreter},
|
||||||
{0, 1, 0, 0,16, "AutoExposureBracketing",&caAutoExposureBracketingInterpreter},
|
{0, AC_WRITE, 0, 0,16, AUTO, "AutoExposureBracketing",&caAutoExposureBracketingInterpreter},
|
||||||
{0, 1, 0, 0,17, "AEBBracketValue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0,17, AUTO, "AEBBracketValue", &stdInterpreter},
|
||||||
{0, 1, 0, 0,18, "ControlMode", &caControModeInterpreter},
|
{0, AC_WRITE, 0, 0,18, AUTO, "ControlMode", &caControModeInterpreter},
|
||||||
{0, 1, 0, 0,19, "FocusDistanceUpper", &caFocusDistanceInterpreter},
|
{0, AC_WRITE, 0, 0,19, AUTO, "FocusDistanceUpper", &caFocusDistanceInterpreter},
|
||||||
{0, 1, 0, 0,20, "FocusDistanceLower", &caFocusDistanceInterpreter},
|
{0, AC_WRITE, 0, 0,20, AUTO, "FocusDistanceLower", &caFocusDistanceInterpreter},
|
||||||
{0, 1, 0, 0,21, "FNumber" ,&caApertureInterpreter},
|
{0, AC_WRITE, 0, 0,21, AUTO, "FNumber" ,&caApertureInterpreter},
|
||||||
{0, 1, 0, 0,22, "ExposureTime",&caExposureTimeInterpreter},
|
{0, AC_WRITE, 0, 0,22, AUTO, "ExposureTime",&caExposureTimeInterpreter},
|
||||||
{0, 1, 0, 0,24, "BulbDuration", &stdInterpreter},
|
{0, AC_WRITE, 0, 0,24, AUTO, "BulbDuration", &stdInterpreter},
|
||||||
{0, 1, 0, 0,24, "MeasuredEV2", &caMeasuredEVInterpreter},
|
{0, AC_WRITE, 0, 0,24, AUTO, "MeasuredEV2", &caMeasuredEVInterpreter},
|
||||||
{0, 1, 0, 0,26, "CameraType", &caCameraTypeInterpreter},
|
{0, AC_WRITE, 0, 0,26, AUTO, "CameraType", &caCameraTypeInterpreter},
|
||||||
{0, 1, 0, 0,27, "AutoRotate",&caAutoRotateInterpreter},
|
{0, AC_WRITE, 0, 0,27, AUTO, "AutoRotate",&caAutoRotateInterpreter},
|
||||||
{0, 1, 0, 0,28, "NDFilter",&caOnOffInterpreter},
|
{0, AC_WRITE, 0, 0,28, AUTO, "NDFilter",&caOnOffInterpreter},
|
||||||
{0, 1, 0, 0,29, "Self-timer2", &stdInterpreter},
|
{0, AC_WRITE, 0, 0,29, AUTO, "Self-timer2", &stdInterpreter},
|
||||||
{0, 1, 0, 0,33, "FlashOutput", &stdInterpreter},
|
{0, AC_WRITE, 0, 0,33, AUTO, "FlashOutput", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL},
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
const TagAttrib canonFileInfoAttribs[] = {
|
const TagAttrib canonFileInfoAttribs[] = {
|
||||||
{0, 1, 0, 0, 1, "FileNumber", &caFileNumberInterpreter},
|
{0, AC_WRITE, 0, 0, 1, AUTO, "FileNumber", &caFileNumberInterpreter},
|
||||||
{0, 1, 0, 0, 3, "BracketMode", &caBracketModeInterpreter},
|
{0, AC_WRITE, 0, 0, 3, AUTO, "BracketMode", &caBracketModeInterpreter},
|
||||||
{0, 1, 0, 0, 4, "BracketValue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 4, AUTO, "BracketValue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 5, "BracketShotNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 5, AUTO, "BracketShotNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 6, "RawJpgQuality",&caRAWJpegQualityInterpreter},
|
{0, AC_WRITE, 0, 0, 6, AUTO, "RawJpgQuality",&caRAWJpegQualityInterpreter},
|
||||||
{0, 1, 0, 0, 7, "RawJpgSize",&caJpegSizeInterpreter},
|
{0, AC_WRITE, 0, 0, 7, AUTO, "RawJpgSize",&caJpegSizeInterpreter},
|
||||||
{0, 1, 0, 0, 8, "NoiseReduction",&stdInterpreter},
|
{0, AC_WRITE, 0, 0, 8, AUTO, "NoiseReduction",&stdInterpreter},
|
||||||
{0, 1, 0, 0, 9, "WBBracketMode" ,&caWBBracketModeInterpreter},
|
{0, AC_WRITE, 0, 0, 9, AUTO, "WBBracketMode" ,&caWBBracketModeInterpreter},
|
||||||
{0, 1, 0, 0,12, "WBBracketValueAB", &stdInterpreter},
|
{0, AC_WRITE, 0, 0,12, AUTO, "WBBracketValueAB", &stdInterpreter},
|
||||||
{0, 1, 0, 0,13, "WBBracketValueGM", &stdInterpreter},
|
{0, AC_WRITE, 0, 0,13, AUTO, "WBBracketValueGM", &stdInterpreter},
|
||||||
{0, 1, 0, 0,14, "FilterEffect" ,&caFilterEffectInterpreter},
|
{0, AC_WRITE, 0, 0,14, AUTO, "FilterEffect" ,&caFilterEffectInterpreter},
|
||||||
{0, 1, 0, 0,15, "ToningEffect" ,&caToningEffectInterpreter},
|
{0, AC_WRITE, 0, 0,15, AUTO, "ToningEffect" ,&caToningEffectInterpreter},
|
||||||
{0, 1, 0, 0,19, "LiveViewShooting" ,&caOnOffInterpreter},
|
{0, AC_WRITE, 0, 0,19, AUTO, "LiveViewShooting" ,&caOnOffInterpreter},
|
||||||
{0, 1, 0, 0,25, "FlashExposureLock" ,&caOnOffInterpreter},
|
{0, AC_WRITE, 0, 0,25, AUTO, "FlashExposureLock" ,&caOnOffInterpreter},
|
||||||
{-1,0, 0, 0, 0, "", NULL},
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
const TagAttrib canonProcessingInfoAttribs[] = {
|
const TagAttrib canonProcessingInfoAttribs[] = {
|
||||||
{0, 1, 0, 0, 1,"ToneCurve", &caToneCurveInterpreter},
|
{0, AC_WRITE, 0, 0, 1, AUTO, "ToneCurve", &caToneCurveInterpreter},
|
||||||
{0, 1, 0, 0, 2,"Sharpness", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 2, AUTO, "Sharpness", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 3,"SharpnessFrequency", &caSharpnessFrequencyInterpreter},
|
{0, AC_WRITE, 0, 0, 3, AUTO, "SharpnessFrequency", &caSharpnessFrequencyInterpreter},
|
||||||
{0, 1, 0, 0, 4,"SensorRedLevel", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 4, AUTO, "SensorRedLevel", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 5,"SensorBlueLevel", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 5, AUTO, "SensorBlueLevel", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 6,"WhiteBalanceRed", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 6, AUTO, "WhiteBalanceRed", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 7,"WhiteBalanceBlue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 7, AUTO, "WhiteBalanceBlue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 8,"WhiteBalance", &caWhiteBalanceInterpreter},
|
{0, AC_WRITE, 0, 0, 8, AUTO, "WhiteBalance", &caWhiteBalanceInterpreter},
|
||||||
{0, 1, 0, 0, 9,"ColorTemperature", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 9, AUTO, "ColorTemperature", &stdInterpreter},
|
||||||
{0, 1, 0, 0,10,"PictureStyle", &caPictureStyleInterpreter},
|
{0, AC_WRITE, 0, 0,10, AUTO, "PictureStyle", &caPictureStyleInterpreter},
|
||||||
{0, 1, 0, 0,11,"DigitalGain", &stdInterpreter},
|
{0, AC_WRITE, 0, 0,11, AUTO, "DigitalGain", &stdInterpreter},
|
||||||
{0, 1, 0, 0,12,"WBShiftAB", &stdInterpreter},
|
{0, AC_WRITE, 0, 0,12, AUTO, "WBShiftAB", &stdInterpreter},
|
||||||
{0, 1, 0, 0,13,"WBShiftGM", &stdInterpreter},
|
{0, AC_WRITE, 0, 0,13, AUTO, "WBShiftGM", &stdInterpreter},
|
||||||
{-1,0, 0, 0, 0, "", NULL},
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
const TagAttrib canonPanoramaInfoAttribs[] = {
|
const TagAttrib canonPanoramaInfoAttribs[] = {
|
||||||
{0, 1, 0, 0, 2,"PanoramaFrameNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 2, AUTO, "PanoramaFrameNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 5,"PanoramaDirection", &caPanoramaDirectionInterpreter},
|
{0, AC_WRITE, 0, 0, 5, AUTO, "PanoramaDirection", &caPanoramaDirectionInterpreter},
|
||||||
{-1,0, 0, 0, 0, "", NULL},
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
const TagAttrib canonCropInfoAttribs[] = {
|
const TagAttrib canonCropInfoAttribs[] = {
|
||||||
{0, 1, 0, 0, 0,"CropLeftMargin", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0, AUTO, "CropLeftMargin", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 1,"CropRightMargin", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 1, AUTO, "CropRightMargin", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 2,"CropTopMargin", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 2, AUTO, "CropTopMargin", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 3,"CropBottomMargin", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 3, AUTO, "CropBottomMargin", &stdInterpreter},
|
||||||
{-1,0, 0, 0, 0, "", NULL},
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
const TagAttrib canonAspectInfoAttribs[] = {
|
const TagAttrib canonAspectInfoAttribs[] = {
|
||||||
{0, 1, 0, 0, 0,"AspectRatio", &caAspectRatioInterpreter},
|
{0, AC_WRITE, 0, 0, 0, AUTO, "AspectRatio", &caAspectRatioInterpreter},
|
||||||
{0, 1, 0, 0, 1,"CroppedImageWidth", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 1, AUTO, "CroppedImageWidth", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 2,"CroppedImageHeight", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 2, AUTO, "CroppedImageHeight", &stdInterpreter},
|
||||||
{-1,0, 0, 0, 0, "", NULL},
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
const TagAttrib canonMicroAdjustAttrib[] = {
|
const TagAttrib canonMicroAdjustAttrib[] = {
|
||||||
{0, 1, 0, 0, 1,"AFMicroAdjActive", &caOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 1, AUTO, "AFMicroAdjActive", &caOnOffInterpreter},
|
||||||
{-1,0, 0, 0, 2,"AFMicroAdjValue", &stdInterpreter},
|
{-1, AC_DONTWRITE, 0, 0, 2, AUTO, "", NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
const TagAttrib canonAttribs[] = {
|
const TagAttrib canonAttribs[] = {
|
||||||
{0, 1, 0, canonCameraSettingsAttribs, 0x0001, "CanonCameraSettings", &stdInterpreter},
|
{0, AC_WRITE, 0, canonCameraSettingsAttribs, 0x0001, AUTO, "CanonCameraSettings", &stdInterpreter},
|
||||||
{0, 1, 0, canonFocalLengthAttribs, 0x0002, "CanonFocalLength", &stdInterpreter},
|
{0, AC_WRITE, 0, canonFocalLengthAttribs, 0x0002, AUTO, "CanonFocalLength", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0003, "CanonFlashInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0003, AUTO, "CanonFlashInfo", &stdInterpreter},
|
||||||
{0, 1, 0, canonShotInfoAttribs, 0x0004, "CanonShotInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, canonShotInfoAttribs, 0x0004, AUTO, "CanonShotInfo", &stdInterpreter},
|
||||||
{0, 1, 0, canonPanoramaInfoAttribs, 0x0005, "CanonPanorama", &stdInterpreter},
|
{0, AC_WRITE, 0, canonPanoramaInfoAttribs, 0x0005, AUTO, "CanonPanorama", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0006, "CanonImageType", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0006, AUTO, "CanonImageType", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0007, "CanonFirmwareVersion", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0007, AUTO, "CanonFirmwareVersion", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0008, "FileNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0008, AUTO, "FileNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0009, "OwnerName", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0009, AUTO, "OwnerName", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x000a, "ColorInfoD30", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000a, AUTO, "ColorInfoD30", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x000c, "SerialNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000c, AUTO, "SerialNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x000d, "CanonCameraInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000d, AUTO, "CanonCameraInfo", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x000e, "CanonFileLength", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000e, AUTO, "CanonFileLength", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x000f, "CustomFunctions", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000f, AUTO, "CustomFunctions", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0010, "CanonModelID", &caModelIDInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0010, AUTO, "CanonModelID", &caModelIDInterpreter},
|
||||||
{0, 1, 0, 0, 0x0012, "CanonAFInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0012, AUTO, "CanonAFInfo", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0015, "SerialNumberFormat", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0015, AUTO, "SerialNumberFormat", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x001c, "DateStampMode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x001c, AUTO, "DateStampMode", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x001d, "MyColors", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x001d, AUTO, "MyColors", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x001e, "FirmwareRevision", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x001e, AUTO, "FirmwareRevision", &stdInterpreter},
|
||||||
{0, 3, 0, 0, 0x0024, "FaceDetect1", &stdInterpreter},
|
{0, AC_NEW, 0, 0, 0x0024, AUTO, "FaceDetect1", &stdInterpreter},
|
||||||
{0, 3, 0, 0, 0x0025, "FaceDetect2", &stdInterpreter},
|
{0, AC_NEW, 0, 0, 0x0025, AUTO, "FaceDetect2", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0026, "CanonAFInfo2", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0026, AUTO, "CanonAFInfo2", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0083, "OriginalDecisionData", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0083, AUTO, "OriginalDecisionData", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0090, "CustomFunctions1D", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0090, AUTO, "CustomFunctions1D", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0091, "PersonalFunctions", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0091, AUTO, "PersonalFunctions", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0092, "PersonalFunctionValues", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0092, AUTO, "PersonalFunctionValues", &stdInterpreter},
|
||||||
{0, 1, 0, canonFileInfoAttribs, 0x0093, "CanonFileInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, canonFileInfoAttribs, 0x0093, AUTO, "CanonFileInfo", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0094, "AFPointsInFocus1D", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0094, AUTO, "AFPointsInFocus1D", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0095, "LensType", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0095, AUTO, "LensType", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0096, "InternalSerialNumber", &caIntSerNumInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0096, AUTO, "InternalSerialNumber", &caIntSerNumInterpreter},
|
||||||
{0, 1, 0, 0, 0x0097, "DustRemovalData", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0097, AUTO, "DustRemovalData", &stdInterpreter},
|
||||||
{0, 1, 0, canonCropInfoAttribs, 0x0098, "CropInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, canonCropInfoAttribs, 0x0098, AUTO, "CropInfo", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0099, "CustomFunctions2", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0099, AUTO, "CustomFunctions2", &stdInterpreter},
|
||||||
{0, 1, 0, canonAspectInfoAttribs, 0x009a, "AspectInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, canonAspectInfoAttribs, 0x009a, AUTO, "AspectInfo", &stdInterpreter},
|
||||||
{0, 1, 0, canonProcessingInfoAttribs, 0x00a0, "ProcessingInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, canonProcessingInfoAttribs, 0x00a0, AUTO, "ProcessingInfo", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00a1, "ToneCurveTable", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00a1, AUTO, "ToneCurveTable", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00a2, "SharpnessTable", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00a2, AUTO, "SharpnessTable", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00a3, "SharpnessFreqTable", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00a3, AUTO, "SharpnessFreqTable", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00a4, "WhiteBalanceTable", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00a4, AUTO, "WhiteBalanceTable", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00a9, "ColorBalance", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00a9, AUTO, "ColorBalance", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00aa, "MeasuredColor", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00aa, AUTO, "MeasuredColor", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00ae, "ColorTemperature", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00ae, AUTO, "ColorTemperature", &stdInterpreter},
|
||||||
{0, 3, 0, 0, 0x00b0, "CanonFlags", &stdInterpreter},
|
{0, AC_NEW , 0, 0, 0x00b0, AUTO, "CanonFlags", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00b1, "ModifiedInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00b1, AUTO, "ModifiedInfo", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00b2, "ToneCurveMatching", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00b2, AUTO, "ToneCurveMatching", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00b3, "WhiteBalanceMatching", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00b3, AUTO, "WhiteBalanceMatching", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00b4, "ColorSpace", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00b4, AUTO, "ColorSpace", &stdInterpreter},
|
||||||
{1, 1, 0, 0, 0x00b6, "PreviewImageInfo", &stdInterpreter},
|
{1, AC_WRITE, 0, 0, 0x00b6, AUTO, "PreviewImageInfo", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00d0, "VRDOffset", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00d0, AUTO, "VRDOffset", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00e0, "SensorInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00e0, AUTO, "SensorInfo", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x4001, "ColorBalance", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x4001, AUTO, "ColorBalance", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x4002, "UnknownBlock1", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x4002, AUTO, "UnknownBlock1", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x4003, "ColorInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x4003, AUTO, "ColorInfo", &stdInterpreter},
|
||||||
{1, 1, 0, 0, 0x4005, "UnknownBlock2", &stdInterpreter},
|
{1, AC_WRITE, 0, 0, 0x4005, AUTO, "UnknownBlock2", &stdInterpreter},
|
||||||
{1, 1, 0, 0, 0x4008, "BlackLevel", &stdInterpreter},
|
{1, AC_WRITE, 0, 0, 0x4008, AUTO, "BlackLevel", &stdInterpreter},
|
||||||
{1, 1, 0, canonMicroAdjustAttrib, 0x4013, "AFMicroAdj", &stdInterpreter},
|
{1, AC_WRITE, 0, canonMicroAdjustAttrib, 0x4013, AUTO, "AFMicroAdj", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -217,44 +217,44 @@ FAPictureModeInterpreter faPictureModeInterpreter;
|
|||||||
|
|
||||||
|
|
||||||
const TagAttrib fujiAttribs[] = {
|
const TagAttrib fujiAttribs[] = {
|
||||||
{0, 1, 0, 0, 0x0000, "Version", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0000, AUTO, "Version", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0010, "InternalSerialNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0010, AUTO, "InternalSerialNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1000, "Quality", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1000, AUTO, "Quality", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1001, "Sharpness", &faSharpnessInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1001, AUTO, "Sharpness", &faSharpnessInterpreter},
|
||||||
{0, 1, 0, 0, 0x1002, "WhiteBalance", &faWhiteBalanceInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1002, AUTO, "WhiteBalance", &faWhiteBalanceInterpreter},
|
||||||
{0, 1, 0, 0, 0x1003, "Saturation", &faSaturationInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1003, AUTO, "Saturation", &faSaturationInterpreter},
|
||||||
{0, 1, 0, 0, 0x1004, "Contrast", &faContrastInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1004, AUTO, "Contrast", &faContrastInterpreter},
|
||||||
{0, 1, 0, 0, 0x1005, "ColorTemperature", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1005, AUTO, "ColorTemperature", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1006, "Contrast2", &faContrast2Interpreter},
|
{0, AC_WRITE, 0, 0, 0x1006, AUTO, "Contrast2", &faContrast2Interpreter},
|
||||||
{0, 1, 0, 0, 0x100a, "WhiteBalanceFineTune", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x100a, AUTO, "WhiteBalanceFineTune", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x100b, "NoiseReduction", &faNoiseReductionInterpreter},
|
{0, AC_WRITE, 0, 0, 0x100b, AUTO, "NoiseReduction", &faNoiseReductionInterpreter},
|
||||||
{0, 1, 0, 0, 0x1010, "FujiFlashMode", &faFlashInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1010, AUTO, "FujiFlashMode", &faFlashInterpreter},
|
||||||
{0, 1, 0, 0, 0x1011, "FlashExposureComp", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1011, AUTO, "FlashExposureComp", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1020, "Macro", &faOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1020, AUTO, "Macro", &faOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x1021, "FocusMode", &faFocusModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1021, AUTO, "FocusMode", &faFocusModeInterpreter},
|
||||||
{0, 1, 0, 0, 0x1023, "FocusPixel", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1023, AUTO, "FocusPixel", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1030, "SlowSync", &faOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1030, AUTO, "SlowSync", &faOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x1031, "PictureMode", &faPictureModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1031, AUTO, "PictureMode", &faPictureModeInterpreter},
|
||||||
{0, 1, 0, 0, 0x1100, "AutoBracketing", &faOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1100, AUTO, "AutoBracketing", &faOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x1101, "SequenceNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1101, AUTO, "SequenceNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1210, "ColorMode", &faColorModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1210, AUTO, "ColorMode", &faColorModeInterpreter},
|
||||||
{0, 1, 0, 0, 0x1300, "BlurWarning", &faOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1300, AUTO, "BlurWarning", &faOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x1301, "FocusWarning", &faOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1301, AUTO, "FocusWarning", &faOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x1302, "ExposureWarning", &faOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1302, AUTO, "ExposureWarning", &faOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x1400, "DynamicRange", &faDynamicRangeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1400, AUTO, "DynamicRange", &faDynamicRangeInterpreter},
|
||||||
{0, 1, 0, 0, 0x1401, "FilmMode", &faFilmModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1401, AUTO, "FilmMode", &faFilmModeInterpreter},
|
||||||
{0, 1, 0, 0, 0x1402, "DynamicRangeSetting", &faDRSettingInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1402, AUTO, "DynamicRangeSetting", &faDRSettingInterpreter},
|
||||||
{0, 1, 0, 0, 0x1403, "DevelopmentDynamicRange", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1403, AUTO, "DevelopmentDynamicRange", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1404, "MinFocalLength", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1404, AUTO, "MinFocalLength", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1405, "MaxFocalLength", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1405, AUTO, "MaxFocalLength", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1406, "MaxApertureAtMinFocal", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1406, AUTO, "MaxApertureAtMinFocal", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1407, "MaxApertureAtMaxFocal", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1407, AUTO, "MaxApertureAtMaxFocal", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x140b, "AutoDynamicRange", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x140b, AUTO, "AutoDynamicRange", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x4100, "FacesDetected", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x4100, AUTO, "FacesDetected", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x8000, "FileSource", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x8000, AUTO, "FileSource", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x8002, "OrderNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x8002, AUTO, "OrderNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x8003, "FrameNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x8003, AUTO, "FrameNumber", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -34,13 +34,69 @@ class NAISOInterpreter : public Interpreter {
|
|||||||
public:
|
public:
|
||||||
NAISOInterpreter () {}
|
NAISOInterpreter () {}
|
||||||
virtual std::string toString (Tag* t) {
|
virtual std::string toString (Tag* t) {
|
||||||
char buffer[32];
|
char buffer[32];
|
||||||
sprintf (buffer, "%d", t->toInt(2));
|
sprintf (buffer, "%d", t->toInt(2));
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
NAISOInterpreter naISOInterpreter;
|
NAISOInterpreter naISOInterpreter;
|
||||||
|
|
||||||
|
class NAISOInfoISOInterpreter : public Interpreter {
|
||||||
|
public:
|
||||||
|
NAISOInfoISOInterpreter () {}
|
||||||
|
virtual std::string toString (Tag* t) {
|
||||||
|
char buffer[32];
|
||||||
|
int a = t->toInt();
|
||||||
|
sprintf (buffer, "%d", a);
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
virtual double toDouble (Tag* t, int ofs){
|
||||||
|
int a = t->getValue()[ofs];
|
||||||
|
if(a>1) {
|
||||||
|
double i = pow(2., double(a)/12. - 5.) * 100.;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return 0.;
|
||||||
|
}
|
||||||
|
virtual int toInt (Tag* t, int ofs, TagType astype){
|
||||||
|
int a = t->getValue()[ofs];
|
||||||
|
if(a>1) {
|
||||||
|
int i = int(double(powf(2.f, float(a)/12.f - 5.f)) * 100.f +0.5f);
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NAISOInfoISOInterpreter naISOInfoISOInterpreter;
|
||||||
|
|
||||||
|
class NAISOExpansionInterpreter : public Interpreter {
|
||||||
|
public:
|
||||||
|
NAISOExpansionInterpreter () {}
|
||||||
|
virtual std::string toString (Tag* t) {
|
||||||
|
int a = t->toInt();
|
||||||
|
// unclear if this interpretation is correct!
|
||||||
|
switch (a) {
|
||||||
|
case 0x0: return "Off";
|
||||||
|
case 0x101: return "Hi 0.3";
|
||||||
|
case 0x102: return "Hi 0.5";
|
||||||
|
case 0x103: return "Hi 0.7";
|
||||||
|
case 0x104: return "Hi 1.0";
|
||||||
|
case 0x105: return "Hi 1.3";
|
||||||
|
case 0x106: return "Hi 1.5";
|
||||||
|
case 0x107: return "Hi 1.7";
|
||||||
|
case 0x108: return "Hi 2.0";
|
||||||
|
case 0x201: return "Lo 0.3";
|
||||||
|
case 0x202: return "Lo 0.5";
|
||||||
|
case 0x203: return "Lo 0.7";
|
||||||
|
case 0x204: return "Lo 1.0";
|
||||||
|
default: { char buffer[32]; sprintf(buffer, "0x%04X", a); return buffer; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NAISOExpansionInterpreter naISOExpansionInterpreter;
|
||||||
|
|
||||||
class NALensTypeInterpreter : public Interpreter {
|
class NALensTypeInterpreter : public Interpreter {
|
||||||
public:
|
public:
|
||||||
NALensTypeInterpreter () {}
|
NALensTypeInterpreter () {}
|
||||||
@ -174,19 +230,21 @@ NAAFInfoInterpreter naAFInfoInterpreter;
|
|||||||
class NALensDataInterpreter : public Interpreter {
|
class NALensDataInterpreter : public Interpreter {
|
||||||
std::map<std::string,std::string> lenses;
|
std::map<std::string,std::string> lenses;
|
||||||
public:
|
public:
|
||||||
NALensDataInterpreter () {
|
NALensDataInterpreter () { // From EXIFTOOL database 'Nikon.pm' V2.80
|
||||||
/* The key is a composite string made of 8 HEX bytes
|
/* The key is a composite string made of 8 HEX bytes
|
||||||
* LensIDNumber LensFStops MinFocalLength MaxFocalLength MaxApertureAtMinFocal MaxApertureAtMaxFocal MCUVersion and LensType */
|
* LensIDNumber LensFStops MinFocalLength MaxFocalLength MaxApertureAtMinFocal MaxApertureAtMaxFocal MCUVersion and LensType */
|
||||||
lenses["00 00 00 00 00 00 00 01"] = "Manual Lens No CPU ";
|
lenses["00 00 00 00 00 00 00 01"] = "Manual Lens No CPU";
|
||||||
lenses["00 00 00 00 00 00 E1 12"] = "TC-17E II ";
|
lenses["00 00 00 00 00 00 E1 12"] = "TC-17E II";
|
||||||
lenses["00 00 00 00 00 00 F1 0C"] = "TC-14E [II] or Sigma APO Tele Converter 1.4x EX DG or Kenko Teleplus PRO 300 DG 1.4x";
|
lenses["00 00 00 00 00 00 F1 0C"] = "TC-14E [II] or Sigma APO Tele Converter 1.4x EX DG or Kenko Teleplus PRO 300 DG 1.4x";
|
||||||
lenses["00 00 00 00 00 00 F2 18"] = "TC-20E [II] or Sigma APO Tele Converter 2x EX DG or Kenko Teleplus PRO 300 DG 2.0x";
|
lenses["00 00 00 00 00 00 F2 18"] = "TC-20E [II] or Sigma APO Tele Converter 2x EX DG or Kenko Teleplus PRO 300 DG 2.0x";
|
||||||
lenses["00 36 1C 2D 34 3C 00 06"] = "Tamron SP AF11-18mm f/4.5-5.6 Di II LD Aspherical (IF)";
|
lenses["00 00 48 48 53 53 00 01"] = "Loreo 40mm f/11-22 3D Lens in a Cap 9005";
|
||||||
|
lenses["00 36 1C 2D 34 3C 00 06"] = "Tamron SP AF 11-18mm f/4.5-5.6 Di II LD Aspherical (IF)";
|
||||||
lenses["00 3C 1F 37 30 30 00 06"] = "Tokina AT-X 124 PRO DX AF 12-24mm f/4";
|
lenses["00 3C 1F 37 30 30 00 06"] = "Tokina AT-X 124 PRO DX AF 12-24mm f/4";
|
||||||
lenses["00 3E 80 A0 38 3F 00 02"] = "Tamron SP AF 200-500mm f/5-6.3 Di LD (IF)";
|
lenses["00 3E 80 A0 38 3F 00 02"] = "Tamron SP AF 200-500mm f/5-6.3 Di LD (IF)";
|
||||||
lenses["00 3F 2D 80 2B 40 00 06"] = "Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF)";
|
lenses["00 3F 2D 80 2B 40 00 06"] = "Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF)";
|
||||||
lenses["00 3F 2D 80 2C 40 00 06"] = "Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) Macro";
|
lenses["00 3F 2D 80 2C 40 00 06"] = "Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) Macro";
|
||||||
lenses["00 3F 80 A0 38 3F 00 02"] = "Tamron SP AF 200-500mm f/5-6.3 Di";
|
lenses["00 3F 80 A0 38 3F 00 02"] = "Tamron SP AF 200-500mm f/5-6.3 Di";
|
||||||
|
lenses["00 40 11 11 2C 2C 00 00"] = "Samyang 8mm f/3.5 Fish-Eye";
|
||||||
lenses["00 40 18 2B 2C 34 00 06"] = "Tokina AT-X 107 DX Fish-Eye AF 10-17mm f/3.5-4.5";
|
lenses["00 40 18 2B 2C 34 00 06"] = "Tokina AT-X 107 DX Fish-Eye AF 10-17mm f/3.5-4.5";
|
||||||
lenses["00 40 2A 72 2C 3C 00 06"] = "Tokina AT-X 16.5-135 DX AF 16.5-135mm f/3.5-5.6";
|
lenses["00 40 2A 72 2C 3C 00 06"] = "Tokina AT-X 16.5-135 DX AF 16.5-135mm f/3.5-5.6";
|
||||||
lenses["00 40 2B 2B 2C 2C 00 02"] = "Tokina AT-X 17 PRO AF 17mm f/3.5";
|
lenses["00 40 2B 2B 2C 2C 00 02"] = "Tokina AT-X 17 PRO AF 17mm f/3.5";
|
||||||
@ -201,7 +259,7 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
lenses["00 47 10 10 24 24 00 00"] = "Fisheye Nikkor 8mm f/2.8 AiS";
|
lenses["00 47 10 10 24 24 00 00"] = "Fisheye Nikkor 8mm f/2.8 AiS";
|
||||||
lenses["00 47 25 25 24 24 00 02"] = "Tamron SP AF 14mm f/2.8 Aspherical (IF) (69E)";
|
lenses["00 47 25 25 24 24 00 02"] = "Tamron SP AF 14mm f/2.8 Aspherical (IF) (69E)";
|
||||||
lenses["00 47 44 44 24 24 00 06"] = "Tokina AT-X M35 PRO DX (AF 35mm f/2.8 Macro)";
|
lenses["00 47 44 44 24 24 00 06"] = "Tokina AT-X M35 PRO DX (AF 35mm f/2.8 Macro)";
|
||||||
lenses["00 47 53 80 30 3C 00 06"] = "Tamron AF55-200mm f/4-5.6 Di II LD";
|
lenses["00 47 53 80 30 3C 00 06"] = "Tamron AF 55-200mm f/4-5.6 Di II LD";
|
||||||
lenses["00 48 1C 29 24 24 00 06"] = "Tokina AT-X 116 PRO DX AF 11-16mm f/2.8";
|
lenses["00 48 1C 29 24 24 00 06"] = "Tokina AT-X 116 PRO DX AF 11-16mm f/2.8";
|
||||||
lenses["00 48 29 3C 24 24 00 06"] = "Tokina AT-X 16-28 PRO FX AF 16-28mm f/2.8";
|
lenses["00 48 29 3C 24 24 00 06"] = "Tokina AT-X 16-28 PRO FX AF 16-28mm f/2.8";
|
||||||
lenses["00 48 29 50 24 24 00 06"] = "Tokina AT-X 165 PRO DX AF 16-50mm f/2.8";
|
lenses["00 48 29 50 24 24 00 06"] = "Tokina AT-X 165 PRO DX AF 16-50mm f/2.8";
|
||||||
@ -215,7 +273,7 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
lenses["00 48 80 80 30 30 00 00"] = "Nikkor 200mm f/4 AiS";
|
lenses["00 48 80 80 30 30 00 00"] = "Nikkor 200mm f/4 AiS";
|
||||||
lenses["00 49 30 48 22 2B 00 02"] = "Tamron SP AF 20-40mm f/2.7-3.5";
|
lenses["00 49 30 48 22 2B 00 02"] = "Tamron SP AF 20-40mm f/2.7-3.5";
|
||||||
lenses["00 4C 6A 6A 20 20 00 00"] = "Nikkor 105mm f/2.5 AiS";
|
lenses["00 4C 6A 6A 20 20 00 00"] = "Nikkor 105mm f/2.5 AiS";
|
||||||
lenses["00 4C 7C 7C 2C 2C 00 02"] = "Tamron SP AF 180mm f/3.5 Di Model B01";
|
lenses["00 4C 7C 7C 2C 2C 00 02"] = "Tamron SP AF 180mm f/3.5 Di Model (B01)";
|
||||||
lenses["00 53 2B 50 24 24 00 06"] = "Tamron SP AF 17-50mm f/2.8 (A16)";
|
lenses["00 53 2B 50 24 24 00 06"] = "Tamron SP AF 17-50mm f/2.8 (A16)";
|
||||||
lenses["00 54 2B 50 24 24 00 06"] = "Tamron SP AF 17-50mm f/2.8 XR Di II LD Aspherical (IF) (A16NII)";
|
lenses["00 54 2B 50 24 24 00 06"] = "Tamron SP AF 17-50mm f/2.8 XR Di II LD Aspherical (IF) (A16NII)";
|
||||||
lenses["00 54 3C 3C 18 18 00 00"] = "Carl Zeiss Distagon T* 28mm f/2 ZF.2";
|
lenses["00 54 3C 3C 18 18 00 00"] = "Carl Zeiss Distagon T* 28mm f/2 ZF.2";
|
||||||
@ -228,7 +286,7 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
lenses["00 54 56 56 30 30 00 00"] = "Coastal Optical Systems 60mm f/4 UV-VIS-IR Macro Apo";
|
lenses["00 54 56 56 30 30 00 00"] = "Coastal Optical Systems 60mm f/4 UV-VIS-IR Macro Apo";
|
||||||
lenses["00 54 62 62 0C 0C 00 00"] = "Carl Zeiss Planar T* 85mm f/1.4 ZF.2";
|
lenses["00 54 62 62 0C 0C 00 00"] = "Carl Zeiss Planar T* 85mm f/1.4 ZF.2";
|
||||||
lenses["00 54 68 68 18 18 00 00"] = "Carl Zeiss Makro-Planar T* 100mm f/2 ZF.2";
|
lenses["00 54 68 68 18 18 00 00"] = "Carl Zeiss Makro-Planar T* 100mm f/2 ZF.2";
|
||||||
lenses["00 54 68 68 24 24 00 02"] = "Tokina AT-X M100 PRO D 100mm f/2.8";
|
lenses["00 54 68 68 24 24 00 02"] = "Tokina AT-X M100 PRO D 100mm f/2.8 Macro";
|
||||||
lenses["00 54 8E 8E 24 24 00 02"] = "Tokina AT-X 300 PRO AF 300mm f/2.8";
|
lenses["00 54 8E 8E 24 24 00 02"] = "Tokina AT-X 300 PRO AF 300mm f/2.8";
|
||||||
lenses["00 58 64 64 20 20 00 00"] = "Soligor C/D Macro MC 90mm f/2.5";
|
lenses["00 58 64 64 20 20 00 00"] = "Soligor C/D Macro MC 90mm f/2.5";
|
||||||
lenses["01 00 00 00 00 00 02 00"] = "AF Teleconverter TC-16A 1.6x";
|
lenses["01 00 00 00 00 00 02 00"] = "AF Teleconverter TC-16A 1.6x";
|
||||||
@ -247,24 +305,25 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
lenses["02 40 44 73 2B 36 02 00"] = "Sigma 35-135mm f/3.5-4.5 a";
|
lenses["02 40 44 73 2B 36 02 00"] = "Sigma 35-135mm f/3.5-4.5 a";
|
||||||
lenses["02 42 44 5C 2A 34 02 00"] = "AF Zoom-Nikkor 35-70mm f/3.3-4.5";
|
lenses["02 42 44 5C 2A 34 02 00"] = "AF Zoom-Nikkor 35-70mm f/3.3-4.5";
|
||||||
lenses["02 42 44 5C 2A 34 08 00"] = "AF Zoom-Nikkor 35-70mm f/3.3-4.5";
|
lenses["02 42 44 5C 2A 34 08 00"] = "AF Zoom-Nikkor 35-70mm f/3.3-4.5";
|
||||||
lenses["02 46 37 37 25 25 02 00"] = "Sigma 24mm f/2.8 Macro";
|
lenses["02 46 37 37 25 25 02 00"] = "Sigma 24mm f/2.8 Super Wide II Macro";
|
||||||
lenses["02 46 3C 5C 25 25 02 00"] = "Sigma 28-70mm f/2.8";
|
lenses["02 46 3C 5C 25 25 02 00"] = "Sigma 28-70mm f/2.8";
|
||||||
lenses["02 46 5C 82 25 25 02 00"] = "Sigma APO 70-210mm f/2.8";
|
lenses["02 46 5C 82 25 25 02 00"] = "Sigma 70-210mm f/2.8 APO";
|
||||||
|
lenses["02 48 50 50 24 24 02 00"] = "Sigma 50mm f/2.8 Macro";
|
||||||
lenses["02 48 65 65 24 24 02 00"] = "Sigma 90mm f/2.8 Macro";
|
lenses["02 48 65 65 24 24 02 00"] = "Sigma 90mm f/2.8 Macro";
|
||||||
lenses["03 43 5C 81 35 35 02 00"] = "Soligor AF C/D ZOOM UMCS 70-210mm f/4.5";
|
lenses["03 43 5C 81 35 35 02 00"] = "Soligor AF C/D Zoom UMCS 70-210mm f/4.5";
|
||||||
lenses["03 48 5C 81 30 30 02 00"] = "AF Zoom-Nikkor 70-210mm f/4";
|
lenses["03 48 5C 81 30 30 02 00"] = "AF Zoom-Nikkor 70-210mm f/4";
|
||||||
lenses["04 48 3C 3C 24 24 03 00"] = "AF Nikkor 28mm f/2.8";
|
lenses["04 48 3C 3C 24 24 03 00"] = "AF Nikkor 28mm f/2.8";
|
||||||
lenses["05 54 50 50 0C 0C 04 00"] = "AF Nikkor 50mm f/1.4";
|
lenses["05 54 50 50 0C 0C 04 00"] = "AF Nikkor 50mm f/1.4";
|
||||||
lenses["06 3F 68 68 2C 2C 06 00"] = "Cosina 100mm f/3.5 Macro";
|
lenses["06 3F 68 68 2C 2C 06 00"] = "Cosina AF 100mm f/3.5 Macro";
|
||||||
lenses["06 54 53 53 24 24 06 00"] = "AF Micro-Nikkor 55mm f/2.8";
|
lenses["06 54 53 53 24 24 06 00"] = "AF Micro-Nikkor 55mm f/2.8";
|
||||||
lenses["07 36 3D 5F 2C 3C 03 00"] = "Cosina AF Zoom 28-80mm f/3.5-5.6 MC Macro";
|
lenses["07 36 3D 5F 2C 3C 03 00"] = "Cosina AF Zoom 28-80mm f/3.5-5.6 MC Macro";
|
||||||
lenses["07 3E 30 43 2D 35 03 00"] = "Soligor AF Zoom 19-35mm f/3.5-4.5 MC";
|
lenses["07 3E 30 43 2D 35 03 00"] = "Soligor AF Zoom 19-35mm f/3.5-4.5 MC";
|
||||||
lenses["07 40 2F 44 2C 34 03 02"] = "Tamron AF 19-35mm f/3.5-4.5 N";
|
lenses["07 40 2F 44 2C 34 03 02"] = "Tamron AF 19-35mm f/3.5-4.5 (A10)";
|
||||||
lenses["07 40 30 45 2D 35 03 02"] = "Tamron AF 19-35mm f/3.5-4.5";
|
lenses["07 40 30 45 2D 35 03 02"] = "Tamron AF 19-35mm f/3.5-4.5 (A10)";
|
||||||
lenses["07 40 3C 5C 2C 35 03 00"] = "Tokina AF 270 II AF 28-70mm f/3.5-4.5";
|
lenses["07 40 3C 5C 2C 35 03 00"] = "Tokina AF 270 II (AF 28-70mm f/3.5-4.5)";
|
||||||
lenses["07 40 3C 62 2C 34 03 00"] = "AF Zoom-Nikkor 28-85mm f/3.5-4.5";
|
lenses["07 40 3C 62 2C 34 03 00"] = "AF Zoom-Nikkor 28-85mm f/3.5-4.5";
|
||||||
lenses["07 46 2B 44 24 30 03 02"] = "Tamron SP AF 17-35mm f/2.8-4 Di LD Aspherical (IF) (A05)";
|
lenses["07 46 2B 44 24 30 03 02"] = "Tamron SP AF 17-35mm f/2.8-4 Di LD Aspherical (IF) (A05)";
|
||||||
lenses["07 46 3D 6A 25 2F 03 00"] = "Cosina AF Zoom 28-105mm F2.8-3.8 MC";
|
lenses["07 46 3D 6A 25 2F 03 00"] = "Cosina AF Zoom 28-105mm f/2.8-3.8 MC";
|
||||||
lenses["07 47 3C 5C 25 35 03 00"] = "Tokina AF 287 SD AF 28-70mm f/2.8-4.5";
|
lenses["07 47 3C 5C 25 35 03 00"] = "Tokina AF 287 SD AF 28-70mm f/2.8-4.5";
|
||||||
lenses["07 48 3C 5C 24 24 03 00"] = "Tokina AT-X 287 AF 28-70mm f/2.8";
|
lenses["07 48 3C 5C 24 24 03 00"] = "Tokina AT-X 287 AF 28-70mm f/2.8";
|
||||||
lenses["08 40 44 6A 2C 34 04 00"] = "AF Zoom-Nikkor 35-105mm f/3.5-4.5";
|
lenses["08 40 44 6A 2C 34 04 00"] = "AF Zoom-Nikkor 35-105mm f/3.5-4.5";
|
||||||
@ -282,6 +341,7 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
lenses["10 48 8E 8E 30 30 08 00"] = "AF Nikkor 300mm f/4 IF-ED";
|
lenses["10 48 8E 8E 30 30 08 00"] = "AF Nikkor 300mm f/4 IF-ED";
|
||||||
lenses["11 48 44 5C 24 24 08 00"] = "AF Zoom-Nikkor 35-70mm f/2.8";
|
lenses["11 48 44 5C 24 24 08 00"] = "AF Zoom-Nikkor 35-70mm f/2.8";
|
||||||
lenses["12 36 5C 81 35 3D 09 00"] = "Cosina AF Zoom 70-210mm f/4.5-5.6 MC Macro";
|
lenses["12 36 5C 81 35 3D 09 00"] = "Cosina AF Zoom 70-210mm f/4.5-5.6 MC Macro";
|
||||||
|
lenses["12 36 69 97 35 42 09 00"] = "Soligor AF Zoom 100-400mm f/4.5-6.7 MC";
|
||||||
lenses["12 39 5C 8E 34 3D 08 02"] = "Cosina AF Zoom 70-300mm f/4.5-5.6 MC Macro";
|
lenses["12 39 5C 8E 34 3D 08 02"] = "Cosina AF Zoom 70-300mm f/4.5-5.6 MC Macro";
|
||||||
lenses["12 3B 68 8D 3D 43 09 02"] = "Cosina AF Zoom 100-300mm f/5.6-6.7 MC Macro";
|
lenses["12 3B 68 8D 3D 43 09 02"] = "Cosina AF Zoom 100-300mm f/5.6-6.7 MC Macro";
|
||||||
lenses["12 3B 98 98 3D 3D 09 00"] = "Tokina AT-X 400 SD AF 400mm f/5.6";
|
lenses["12 3B 98 98 3D 3D 09 00"] = "Tokina AT-X 400 SD AF 400mm f/5.6";
|
||||||
@ -306,14 +366,17 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
lenses["1F 54 6A 6A 24 24 14 00"] = "AF Micro-Nikkor 105mm f/2.8";
|
lenses["1F 54 6A 6A 24 24 14 00"] = "AF Micro-Nikkor 105mm f/2.8";
|
||||||
lenses["20 3C 80 98 3D 3D 1E 02"] = "Tamron AF 200-400mm f/5.6 LD IF (75D)";
|
lenses["20 3C 80 98 3D 3D 1E 02"] = "Tamron AF 200-400mm f/5.6 LD IF (75D)";
|
||||||
lenses["20 48 60 80 24 24 15 00"] = "AF Zoom-Nikkor 80-200mm f/2.8 ED";
|
lenses["20 48 60 80 24 24 15 00"] = "AF Zoom-Nikkor 80-200mm f/2.8 ED";
|
||||||
|
lenses["20 5A 64 64 20 20 14 00"] = "Tamron SP AF 90mm f/2.5 Macro (152E)";
|
||||||
lenses["21 40 3C 5C 2C 34 16 00"] = "AF Zoom-Nikkor 28-70mm f/3.5-4.5";
|
lenses["21 40 3C 5C 2C 34 16 00"] = "AF Zoom-Nikkor 28-70mm f/3.5-4.5";
|
||||||
lenses["21 56 8E 8E 24 24 14 00"] = "Tamron SP AF 300mm f/2.8 LD-IF (60E)";
|
lenses["21 56 8E 8E 24 24 14 00"] = "Tamron SP AF 300mm f/2.8 LD-IF (60E)";
|
||||||
lenses["22 48 72 72 18 18 16 00"] = "AF DC-Nikkor 135mm f/2";
|
lenses["22 48 72 72 18 18 16 00"] = "AF DC-Nikkor 135mm f/2";
|
||||||
lenses["22 53 64 64 24 24 E0 02"] = "Tamron SP AF 90mm f/2.8 Macro 1:1 (72E)";
|
lenses["22 53 64 64 24 24 E0 02"] = "Tamron SP AF 90mm f/2.8 Macro 1:1 (72E)";
|
||||||
lenses["23 30 BE CA 3C 48 17 00"] = "Zoom-Nikkor 1200-1700mm f/5.6-8 P ED IF";
|
lenses["23 30 BE CA 3C 48 17 00"] = "Zoom-Nikkor 1200-1700mm f/5.6-8 P ED IF";
|
||||||
lenses["24 44 60 98 34 3C 1A 02"] = "Tokina AT-X 840 AF II 80-400mm f/4.5-5.6";
|
lenses["24 44 60 98 34 3C 1A 02"] = "Tokina AT-X 840 AF II 80-400mm f/4.5-5.6";
|
||||||
lenses["24 48 60 80 24 24 1A 02"] = "AF Zoom-Nikkor ED 80-200mm f/2.8D ED";
|
lenses["24 48 60 80 24 24 1A 02"] = "AF Zoom-Nikkor 80-200mm f/2.8D ED";
|
||||||
lenses["24 54 60 80 24 24 1A 02"] = "Tokina AT-X 828 AF PRO 80-200mm f/2.8";
|
lenses["24 54 60 80 24 24 1A 02"] = "Tokina AT-X 828 AF PRO 80-200mm f/2.8";
|
||||||
|
lenses["25 44 44 8E 34 42 1B 02"] = "Tokina AF 353 (AF 35-300mm f/4.5-6.7)";
|
||||||
|
lenses["25 48 3C 5C 24 24 1B 02"] = "Tokina AT-X 270 AF PRO II 28-70mm f/2.6-2.8";
|
||||||
lenses["25 48 3C 5C 24 24 1B 02"] = "Tokina AT-X 287 AF PRO SV 28-70mm f/2.8";
|
lenses["25 48 3C 5C 24 24 1B 02"] = "Tokina AT-X 287 AF PRO SV 28-70mm f/2.8";
|
||||||
lenses["25 48 44 5C 24 24 1B 02"] = "AF Zoom-Nikkor 35-70mm f/2.8D";
|
lenses["25 48 44 5C 24 24 1B 02"] = "AF Zoom-Nikkor 35-70mm f/2.8D";
|
||||||
lenses["25 48 44 5C 24 24 52 02"] = "AF Zoom-Nikkor 35-70mm f/2.8D";
|
lenses["25 48 44 5C 24 24 52 02"] = "AF Zoom-Nikkor 35-70mm f/2.8D";
|
||||||
@ -344,9 +407,9 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
lenses["26 48 31 49 24 24 1C 02"] = "Sigma 20-40mm f/2.8";
|
lenses["26 48 31 49 24 24 1C 02"] = "Sigma 20-40mm f/2.8";
|
||||||
lenses["26 48 37 56 24 24 1C 02"] = "Sigma 24-60mm f/2.8 EX DG";
|
lenses["26 48 37 56 24 24 1C 02"] = "Sigma 24-60mm f/2.8 EX DG";
|
||||||
lenses["26 48 3C 5C 24 24 1C 06"] = "Sigma 28-70mm f/2.8 EX DG";
|
lenses["26 48 3C 5C 24 24 1C 06"] = "Sigma 28-70mm f/2.8 EX DG";
|
||||||
lenses["26 48 3C 5C 24 30 1C 02"] = "Sigma 28-70mm f/2.8-4 High Speed Zoom";
|
lenses["26 48 3C 5C 24 30 1C 02"] = "Sigma 28-70mm f/2.8-4 DG High Speed Zoom";
|
||||||
lenses["26 48 3C 6A 24 30 1C 02"] = "Sigma 28-105mm f/2.8-4 Aspherical";
|
lenses["26 48 3C 6A 24 30 1C 02"] = "Sigma 28-105mm f/2.8-4 Aspherical";
|
||||||
lenses["26 48 8E 8E 30 30 1C 02"] = "Sigma APO TELE MACRO 300mm f/4";
|
lenses["26 48 8E 8E 30 30 1C 02"] = "Sigma APO Tele Macro 300mm f/4";
|
||||||
lenses["26 54 2B 44 24 30 1C 02"] = "Sigma 17-35mm f/2.8-4 EX Aspherical";
|
lenses["26 54 2B 44 24 30 1C 02"] = "Sigma 17-35mm f/2.8-4 EX Aspherical";
|
||||||
lenses["26 54 37 5C 24 24 1C 02"] = "Sigma 24-70mm f/2.8 EX DG Macro";
|
lenses["26 54 37 5C 24 24 1C 02"] = "Sigma 24-70mm f/2.8 EX DG Macro";
|
||||||
lenses["26 54 37 73 24 34 1C 02"] = "Sigma 24-135mm f/2.8-4.5";
|
lenses["26 54 37 73 24 34 1C 02"] = "Sigma 24-135mm f/2.8-4.5";
|
||||||
@ -370,18 +433,21 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
lenses["2D 48 80 80 30 30 21 02"] = "AF Micro-Nikkor 200mm f/4D IF-ED";
|
lenses["2D 48 80 80 30 30 21 02"] = "AF Micro-Nikkor 200mm f/4D IF-ED";
|
||||||
lenses["2E 48 5C 82 30 3C 22 02"] = "AF Nikkor 70-210mm f/4-5.6D";
|
lenses["2E 48 5C 82 30 3C 22 02"] = "AF Nikkor 70-210mm f/4-5.6D";
|
||||||
lenses["2E 48 5C 82 30 3C 28 02"] = "AF Nikkor 70-210mm f/4-5.6D";
|
lenses["2E 48 5C 82 30 3C 28 02"] = "AF Nikkor 70-210mm f/4-5.6D";
|
||||||
lenses["2F 40 30 44 2C 34 29 02"] = "Tokina AF 235 II AF 20-35mm f/3.5-4.5";
|
lenses["2F 40 30 44 2C 34 29 02"] = "Tokina AF 235 II 20-35mm f/3.5-4.5";
|
||||||
|
lenses["2F 40 30 44 2C 34 29 02"] = "Tokina AF 193 19-35mm f/3.5-4.5";
|
||||||
lenses["2F 48 30 44 24 24 29 02"] = "AF Zoom-Nikkor 20-35mm f/2.8D IF";
|
lenses["2F 48 30 44 24 24 29 02"] = "AF Zoom-Nikkor 20-35mm f/2.8D IF";
|
||||||
|
lenses["2F 48 30 44 24 24 29 02"] = "Tokina AT-X 235 AF PRO (AF 20-35mm f/2.8)";
|
||||||
lenses["30 48 98 98 24 24 24 02"] = "AF-I Nikkor 400mm f/2.8D IF-ED";
|
lenses["30 48 98 98 24 24 24 02"] = "AF-I Nikkor 400mm f/2.8D IF-ED";
|
||||||
lenses["30 48 98 98 24 24 E1 02"] = "AF-I Nikkor 400mm f/2.8D IF-ED + TC-17E";
|
lenses["30 48 98 98 24 24 E1 02"] = "AF-I Nikkor 400mm f/2.8D IF-ED + TC-17E";
|
||||||
lenses["30 48 98 98 24 24 F1 02"] = "AF-I Nikkor 400mm f/2.8D IF-ED + TC-14E";
|
lenses["30 48 98 98 24 24 F1 02"] = "AF-I Nikkor 400mm f/2.8D IF-ED + TC-14E";
|
||||||
lenses["30 48 98 98 24 24 F2 02"] = "AF-I Nikkor 400mm f/2.8D IF-ED + TC-20E";
|
lenses["30 48 98 98 24 24 F2 02"] = "AF-I Nikkor 400mm f/2.8D IF-ED + TC-20E";
|
||||||
lenses["31 54 56 56 24 24 25 02"] = "AF Micro-Nikkor 60mm f/2.8D";
|
lenses["31 54 56 56 24 24 25 02"] = "AF Micro-Nikkor 60mm f/2.8D";
|
||||||
lenses["32 53 64 64 24 24 35 02"] = "Tamron SP AF 90mm f/2.8 Di Macro 1:2 (172/272E)";
|
lenses["32 53 64 64 24 24 35 02"] = "Tamron SP AF 90mm f/2.8 Di Macro 1:1 (172E/272E)";
|
||||||
lenses["32 54 50 50 24 24 35 02"] = "Sigma 50mm f/2.8 EX DG Macro";
|
lenses["32 54 50 50 24 24 35 02"] = "Sigma 50mm f/2.8 EX DG Macro";
|
||||||
lenses["32 54 6A 6A 24 24 35 02"] = "AF Micro-Nikkor 105mm f/2.8D";
|
lenses["32 54 6A 6A 24 24 35 02"] = "AF Micro-Nikkor 105mm f/2.8D";
|
||||||
|
lenses["32 54 6A 6A 24 24 35 02"] = "Sigma Macro 105mm f/2.8 EX DG";
|
||||||
lenses["33 48 2D 2D 24 24 31 02"] = "AF Nikkor 18mm f/2.8D";
|
lenses["33 48 2D 2D 24 24 31 02"] = "AF Nikkor 18mm f/2.8D";
|
||||||
lenses["33 54 3C 5E 24 24 62 02"] = "Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical (IF) Macro";
|
lenses["33 54 3C 5E 24 24 62 02"] = "Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical (IF) Macro (A09)";
|
||||||
lenses["34 48 29 29 24 24 32 02"] = "AF Fisheye Nikkor 16mm f/2.8D";
|
lenses["34 48 29 29 24 24 32 02"] = "AF Fisheye Nikkor 16mm f/2.8D";
|
||||||
lenses["35 3C A0 A0 30 30 33 02"] = "AF-I Nikkor 500mm f/4D IF-ED";
|
lenses["35 3C A0 A0 30 30 33 02"] = "AF-I Nikkor 500mm f/4D IF-ED";
|
||||||
lenses["35 3C A0 A0 30 30 E1 02"] = "AF-I Nikkor 500mm f/4D IF-ED + TC-17E";
|
lenses["35 3C A0 A0 30 30 E1 02"] = "AF-I Nikkor 500mm f/4D IF-ED + TC-17E";
|
||||||
@ -399,7 +465,7 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
lenses["41 48 7C 7C 24 24 43 02"] = "AF Nikkor 180mm f/2.8D IF-ED";
|
lenses["41 48 7C 7C 24 24 43 02"] = "AF Nikkor 180mm f/2.8D IF-ED";
|
||||||
lenses["42 54 44 44 18 18 44 02"] = "AF Nikkor 35mm f/2D";
|
lenses["42 54 44 44 18 18 44 02"] = "AF Nikkor 35mm f/2D";
|
||||||
lenses["43 54 50 50 0C 0C 46 02"] = "AF Nikkor 50mm f/1.4D";
|
lenses["43 54 50 50 0C 0C 46 02"] = "AF Nikkor 50mm f/1.4D";
|
||||||
lenses["44 44 60 80 34 3C 47 02"] = "AF Zoom-Nikkor 80-200mm f/4.5-5.6D ";
|
lenses["44 44 60 80 34 3C 47 02"] = "AF Zoom-Nikkor 80-200mm f/4.5-5.6D";
|
||||||
lenses["45 3D 3C 60 2C 3C 48 02"] = "Tamron AF 28-80mm f/3.5-5.6 Aspherical (177D)";
|
lenses["45 3D 3C 60 2C 3C 48 02"] = "Tamron AF 28-80mm f/3.5-5.6 Aspherical (177D)";
|
||||||
lenses["45 40 3C 60 2C 3C 48 02"] = "AF Zoom-Nikkor 28-80mm f/3.5-5.6D";
|
lenses["45 40 3C 60 2C 3C 48 02"] = "AF Zoom-Nikkor 28-80mm f/3.5-5.6D";
|
||||||
lenses["45 41 37 72 2C 3C 48 02"] = "Tamron SP AF 24-135mm f/3.5-5.6 AD Aspherical (IF) Macro (190D)";
|
lenses["45 41 37 72 2C 3C 48 02"] = "Tamron SP AF 24-135mm f/3.5-5.6 AD Aspherical (IF) Macro (190D)";
|
||||||
@ -408,7 +474,7 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
lenses["48 38 1F 37 34 3C 4B 06"] = "Sigma 12-24mm f/4.5-5.6 EX Aspherical DG HSM";
|
lenses["48 38 1F 37 34 3C 4B 06"] = "Sigma 12-24mm f/4.5-5.6 EX Aspherical DG HSM";
|
||||||
lenses["48 3C 19 31 30 3C 4B 06"] = "Sigma 10-20mm f/4-5.6 EX DC HSM";
|
lenses["48 3C 19 31 30 3C 4B 06"] = "Sigma 10-20mm f/4-5.6 EX DC HSM";
|
||||||
lenses["48 3C 50 A0 30 40 4B 02"] = "Sigma 50-500mm f/4-6.3 EX APO RF HSM";
|
lenses["48 3C 50 A0 30 40 4B 02"] = "Sigma 50-500mm f/4-6.3 EX APO RF HSM";
|
||||||
lenses["48 3C 8E B0 3C 3C 4B 02"] = "Sigma APO 300-800 f/5.6 EX DG HSM";
|
lenses["48 3C 8E B0 3C 3C 4B 02"] = "Sigma APO 300-800mm f/5.6 EX DG HSM";
|
||||||
lenses["48 3C B0 B0 3C 3C 4B 02"] = "Sigma APO 800mm f/5.6 EX HSM";
|
lenses["48 3C B0 B0 3C 3C 4B 02"] = "Sigma APO 800mm f/5.6 EX HSM";
|
||||||
lenses["48 44 A0 A0 34 34 4B 02"] = "Sigma APO 500mm f/4.5 EX HSM";
|
lenses["48 44 A0 A0 34 34 4B 02"] = "Sigma APO 500mm f/4.5 EX HSM";
|
||||||
lenses["48 48 24 24 24 24 4B 02"] = "Sigma 14mm f/2.8 EX Aspherical HSM";
|
lenses["48 48 24 24 24 24 4B 02"] = "Sigma 14mm f/2.8 EX Aspherical HSM";
|
||||||
@ -420,7 +486,7 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
lenses["48 48 8E 8E 24 24 F1 02"] = "AF-S Nikkor 300mm f/2.8D IF-ED + TC-14E";
|
lenses["48 48 8E 8E 24 24 F1 02"] = "AF-S Nikkor 300mm f/2.8D IF-ED + TC-14E";
|
||||||
lenses["48 48 8E 8E 24 24 F2 02"] = "AF-S Nikkor 300mm f/2.8D IF-ED + TC-20E";
|
lenses["48 48 8E 8E 24 24 F2 02"] = "AF-S Nikkor 300mm f/2.8D IF-ED + TC-20E";
|
||||||
lenses["48 4C 7C 7C 2C 2C 4B 02"] = "Sigma 180mm f/3.5 EX DG Macro";
|
lenses["48 4C 7C 7C 2C 2C 4B 02"] = "Sigma 180mm f/3.5 EX DG Macro";
|
||||||
lenses["48 4C 7D 7D 2C 2C 4B 02"] = "Sigma APO MACRO 180mm f/3.5 EX DG HSM";
|
lenses["48 4C 7D 7D 2C 2C 4B 02"] = "Sigma APO Macro 180mm f/3.5 EX DG HSM";
|
||||||
lenses["48 54 3E 3E 0C 0C 4B 06"] = "Sigma 30mm f/1.4 EX DC HSM";
|
lenses["48 54 3E 3E 0C 0C 4B 06"] = "Sigma 30mm f/1.4 EX DC HSM";
|
||||||
lenses["48 54 5C 80 24 24 4B 02"] = "Sigma 70-200mm f/2.8 EX APO IF HSM";
|
lenses["48 54 5C 80 24 24 4B 02"] = "Sigma 70-200mm f/2.8 EX APO IF HSM";
|
||||||
lenses["48 54 6F 8E 24 24 4B 02"] = "Sigma APO 120-300mm f/2.8 EX DG HSM";
|
lenses["48 54 6F 8E 24 24 4B 02"] = "Sigma APO 120-300mm f/2.8 EX DG HSM";
|
||||||
@ -429,7 +495,10 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
lenses["49 3C A6 A6 30 30 E1 02"] = "AF-S Nikkor 600mm f/4D IF-ED + TC-17E";
|
lenses["49 3C A6 A6 30 30 E1 02"] = "AF-S Nikkor 600mm f/4D IF-ED + TC-17E";
|
||||||
lenses["49 3C A6 A6 30 30 F1 02"] = "AF-S Nikkor 600mm f/4D IF-ED + TC-14E";
|
lenses["49 3C A6 A6 30 30 F1 02"] = "AF-S Nikkor 600mm f/4D IF-ED + TC-14E";
|
||||||
lenses["49 3C A6 A6 30 30 F2 02"] = "AF-S Nikkor 600mm f/4D IF-ED + TC-20E";
|
lenses["49 3C A6 A6 30 30 F2 02"] = "AF-S Nikkor 600mm f/4D IF-ED + TC-20E";
|
||||||
|
lenses["4A 40 11 11 2C 0C 4D 02"] = "Samyang 8mm f/3.5 Fish-Eye CS";
|
||||||
|
lenses["4A 48 24 24 24 0C 4D 02"] = "Samyang AE 14mm f/2.8 ED AS IF UMC";
|
||||||
lenses["4A 54 62 62 0C 0C 4D 02"] = "AF Nikkor 85mm f/1.4D IF";
|
lenses["4A 54 62 62 0C 0C 4D 02"] = "AF Nikkor 85mm f/1.4D IF";
|
||||||
|
lenses["4A 60 44 44 0C 0C 4D 02"] = "Samyang 35mm f/1.4 AS UMC";
|
||||||
lenses["4A 60 62 62 0C 0C 4D 02"] = "Samyang AE 85mm f/1.4 AS IF UMC";
|
lenses["4A 60 62 62 0C 0C 4D 02"] = "Samyang AE 85mm f/1.4 AS IF UMC";
|
||||||
lenses["4B 3C A0 A0 30 30 4E 02"] = "AF-S Nikkor 500mm f/4D IF-ED";
|
lenses["4B 3C A0 A0 30 30 4E 02"] = "AF-S Nikkor 500mm f/4D IF-ED";
|
||||||
lenses["4B 3C A0 A0 30 30 E1 02"] = "AF-S Nikkor 500mm f/4D IF-ED + TC-17E";
|
lenses["4B 3C A0 A0 30 30 E1 02"] = "AF-S Nikkor 500mm f/4D IF-ED + TC-17E";
|
||||||
@ -445,6 +514,7 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
lenses["53 48 60 80 24 24 57 02"] = "AF Zoom-Nikkor 80-200mm f/2.8D ED";
|
lenses["53 48 60 80 24 24 57 02"] = "AF Zoom-Nikkor 80-200mm f/2.8D ED";
|
||||||
lenses["53 48 60 80 24 24 60 02"] = "AF Zoom-Nikkor 80-200mm f/2.8D ED";
|
lenses["53 48 60 80 24 24 60 02"] = "AF Zoom-Nikkor 80-200mm f/2.8D ED";
|
||||||
lenses["54 44 5C 7C 34 3C 58 02"] = "AF Zoom-Micro Nikkor 70-180mm f/4.5-5.6D ED";
|
lenses["54 44 5C 7C 34 3C 58 02"] = "AF Zoom-Micro Nikkor 70-180mm f/4.5-5.6D ED";
|
||||||
|
lenses["54 44 5C 7C 34 3C 61 02"] = "AF Zoom-Micro Nikkor 70-180mm f/4.5-5.6D ED";
|
||||||
lenses["56 3C 5C 8E 30 3C 1C 02"] = "Sigma 70-300mm f/4-5.6 APO Macro Super II";
|
lenses["56 3C 5C 8E 30 3C 1C 02"] = "Sigma 70-300mm f/4-5.6 APO Macro Super II";
|
||||||
lenses["56 48 5C 8E 30 3C 5A 02"] = "AF Zoom-Nikkor 70-300mm f/4-5.6D ED";
|
lenses["56 48 5C 8E 30 3C 5A 02"] = "AF Zoom-Nikkor 70-300mm f/4-5.6D ED";
|
||||||
lenses["59 48 98 98 24 24 5D 02"] = "AF-S Nikkor 400mm f/2.8D IF-ED";
|
lenses["59 48 98 98 24 24 5D 02"] = "AF-S Nikkor 400mm f/2.8D IF-ED";
|
||||||
@ -486,13 +556,14 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
lenses["79 48 5C 5C 24 24 1C 06"] = "Sigma 70mm f/2.8 EX DG Macro";
|
lenses["79 48 5C 5C 24 24 1C 06"] = "Sigma 70mm f/2.8 EX DG Macro";
|
||||||
lenses["7A 3B 53 80 30 3C 4B 06"] = "Sigma 55-200mm f/4-5.6 DC HSM";
|
lenses["7A 3B 53 80 30 3C 4B 06"] = "Sigma 55-200mm f/4-5.6 DC HSM";
|
||||||
lenses["7A 3C 1F 37 30 30 7E 06"] = "AF-S DX Zoom-Nikkor 12-24mm f/4G IF-ED";
|
lenses["7A 3C 1F 37 30 30 7E 06"] = "AF-S DX Zoom-Nikkor 12-24mm f/4G IF-ED";
|
||||||
|
lenses["7A 3C 1F 37 30 30 7E 06"] = "Tokina AT-X 124 AF PRO DX II (AF 12-24mm f/4)";
|
||||||
lenses["7A 40 2D 50 2C 3C 4B 06"] = "Sigma 18-50mm f/3.5-5.6 DC HSM";
|
lenses["7A 40 2D 50 2C 3C 4B 06"] = "Sigma 18-50mm f/3.5-5.6 DC HSM";
|
||||||
lenses["7A 40 2D 80 2C 40 4B 0E"] = "Sigma 18-200mm f/3.5-6.3 DC OS HSM";
|
lenses["7A 40 2D 80 2C 40 4B 0E"] = "Sigma 18-200mm f/3.5-6.3 DC OS HSM";
|
||||||
lenses["7A 47 2B 5C 24 34 4B 06"] = "Sigma 17-70mm f/2.8-4.5 DC Macro Asp. IF HSM";
|
lenses["7A 47 2B 5C 24 34 4B 06"] = "Sigma 17-70mm f/2.8-4.5 DC Macro Asp. IF HSM";
|
||||||
lenses["7A 47 50 76 24 24 4B 06"] = "Sigma APO 50-150mm f/2.8 EX DC HSM";
|
lenses["7A 47 50 76 24 24 4B 06"] = "Sigma 50-150mm f/2.8 EX APO DC HSM";
|
||||||
lenses["7A 48 2B 5C 24 34 4B 06"] = "Sigma 17-70mm f/2.8-4.5 DC Macro Asp. IF HSM";
|
lenses["7A 48 2B 5C 24 34 4B 06"] = "Sigma 17-70mm f/2.8-4.5 DC Macro Asp. IF HSM";
|
||||||
lenses["7A 48 2D 50 24 24 4B 06"] = "Sigma 18-50mm f/2.8 EX DC HSM";
|
lenses["7A 48 2D 50 24 24 4B 06"] = "Sigma 18-50mm f/2.8 EX DC Macro";
|
||||||
lenses["7A 48 5C 80 24 24 4B 06"] = "Sigma APO 70-200mm f/2.8 EX DG Macro HSM II";
|
lenses["7A 48 5C 80 24 24 4B 06"] = "Sigma 70-200mm f/2.8 EX APO DG Macro HSM II";
|
||||||
lenses["7A 54 6E 8E 24 24 4B 02"] = "Sigma APO 120-300mm f/2.8 EX DG HSM";
|
lenses["7A 54 6E 8E 24 24 4B 02"] = "Sigma APO 120-300mm f/2.8 EX DG HSM";
|
||||||
lenses["7B 48 80 98 30 30 80 0E"] = "AF-S VR Zoom-Nikkor 200-400mm f/4G IF-ED";
|
lenses["7B 48 80 98 30 30 80 0E"] = "AF-S VR Zoom-Nikkor 200-400mm f/4G IF-ED";
|
||||||
lenses["7D 48 2B 53 24 24 82 06"] = "AF-S DX Zoom-Nikkor 17-55mm f/2.8G IF-ED";
|
lenses["7D 48 2B 53 24 24 82 06"] = "AF-S DX Zoom-Nikkor 17-55mm f/2.8G IF-ED";
|
||||||
@ -506,16 +577,20 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
lenses["89 3C 53 80 30 3C 8B 06"] = "AF-S DX Zoom-Nikkor 55-200mm f/4-5.6G ED";
|
lenses["89 3C 53 80 30 3C 8B 06"] = "AF-S DX Zoom-Nikkor 55-200mm f/4-5.6G ED";
|
||||||
lenses["8A 54 6A 6A 24 24 8C 0E"] = "AF-S VR Micro-Nikkor 105mm f/2.8G IF-ED";
|
lenses["8A 54 6A 6A 24 24 8C 0E"] = "AF-S VR Micro-Nikkor 105mm f/2.8G IF-ED";
|
||||||
lenses["8B 40 2D 80 2C 3C 8D 0E"] = "AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED";
|
lenses["8B 40 2D 80 2C 3C 8D 0E"] = "AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED";
|
||||||
lenses["8B 40 2D 80 2C 3C FD 0E"] = "AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED";
|
lenses["8B 40 2D 80 2C 3C FD 0E"] = "AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED [II]";
|
||||||
lenses["8C 40 2D 53 2C 3C 8E 06"] = "AF-S DX Zoom-Nikkor 18-55mm f/3.5-5.6G ED";
|
lenses["8C 40 2D 53 2C 3C 8E 06"] = "AF-S DX Zoom-Nikkor 18-55mm f/3.5-5.6G ED";
|
||||||
lenses["8D 44 5C 8E 34 3C 8F 0E"] = "AF-S VR Zoom-Nikkor 70-300mm f/4.5-5.6G IF-ED";
|
lenses["8D 44 5C 8E 34 3C 8F 0E"] = "AF-S VR Zoom-Nikkor 70-300mm f/4.5-5.6G IF-ED";
|
||||||
|
lenses["8E 3C 2B 5C 24 30 4B 0E"] = "Sigma 17-70mm f/2.8-4 DC Macro OS HSM Contemporary";
|
||||||
lenses["8F 40 2D 72 2C 3C 91 06"] = "AF-S DX Zoom-Nikkor 18-135mm f/3.5-5.6G IF-ED";
|
lenses["8F 40 2D 72 2C 3C 91 06"] = "AF-S DX Zoom-Nikkor 18-135mm f/3.5-5.6G IF-ED";
|
||||||
lenses["90 3B 53 80 30 3C 92 0E"] = "AF-S DX VR Zoom-Nikkor 55-200mm f/4-5.6G IF-ED";
|
lenses["90 3B 53 80 30 3C 92 0E"] = "AF-S DX VR Zoom-Nikkor 55-200mm f/4-5.6G IF-ED";
|
||||||
|
lenses["91 54 44 44 0C 0C 4B 06"] = "Sigma 35mm f/1.4 DG HSM | A";
|
||||||
|
lenses["92 2C 2D 88 2C 40 4B 0E"] = "Sigma 18-250mm f/3.5-6.3 DC Macro OS HSM";
|
||||||
lenses["92 48 24 37 24 24 94 06"] = "AF-S Zoom-Nikkor 14-24mm f/2.8G ED";
|
lenses["92 48 24 37 24 24 94 06"] = "AF-S Zoom-Nikkor 14-24mm f/2.8G ED";
|
||||||
lenses["93 48 37 5C 24 24 95 06"] = "AF-S Zoom-Nikkor 24-70mm f/2.8G ED";
|
lenses["93 48 37 5C 24 24 95 06"] = "AF-S Zoom-Nikkor 24-70mm f/2.8G ED";
|
||||||
lenses["94 40 2D 53 2C 3C 96 06"] = "AF-S DX Zoom-Nikkor 18-55mm f/3.5-5.6G ED II";
|
lenses["94 40 2D 53 2C 3C 96 06"] = "AF-S DX Zoom-Nikkor 18-55mm f/3.5-5.6G ED II";
|
||||||
lenses["95 00 37 37 2C 2C 97 06"] = "PC-E Nikkor 24mm f/3.5D ED";
|
lenses["95 00 37 37 2C 2C 97 06"] = "PC-E Nikkor 24mm f/3.5D ED";
|
||||||
lenses["95 4C 37 37 2C 2C 97 02"] = "PC-E Nikkor 24mm f/3.5D ED";
|
lenses["95 4C 37 37 2C 2C 97 02"] = "PC-E Nikkor 24mm f/3.5D ED";
|
||||||
|
lenses["96 38 1F 37 34 3C 4B 06"] = "Sigma 12-24mm f/4.5-5.6 II DG HSM";
|
||||||
lenses["96 48 98 98 24 24 98 0E"] = "AF-S VR Nikkor 400mm f/2.8G ED";
|
lenses["96 48 98 98 24 24 98 0E"] = "AF-S VR Nikkor 400mm f/2.8G ED";
|
||||||
lenses["97 3C A0 A0 30 30 99 0E"] = "AF-S VR Nikkor 500mm f/4G ED";
|
lenses["97 3C A0 A0 30 30 99 0E"] = "AF-S VR Nikkor 500mm f/4G ED";
|
||||||
lenses["98 3C A6 A6 30 30 9A 0E"] = "AF-S VR Nikkor 600mm f/4G ED";
|
lenses["98 3C A6 A6 30 30 9A 0E"] = "AF-S VR Nikkor 600mm f/4G ED";
|
||||||
@ -523,12 +598,19 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
lenses["9A 40 2D 53 2C 3C 9C 0E"] = "AF-S DX VR Zoom-Nikkor 18-55mm f/3.5-5.6G";
|
lenses["9A 40 2D 53 2C 3C 9C 0E"] = "AF-S DX VR Zoom-Nikkor 18-55mm f/3.5-5.6G";
|
||||||
lenses["9B 00 4C 4C 24 24 9D 06"] = "PC-E Micro Nikkor 45mm f/2.8D ED";
|
lenses["9B 00 4C 4C 24 24 9D 06"] = "PC-E Micro Nikkor 45mm f/2.8D ED";
|
||||||
lenses["9B 54 4C 4C 24 24 9D 02"] = "PC-E Micro Nikkor 45mm f/2.8D ED";
|
lenses["9B 54 4C 4C 24 24 9D 02"] = "PC-E Micro Nikkor 45mm f/2.8D ED";
|
||||||
|
lenses["9B 54 62 62 0C 0C 4B 06"] = "Sigma 85mm f/1.4 EX DG HSM";
|
||||||
|
lenses["9C 48 5C 80 24 24 4B 0E"] = "Sigma 70-200mm f/2.8 EX DG OS HSM";
|
||||||
lenses["9C 54 56 56 24 24 9E 06"] = "AF-S Micro Nikkor 60mm f/2.8G ED";
|
lenses["9C 54 56 56 24 24 9E 06"] = "AF-S Micro Nikkor 60mm f/2.8G ED";
|
||||||
lenses["9D 00 62 62 24 24 9F 06"] = "PC-E Micro Nikkor 85mm f/2.8D";
|
lenses["9D 00 62 62 24 24 9F 06"] = "PC-E Micro Nikkor 85mm f/2.8D";
|
||||||
|
lenses["9D 48 2B 50 24 24 4B 0E"] = "Sigma 17-50mm f/2.8 EX DC OS HSM";
|
||||||
lenses["9D 54 62 62 24 24 9F 02"] = "PC-E Micro Nikkor 85mm f/2.8D";
|
lenses["9D 54 62 62 24 24 9F 02"] = "PC-E Micro Nikkor 85mm f/2.8D";
|
||||||
|
lenses["9E 38 11 29 34 3C 4B 06"] = "Sigma 8-16mm f/4.5-5.6 DC HSM";
|
||||||
lenses["9E 40 2D 6A 2C 3C A0 0E"] = "AF-S DX VR Zoom-Nikkor 18-105mm f/3.5-5.6G ED";
|
lenses["9E 40 2D 6A 2C 3C A0 0E"] = "AF-S DX VR Zoom-Nikkor 18-105mm f/3.5-5.6G ED";
|
||||||
lenses["9F 37 50 A0 34 40 4B 0E"] = "Sigma 50-500mm f/4.5-6.3 DG OS HSM";
|
lenses["9F 37 50 A0 34 40 4B 0E"] = "Sigma 50-500mm f/4.5-6.3 DG OS HSM";
|
||||||
lenses["9F 58 44 44 14 14 A1 06"] = "AF-S DX Nikkor 35mm f/1.8G";
|
lenses["9F 58 44 44 14 14 A1 06"] = "AF-S DX Nikkor 35mm f/1.8G";
|
||||||
|
lenses["A0 48 2A 5C 24 30 4B 0E"] = "Sigma 17-70mm f/2.8-4 DC Macro OS HSM";
|
||||||
|
lenses["26 40 2D 44 2B 34 1C 02"] = "Sigma 18-35mm f/3.5-4.5 Aspherical";
|
||||||
|
lenses["8B 4C 2D 44 14 14 4B 06"] = "Sigma 18-35mm f/1.8 DC HSM";
|
||||||
lenses["A0 54 50 50 0C 0C A2 06"] = "AF-S Nikkor 50mm f/1.4G";
|
lenses["A0 54 50 50 0C 0C A2 06"] = "AF-S Nikkor 50mm f/1.4G";
|
||||||
lenses["A1 40 18 37 2C 34 A3 06"] = "AF-S DX Nikkor 10-24mm f/3.5-4.5G ED";
|
lenses["A1 40 18 37 2C 34 A3 06"] = "AF-S DX Nikkor 10-24mm f/3.5-4.5G ED";
|
||||||
lenses["A1 41 19 31 2C 2C 4B 06"] = "Sigma 10-20mm f/3.5 EX DC HSM";
|
lenses["A1 41 19 31 2C 2C 4B 06"] = "Sigma 10-20mm f/3.5 EX DC HSM";
|
||||||
@ -543,24 +625,37 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
lenses["A6 48 8E 8E 24 24 A8 0E"] = "AF-S VR Nikkor 300mm f/2.8G IF-ED II";
|
lenses["A6 48 8E 8E 24 24 A8 0E"] = "AF-S VR Nikkor 300mm f/2.8G IF-ED II";
|
||||||
lenses["A7 49 80 A0 24 24 4B 06"] = "Sigma APO 200-500mm f/2.8 EX DG";
|
lenses["A7 49 80 A0 24 24 4B 06"] = "Sigma APO 200-500mm f/2.8 EX DG";
|
||||||
lenses["A7 4B 62 62 2C 2C A9 0E"] = "AF-S DX Micro Nikkor 85mm f/3.5G ED VR";
|
lenses["A7 4B 62 62 2C 2C A9 0E"] = "AF-S DX Micro Nikkor 85mm f/3.5G ED VR";
|
||||||
|
lenses["A8 48 80 98 30 30 AA 0E"] = "AF-S VR Zoom-Nikkor 200-400mm f/4G IF-ED II";
|
||||||
lenses["A9 54 80 80 18 18 AB 0E"] = "AF-S Nikkor 200mm f/2G ED VR II";
|
lenses["A9 54 80 80 18 18 AB 0E"] = "AF-S Nikkor 200mm f/2G ED VR II";
|
||||||
lenses["AA 3C 37 6E 30 30 AC 0E"] = "AF-S Nikkor 24-120mm f/4G ED VR";
|
lenses["AA 3C 37 6E 30 30 AC 0E"] = "AF-S Nikkor 24-120mm f/4G ED VR";
|
||||||
lenses["AC 38 53 8E 34 3C AE 0E"] = "AF-S DX VR Nikkor 55-300mm f/4.5-5.6G ED";
|
lenses["AC 38 53 8E 34 3C AE 0E"] = "AF-S DX VR Nikkor 55-300mm f/4.5-5.6G ED";
|
||||||
|
lenses["AD 3C 2D 8E 2C 3C AF 0E"] = "AF-S DX Nikkor 18-300mm 3.5-5.6G ED VR";
|
||||||
lenses["AE 54 62 62 0C 0C B0 06"] = "AF-S Nikkor 85mm f/1.4G";
|
lenses["AE 54 62 62 0C 0C B0 06"] = "AF-S Nikkor 85mm f/1.4G";
|
||||||
lenses["AF 54 44 44 0C 0C B1 06"] = "AF-S Nikkor 35mm f/1.4G";
|
lenses["AF 54 44 44 0C 0C B1 06"] = "AF-S Nikkor 35mm f/1.4G";
|
||||||
|
lenses["B0 4C 50 50 14 14 B2 06"] = "AF-S Nikkor 50mm f/1.8G";
|
||||||
|
lenses["B1 48 48 48 24 24 B3 06"] = "AF-S DX Micro Nikkor 40mm f/2.8G";
|
||||||
|
lenses["B2 48 5C 80 30 30 B4 0E"] = "AF-S Nikkor 70-200mm f/4G ED VR";
|
||||||
|
lenses["B3 4C 62 62 14 14 B5 06"] = "AF-S Nikkor 85mm f/1.8G";
|
||||||
|
lenses["B4 40 37 62 2C 34 B6 0E"] = "AF-S VR Zoom-Nikkor 24-85mm f/3.5-4.5G IF-ED";
|
||||||
|
lenses["B5 4C 3C 3C 14 14 B7 06"] = "AF-S Nikkor 28mm f/1.8G";
|
||||||
lenses["B6 48 37 56 24 24 1C 02"] = "Sigma 24-60mm f/2.8 EX DG";
|
lenses["B6 48 37 56 24 24 1C 02"] = "Sigma 24-60mm f/2.8 EX DG";
|
||||||
|
lenses["B7 44 60 98 34 3C B9 0E"] = "AF-S Nikkor 80-400mm f/4.5-5.6G ED VR";
|
||||||
|
lenses["B8 40 2D 44 2C 34 BA 06"] = "AF-S Nikkor 18-35mm f/3.5-4.5G ED";
|
||||||
lenses["CD 3D 2D 70 2E 3C 4B 0E"] = "Sigma 18-125mm f/3.8-5.6 DC OS HSM";
|
lenses["CD 3D 2D 70 2E 3C 4B 0E"] = "Sigma 18-125mm f/3.8-5.6 DC OS HSM";
|
||||||
lenses["CE 34 76 A0 38 40 4B 0E"] = "Sigma APO 150-500mm f/5-6.3 DG OS HSM";
|
lenses["CE 34 76 A0 38 40 4B 0E"] = "Sigma 150-500mm f/5-6.3 DG OS APO HSM";
|
||||||
lenses["CF 38 6E 98 34 3C 4B 0E"] = "Sigma APO 120-400mm f/4.5-5.6 DG OS HSM";
|
lenses["CF 38 6E 98 34 3C 4B 0E"] = "Sigma APO 120-400mm f/4.5-5.6 DG OS HSM";
|
||||||
lenses["DC 48 19 19 24 24 4B 06"] = "Sigma 10mm f/2.8 EX DC HSM Fisheye";
|
lenses["DC 48 19 19 24 24 4B 06"] = "Sigma 10mm f/2.8 EX DC HSM Fisheye";
|
||||||
lenses["DE 54 50 50 0C 0C 4B 06"] = "Sigma 50mm f/1.4 EX DG HSM";
|
lenses["DE 54 50 50 0C 0C 4B 06"] = "Sigma 50mm f/1.4 EX DG HSM";
|
||||||
lenses["E0 3C 5C 8E 30 3C 4B 06"] = "Sigma APO 70-300mm f/4-5.6 DG Macro HSM";
|
lenses["E0 3C 5C 8E 30 3C 4B 06"] = "Sigma 70-300mm f/4-5.6 APO DG Macro HSM";
|
||||||
lenses["E1 58 37 37 14 14 1C 02"] = "Sigma 24mm f/1.8 EX DG Aspherical Macro";
|
lenses["E1 58 37 37 14 14 1C 02"] = "Sigma 24mm f/1.8 EX DG Aspherical Macro";
|
||||||
|
lenses["E3 54 50 50 24 24 35 02"] = "Sigma 50mm f/2.8 EX DG Macro";
|
||||||
lenses["E5 54 6A 6A 24 24 35 02"] = "Sigma 105mm f/2.8 EX DG Macro";
|
lenses["E5 54 6A 6A 24 24 35 02"] = "Sigma 105mm f/2.8 EX DG Macro";
|
||||||
|
lenses["E6 41 3C 8E 2C 40 1C 02"] = "Sigma 28-300mm f/3.5-6.3 DG Macro";
|
||||||
lenses["E9 54 37 5C 24 24 1C 02"] = "Sigma 24-70mm f/2.8 EX DG Macro";
|
lenses["E9 54 37 5C 24 24 1C 02"] = "Sigma 24-70mm f/2.8 EX DG Macro";
|
||||||
lenses["ED 40 2D 80 2C 40 4B 0E"] = "Sigma 18-200mm f/3.5-6.3 DC OS HSM";
|
lenses["ED 40 2D 80 2C 40 4B 0E"] = "Sigma 18-200mm f/3.5-6.3 DC OS HSM";
|
||||||
lenses["EE 48 5C 80 24 24 4B 06"] = "Sigma APO 70-200mm f/2.8 EX DG Macro HSM II";
|
lenses["EE 48 5C 80 24 24 4B 06"] = "Sigma 70-200mm f/2.8 EX APO DG Macro HSM II";
|
||||||
lenses["F0 38 1F 37 34 3C 4B 06"] = "Sigma 12-24mm f/4.5-5.6 EX DG Aspherical HSM";
|
lenses["F0 38 1F 37 34 3C 4B 06"] = "Sigma 12-24mm f/4.5-5.6 EX DG Aspherical HSM";
|
||||||
|
lenses["F0 3F 2D 8A 2C 40 DF 0E"] = "Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD (B008)";
|
||||||
lenses["F1 44 A0 A0 34 34 4B 02"] = "Sigma APO 500mm f/4.5 EX DG HSM";
|
lenses["F1 44 A0 A0 34 34 4B 02"] = "Sigma APO 500mm f/4.5 EX DG HSM";
|
||||||
lenses["F1 47 5C 8E 30 3C DF 0E"] = "Tamron SP 70-300mm f/4-5.6 Di VC USD (A005)";
|
lenses["F1 47 5C 8E 30 3C DF 0E"] = "Tamron SP 70-300mm f/4-5.6 Di VC USD (A005)";
|
||||||
lenses["F3 48 68 8E 30 30 4B 02"] = "Sigma APO 100-300mm f/4 EX IF HSM";
|
lenses["F3 48 68 8E 30 30 4B 02"] = "Sigma APO 100-300mm f/4 EX IF HSM";
|
||||||
@ -570,17 +665,25 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
lenses["F5 48 76 76 24 24 4B 06"] = "Sigma 150mm f/2.8 EX DG APO Macro HSM";
|
lenses["F5 48 76 76 24 24 4B 06"] = "Sigma 150mm f/2.8 EX DG APO Macro HSM";
|
||||||
lenses["F6 3F 18 37 2C 34 84 06"] = "Tamron SP AF 10-24mm f/3.5-4.5 Di II LD Aspherical (IF) (B001)";
|
lenses["F6 3F 18 37 2C 34 84 06"] = "Tamron SP AF 10-24mm f/3.5-4.5 Di II LD Aspherical (IF) (B001)";
|
||||||
lenses["F6 48 2D 50 24 24 4B 06"] = "Sigma 18-50mm f/2.8 EX DC Macro";
|
lenses["F6 48 2D 50 24 24 4B 06"] = "Sigma 18-50mm f/2.8 EX DC Macro";
|
||||||
|
lenses["F7 53 5C 80 24 24 40 06"] = "Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)";
|
||||||
lenses["F7 53 5C 80 24 24 84 06"] = "Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)";
|
lenses["F7 53 5C 80 24 24 84 06"] = "Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)";
|
||||||
lenses["F8 54 3E 3E 0C 0C 4B 06"] = "Sigma 30mm f/1.4 EX DC HSM";
|
lenses["F8 54 3E 3E 0C 0C 4B 06"] = "Sigma 30mm f/1.4 EX DC HSM";
|
||||||
lenses["F8 55 64 64 24 24 84 06"] = "Tamron SP AF 90mm f/2.8 Di Macro 1:1 (272NII)";
|
lenses["F8 54 64 64 24 24 DF 06"] = "Tamron SP AF 90mm f/2.8 Di Macro 1:1 (272NII)";
|
||||||
lenses["F8 55 64 64 24 24 84 06"] = "Tamron SP AF 90mm f/2.8 Di Macro 1:1 (272NII)";
|
lenses["F8 55 64 64 24 24 84 06"] = "Tamron SP AF 90mm f/2.8 Di Macro 1:1 (272NII)";
|
||||||
lenses["F9 3C 19 31 30 3C 4B 06"] = "Sigma 10-20mm f/4-5.6 EX DC HSM";
|
lenses["F9 3C 19 31 30 3C 4B 06"] = "Sigma 10-20mm f/4-5.6 EX DC HSM";
|
||||||
lenses["F9 40 3C 8E 2C 40 40 0E"] = "Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical (IF) Macro (A20)";
|
lenses["F9 40 3C 8E 2C 40 40 0E"] = "Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical (IF) Macro (A20)";
|
||||||
lenses["FA 54 3C 5E 24 24 84 06"] = "Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical (IF) Macro (A09NII)";
|
lenses["FA 54 3C 5E 24 24 84 06"] = "Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical (IF) Macro (A09NII)";
|
||||||
|
lenses["FA 54 3C 5E 24 24 DF 06"] = "Tamron SP AF 28-75mm f//2.8 XR Di LD Aspherical (IF) Macro (A09NII)";
|
||||||
|
lenses["FA 54 6E 8E 24 24 4B 02"] = "Sigma APO 120-300mm f/2.8 EX DG HSM";
|
||||||
|
lenses["FB 54 2B 50 24 24 84 06"] = "Tamron SP AF 17-50mm f/2.8 XR Di II LD Aspherical (IF) (A16NII)";
|
||||||
lenses["FB 54 8E 8E 24 24 4B 02"] = "Sigma APO 300mm f/2.8 EX DG HSM";
|
lenses["FB 54 8E 8E 24 24 4B 02"] = "Sigma APO 300mm f/2.8 EX DG HSM";
|
||||||
lenses["FD 47 50 76 24 24 4B 06"] = "Sigma APO 50-150mm f/2.8 EX DC HSM II";
|
lenses["FC 40 2D 80 2C 40 DF 06"] = "Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) Macro (A14NII)";
|
||||||
|
lenses["FD 47 50 76 24 24 4B 06"] = "Sigma 50-150mm f/2.8 EX APO DC HSM II";
|
||||||
lenses["FE 47 00 00 24 24 4B 06"] = "Sigma 4.5mm f/2.8 EX DC HSM Circular Fisheye";
|
lenses["FE 47 00 00 24 24 4B 06"] = "Sigma 4.5mm f/2.8 EX DC HSM Circular Fisheye";
|
||||||
|
lenses["FE 48 37 5C 24 24 DF 0E"] = "Tamron SP 24-70mm f/2.8 Di VC USD";
|
||||||
lenses["FE 53 5C 80 24 24 84 06"] = "Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)";
|
lenses["FE 53 5C 80 24 24 84 06"] = "Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)";
|
||||||
|
lenses["FE 54 5C 80 24 24 DF 0E"] = "Tamron SP AF 70-200mm f//2.8 Di VC USD (A009)";
|
||||||
|
lenses["FE 54 64 64 24 24 DF 0E"] = "Tamron SP 90mm f/2.8 Di VC USD Macro 1:1";
|
||||||
}
|
}
|
||||||
virtual std::string toString (Tag* t) {
|
virtual std::string toString (Tag* t) {
|
||||||
|
|
||||||
@ -629,7 +732,8 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
lid.setf (std::ios_base::hex, std::ios_base::basefield);
|
lid.setf (std::ios_base::hex, std::ios_base::basefield);
|
||||||
lid.setf (std::ios_base::uppercase);
|
lid.setf (std::ios_base::uppercase);
|
||||||
|
|
||||||
std::string model = t->getParent()->getParent()->getParent()->getTag(0x0110)->valueToString();
|
Tag *modelTag = t->getParent()->getRoot()->findTag("Model");
|
||||||
|
std::string model( modelTag? modelTag->valueToString():"");
|
||||||
int lidoffs = 7;
|
int lidoffs = 7;
|
||||||
bool d100 = false;
|
bool d100 = false;
|
||||||
if (model.substr(0,10)=="NIKON D100" || model.substr(0,9)=="NIKON D1X") {
|
if (model.substr(0,10)=="NIKON D100" || model.substr(0,9)=="NIKON D1X") {
|
||||||
@ -700,90 +804,98 @@ class NALensDataInterpreter : public Interpreter {
|
|||||||
};
|
};
|
||||||
NALensDataInterpreter naLensDataInterpreter;
|
NALensDataInterpreter naLensDataInterpreter;
|
||||||
|
|
||||||
|
const TagAttrib nikonISOInfoAttribs[] = {
|
||||||
|
{0, AC_WRITE, 0, 0, 0x0000, AUTO, "ISO", &naISOInfoISOInterpreter},
|
||||||
|
{0, AC_WRITE, 0, 0, 0x0004, SHORT, "ISOExpansion", &naISOExpansionInterpreter},
|
||||||
|
{0, AC_WRITE, 0, 0, 0x0006, AUTO, "ISO2", &naISOInfoISOInterpreter},
|
||||||
|
{0, AC_WRITE, 0, 0, 0x000a, SHORT, "ISOExpansion2", &naISOExpansionInterpreter},
|
||||||
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
|
|
||||||
const TagAttrib nikon2Attribs[] = {
|
const TagAttrib nikon2Attribs[] = {
|
||||||
{0, 1, 0, 0, 0x0002, "Unknown", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0002, AUTO, "Unknown", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0003, "Quality", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0003, AUTO, "Quality", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0004, "ColorMode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0004, AUTO, "ColorMode", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0005, "ImageAdjustment", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0005, AUTO, "ImageAdjustment", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0006, "ISOSpeed", &naISOInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0006, AUTO, "ISOSpeed", &naISOInterpreter},
|
||||||
{0, 1, 0, 0, 0x0007, "WhiteBalance", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0007, AUTO, "WhiteBalance", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0008, "Focus", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0008, AUTO, "Focus", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0009, "Unknown", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0009, AUTO, "Unknown", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x000a, "DigitalZoom", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000a, AUTO, "DigitalZoom", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x000b, "AuxiliaryLens", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000b, AUTO, "AuxiliaryLens", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0f00, "Unknown", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0f00, AUTO, "Unknown", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
|
|
||||||
const TagAttrib nikon3Attribs[] = {
|
const TagAttrib nikon3Attribs[] = {
|
||||||
{0, 1, 0, 0, 0x0001, "MakerNoteVersion", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0001, AUTO, "MakerNoteVersion", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0002, "ISOSpeed", &naISOInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0002, AUTO, "ISOSpeed", &naISOInterpreter},
|
||||||
{0, 1, 0, 0, 0x0003, "ColorMode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0003, AUTO, "ColorMode", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0004, "Quality", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0004, AUTO, "Quality", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0005, "WhiteBalance", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0005, AUTO, "WhiteBalance", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0006, "Sharpness", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0006, AUTO, "Sharpness", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0007, "FocusMode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0007, AUTO, "FocusMode", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0008, "FlashSetting", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0008, AUTO, "FlashSetting", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0009, "FlashType", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0009, AUTO, "FlashType", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x000b, "WhiteBalanceFineTune", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000b, AUTO, "WhiteBalanceFineTune", &stdInterpreter},
|
||||||
{0, 3, 0, 0, 0x000c, "ColorBalance1", &stdInterpreter},
|
{0, AC_NEW, 0, 0, 0x000c, AUTO, "ColorBalance1", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x000d, "ProgramShift", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000d, AUTO, "ProgramShift", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x000e, "ExposureDifference", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000e, AUTO, "ExposureDifference", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x000f, "ISOSelection", &naISOInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000f, AUTO, "ISOSelection", &naISOInterpreter},
|
||||||
{0, 1, 0, 0, 0x0010, "DataDump", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0010, AUTO, "DataDump", &stdInterpreter},
|
||||||
{1, 1, 0, 0, 0x0011, "NikonPreview", &stdInterpreter},
|
{1, AC_WRITE, 0, 0, 0x0011, AUTO, "NikonPreview", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0012, "FlashExposureComp", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0012, AUTO, "FlashExposureComp", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0013, "ISOSetting", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0013, AUTO, "ISOSetting", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0016, "ImageBoundary", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0016, AUTO, "ImageBoundary", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0018, "FlashExposureBracketValue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0018, AUTO, "FlashExposureBracketValue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0019, "ExposureBracketValue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0019, AUTO, "ExposureBracketValue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x001a, "ImageProcessing", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x001a, AUTO, "ImageProcessing", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x001b, "CropHiSpeed", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x001b, AUTO, "CropHiSpeed", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x001d, "SerialNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x001d, AUTO, "SerialNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x001e, "ColorSpace", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x001e, AUTO, "ColorSpace", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0020, "ImageAuthentication", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0020, AUTO, "ImageAuthentication", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0080, "ImageAdjustment", &stdInterpreter},
|
{0, AC_WRITE, 0, nikonISOInfoAttribs, 0x0025, AUTO, "ISOInfo", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0081, "ToneComp", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0080, AUTO, "ImageAdjustment", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0082, "AuxiliaryLens", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0081, AUTO, "ToneComp", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0083, "LensType", &naLensTypeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0082, AUTO, "AuxiliaryLens", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0084, "Lens", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0083, AUTO, "LensType", &naLensTypeInterpreter},
|
||||||
{0, 1, 0, 0, 0x0085, "ManualFocusDistance", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0084, AUTO, "Lens", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0086, "DigitalZoom", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0085, AUTO, "ManualFocusDistance", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0087, "FlashMode", &naFlashModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0086, AUTO, "DigitalZoom", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0088, "AFInfo", &naAFInfoInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0087, AUTO, "FlashMode", &naFlashModeInterpreter},
|
||||||
{0, 1, 0, 0, 0x0089, "ShootingMode", &naShootingModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0088, AUTO, "AFInfo", &naAFInfoInterpreter},
|
||||||
{0, 1, 0, 0, 0x008a, "AutoBracketRelease", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0089, AUTO, "ShootingMode", &naShootingModeInterpreter},
|
||||||
{0, 1, 0, 0, 0x008b, "LensFStops", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x008a, AUTO, "AutoBracketRelease", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x008c, "NEFCurve1", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x008b, AUTO, "LensFStops", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x008d, "ColorHue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x008c, AUTO, "NEFCurve1", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x008f, "SceneMode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x008d, AUTO, "ColorHue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0090, "LightSource", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x008f, AUTO, "SceneMode", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0091, "ShotInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0090, AUTO, "LightSource", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0092, "HueAdjustment", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0091, AUTO, "ShotInfo", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0094, "Saturation", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0092, AUTO, "HueAdjustment", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0095, "NoiseReduction", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0094, AUTO, "Saturation", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0096, "NEFCurve2", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0095, AUTO, "NoiseReduction", &stdInterpreter},
|
||||||
{0, 3, 0, 0, 0x0097, "ColorBalance", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0096, AUTO, "NEFCurve2", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0098, "LensData", &naLensDataInterpreter},
|
{0, AC_NEW, 0, 0, 0x0097, AUTO, "ColorBalance", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0099, "RawImageCenter", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0098, AUTO, "LensData", &naLensDataInterpreter},
|
||||||
{0, 1, 0, 0, 0x009a, "SensorPixelSize", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0099, AUTO, "RawImageCenter", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00a0, "SerialNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x009a, AUTO, "SensorPixelSize", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00a2, "ImageDataSize", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00a0, AUTO, "SerialNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00a5, "ImageCount", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00a2, AUTO, "ImageDataSize", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00a6, "DeletedImageCount", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00a5, AUTO, "ImageCount", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00a7, "ShutterCount", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00a6, AUTO, "DeletedImageCount", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00a9, "ImageOptimization", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00a7, AUTO, "ShutterCount", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00aa, "Saturation", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00a9, AUTO, "ImageOptimization", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00ab, "VariProgram", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00aa, AUTO, "Saturation", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00ac, "ImageStabilization", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00ab, AUTO, "VariProgram", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00ad, "AFResponse", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00ac, AUTO, "ImageStabilization", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00b0, "MultiExposure", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00ad, AUTO, "AFResponse", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x00b1, "HighISONoiseReduction", &naHiISONRInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00b0, AUTO, "MultiExposure", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0e00, "PrintIM", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x00b1, AUTO, "HighISONoiseReduction", &naHiISONRInterpreter},
|
||||||
{0, 0, 0, 0, 0x0e01, "NikonCaptureData", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0e00, AUTO, "PrintIM", &stdInterpreter},
|
||||||
{0, 0, 0, 0, 0x0e09, "NikonCaptureVersion", &stdInterpreter},
|
{0, AC_DONTWRITE, 0, 0, 0x0e01, AUTO, "NikonCaptureData", &stdInterpreter},
|
||||||
{0, 0, 0, 0, 0x0e0e, "NikonCaptureOffsets", &stdInterpreter},
|
{0, AC_DONTWRITE, 0, 0, 0x0e09, AUTO, "NikonCaptureVersion", &stdInterpreter},
|
||||||
{0, 0, 0, 0, 0x0e10, "NikonScanIFD", &stdInterpreter},
|
{0, AC_DONTWRITE, 0, 0, 0x0e0e, AUTO, "NikonCaptureOffsets", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{0, AC_DONTWRITE, 0, 0, 0x0e10, AUTO, "NikonScanIFD", &stdInterpreter},
|
||||||
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -67,8 +67,8 @@ OLApertureInterpreter olApertureInterpreter;
|
|||||||
class OLLensTypeInterpreter : public Interpreter {
|
class OLLensTypeInterpreter : public Interpreter {
|
||||||
std::map<std::string, std::string> lenses;
|
std::map<std::string, std::string> lenses;
|
||||||
public:
|
public:
|
||||||
OLLensTypeInterpreter () {
|
OLLensTypeInterpreter () { // From EXIFTOOL database 'Olympus.pm' V2.09
|
||||||
// exadecimal bytes
|
// exadecimal bytes
|
||||||
lenses["00 01 00"] = "Zuiko Digital ED 50mm f/2 Macro";
|
lenses["00 01 00"] = "Zuiko Digital ED 50mm f/2 Macro";
|
||||||
lenses["00 01 01"] = "Zuiko Digital 40-150mm f/3.5-4.5";
|
lenses["00 01 01"] = "Zuiko Digital 40-150mm f/3.5-4.5";
|
||||||
lenses["00 01 10"] = "Zuiko Digital ED 14-42mm f/3.5-5.6";
|
lenses["00 01 10"] = "Zuiko Digital ED 14-42mm f/3.5-5.6";
|
||||||
@ -79,15 +79,29 @@ class OLLensTypeInterpreter : public Interpreter {
|
|||||||
lenses["00 04 10"] = "Zuiko Digital ED 9-18mm f/4-5.6";
|
lenses["00 04 10"] = "Zuiko Digital ED 9-18mm f/4-5.6";
|
||||||
lenses["00 05 00"] = "Zuiko Digital 14-54mm f/2.8-3.5";
|
lenses["00 05 00"] = "Zuiko Digital 14-54mm f/2.8-3.5";
|
||||||
lenses["00 05 01"] = "Zuiko Digital Pro ED 90-250mm f/2.8";
|
lenses["00 05 01"] = "Zuiko Digital Pro ED 90-250mm f/2.8";
|
||||||
lenses["00 05 10"] = "Zuiko Digital ED 14-42mm f/3.5-5.6 ";
|
lenses["00 05 10"] = "Zuiko Digital ED 14-42mm f/3.5-5.6 L";
|
||||||
lenses["00 06 00"] = "Zuiko Digital ED 50-200mm f/2.8-3.5";
|
lenses["00 06 00"] = "Zuiko Digital ED 50-200mm f/2.8-3.5";
|
||||||
lenses["00 06 01"] = "Zuiko Digital ED 8mm f/3.5 Fisheye";
|
lenses["00 06 01"] = "Zuiko Digital ED 8mm f/3.5 Fisheye";
|
||||||
|
lenses["00 06 10"] = "Zuiko Digital ED 40-150mm f/4-5.6";
|
||||||
lenses["00 07 00"] = "Zuiko Digital 11-22mm f/2.8-3.5";
|
lenses["00 07 00"] = "Zuiko Digital 11-22mm f/2.8-3.5";
|
||||||
lenses["00 07 01"] = "Zuiko Digital 18-180mm f/3.5-6.3";
|
lenses["00 07 01"] = "Zuiko Digital 18-180mm f/3.5-6.3";
|
||||||
|
lenses["00 07 10"] = "Zuiko Digital ED 12mm f/2";
|
||||||
lenses["00 08 01"] = "Zuiko Digital 70-300mm f/4-5.6";
|
lenses["00 08 01"] = "Zuiko Digital 70-300mm f/4-5.6";
|
||||||
|
lenses["00 08 10"] = "Zuiko Digital ED 75-300mm f/4.8-6.7";
|
||||||
|
lenses["00 09 10"] = "Zuiko Digital 14-42mm f/3.5-5.6 II";
|
||||||
|
lenses["00 10 01"] = "Kenko Tokina Reflex 300mm f/6.3 MF Macro";
|
||||||
|
lenses["00 10 10"] = "Zuiko Digital ED 12-50mm f/3.5-6.3 EZ";
|
||||||
|
lenses["00 11 10"] = "Zuiko Digital 45mm f/1.8";
|
||||||
|
lenses["00 12 10"] = "Zuiko Digital ED 60mm f/2.8 Macro";
|
||||||
|
lenses["00 13 10"] = "Zuiko Digital ED 14-42mm f/3.5-5.6 II R";
|
||||||
|
lenses["00 14 10"] = "Zuiko Digital ED 40-150mm f/4-5.6 R";
|
||||||
lenses["00 15 00"] = "Zuiko Digital ED 7-14mm f/4";
|
lenses["00 15 00"] = "Zuiko Digital ED 7-14mm f/4";
|
||||||
|
lenses["00 15 10"] = "Zuiko Digital ED 75mm f/1.8";
|
||||||
|
lenses["00 16 10"] = "Zuiko Digital 17mm f/1.8";
|
||||||
lenses["00 17 00"] = "Zuiko Digital Pro ED 35-100mm f/2";
|
lenses["00 17 00"] = "Zuiko Digital Pro ED 35-100mm f/2";
|
||||||
lenses["00 18 00"] = "Zuiko Digital 14-45mm f/3.5-5.6";
|
lenses["00 18 00"] = "Zuiko Digital 14-45mm f/3.5-5.6";
|
||||||
|
lenses["00 18 10"] = "Zuiko Digital ED 75-300mm f/4.8-6.7 II";
|
||||||
|
lenses["00 19 10"] = "Zuiko Digital ED 12-40mm f/2.8 Pro";
|
||||||
lenses["00 20 00"] = "Zuiko Digital 35mm f/3.5 Macro";
|
lenses["00 20 00"] = "Zuiko Digital 35mm f/3.5 Macro";
|
||||||
lenses["00 22 00"] = "Zuiko Digital 17.5-45mm f/3.5-5.6";
|
lenses["00 22 00"] = "Zuiko Digital 17.5-45mm f/3.5-5.6";
|
||||||
lenses["00 23 00"] = "Zuiko Digital ED 14-42mm f/3.5-5.6";
|
lenses["00 23 00"] = "Zuiko Digital ED 14-42mm f/3.5-5.6";
|
||||||
@ -98,31 +112,52 @@ class OLLensTypeInterpreter : public Interpreter {
|
|||||||
lenses["00 33 00"] = "Zuiko Digital 25mm f/2.8";
|
lenses["00 33 00"] = "Zuiko Digital 25mm f/2.8";
|
||||||
lenses["00 34 00"] = "Zuiko Digital ED 9-18mm f/4-5.6";
|
lenses["00 34 00"] = "Zuiko Digital ED 9-18mm f/4-5.6";
|
||||||
lenses["00 35 00"] = "Zuiko Digital 14-54mm f/2.8-3.5 II";
|
lenses["00 35 00"] = "Zuiko Digital 14-54mm f/2.8-3.5 II";
|
||||||
lenses["01 01 00"] = "Sigma 18-50mm f/3.5-5.6";
|
lenses["01 01 00"] = "Sigma 18-50mm f/3.5-5.6 DC";
|
||||||
|
lenses["01 01 10"] = "Sigma 30mm f/2.8 EX DN";
|
||||||
lenses["01 02 00"] = "Sigma 55-200mm f/4-5.6 DC";
|
lenses["01 02 00"] = "Sigma 55-200mm f/4-5.6 DC";
|
||||||
|
lenses["01 02 10"] = "Sigma 19mm f/2.8 EX DN";
|
||||||
lenses["01 03 00"] = "Sigma 18-125mm f/3.5-5.6 DC";
|
lenses["01 03 00"] = "Sigma 18-125mm f/3.5-5.6 DC";
|
||||||
lenses["01 04 00"] = "Sigma 18-125mm f/3.5-5.6";
|
lenses["01 03 10"] = "Sigma 30mm f/2.8 DN | A";
|
||||||
lenses["01 05 00"] = "Sigma 30mm f/1.4 DC";
|
lenses["01 04 00"] = "Sigma 18-125mm f/3.5-5.6 DC";
|
||||||
|
lenses["01 04 10"] = "Sigma 19mm f/2.8 DN | A";
|
||||||
|
lenses["01 05 00"] = "Sigma 30mm f/1.4 EX DC HSM";
|
||||||
|
lenses["01 05 10"] = "Sigma 60mm f/2.8 DN | A";
|
||||||
lenses["01 06 00"] = "Sigma 50-500mm f/4-6.3 EX DG APO HSM RF";
|
lenses["01 06 00"] = "Sigma 50-500mm f/4-6.3 EX DG APO HSM RF";
|
||||||
lenses["01 07 00"] = "Sigma 105mm f/2.8 DG";
|
lenses["01 07 00"] = "Sigma 105mm f/2.8 EX DG Macro";
|
||||||
lenses["01 08 00"] = "Sigma 150mm f/2.8 DG HSM";
|
lenses["01 08 00"] = "Sigma 150mm f/2.8 EX DG APO HSM Macro";
|
||||||
|
lenses["01 09 00"] = "Sigma 18-50mm f/2.8 EX DC Macro";
|
||||||
lenses["01 10 00"] = "Sigma 24mm f/1.8 EX DG Aspherical Macro";
|
lenses["01 10 00"] = "Sigma 24mm f/1.8 EX DG Aspherical Macro";
|
||||||
lenses["01 11 00"] = "Sigma 135-400mm f/4.5-5.6 DG ASP APO RF";
|
lenses["01 11 00"] = "Sigma 135-400mm f/4.5-5.6 DG APO";
|
||||||
lenses["01 12 00"] = "Sigma 300-800mm f/5.6 EX DG APO";
|
lenses["01 12 00"] = "Sigma 300-800mm f/5.6 EX DG APO HSM";
|
||||||
lenses["01 14 00"] = "Sigma 50-500mm f/4-6.3 EX DG APO HSM RF";
|
lenses["01 13 00"] = "Sigma 30mm f/1.4 EX DC HSM";
|
||||||
|
lenses["01 14 00"] = "Sigma 50-500mm f/4-6.3 EX DG APO HSM";
|
||||||
lenses["01 15 00"] = "Sigma 10-20mm f/4-5.6 EX DC HSM";
|
lenses["01 15 00"] = "Sigma 10-20mm f/4-5.6 EX DC HSM";
|
||||||
lenses["01 16 00"] = "Sigma 70-200mm f/2.8 EX DG Macro HSM II";
|
lenses["01 16 00"] = "Sigma 70-200mm f/2.8 II EX DG APO HSM Macro";
|
||||||
lenses["01 17 00"] = "Sigma 50mm f/1.4 EX DG HSM";
|
lenses["01 17 00"] = "Sigma 50mm f/1.4 EX DG HSM";
|
||||||
lenses["02 01 00"] = "Leica D Vario Elmarit 14-50mm f/2.8-3.5 Asph.";
|
lenses["02 01 00"] = "Leica D Vario Elmarit 14-50mm f/2.8-3.5 Asph.";
|
||||||
lenses["02 01 10"] = "Lumix G Vario 14-45mm f/3.5-5.6 Asph. Mega OIS";
|
lenses["02 01 10"] = "Lumix G Vario 14-45mm f/3.5-5.6 Asph. Mega OIS";
|
||||||
lenses["02 02 00"] = "Leica D Summilux 25mm f/1.4 Asph.";
|
lenses["02 02 00"] = "Leica D Summilux 25mm f/1.4 Asph.";
|
||||||
lenses["02 02 10"] = "Lumix G Vario 45-200mm f/4-5.6 Mega OIS";
|
lenses["02 02 10"] = "Lumix G Vario 45-200mm f/4-5.6 Mega OIS";
|
||||||
|
lenses["02 03 00"] = "Leica D Vario Elmar 14-50mm f/3.8-5.6 Asph. Mega OIS";
|
||||||
lenses["02 03 01"] = "Leica D Vario Elmar 14-50mm f/3.8-5.6 Asph.";
|
lenses["02 03 01"] = "Leica D Vario Elmar 14-50mm f/3.8-5.6 Asph.";
|
||||||
lenses["02 03 10"] = "Lumix G Vario HD 14-140mm f(4-5.8 Asph. Mega OIS ";
|
lenses["02 03 10"] = "Lumix G Vario HD 14-140mm f/4-5.8 Asph. Mega OIS";
|
||||||
lenses["02 04 00"] = "Leica D Vario Elmar 14-150mm f/3.5-5.6";
|
lenses["02 04 00"] = "Leica D Vario Elmar 14-150mm f/3.5-5.6";
|
||||||
lenses["02 04 10"] = "Lumix G Vario 7-14mm f/4 Asph.";
|
lenses["02 04 10"] = "Lumix G Vario 7-14mm f/4 Asph.";
|
||||||
lenses["02 05 10"] = "Lumix G 20mm f/1.7 Asph.";
|
lenses["02 05 10"] = "Lumix G 20mm f/1.7 Asph.";
|
||||||
lenses["02 08 10"] = "Lumix G Fisheye 8mm f/3.5 ";
|
lenses["02 06 10"] = "Leica DG Macro-Elmarit 45mm f/2.8 Asph. Mega OIS";
|
||||||
|
lenses["02 07 10"] = "Lumix G Vario 14-42mm f/3.5-5.6 Asph. Mega OIS";
|
||||||
|
lenses["02 08 10"] = "Lumix G Fisheye 8mm f/3.5";
|
||||||
|
lenses["02 09 10"] = "Lumix G Vario 100-300mm f/4-5.6 Mega OIS";
|
||||||
|
lenses["02 10 10"] = "Lumix G 14mm f/2.5 Asph.";
|
||||||
|
lenses["02 11 10"] = "Lumix G 12.5mm f/12 3D";
|
||||||
|
lenses["02 12 10"] = "Leica DG Summilux 25mm f/1.4 Asph.";
|
||||||
|
lenses["02 13 10"] = "Lumix G X Vario PZ 45-175mm f/4-5.6 Asph. Power OIS";
|
||||||
|
lenses["02 14 10"] = "Lumix G X Vario PZ 14-42mm f/3.5-5.6 Asph. Power OIS";
|
||||||
|
lenses["02 15 10"] = "Lumix G X Vario 12-35mm f/2.8 Asph. Power OIS";
|
||||||
|
lenses["02 16 10"] = "Lumix G Vario 45-150mm f/4-5.6 Asph. Mega OIS";
|
||||||
|
lenses["02 17 10"] = "Lumix G X Vario 35-100mm f/2.8 Power OIS";
|
||||||
|
lenses["02 18 10"] = "Lumix G Vario 14-42mm f/3.5-5.6 II Asph. Mega OIS";
|
||||||
|
lenses["02 19 10"] = "Lumix G Vario 14-140mm f/3.5-5.6 Asph. Power OIS";
|
||||||
lenses["03 01 00"] = "Leica D Vario Elmarit 14-50mm f/2.8-3.5 Asph.";
|
lenses["03 01 00"] = "Leica D Vario Elmarit 14-50mm f/2.8-3.5 Asph.";
|
||||||
lenses["03 02 00"] = "Leica D Summilux 25mm f/1.4 Asph.";
|
lenses["03 02 00"] = "Leica D Summilux 25mm f/1.4 Asph.";
|
||||||
}
|
}
|
||||||
@ -404,298 +439,298 @@ class OLFlashModelInterpreter : public ChoiceInterpreter {
|
|||||||
OLFlashModelInterpreter olFlashModelInterpreter;
|
OLFlashModelInterpreter olFlashModelInterpreter;
|
||||||
|
|
||||||
const TagAttrib olyFocusInfoAttribs[] = {
|
const TagAttrib olyFocusInfoAttribs[] = {
|
||||||
{0, 1, 0, 0, 0x0000, "FocusInfoVersion", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0000, AUTO, "FocusInfoVersion", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0209, "AutoFocus", &olOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0209, AUTO, "AutoFocus", &olOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x0210, "SceneDetect", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0210, AUTO, "SceneDetect", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0211, "SceneArea", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0211, AUTO, "SceneArea", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0212, "SceneDetectData", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0212, AUTO, "SceneDetectData", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0300, "ZoomStepCount", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0300, AUTO, "ZoomStepCount", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0301, "FocusStepCount", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0301, AUTO, "FocusStepCount", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0303, "FocusStepInfinity", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0303, AUTO, "FocusStepInfinity", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0304, "FocusStepNear", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0304, AUTO, "FocusStepNear", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0305, "FocusDistance", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0305, AUTO, "FocusDistance", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0308, "AFPoint", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0308, AUTO, "AFPoint", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1201, "ExternalFlash", &olOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1201, AUTO, "ExternalFlash", &olOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x1203, "ExternalFlashGuideNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1203, AUTO, "ExternalFlashGuideNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1204, "ExternalFlashBounce", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1204, AUTO, "ExternalFlashBounce", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1205, "ExternalFlashZoom", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1205, AUTO, "ExternalFlashZoom", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1208, "InternalFlash", &olOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1208, AUTO, "InternalFlash", &olOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x1209, "ManualFlash", &olOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1209, AUTO, "ManualFlash", &olOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x1500, "SensorTemperature", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1500, AUTO, "SensorTemperature", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1600, "ImageStabilization", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1600, AUTO, "ImageStabilization", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
|
|
||||||
const TagAttrib olyImageProcessingAttribs[] = {
|
const TagAttrib olyImageProcessingAttribs[] = {
|
||||||
{0, 1, 0, 0, 0x0000, "ImageProcessingVersion", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0000, AUTO, "ImageProcessingVersion", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0100, "WB_RBLevels", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0100, AUTO, "WB_RBLevels", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0102, "WB_RBLevels3000K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0102, AUTO, "WB_RBLevels3000K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0103, "WB_RBLevels3300K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0103, AUTO, "WB_RBLevels3300K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0104, "WB_RBLevels3600K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0104, AUTO, "WB_RBLevels3600K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0105, "WB_RBLevels3900K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0105, AUTO, "WB_RBLevels3900K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0106, "WB_RBLevels4000K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0106, AUTO, "WB_RBLevels4000K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0107, "WB_RBLevels4300K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0107, AUTO, "WB_RBLevels4300K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0108, "WB_RBLevels4500K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0108, AUTO, "WB_RBLevels4500K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0109, "WB_RBLevels4800K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0109, AUTO, "WB_RBLevels4800K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x010a, "WB_RBLevels5300K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x010a, AUTO, "WB_RBLevels5300K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x010b, "WB_RBLevels6000K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x010b, AUTO, "WB_RBLevels6000K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x010c, "WB_RBLevels6600K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x010c, AUTO, "WB_RBLevels6600K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x010d, "WB_RBLevels7500K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x010d, AUTO, "WB_RBLevels7500K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x010e, "WB_RBLevelsCWB1", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x010e, AUTO, "WB_RBLevelsCWB1", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x010f, "WB_RBLevelsCWB2", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x010f, AUTO, "WB_RBLevelsCWB2", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0110, "WB_RBLevelsCWB3", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0110, AUTO, "WB_RBLevelsCWB3", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0111, "WB_RBLevelsCWB4", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0111, AUTO, "WB_RBLevelsCWB4", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0113, "WB_GLevel3000K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0113, AUTO, "WB_GLevel3000K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0114, "WB_GLevel3300K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0114, AUTO, "WB_GLevel3300K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0115, "WB_GLevel3600K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0115, AUTO, "WB_GLevel3600K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0116, "WB_GLevel3900K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0116, AUTO, "WB_GLevel3900K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0117, "WB_GLevel4000K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0117, AUTO, "WB_GLevel4000K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0118, "WB_GLevel4300K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0118, AUTO, "WB_GLevel4300K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0119, "WB_GLevel4500K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0119, AUTO, "WB_GLevel4500K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x011a, "WB_GLevel4800K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x011a, AUTO, "WB_GLevel4800K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x011b, "WB_GLevel5300K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x011b, AUTO, "WB_GLevel5300K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x011c, "WB_GLevel6000K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x011c, AUTO, "WB_GLevel6000K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x011d, "WB_GLevel6600K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x011d, AUTO, "WB_GLevel6600K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x011e, "WB_GLevel7500K", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x011e, AUTO, "WB_GLevel7500K", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x011f, "WB_GLevel", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x011f, AUTO, "WB_GLevel", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0200, "ColorMatrix", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0200, AUTO, "ColorMatrix", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0300, "Enhancer", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0300, AUTO, "Enhancer", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0301, "EnhancerValues", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0301, AUTO, "EnhancerValues", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0310, "CoringFilter", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0310, AUTO, "CoringFilter", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0311, "CoringValues", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0311, AUTO, "CoringValues", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0600, "BlackLevel2", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0600, AUTO, "BlackLevel2", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0610, "GainBase", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0610, AUTO, "GainBase", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0611, "ValidBits", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0611, AUTO, "ValidBits", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0612, "CropLeft", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0612, AUTO, "CropLeft", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0613, "CropTop", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0613, AUTO, "CropTop", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0614, "CropWidth", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0614, AUTO, "CropWidth", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0615, "CropHeight", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0615, AUTO, "CropHeight", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1010, "NoiseReduction2", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1010, AUTO, "NoiseReduction2", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1011, "DistortionCorrection2", &olOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1011, AUTO, "DistortionCorrection2", &olOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x1012, "ShadingCompensation2", &olOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1012, AUTO, "ShadingCompensation2", &olOnOffInterpreter},
|
||||||
{1, 1, 0, 0, 0x1103, "UnknownBlock", &stdInterpreter},
|
{1, AC_WRITE, 0, 0, 0x1103, AUTO, "UnknownBlock", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1200, "FaceDetect", &olOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1200, AUTO, "FaceDetect", &olOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x1201, "FaceDetectArea", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1201, AUTO, "FaceDetectArea", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
|
|
||||||
const TagAttrib olyRawDevelopmentAttribs[] = {
|
const TagAttrib olyRawDevelopmentAttribs[] = {
|
||||||
{0, 1, 0, 0, 0x0000, "RawDevVersion", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0000, AUTO, "RawDevVersion", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0100, "RawDevExposureBiasValue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0100, AUTO, "RawDevExposureBiasValue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0101, "RawDevWhiteBalanceValue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0101, AUTO, "RawDevWhiteBalanceValue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0102, "RawDevWBFineAdjustment", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0102, AUTO, "RawDevWBFineAdjustment", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0103, "RawDevGrayPoint", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0103, AUTO, "RawDevGrayPoint", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0104, "RawDevSaturationEmphasis", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0104, AUTO, "RawDevSaturationEmphasis", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0105, "RawDevMemoryColorEmphasis", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0105, AUTO, "RawDevMemoryColorEmphasis", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0106, "RawDevContrastValue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0106, AUTO, "RawDevContrastValue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0107, "RawDevSharpnessValue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0107, AUTO, "RawDevSharpnessValue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0108, "RawDevColorSpace", &olColorSpaceInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0108, AUTO, "RawDevColorSpace", &olColorSpaceInterpreter},
|
||||||
{0, 1, 0, 0, 0x0109, "RawDevEngine", &olDevEngineInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0109, AUTO, "RawDevEngine", &olDevEngineInterpreter},
|
||||||
{0, 1, 0, 0, 0x010a, "RawDevNoiseReduction", &olNoiseReductionInterpreter},
|
{0, AC_WRITE, 0, 0, 0x010a, AUTO, "RawDevNoiseReduction", &olNoiseReductionInterpreter},
|
||||||
{0, 1, 0, 0, 0x010b, "RawDevEditStatus", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x010b, AUTO, "RawDevEditStatus", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x010c, "RawDevSettings", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x010c, AUTO, "RawDevSettings", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
|
|
||||||
const TagAttrib olyRawDevelopment2Attribs[] = {
|
const TagAttrib olyRawDevelopment2Attribs[] = {
|
||||||
{0, 1, 0, 0, 0x0000, "RawDevVersion", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0000, AUTO, "RawDevVersion", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0100, "RawDevExposureBiasValue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0100, AUTO, "RawDevExposureBiasValue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0101, "RawDevWhiteBalance", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0101, AUTO, "RawDevWhiteBalance", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0102, "RawDevWhiteBalanceValue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0102, AUTO, "RawDevWhiteBalanceValue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0103, "RawDevWBFineAdjustment", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0103, AUTO, "RawDevWBFineAdjustment", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0104, "RawDevGrayPoint", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0104, AUTO, "RawDevGrayPoint", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0105, "RawDevContrastValue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0105, AUTO, "RawDevContrastValue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0106, "RawDevSharpnessValue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0106, AUTO, "RawDevSharpnessValue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0107, "RawDevSaturationEmphasis", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0107, AUTO, "RawDevSaturationEmphasis", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0108, "RawDevMemoryColorEmphasis", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0108, AUTO, "RawDevMemoryColorEmphasis", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0109, "RawDevColorSpace", &olColorSpaceInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0109, AUTO, "RawDevColorSpace", &olColorSpaceInterpreter},
|
||||||
{0, 1, 0, 0, 0x010a, "RawDevNoiseReduction", &olNoiseReductionInterpreter},
|
{0, AC_WRITE, 0, 0, 0x010a, AUTO, "RawDevNoiseReduction", &olNoiseReductionInterpreter},
|
||||||
{0, 1, 0, 0, 0x010b, "RawDevEngine", &olDevEngineInterpreter},
|
{0, AC_WRITE, 0, 0, 0x010b, AUTO, "RawDevEngine", &olDevEngineInterpreter},
|
||||||
{0, 1, 0, 0, 0x010c, "RawDevPictureMode", &olPictureModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x010c, AUTO, "RawDevPictureMode", &olPictureModeInterpreter},
|
||||||
{0, 1, 0, 0, 0x010d, "RawDevPMSaturation", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x010d, AUTO, "RawDevPMSaturation", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x010e, "RawDevPMContrast", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x010e, AUTO, "RawDevPMContrast", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x010f, "RawDevPMSharpness", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x010f, AUTO, "RawDevPMSharpness", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0110, "RawDevPM_BWFilter", &olPictureModeBWFilterInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0110, AUTO, "RawDevPM_BWFilter", &olPictureModeBWFilterInterpreter},
|
||||||
{0, 1, 0, 0, 0x0111, "RawDevPMPictureTone", &olPictureModeToneInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0111, AUTO, "RawDevPMPictureTone", &olPictureModeToneInterpreter},
|
||||||
{0, 1, 0, 0, 0x0112, "RawDevGradation", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0112, AUTO, "RawDevGradation", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0113, "RawDevSaturation3", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0113, AUTO, "RawDevSaturation3", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0119, "RawDevAutoGradation", &olOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0119, AUTO, "RawDevAutoGradation", &olOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x0120, "RawDevPMNoiseFilter", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0120, AUTO, "RawDevPMNoiseFilter", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
|
|
||||||
const TagAttrib olyCameraSettingsAttribs[] = {
|
const TagAttrib olyCameraSettingsAttribs[] = {
|
||||||
{0, 1, 0, 0, 0x0000, "CameraSettingsVersion", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0000, AUTO, "CameraSettingsVersion", &stdInterpreter},
|
||||||
{1, 1, 0, 0, 0x0100, "PreviewImageValid", &olYesNoInterpreter},
|
{1, AC_WRITE, 0, 0, 0x0100, AUTO, "PreviewImageValid", &olYesNoInterpreter},
|
||||||
{1, 1, 0, 0, 0x0101, "PreviewImageStart", &stdInterpreter},
|
{1, AC_WRITE, 0, 0, 0x0101, AUTO, "PreviewImageStart", &stdInterpreter},
|
||||||
{1, 1, 0, 0, 0x0102, "PreviewImageLength", &stdInterpreter},
|
{1, AC_WRITE, 0, 0, 0x0102, AUTO, "PreviewImageLength", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0200, "ExposureMode", &olExposureModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0200, AUTO, "ExposureMode", &olExposureModeInterpreter},
|
||||||
{0, 1, 0, 0, 0x0201, "AELock", &olOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0201, AUTO, "AELock", &olOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x0202, "MeteringMode", &olMeteringModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0202, AUTO, "MeteringMode", &olMeteringModeInterpreter},
|
||||||
{0, 1, 0, 0, 0x0300, "MacroMode", &olOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0300, AUTO, "MacroMode", &olOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x0301, "FocusMode", &olFocusModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0301, AUTO, "FocusMode", &olFocusModeInterpreter},
|
||||||
{0, 1, 0, 0, 0x0302, "FocusProcess", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0302, AUTO, "FocusProcess", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0303, "AFSearch", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0303, AUTO, "AFSearch", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0304, "AFAreas", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0304, AUTO, "AFAreas", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0400, "FlashMode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0400, AUTO, "FlashMode", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0401, "FlashExposureComp", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0401, AUTO, "FlashExposureComp", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0500, "WhiteBalance2", &olWhitebalance2Interpreter},
|
{0, AC_WRITE, 0, 0, 0x0500, AUTO, "WhiteBalance2", &olWhitebalance2Interpreter},
|
||||||
{0, 1, 0, 0, 0x0501, "WhiteBalanceTemperature", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0501, AUTO, "WhiteBalanceTemperature", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0502, "WhiteBalanceBracket", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0502, AUTO, "WhiteBalanceBracket", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0503, "CustomSaturation", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0503, AUTO, "CustomSaturation", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0504, "ModifiedSaturation", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0504, AUTO, "ModifiedSaturation", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0505, "ContrastSetting", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0505, AUTO, "ContrastSetting", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0506, "SharpnessSetting", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0506, AUTO, "SharpnessSetting", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0507, "ColorSpace", &olColorSpaceInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0507, AUTO, "ColorSpace", &olColorSpaceInterpreter},
|
||||||
{0, 1, 0, 0, 0x0509, "SceneMode", &olSceneModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0509, AUTO, "SceneMode", &olSceneModeInterpreter},
|
||||||
{0, 1, 0, 0, 0x050a, "NoiseReduction", &olNoiseReductionInterpreter},
|
{0, AC_WRITE, 0, 0, 0x050a, AUTO, "NoiseReduction", &olNoiseReductionInterpreter},
|
||||||
{0, 1, 0, 0, 0x050b, "DistortionCorrection", &olOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x050b, AUTO, "DistortionCorrection", &olOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x050c, "ShadingCompensation", &olOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x050c, AUTO, "ShadingCompensation", &olOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x050d, "CompressionFactor", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x050d, AUTO, "CompressionFactor", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x050f, "Gradation", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x050f, AUTO, "Gradation", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0520, "PictureMode", &olPictureModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0520, AUTO, "PictureMode", &olPictureModeInterpreter},
|
||||||
{0, 1, 0, 0, 0x0521, "PictureModeSaturation", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0521, AUTO, "PictureModeSaturation", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0522, "PictureModeHue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0522, AUTO, "PictureModeHue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0523, "PictureModeContrast", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0523, AUTO, "PictureModeContrast", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0524, "PictureModeSharpness", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0524, AUTO, "PictureModeSharpness", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0525, "PictureModeBWFilter", &olPictureModeBWFilterInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0525, AUTO, "PictureModeBWFilter", &olPictureModeBWFilterInterpreter},
|
||||||
{0, 1, 0, 0, 0x0526, "PictureModeTone", &olPictureModeToneInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0526, AUTO, "PictureModeTone", &olPictureModeToneInterpreter},
|
||||||
{0, 1, 0, 0, 0x0527, "NoiseFilter", &olNoiseFilterInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0527, AUTO, "NoiseFilter", &olNoiseFilterInterpreter},
|
||||||
{0, 1, 0, 0, 0x0600, "DriveMode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0600, AUTO, "DriveMode", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0601, "PanoramaMode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0601, AUTO, "PanoramaMode", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0603, "ImageQuality2", &olImageQuality2Interpreter},
|
{0, AC_WRITE, 0, 0, 0x0603, AUTO, "ImageQuality2", &olImageQuality2Interpreter},
|
||||||
{0, 1, 0, 0, 0x0900, "ManometerPressure", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0900, AUTO, "ManometerPressure", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0901, "ManometerReading", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0901, AUTO, "ManometerReading", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0902, "ExtendedWBDetect", &olOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0902, AUTO, "ExtendedWBDetect", &olOnOffInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
|
|
||||||
const TagAttrib olyEquipmentAttribs[] = {
|
const TagAttrib olyEquipmentAttribs[] = {
|
||||||
{0, 1, 0, 0, 0x0000, "EquipmentVersion", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0000, AUTO, "EquipmentVersion", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0100, "CameraType2", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0100, AUTO, "CameraType2", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0101, "SerialNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0101, AUTO, "SerialNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0102, "InternalSerialNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0102, AUTO, "InternalSerialNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0103, "FocalPlaneDiagonal", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0103, AUTO, "FocalPlaneDiagonal", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0104, "BodyFirmwareVersion", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0104, AUTO, "BodyFirmwareVersion", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0201, "LensType", &olLensTypeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0201, AUTO, "LensType", &olLensTypeInterpreter},
|
||||||
{0, 1, 0, 0, 0x0202, "LensSerialNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0202, AUTO, "LensSerialNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0204, "LensFirmwareVersion", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0204, AUTO, "LensFirmwareVersion", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0205, "MaxApertureAtMinFocal", &olApertureInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0205, AUTO, "MaxApertureAtMinFocal", &olApertureInterpreter},
|
||||||
{0, 1, 0, 0, 0x0206, "MaxApertureAtMaxFocal", &olApertureInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0206, AUTO, "MaxApertureAtMaxFocal", &olApertureInterpreter},
|
||||||
{0, 1, 0, 0, 0x0207, "MinFocalLength", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0207, AUTO, "MinFocalLength", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0208, "MaxFocalLength", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0208, AUTO, "MaxFocalLength", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x020a, "MaxApertureAtCurrentFocal", &olApertureInterpreter},
|
{0, AC_WRITE, 0, 0, 0x020a, AUTO, "MaxApertureAtCurrentFocal", &olApertureInterpreter},
|
||||||
{0, 1, 0, 0, 0x020b, "LensProperties", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x020b, AUTO, "LensProperties", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0301, "Extender", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0301, AUTO, "Extender", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0302, "ExtenderSerialNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0302, AUTO, "ExtenderSerialNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0303, "ExtenderModel", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0303, AUTO, "ExtenderModel", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0304, "ExtenderFirmwareVersion", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0304, AUTO, "ExtenderFirmwareVersion", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1000, "FlashType", &olFlashTypeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1000, AUTO, "FlashType", &olFlashTypeInterpreter},
|
||||||
{0, 1, 0, 0, 0x1001, "FlashModel", &olFlashModelInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1001, AUTO, "FlashModel", &olFlashModelInterpreter},
|
||||||
{0, 1, 0, 0, 0x1002, "FlashFirmwareVersion", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1002, AUTO, "FlashFirmwareVersion", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1003, "FlashSerialNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1003, AUTO, "FlashSerialNumber", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
|
|
||||||
const TagAttrib olympusAttribs[] = {
|
const TagAttrib olympusAttribs[] = {
|
||||||
{0, 1, 0, 0, 0x0104, "BodyFirmwareVersion", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0104, AUTO, "BodyFirmwareVersion", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0200, "SpecialMode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0200, AUTO, "SpecialMode", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0201, "Quality", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0201, AUTO, "Quality", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0202, "Macro", &olOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0202, AUTO, "Macro", &olOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x0203, "BWMode", &olOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0203, AUTO, "BWMode", &olOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x0204, "DigitalZoom", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0204, AUTO, "DigitalZoom", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0205, "FocalPlaneDiagonal", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0205, AUTO, "FocalPlaneDiagonal", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0206, "LensDistortionParams", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0206, AUTO, "LensDistortionParams", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0207, "CameraType", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0207, AUTO, "CameraType", &stdInterpreter},
|
||||||
{1, 1, 0, 0, 0x0208, "TextInfo", &stdInterpreter},
|
{1, AC_WRITE, 0, 0, 0x0208, AUTO, "TextInfo", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0209, "CameraID", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0209, AUTO, "CameraID", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x020b, "EpsonImageWidth", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x020b, AUTO, "EpsonImageWidth", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x020c, "EpsonImageHeight", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x020c, AUTO, "EpsonImageHeight", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x020d, "EpsonSoftware", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x020d, AUTO, "EpsonSoftware", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x0280, "PreviewImage", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0280, AUTO, "PreviewImage", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0300, "PreCaptureFrames", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0300, AUTO, "PreCaptureFrames", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0301, "WhiteBoard", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0301, AUTO, "WhiteBoard", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0302, "OneTouchWB", &olOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0302, AUTO, "OneTouchWB", &olOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x0303, "WhiteBalanceBracket", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0303, AUTO, "WhiteBalanceBracket", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0304, "WhiteBalanceBias", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0304, AUTO, "WhiteBalanceBias", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0403, "SceneMode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0403, AUTO, "SceneMode", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0404, "SerialNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0404, AUTO, "SerialNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0405, "Firmware", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0405, AUTO, "Firmware", &stdInterpreter},
|
||||||
{1, 1, 0, 0, 0x0e00, "PrintIM", &stdInterpreter},
|
{1, AC_WRITE, 0, 0, 0x0e00, AUTO, "PrintIM", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0f00, "DataDump", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0f00, AUTO, "DataDump", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0f01, "DataDump2", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0f01, AUTO, "DataDump2", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1000, "ShutterSpeedValue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1000, AUTO, "ShutterSpeedValue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1001, "ISOValue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1001, AUTO, "ISOValue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1002, "ApertureValue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1002, AUTO, "ApertureValue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1003, "BrightnessValue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1003, AUTO, "BrightnessValue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1004, "FlashMode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1004, AUTO, "FlashMode", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1005, "FlashDevice", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1005, AUTO, "FlashDevice", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1006, "ExposureCompensation", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1006, AUTO, "ExposureCompensation", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1007, "SensorTemperature", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1007, AUTO, "SensorTemperature", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1008, "LensTemperature", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1008, AUTO, "LensTemperature", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1009, "LightCondition", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1009, AUTO, "LightCondition", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x100a, "FocusRange", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x100a, AUTO, "FocusRange", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x100b, "FocusMode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x100b, AUTO, "FocusMode", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x100c, "ManualFocusDistance", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x100c, AUTO, "ManualFocusDistance", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x100d, "ZoomStepCount", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x100d, AUTO, "ZoomStepCount", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x100e, "FocusStepCount", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x100e, AUTO, "FocusStepCount", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x100f, "Sharpness", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x100f, AUTO, "Sharpness", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1010, "FlashChargeLevel", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1010, AUTO, "FlashChargeLevel", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1011, "ColorMatrix", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1011, AUTO, "ColorMatrix", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1012, "BlackLevel", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1012, AUTO, "BlackLevel", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1013, "ColorTemperatureBG", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1013, AUTO, "ColorTemperatureBG", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1014, "ColorTemperatureRG", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1014, AUTO, "ColorTemperatureRG", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1015, "WBMode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1015, AUTO, "WBMode", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1017, "RedBalance", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1017, AUTO, "RedBalance", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1018, "BlueBalance", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1018, AUTO, "BlueBalance", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1019, "ColorMatrixNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1019, AUTO, "ColorMatrixNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x101a, "SerialNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x101a, AUTO, "SerialNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x101b, "ExternalFlashAE1_0", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x101b, AUTO, "ExternalFlashAE1_0", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x101c, "ExternalFlashAE2_0", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x101c, AUTO, "ExternalFlashAE2_0", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x101d, "InternalFlashAE1_0", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x101d, AUTO, "InternalFlashAE1_0", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x101e, "InternalFlashAE2_0", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x101e, AUTO, "InternalFlashAE2_0", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x101f, "ExternalFlashAE1", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x101f, AUTO, "ExternalFlashAE1", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1020, "ExternalFlashAE2", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1020, AUTO, "ExternalFlashAE2", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1021, "InternalFlashAE1", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1021, AUTO, "InternalFlashAE1", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1022, "InternalFlashAE2", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1022, AUTO, "InternalFlashAE2", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1023, "FlashExposureComp", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1023, AUTO, "FlashExposureComp", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1024, "InternalFlashTable", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1024, AUTO, "InternalFlashTable", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1025, "ExternalFlashGValue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1025, AUTO, "ExternalFlashGValue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1026, "ExternalFlashBounce", &olYesNoInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1026, AUTO, "ExternalFlashBounce", &olYesNoInterpreter},
|
||||||
{0, 1, 0, 0, 0x1027, "ExternalFlashZoom", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1027, AUTO, "ExternalFlashZoom", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1028, "ExternalFlashMode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1028, AUTO, "ExternalFlashMode", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1029, "Contrast", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1029, AUTO, "Contrast", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x102a, "SharpnessFactor", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x102a, AUTO, "SharpnessFactor", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x102b, "ColorControl", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x102b, AUTO, "ColorControl", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x102c, "ValidBits", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x102c, AUTO, "ValidBits", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x102d, "CoringFilter", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x102d, AUTO, "CoringFilter", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x102e, "OlympusImageWidth", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x102e, AUTO, "OlympusImageWidth", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x102f, "OlympusImageHeight", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x102f, AUTO, "OlympusImageHeight", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1030, "SceneDetect", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1030, AUTO, "SceneDetect", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1031, "SceneArea", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1031, AUTO, "SceneArea", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1033, "SceneDetectData", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1033, AUTO, "SceneDetectData", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1034, "CompressionRatio", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1034, AUTO, "CompressionRatio", &stdInterpreter},
|
||||||
{1, 1, 0, 0, 0x1035, "PreviewImageValid", &olYesNoInterpreter},
|
{1, AC_WRITE, 0, 0, 0x1035, AUTO, "PreviewImageValid", &olYesNoInterpreter},
|
||||||
{1, 1, 0, 0, 0x1036, "PreviewImageStart", &stdInterpreter},
|
{1, AC_WRITE, 0, 0, 0x1036, AUTO, "PreviewImageStart", &stdInterpreter},
|
||||||
{1, 1, 0, 0, 0x1037, "PreviewImageLength", &stdInterpreter},
|
{1, AC_WRITE, 0, 0, 0x1037, AUTO, "PreviewImageLength", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1038, "AFResult", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1038, AUTO, "AFResult", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x1039, "CCDScanMode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x1039, AUTO, "CCDScanMode", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x103a, "NoiseReduction", &olOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x103a, AUTO, "NoiseReduction", &olOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x103b, "InfinityLensStep", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x103b, AUTO, "InfinityLensStep", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x103c, "NearLensStep", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x103c, AUTO, "NearLensStep", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x103d, "LightValueCenter", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x103d, AUTO, "LightValueCenter", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x103e, "LightValuePeriphery", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x103e, AUTO, "LightValuePeriphery", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x103f, "FieldCount", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x103f, AUTO, "FieldCount", &stdInterpreter},
|
||||||
{0, 1, 0, olyEquipmentAttribs, 0x2010, "Equipment", &stdInterpreter},
|
{0, AC_WRITE, 0, olyEquipmentAttribs, 0x2010, AUTO, "Equipment", &stdInterpreter},
|
||||||
{0, 1, 0, olyCameraSettingsAttribs, 0x2020, "CameraSettings", &stdInterpreter},
|
{0, AC_WRITE, 0, olyCameraSettingsAttribs, 0x2020, AUTO, "CameraSettings", &stdInterpreter},
|
||||||
{0, 1, 0, olyRawDevelopmentAttribs, 0x2030, "RawDevelopment", &stdInterpreter},
|
{0, AC_WRITE, 0, olyRawDevelopmentAttribs, 0x2030, AUTO, "RawDevelopment", &stdInterpreter},
|
||||||
{0, 1, 0, olyRawDevelopment2Attribs, 0x2031, "RawDev2", &stdInterpreter},
|
{0, AC_WRITE, 0, olyRawDevelopment2Attribs, 0x2031, AUTO, "RawDev2", &stdInterpreter},
|
||||||
{0, 1, 0, olyImageProcessingAttribs, 0x2040, "ImageProcessing", &stdInterpreter},
|
{0, AC_WRITE, 0, olyImageProcessingAttribs, 0x2040, AUTO, "ImageProcessing", &stdInterpreter},
|
||||||
{0, 1, 0, olyFocusInfoAttribs, 0x2050, "FocusInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, olyFocusInfoAttribs, 0x2050, AUTO, "FocusInfo", &stdInterpreter},
|
||||||
{1, 1, 0, 0, 0x2100, "Olympus2100", &stdInterpreter},
|
{1, AC_WRITE, 0, 0, 0x2100, AUTO, "Olympus2100", &stdInterpreter},
|
||||||
{1, 1, 0, 0, 0x2300, "Olympus2300", &stdInterpreter},
|
{1, AC_WRITE, 0, 0, 0x2300, AUTO, "Olympus2300", &stdInterpreter},
|
||||||
{1, 1, 0, 0, 0x2400, "Olympus2400", &stdInterpreter},
|
{1, AC_WRITE, 0, 0, 0x2400, AUTO, "Olympus2400", &stdInterpreter},
|
||||||
{1, 1, 0, 0, 0x2500, "Olympus2500", &stdInterpreter},
|
{1, AC_WRITE, 0, 0, 0x2500, AUTO, "Olympus2500", &stdInterpreter},
|
||||||
{1, 1, 0, 0, 0x2600, "Olympus2600", &stdInterpreter},
|
{1, AC_WRITE, 0, 0, 0x2600, AUTO, "Olympus2600", &stdInterpreter},
|
||||||
{1, 1, 0, 0, 0x2700, "Olympus2700", &stdInterpreter},
|
{1, AC_WRITE, 0, 0, 0x2700, AUTO, "Olympus2700", &stdInterpreter},
|
||||||
{1, 1, 0, 0, 0x2800, "Olympus2800", &stdInterpreter},
|
{1, AC_WRITE, 0, 0, 0x2800, AUTO, "Olympus2800", &stdInterpreter},
|
||||||
{1, 1, 0, 0, 0x2900, "Olympus2900", &stdInterpreter},
|
{1, AC_WRITE, 0, 0, 0x2900, AUTO, "Olympus2900", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x3000, "RawInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x3000, AUTO, "RawInfo", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
#include <cstring> /* memcpy() */
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
@ -204,9 +205,27 @@ class PAISOInterpreter : public ChoiceInterpreter {
|
|||||||
choices[19] = "2000";
|
choices[19] = "2000";
|
||||||
choices[20] = "2500";
|
choices[20] = "2500";
|
||||||
choices[21] = "3200";
|
choices[21] = "3200";
|
||||||
|
choices[22] = "4000";
|
||||||
|
choices[23] = "5000";
|
||||||
|
choices[24] = "6400";
|
||||||
|
choices[25] = "8000";
|
||||||
|
choices[26] = "10000";
|
||||||
|
choices[27] = "12800";
|
||||||
|
choices[28] = "16000";
|
||||||
|
choices[29] = "20000";
|
||||||
|
choices[30] = "25600";
|
||||||
|
choices[31] = "32000";
|
||||||
|
choices[32] = "40000";
|
||||||
|
choices[33] = "51200";
|
||||||
|
|
||||||
choices[50] = "50";
|
choices[50] = "50";
|
||||||
choices[100] = "100";
|
choices[100] = "100";
|
||||||
choices[200] = "200";
|
choices[200] = "200";
|
||||||
|
/*choices[400] = "400";
|
||||||
|
choices[800] = "800";
|
||||||
|
choices[1600] = "1600";
|
||||||
|
choices[3200] = "3200"; Moved to tail for sorting reasons */
|
||||||
|
|
||||||
choices[258] = "50";
|
choices[258] = "50";
|
||||||
choices[259] = "70";
|
choices[259] = "70";
|
||||||
choices[260] = "100";
|
choices[260] = "100";
|
||||||
@ -220,10 +239,22 @@ class PAISOInterpreter : public ChoiceInterpreter {
|
|||||||
choices[268] = "1600";
|
choices[268] = "1600";
|
||||||
choices[269] = "2200";
|
choices[269] = "2200";
|
||||||
choices[270] = "3200";
|
choices[270] = "3200";
|
||||||
|
choices[271] = "4500";
|
||||||
|
choices[272] = "6400";
|
||||||
|
choices[273] = "9000";
|
||||||
|
choices[274] = "12800";
|
||||||
|
choices[275] = "18000";
|
||||||
|
choices[276] = "25600";
|
||||||
|
choices[277] = "36000";
|
||||||
|
choices[278] = "51200";
|
||||||
|
|
||||||
choices[400] = "400";
|
choices[400] = "400";
|
||||||
choices[800] = "800";
|
choices[800] = "800";
|
||||||
choices[1600] = "1600";
|
choices[1600] = "1600";
|
||||||
choices[3200] = "3200";
|
choices[3200] = "3200";
|
||||||
|
|
||||||
|
//choices[65534] = "Auto"; ??
|
||||||
|
//choices[65535] = "Auto"; ??
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
PAISOInterpreter paISOInterpreter;
|
PAISOInterpreter paISOInterpreter;
|
||||||
@ -448,10 +479,10 @@ PAColorSpaceInterpreter paColorSpaceInterpreter;
|
|||||||
|
|
||||||
class PALensTypeInterpreter : public IntLensInterpreter< int > {
|
class PALensTypeInterpreter : public IntLensInterpreter< int > {
|
||||||
public:
|
public:
|
||||||
PALensTypeInterpreter () {
|
PALensTypeInterpreter () { // From EXIFTOOL database 'Pentax.pm' V2.65
|
||||||
choices.insert(p_t( 0,"M-42 or No Lens"));
|
choices.insert(p_t( 0+ 0, "M-42 or No Lens"));
|
||||||
choices.insert(p_t(256*1, "K,M Lens"));
|
choices.insert(p_t(256*1+ 0, "K,M Lens"));
|
||||||
choices.insert(p_t(256*2, "A Series Lens"));
|
choices.insert(p_t(256*2+ 0, "A Series Lens"));
|
||||||
choices.insert(p_t(256*3+ 0, "Sigma Lens"));
|
choices.insert(p_t(256*3+ 0, "Sigma Lens"));
|
||||||
choices.insert(p_t(256*3+ 17, "smc PENTAX-FA SOFT 85mm f/2.8"));
|
choices.insert(p_t(256*3+ 17, "smc PENTAX-FA SOFT 85mm f/2.8"));
|
||||||
choices.insert(p_t(256*3+ 18, "smc PENTAX-F 1.7X AF ADAPTER"));
|
choices.insert(p_t(256*3+ 18, "smc PENTAX-F 1.7X AF ADAPTER"));
|
||||||
@ -466,14 +497,14 @@ class PALensTypeInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(256*3+ 25, "smc PENTAX-F 35-105mm f/4-5.6"));
|
choices.insert(p_t(256*3+ 25, "smc PENTAX-F 35-105mm f/4-5.6"));
|
||||||
choices.insert(p_t(256*3+ 25, "Sigma AF 28-300mm f/3.5-5.6 DL IF"));
|
choices.insert(p_t(256*3+ 25, "Sigma AF 28-300mm f/3.5-5.6 DL IF"));
|
||||||
choices.insert(p_t(256*3+ 25, "Sigma 55-200mm f/4-5.6 DC"));
|
choices.insert(p_t(256*3+ 25, "Sigma 55-200mm f/4-5.6 DC"));
|
||||||
choices.insert(p_t(256*3+ 25, "Sigma AF 28-300mm f/3.5-5.6 DL IF"));
|
|
||||||
choices.insert(p_t(256*3+ 25, "Sigma AF 28-300mm f/3.5-6.3 DG IF Macro"));
|
choices.insert(p_t(256*3+ 25, "Sigma AF 28-300mm f/3.5-6.3 DG IF Macro"));
|
||||||
choices.insert(p_t(256*3+ 25, "Tokina 80-200mm f/2.8 ATX-Pro"));
|
choices.insert(p_t(256*3+ 25, "Tokina 80-200mm f/2.8 ATX-Pro"));
|
||||||
choices.insert(p_t(256*3+ 26, "smc PENTAX-F* 250-600mm f/5.6 ED[IF]"));
|
choices.insert(p_t(256*3+ 26, "smc PENTAX-F* 250-600mm f/5.6 ED[IF]"));
|
||||||
choices.insert(p_t(256*3+ 27, "smc PENTAX-F 28-80mm f/3.5-4.5"));
|
choices.insert(p_t(256*3+ 27, "smc PENTAX-F 28-80mm f/3.5-4.5"));
|
||||||
choices.insert(p_t(256*3+ 27, "Tokina AT-X PRO AF 28-70mm f/2.6-2.8"));
|
choices.insert(p_t(256*3+ 27, "Tokina AT-X Pro AF 28-70mm f/2.6-2.8"));
|
||||||
choices.insert(p_t(256*3+ 28, "smc PENTAX-F 35-70mm f/3.5-4.5"));
|
choices.insert(p_t(256*3+ 28, "smc PENTAX-F 35-70mm f/3.5-4.5"));
|
||||||
choices.insert(p_t(256*3+ 28, "Tokina 19-35mm f/3.5-4.5 AF"));
|
choices.insert(p_t(256*3+ 28, "Tokina 19-35mm f/3.5-4.5 AF"));
|
||||||
|
choices.insert(p_t(256*3+ 28, "Tokina AT-X AF 400mm f/5.6"));
|
||||||
choices.insert(p_t(256*3+ 29, "PENTAX-F 28-80mm f/3.5-4.5"));
|
choices.insert(p_t(256*3+ 29, "PENTAX-F 28-80mm f/3.5-4.5"));
|
||||||
choices.insert(p_t(256*3+ 29, "Sigma AF 18-125mm f/3.5-5.6 DC"));
|
choices.insert(p_t(256*3+ 29, "Sigma AF 18-125mm f/3.5-5.6 DC"));
|
||||||
choices.insert(p_t(256*3+ 29, "Tokina AT-X PRO 28-70mm f/2.6-2.8"));
|
choices.insert(p_t(256*3+ 29, "Tokina AT-X PRO 28-70mm f/2.6-2.8"));
|
||||||
@ -485,21 +516,22 @@ class PALensTypeInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(256*3+ 33, "smc PENTAX-F 50mm f/1.7"));
|
choices.insert(p_t(256*3+ 33, "smc PENTAX-F 50mm f/1.7"));
|
||||||
choices.insert(p_t(256*3+ 34, "smc PENTAX-F 135mm f/2.8 [IF]"));
|
choices.insert(p_t(256*3+ 34, "smc PENTAX-F 135mm f/2.8 [IF]"));
|
||||||
choices.insert(p_t(256*3+ 35, "smc PENTAX-F 28mm f/2.8"));
|
choices.insert(p_t(256*3+ 35, "smc PENTAX-F 28mm f/2.8"));
|
||||||
choices.insert(p_t(256*3+ 36, "Sigma 20mm f/1.8 EX DG ASPHERICAL RF"));
|
choices.insert(p_t(256*3+ 36, "Sigma 20mm f/1.8 EX DG Aspherical RF"));
|
||||||
choices.insert(p_t(256*3+ 38, "smc PENTAX-F* 300mm f/4.5 ED[IF]"));
|
choices.insert(p_t(256*3+ 38, "smc PENTAX-F* 300mm f/4.5 ED[IF]"));
|
||||||
choices.insert(p_t(256*3+ 39, "smc PENTAX-F* 600mm f/4 ED[IF]"));
|
choices.insert(p_t(256*3+ 39, "smc PENTAX-F* 600mm f/4 ED[IF]"));
|
||||||
choices.insert(p_t(256*3+ 40, "smc PENTAX-F MACRO 100mm f/2.8"));
|
choices.insert(p_t(256*3+ 40, "smc PENTAX-F Macro 100mm f/2.8"));
|
||||||
choices.insert(p_t(256*3+ 41, "smc PENTAX-F MACRO 50mm f/2.8"));
|
choices.insert(p_t(256*3+ 41, "smc PENTAX-F Macro 50mm f/2.8"));
|
||||||
choices.insert(p_t(256*3+ 41, "Sigma 50mm f/2.8 Macro"));
|
choices.insert(p_t(256*3+ 41, "Sigma 50mm f/2.8 Macro"));
|
||||||
choices.insert(p_t(256*3+ 44, "Sigma AF 10-20mm f/4-5.6 EX DC"));
|
choices.insert(p_t(256*3+ 44, "Sigma AF 10-20mm f/4-5.6 EX DC"));
|
||||||
choices.insert(p_t(256*3+ 44, "Sigma 12-24mm f/4.5 EX DG"));
|
choices.insert(p_t(256*3+ 44, "Sigma 12-24mm f/4.5-5.6 EX DG"));
|
||||||
choices.insert(p_t(256*3+ 44, "Sigma 17-70mm f/2.8-4.5 DC Macro"));
|
choices.insert(p_t(256*3+ 44, "Sigma 17-70mm f/2.8-4.5 DC Macro"));
|
||||||
choices.insert(p_t(256*3+ 44, "Sigma 18-50mm f/3.5-5.6 DC"));
|
choices.insert(p_t(256*3+ 44, "Sigma 18-50mm f/3.5-5.6 DC"));
|
||||||
choices.insert(p_t(256*3+ 44, "Tamron 35-90mm f/4 AF"));
|
choices.insert(p_t(256*3+ 44, "Tamron 35-90mm f/4 AF"));
|
||||||
choices.insert(p_t(256*3+ 46, "Sigma APO 70-200mm f/2.8 EX"));
|
choices.insert(p_t(256*3+ 46, "Sigma APO 70-200mm f/2.8 EX"));
|
||||||
choices.insert(p_t(256*3+ 46, "Sigma EX APO 100-300mm f/4 IF"));
|
choices.insert(p_t(256*3+ 46, "Sigma EX APO 100-300mm f/4 IF"));
|
||||||
choices.insert(p_t(256*3+ 50, "smc PENTAX-FA 28-70 f/4 AL"));
|
choices.insert(p_t(256*3+ 46, "Samsung/Schneider D-XENON 50-200mm f/4-5.6 ED"));
|
||||||
choices.insert(p_t(256*3+ 51, "Sigma 28mm f/1.8 EX DG ASPHERICAL MACRO"));
|
choices.insert(p_t(256*3+ 50, "smc PENTAX-FA 28-70mm f/4 AL"));
|
||||||
|
choices.insert(p_t(256*3+ 51, "Sigma 28mm f/1.8 EX DG Aspherical Macro"));
|
||||||
choices.insert(p_t(256*3+ 52, "smc PENTAX-FA 28-200mm f/3.8-5.6 AL[IF]"));
|
choices.insert(p_t(256*3+ 52, "smc PENTAX-FA 28-200mm f/3.8-5.6 AL[IF]"));
|
||||||
choices.insert(p_t(256*3+ 52, "Tamron AF LD 28-200mm f/3.8-5.6 [IF] Aspherical (171D)"));
|
choices.insert(p_t(256*3+ 52, "Tamron AF LD 28-200mm f/3.8-5.6 [IF] Aspherical (171D)"));
|
||||||
choices.insert(p_t(256*3+ 53, "smc PENTAX-FA 28-80mm f/3.5-5.6 AL"));
|
choices.insert(p_t(256*3+ 53, "smc PENTAX-FA 28-80mm f/3.5-5.6 AL"));
|
||||||
@ -510,15 +542,15 @@ class PALensTypeInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(256*3+ 252,"smc PENTAX-DA 18-55mm f/3.5-5.6 AL"));
|
choices.insert(p_t(256*3+ 252,"smc PENTAX-DA 18-55mm f/3.5-5.6 AL"));
|
||||||
choices.insert(p_t(256*3+ 253,"smc PENTAX-DA 14mm f/2.8 ED[IF]"));
|
choices.insert(p_t(256*3+ 253,"smc PENTAX-DA 14mm f/2.8 ED[IF]"));
|
||||||
choices.insert(p_t(256*3+ 254,"smc PENTAX-DA 16-45mm f/4 ED AL"));
|
choices.insert(p_t(256*3+ 254,"smc PENTAX-DA 16-45mm f/4 ED AL"));
|
||||||
choices.insert(p_t(256*3+ 255, "Sigma 18-200mm f/3.5-6.3 DC"));
|
choices.insert(p_t(256*3+ 255,"Sigma 18-200mm f/3.5-6.3 DC"));
|
||||||
choices.insert(p_t(256*3+ 255, "Sigma DL-II 35-80mm f/4-5.6"));
|
choices.insert(p_t(256*3+ 255,"Sigma DL-II 35-80mm f/4-5.6"));
|
||||||
choices.insert(p_t(256*3+ 255, "Sigma DL Zoom 75-300mm f/4-5.6"));
|
choices.insert(p_t(256*3+ 255,"Sigma DL Zoom 75-300mm f/4-5.6"));
|
||||||
choices.insert(p_t(256*3+ 255, "Sigma DF EX Aspherical 28-70mm f/2.8"));
|
choices.insert(p_t(256*3+ 255,"Sigma DF EX Aspherical 28-70mm f/2.8"));
|
||||||
choices.insert(p_t(256*3+ 255, "Sigma AF Tele 400mm f/5.6 Multi-coated"));
|
choices.insert(p_t(256*3+ 255,"Sigma AF Tele 400mm f/5.6 Multi-coated"));
|
||||||
choices.insert(p_t(256*3+ 255, "Sigma 24-60mm f/2.8 EX DG"));
|
choices.insert(p_t(256*3+ 255,"Sigma 24-60mm f/2.8 EX DG"));
|
||||||
choices.insert(p_t(256*3+ 255, "Sigma 70-300mm f/4-5.6 Macro"));
|
choices.insert(p_t(256*3+ 255,"Sigma 70-300mm f/4-5.6 Macro"));
|
||||||
choices.insert(p_t(256*3+ 255, "Sigma 55-200mm f/4-5.6 DC"));
|
choices.insert(p_t(256*3+ 255,"Sigma 55-200mm f/4-5.6 DC"));
|
||||||
choices.insert(p_t(256*3+ 255, "Sigma 18-50mm f/2.8 EX DC"));
|
choices.insert(p_t(256*3+ 255,"Sigma 18-50mm f/2.8 EX DC"));
|
||||||
choices.insert(p_t(256*4+ 1, "smc PENTAX-FA SOFT 28mm f/2.8"));
|
choices.insert(p_t(256*4+ 1, "smc PENTAX-FA SOFT 28mm f/2.8"));
|
||||||
choices.insert(p_t(256*4+ 2, "smc PENTAX-FA 80-320mm f/4.5-5.6"));
|
choices.insert(p_t(256*4+ 2, "smc PENTAX-FA 80-320mm f/4.5-5.6"));
|
||||||
choices.insert(p_t(256*4+ 3, "smc PENTAX-FA 43mm f/1.9 Limited"));
|
choices.insert(p_t(256*4+ 3, "smc PENTAX-FA 43mm f/1.9 Limited"));
|
||||||
@ -529,22 +561,22 @@ class PALensTypeInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(256*4+ 19, "Tamron SP AF 90mm f/2.8 (172E)"));
|
choices.insert(p_t(256*4+ 19, "Tamron SP AF 90mm f/2.8 (172E)"));
|
||||||
choices.insert(p_t(256*4+ 20, "smc PENTAX-FA 28-80mm f/3.5-5.6"));
|
choices.insert(p_t(256*4+ 20, "smc PENTAX-FA 28-80mm f/3.5-5.6"));
|
||||||
choices.insert(p_t(256*4+ 21, "Cosina AF 100-300mm f/5.6-6.7"));
|
choices.insert(p_t(256*4+ 21, "Cosina AF 100-300mm f/5.6-6.7"));
|
||||||
choices.insert(p_t(256*4+ 22, "TOKINA 28-80mm f/3.5-5.6"));
|
choices.insert(p_t(256*4+ 22, "Tokina 28-80mm f/3.5-5.6"));
|
||||||
choices.insert(p_t(256*4+ 23, "smc PENTAX-FA 20-35mm f/4 AL"));
|
choices.insert(p_t(256*4+ 23, "smc PENTAX-FA 20-35mm f/4 AL"));
|
||||||
choices.insert(p_t(256*4+ 24, "smc PENTAX-FA 77mm f/1.8 Limited"));
|
choices.insert(p_t(256*4+ 24, "smc PENTAX-FA 77mm f/1.8 Limited"));
|
||||||
choices.insert(p_t(256*4+ 25, "Tamron SP AF 14mm f/2.8"));
|
choices.insert(p_t(256*4+ 25, "Tamron SP AF 14mm f/2.8"));
|
||||||
choices.insert(p_t(256*4+ 26, "smc PENTAX-FA MACRO 100mm f/3.5"));
|
choices.insert(p_t(256*4+ 26, "smc PENTAX-FA Macro 100mm f/3.5"));
|
||||||
choices.insert(p_t(256*4+ 26, "Cosina 100mm f/3.5 Macro"));
|
choices.insert(p_t(256*4+ 26, "Cosina 100mm f/3.5 Macro"));
|
||||||
choices.insert(p_t(256*4+ 27, "Tamron AF 28-300mm f/3.5-6.3 LD Aspherical[IF] MACRO (285D)"));
|
choices.insert(p_t(256*4+ 27, "Tamron AF 28-300mm f/3.5-6.3 LD Aspherical[IF] Macro (185D/285D)"));
|
||||||
choices.insert(p_t(256*4+ 28, "smc PENTAX-FA 35mm f/2 AL"));
|
choices.insert(p_t(256*4+ 28, "smc PENTAX-FA 35mm f/2 AL"));
|
||||||
choices.insert(p_t(256*4+ 29, "Tamron AF 28-200mm f/3.8-5.6 LD Super II MACRO (371D)"));
|
choices.insert(p_t(256*4+ 29, "Tamron AF 28-200mm f/3.8-5.6 LD Super II Macro (371D)"));
|
||||||
choices.insert(p_t(256*4+ 34, "smc PENTAX-FA 24-90mm f/3.5-4.5 AL[IF]"));
|
choices.insert(p_t(256*4+ 34, "smc PENTAX-FA 24-90mm f/3.5-4.5 AL[IF]"));
|
||||||
choices.insert(p_t(256*4+ 35, "smc PENTAX-FA 100-300mm f/4.7-5.8"));
|
choices.insert(p_t(256*4+ 35, "smc PENTAX-FA 100-300mm f/4.7-5.8"));
|
||||||
choices.insert(p_t(256*4+ 36, "Tamron AF 70-300mm f/4-5.6 LD MACRO"));
|
choices.insert(p_t(256*4+ 36, "Tamron AF70-300mm f/4-5.6 LD Macro"));
|
||||||
choices.insert(p_t(256*4+ 37, "Tamron SP AF 24-135mm f/3.5-5.6 AD AL (190D)"));
|
choices.insert(p_t(256*4+ 37, "Tamron SP AF 24-135mm f/3.5-5.6 AD AL (190D)"));
|
||||||
choices.insert(p_t(256*4+ 38, "smc PENTAX-FA 28-105mm f/3.2-4.5 AL[IF]"));
|
choices.insert(p_t(256*4+ 38, "smc PENTAX-FA 28-105mm f/3.2-4.5 AL[IF]"));
|
||||||
choices.insert(p_t(256*4+ 39, "smc PENTAX-FA 31mm f/1.8 AL Limited"));
|
choices.insert(p_t(256*4+ 39, "smc PENTAX-FA 31mm f/1.8 AL Limited"));
|
||||||
choices.insert(p_t(256*4+ 41, "Tamron AF 28-200mm Super Zoom f/3.8-5.6 Aspherical XR [IF] MACRO (A03)"));
|
choices.insert(p_t(256*4+ 41, "Tamron AF 28-200mm Super Zoom f/3.8-5.6 Aspherical XR [IF] Macro (A03)"));
|
||||||
choices.insert(p_t(256*4+ 43, "smc PENTAX-FA 28-90mm f/3.5-5.6"));
|
choices.insert(p_t(256*4+ 43, "smc PENTAX-FA 28-90mm f/3.5-5.6"));
|
||||||
choices.insert(p_t(256*4+ 44, "smc PENTAX-FA J 75-300mm f/4.5-5.8 AL"));
|
choices.insert(p_t(256*4+ 44, "smc PENTAX-FA J 75-300mm f/4.5-5.8 AL"));
|
||||||
choices.insert(p_t(256*4+ 45, "Tamron 28-300mm f/3.5-6.3 Ultra zoom XR"));
|
choices.insert(p_t(256*4+ 45, "Tamron 28-300mm f/3.5-6.3 Ultra zoom XR"));
|
||||||
@ -552,18 +584,22 @@ class PALensTypeInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(256*4+ 46, "smc PENTAX-FA J 28-80mm f/3.5-5.6 AL"));
|
choices.insert(p_t(256*4+ 46, "smc PENTAX-FA J 28-80mm f/3.5-5.6 AL"));
|
||||||
choices.insert(p_t(256*4+ 47, "smc PENTAX-FA J 18-35mm f/4-5.6 AL"));
|
choices.insert(p_t(256*4+ 47, "smc PENTAX-FA J 18-35mm f/4-5.6 AL"));
|
||||||
choices.insert(p_t(256*4+ 49, "Tamron SP AF 28-75mm f/2.8 XR Di (A09)"));
|
choices.insert(p_t(256*4+ 49, "Tamron SP AF 28-75mm f/2.8 XR Di (A09)"));
|
||||||
choices.insert(p_t(256*4+ 51, "smc PENTAX-D FA 50mm f/2.8 MACRO"));
|
choices.insert(p_t(256*4+ 51, "smc PENTAX-D FA 50mm f/2.8 Macro"));
|
||||||
choices.insert(p_t(256*4+ 52, "smc PENTAX-D FA 100mm f/2.8 MACRO"));
|
choices.insert(p_t(256*4+ 52, "smc PENTAX-D FA 100mm f/2.8 Macro"));
|
||||||
choices.insert(p_t(256*4+ 75, "Tamron SP AF 70-200 f/2.8 Di LD [IF] Macro (A001)"));
|
choices.insert(p_t(256*4+ 55, "Samsung/Schneider D-XENOGON 35mm f/2"));
|
||||||
|
choices.insert(p_t(256*4+ 56, "Samsung/Schneider D-XENON 100mm f/2.8 Macro"));
|
||||||
|
choices.insert(p_t(256*4+ 75, "Tamron SP AF 70-200mm f/2.8 Di LD [IF] Macro (A001)"));
|
||||||
|
choices.insert(p_t(256*4+ 214, "smc PENTAX-DA 35mm f/2.4 AL"));
|
||||||
choices.insert(p_t(256*4+ 229, "smc PENTAX-DA 18-55mm f/3.5-5.6 AL II"));
|
choices.insert(p_t(256*4+ 229, "smc PENTAX-DA 18-55mm f/3.5-5.6 AL II"));
|
||||||
choices.insert(p_t(256*4+ 230, "Tamron SP AF 17-50mm f/2.8 XR Di II"));
|
choices.insert(p_t(256*4+ 230, "Tamron SP AF 17-50mm f/2.8 XR Di II"));
|
||||||
choices.insert(p_t(256*4+ 231, "smc PENTAX-DA 18-250mm f/3.5-6.3 ED AL [IF]"));
|
choices.insert(p_t(256*4+ 231, "smc PENTAX-DA 18-250mm f/3.5-6.3 ED AL [IF]"));
|
||||||
choices.insert(p_t(256*4+ 237, "Samsung/Schneider D-XENOGON 10-17mm f/3.5-4.5"));
|
choices.insert(p_t(256*4+ 237, "Samsung/Schneider D-XENOGON 10-17mm f/3.5-4.5"));
|
||||||
choices.insert(p_t(256*4+ 239, "Samsung D-XENON 12-24mm f/4 ED AL [IF]"));
|
choices.insert(p_t(256*4+ 239, "Samsung/Schneider D-XENON 12-24mm f/4 ED AL [IF]"));
|
||||||
|
choices.insert(p_t(256*4+ 242, "smc PENTAX-DA* 16-50mm f/2.8 ED AL [IF] SDM (SDM unused)"));
|
||||||
choices.insert(p_t(256*4+ 243, "smc PENTAX-DA 70mm f/2.4 Limited"));
|
choices.insert(p_t(256*4+ 243, "smc PENTAX-DA 70mm f/2.4 Limited"));
|
||||||
choices.insert(p_t(256*4+ 244, "smc PENTAX-DA 21mm f/3.2 AL Limited"));
|
choices.insert(p_t(256*4+ 244, "smc PENTAX-DA 21mm f/3.2 AL Limited"));
|
||||||
choices.insert(p_t(256*4+ 245, "Schneider D-XENON 50-200mm"));
|
choices.insert(p_t(256*4+ 245, "Samsung/Schneider D-XENON 50-200mm f/4-5.6"));
|
||||||
choices.insert(p_t(256*4+ 246, "Schneider D-XENON 18-55mm"));
|
choices.insert(p_t(256*4+ 246, "Samsung/Schneider D-XENON 18-55mm f/3.5-5.6"));
|
||||||
choices.insert(p_t(256*4+ 247, "smc PENTAX-DA 10-17mm f/3.5-4.5 ED [IF] Fisheye zoom"));
|
choices.insert(p_t(256*4+ 247, "smc PENTAX-DA 10-17mm f/3.5-4.5 ED [IF] Fisheye zoom"));
|
||||||
choices.insert(p_t(256*4+ 248, "smc PENTAX-DA 12-24mm f/4 ED AL [IF]"));
|
choices.insert(p_t(256*4+ 248, "smc PENTAX-DA 12-24mm f/4 ED AL [IF]"));
|
||||||
choices.insert(p_t(256*4+ 249, "Tamron 18-200mm f/3.5-6.3 XR DiII (A14)"));
|
choices.insert(p_t(256*4+ 249, "Tamron 18-200mm f/3.5-6.3 XR DiII (A14)"));
|
||||||
@ -579,8 +615,8 @@ class PALensTypeInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(256*5+ 5, "smc PENTAX-FA* 600mm f/4 ED[IF]"));
|
choices.insert(p_t(256*5+ 5, "smc PENTAX-FA* 600mm f/4 ED[IF]"));
|
||||||
choices.insert(p_t(256*5+ 6, "smc PENTAX-FA* 300mm f/4.5 ED[IF]"));
|
choices.insert(p_t(256*5+ 6, "smc PENTAX-FA* 300mm f/4.5 ED[IF]"));
|
||||||
choices.insert(p_t(256*5+ 7, "smc PENTAX-FA 135mm f/2.8 [IF]"));
|
choices.insert(p_t(256*5+ 7, "smc PENTAX-FA 135mm f/2.8 [IF]"));
|
||||||
choices.insert(p_t(256*5+ 8, "smc PENTAX-FA MACRO 50mm f/2.8"));
|
choices.insert(p_t(256*5+ 8, "smc PENTAX-FA Macro 50mm f/2.8"));
|
||||||
choices.insert(p_t(256*5+ 9, "smc PENTAX-FA MACRO 100mm f/2.8"));
|
choices.insert(p_t(256*5+ 9, "smc PENTAX-FA Macro 100mm f/2.8"));
|
||||||
choices.insert(p_t(256*5+ 10, "smc PENTAX-FA* 85mm f/1.4 [IF]"));
|
choices.insert(p_t(256*5+ 10, "smc PENTAX-FA* 85mm f/1.4 [IF]"));
|
||||||
choices.insert(p_t(256*5+ 11, "smc PENTAX-FA* 200mm f/2.8 ED[IF]"));
|
choices.insert(p_t(256*5+ 11, "smc PENTAX-FA* 200mm f/2.8 ED[IF]"));
|
||||||
choices.insert(p_t(256*5+ 12, "smc PENTAX-FA 28-80mm f/3.5-4.7"));
|
choices.insert(p_t(256*5+ 12, "smc PENTAX-FA 28-80mm f/3.5-4.7"));
|
||||||
@ -600,21 +636,31 @@ class PALensTypeInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(256*6+ 9, "smc PENTAX-FA 20mm f/2.8"));
|
choices.insert(p_t(256*6+ 9, "smc PENTAX-FA 20mm f/2.8"));
|
||||||
choices.insert(p_t(256*6+ 10, "smc PENTAX-FA* 400mm f/5.6 ED[IF]"));
|
choices.insert(p_t(256*6+ 10, "smc PENTAX-FA* 400mm f/5.6 ED[IF]"));
|
||||||
choices.insert(p_t(256*6+ 13, "smc PENTAX-FA* 400mm f/5.6 ED[IF]"));
|
choices.insert(p_t(256*6+ 13, "smc PENTAX-FA* 400mm f/5.6 ED[IF]"));
|
||||||
choices.insert(p_t(256*6+ 14, "smc PENTAX-FA* MACRO 200mm f/4 ED[IF]"));
|
choices.insert(p_t(256*6+ 14, "smc PENTAX-FA* Macro 200mm f/4 ED[IF]"));
|
||||||
choices.insert(p_t(256*7+ 0, "smc PENTAX-DA 21mm f/3.2 AL Limited"));
|
choices.insert(p_t(256*7+ 0, "smc PENTAX-DA 21mm f/3.2 AL Limited"));
|
||||||
choices.insert(p_t(256*7+ 58, "smc PENTAX-D FA MACRO 100mm f/2.8 WR"));
|
choices.insert(p_t(256*7+ 58, "smc PENTAX-D FA Macro 100mm f/2.8 WR"));
|
||||||
choices.insert(p_t(256*7+ 75, "Tamron SP AF 70-200mm f/2.8 Di LD [IF] Macro (A001)"));
|
choices.insert(p_t(256*7+ 75, "Tamron SP AF 70-200mm f/2.8 Di LD [IF] Macro (A001)"));
|
||||||
|
choices.insert(p_t(256*7+ 202, "smc PENTAX-DA L 18-55mm f/3.5-5.6 AL WR"));
|
||||||
|
choices.insert(p_t(256*7+ 204, "HD PENTAX-DA 15mm f/4 ED AL Limited"));
|
||||||
|
choices.insert(p_t(256*7+ 205, "HD PENTAX-DA 35mm f/2.8 Macro Limited"));
|
||||||
|
choices.insert(p_t(256*7+ 206, "HD PENTAX-DA 70mm f/2.4 Limited"));
|
||||||
|
choices.insert(p_t(256*7+ 207, "HD PENTAX-DA 21mm f/3.2 ED AL Limited"));
|
||||||
|
choices.insert(p_t(256*7+ 208, "HD PENTAX-DA 40mm f/2.8 Limited"));
|
||||||
|
choices.insert(p_t(256*7+ 212, "smc PENTAX-DA 50mm f/1.8"));
|
||||||
|
choices.insert(p_t(256*7+ 213, "smc PENTAX-DA 40mm f/2.8 XS"));
|
||||||
choices.insert(p_t(256*7+ 214, "smc PENTAX-DA 35mm f/2.4 AL"));
|
choices.insert(p_t(256*7+ 214, "smc PENTAX-DA 35mm f/2.4 AL"));
|
||||||
choices.insert(p_t(256*7+ 216, "smc PENTAX-DA L 55-300mm f/4-5.8 ED"));
|
choices.insert(p_t(256*7+ 216, "smc PENTAX-DA L 55-300mm f/4-5.8 ED"));
|
||||||
choices.insert(p_t(256*7+ 217, "smc PENTAX-DA 50-200mm f/4-5.6 ED WR"));
|
choices.insert(p_t(256*7+ 217, "smc PENTAX-DA 50-200mm f/4-5.6 ED WR"));
|
||||||
choices.insert(p_t(256*7+ 218, "smc PENTAX-DA 18-55mm f/3.5-5.6 AL WR"));
|
choices.insert(p_t(256*7+ 218, "smc PENTAX-DA 18-55mm f/3.5-5.6 AL WR"));
|
||||||
choices.insert(p_t(256*7+ 220, "Tamron SP AF 10-24mm f/3.5-4.5 Di II LD Aspherical [IF]"));
|
choices.insert(p_t(256*7+ 220, "Tamron SP AF 10-24mm f/3.5-4.5 Di II LD Aspherical [IF]"));
|
||||||
choices.insert(p_t(256*7+ 222, "smc PENTAX-DA 18-55mm f/3.5-5.6 AL II"));
|
choices.insert(p_t(256*7+ 221, "smc PENTAX-DA L 50-200mm f/4-5.6 ED"));
|
||||||
choices.insert(p_t(256*7+ 223, "Samsung D-XENON 18-55mm f/3.5-5.6 II"));
|
choices.insert(p_t(256*7+ 222, "smc PENTAX-DA L 18-55mm f/3.5-5.6"));
|
||||||
|
choices.insert(p_t(256*7+ 223, "Samsung/Schneider D-XENON 18-55mm f/3.5-5.6 II"));
|
||||||
choices.insert(p_t(256*7+ 224, "smc PENTAX-DA 15mm f/4 ED AL Limited"));
|
choices.insert(p_t(256*7+ 224, "smc PENTAX-DA 15mm f/4 ED AL Limited"));
|
||||||
choices.insert(p_t(256*7+ 225, "Samsung D-XENON 18-250mm f/3.5-6.3"));
|
choices.insert(p_t(256*7+ 225, "Samsung/Schneider D-XENON 18-250mm f/3.5-6.3"));
|
||||||
choices.insert(p_t(256*7+ 226, "smc PENTAX-DA* 55mm f/1.4 SDM (SDM unused)"));
|
choices.insert(p_t(256*7+ 226, "smc PENTAX-DA* 55mm f/1.4 SDM (SDM unused)"));
|
||||||
choices.insert(p_t(256*7+ 227, "smc PENTAX DA* 60-250mm f/4 [IF] SDM (SDM unused)"));
|
choices.insert(p_t(256*7+ 227, "smc PENTAX-DA* 60-250mm f/4 [IF] SDM (SDM unused)"));
|
||||||
|
choices.insert(p_t(256*7+ 228, "Samsung 16-45mm f/4 ED"));
|
||||||
choices.insert(p_t(256*7+ 229, "smc PENTAX-DA 18-55mm f/3.5-5.6 AL II"));
|
choices.insert(p_t(256*7+ 229, "smc PENTAX-DA 18-55mm f/3.5-5.6 AL II"));
|
||||||
choices.insert(p_t(256*7+ 230, "Tamron AF 17-50mm f/2.8 XR Di-II LD (Model A16)"));
|
choices.insert(p_t(256*7+ 230, "Tamron AF 17-50mm f/2.8 XR Di-II LD (Model A16)"));
|
||||||
choices.insert(p_t(256*7+ 231, "smc PENTAX-DA 18-250mm f/3.5-6.3 ED AL [IF]"));
|
choices.insert(p_t(256*7+ 231, "smc PENTAX-DA 18-250mm f/3.5-6.3 ED AL [IF]"));
|
||||||
@ -622,45 +668,113 @@ class PALensTypeInterpreter : public IntLensInterpreter< int > {
|
|||||||
choices.insert(p_t(256*7+ 234, "smc PENTAX-DA* 300mm f/4 ED [IF] SDM (SDM unused)"));
|
choices.insert(p_t(256*7+ 234, "smc PENTAX-DA* 300mm f/4 ED [IF] SDM (SDM unused)"));
|
||||||
choices.insert(p_t(256*7+ 235, "smc PENTAX-DA* 200mm f/2.8 ED [IF] SDM (SDM unused)"));
|
choices.insert(p_t(256*7+ 235, "smc PENTAX-DA* 200mm f/2.8 ED [IF] SDM (SDM unused)"));
|
||||||
choices.insert(p_t(256*7+ 236, "smc PENTAX-DA 55-300mm f/4-5.8 ED"));
|
choices.insert(p_t(256*7+ 236, "smc PENTAX-DA 55-300mm f/4-5.8 ED"));
|
||||||
choices.insert(p_t(256*7+ 238, "Tamron AF 18-250mm f/3.5-6.3 Di II LD Aspherical [IF] MACRO"));
|
choices.insert(p_t(256*7+ 238, "Tamron AF 18-250mm f/3.5-6.3 Di II LD Aspherical [IF] Macro"));
|
||||||
choices.insert(p_t(256*7+ 241, "smc PENTAX-DA* 50-135mm f/2.8 ED [IF] SDM (SDM unused)"));
|
choices.insert(p_t(256*7+ 241, "smc PENTAX-DA* 50-135mm f/2.8 ED [IF] SDM (SDM unused)"));
|
||||||
choices.insert(p_t(256*7+ 242, "smc PENTAX-DA* 16-50mm f/2.8 ED AL [IF] SDM (SDM unused)"));
|
choices.insert(p_t(256*7+ 242, "smc PENTAX-DA* 16-50mm f/2.8 ED AL [IF] SDM (SDM unused)"));
|
||||||
choices.insert(p_t(256*7+ 243, "smc PENTAX-DA 70mm f/2.4 Limited"));
|
choices.insert(p_t(256*7+ 243, "smc PENTAX-DA 70mm f/2.4 Limited"));
|
||||||
choices.insert(p_t(256*7+ 244, "smc PENTAX-DA 21mm f/3.2 AL Limited"));
|
choices.insert(p_t(256*7+ 244, "smc PENTAX-DA 21mm f/3.2 AL Limited"));
|
||||||
choices.insert(p_t(256*8+ 14, "Sigma 17-70mm f/2.8-4.0 DC Macro OS HSM"));
|
choices.insert(p_t(256*8+ 3, "Sigma AF 18-125mm f/3.5-5.6 DC"));
|
||||||
|
choices.insert(p_t(256*8+ 4, "Sigma 50mm f/1.4 EX DG HSM"));
|
||||||
|
choices.insert(p_t(256*8+ 8, "Sigma 18-250mm f/3.5-6.3 DC OS HSM"));
|
||||||
|
choices.insert(p_t(256*8+ 11, "Sigma 10-20mm f/3.5 EX DC HSM"));
|
||||||
|
choices.insert(p_t(256*8+ 12, "Sigma 70-300mm f/4-5.6 DG OS"));
|
||||||
|
choices.insert(p_t(256*8+ 13, "Sigma 120-400mm f/4.5-5.6 APO DG OS HSM"));
|
||||||
|
choices.insert(p_t(256*8+ 14, "Sigma 17-70mm f/2.8-4.0 DC Macro OS HSM"));
|
||||||
|
choices.insert(p_t(256*8+ 15, "Sigma 150-500mm f/5-6.3 APO DG OS HSM"));
|
||||||
|
choices.insert(p_t(256*8+ 16, "Sigma 70-200mm f/2.8 EX DG Macro HSM II"));
|
||||||
|
choices.insert(p_t(256*8+ 17, "Sigma 50-500mm f/4.5-6.3 DG OS HSM"));
|
||||||
|
choices.insert(p_t(256*8+ 18, "Sigma 8-16mm f/4.5-5.6 DC HSM"));
|
||||||
|
choices.insert(p_t(256*8+ 21, "Sigma 17-50mm f/2.8 EX DC OS HSM"));
|
||||||
|
choices.insert(p_t(256*8+ 22, "Sigma 85mm f/1.4 EX DG HSM"));
|
||||||
|
choices.insert(p_t(256*8+ 23, "Sigma 70-200mm f/2.8 APO EX DG OS HSM"));
|
||||||
|
choices.insert(p_t(256*8+ 27, "Sigma 18-200mm f/3.5-6.3 II DC HSM"));
|
||||||
|
choices.insert(p_t(256*8+ 28, "Sigma 18-250mm f/3.5-6.3 DC Macro HSM"));
|
||||||
|
choices.insert(p_t(256*8+ 30, "Sigma 17-70mm f/2.8-4 DC Macro HSM | C")); // "| C" stands for "Contemporary" product line
|
||||||
|
choices.insert(p_t(256*8+ 210, "smc PENTAX-DA 18-270mm f/3.5-6.3 ED SDM"));
|
||||||
|
choices.insert(p_t(256*8+ 211, "HD PENTAX-DA 560mm f/5.6 ED AW"));
|
||||||
choices.insert(p_t(256*8+ 215, "smc PENTAX-DA 18-135mm f/3.5-5.6 ED AL [IF] DC WR"));
|
choices.insert(p_t(256*8+ 215, "smc PENTAX-DA 18-135mm f/3.5-5.6 ED AL [IF] DC WR"));
|
||||||
choices.insert(p_t(256*8+ 226, "smc PENTAX-DA* 55mm f/1.4 SDM"));
|
choices.insert(p_t(256*8+ 226, "smc PENTAX-DA* 55mm f/1.4 SDM"));
|
||||||
choices.insert(p_t(256*8+ 227, "smc PENTAX DA* 60-250mm f/4 [IF] SDM"));
|
choices.insert(p_t(256*8+ 227, "smc PENTAX-DA* 60-250mm f/4 [IF] SDM"));
|
||||||
choices.insert(p_t(256*8+ 232, "smc PENTAX-DA 17-70mm f/4 AL [IF] SDM"));
|
choices.insert(p_t(256*8+ 232, "smc PENTAX-DA 17-70mm f/4 AL [IF] SDM"));
|
||||||
choices.insert(p_t(256*8+ 234, "smc PENTAX-DA* 300mm f/4 ED [IF] SDM"));
|
choices.insert(p_t(256*8+ 234, "smc PENTAX-DA* 300mm f/4 ED [IF] SDM"));
|
||||||
choices.insert(p_t(256*8+ 235, "smc PENTAX-DA* 200mm f/2.8 ED [IF] SDM"));
|
choices.insert(p_t(256*8+ 235, "smc PENTAX-DA* 200mm f/2.8 ED [IF] SDM"));
|
||||||
choices.insert(p_t(256*8+ 241, "smc PENTAX-DA* 50-135mm f/2.8 ED [IF] SDM"));
|
choices.insert(p_t(256*8+ 241, "smc PENTAX-DA* 50-135mm f/2.8 ED [IF] SDM"));
|
||||||
choices.insert(p_t(256*8+ 242, "smc PENTAX-DA* 16-50mm f/2.8 ED AL [IF] SDM"));
|
choices.insert(p_t(256*8+ 242, "smc PENTAX-DA* 16-50mm f/2.8 ED AL [IF] SDM"));
|
||||||
choices.insert(p_t(256*8+ 255, "Sigma 70-200mm f/2.8 EX DG Macro HSM II"));
|
choices.insert(p_t(256*8+ 255, "Sigma 70-200mm f/2.8 EX DG Macro HSM II"));
|
||||||
choices.insert(p_t(256*8+ 255, "Sigma APO 150-500mm f/5-6.3 DG OS HSM"));
|
choices.insert(p_t(256*8+ 255, "Sigma 150-500mm f/5-6.3 DG APO [OS] HSM"));
|
||||||
choices.insert(p_t(256*11+ 4, "smc PENTAX-FA 645 45-85mm f/4.5"));
|
choices.insert(p_t(256*8+ 255, "Sigma 50-150mm f/2.8 II APO EX DC HSM"));
|
||||||
choices.insert(p_t(256*11+ 8, "smc PENTAX-FA 645 80-160mm f/4.5"));
|
choices.insert(p_t(256*8+ 255, "Sigma 4.5mm f/2.8 EX DC HSM Circular Fisheye"));
|
||||||
|
choices.insert(p_t(256*8+ 255, "Sigma 50-200mm f/4-5.6 DC OS"));
|
||||||
|
choices.insert(p_t(256*8+ 255, "Sigma 24-70mm f/2.8 EX DG HSM"));
|
||||||
|
choices.insert(p_t(256*9+ 0, "645 Manual Lens"));
|
||||||
|
choices.insert(p_t(256*10+ 0, "645 A Series Lens"));
|
||||||
|
choices.insert(p_t(256*11+ 1, "smc PENTAX-FA 645 75mm f/2.8"));
|
||||||
|
choices.insert(p_t(256*11+ 2, "smc PENTAX-FA 645 45mm f/2.8"));
|
||||||
|
choices.insert(p_t(256*11+ 3, "smc PENTAX-FA* 645 300mm f/4 ED [IF]"));
|
||||||
|
choices.insert(p_t(256*11+ 4, "smc PENTAX-FA 645 45-85mm f/4.5"));
|
||||||
|
choices.insert(p_t(256*11+ 5, "smc PENTAX-FA 645 400mm f/5.6 ED [IF]"));
|
||||||
|
choices.insert(p_t(256*11+ 7, "smc PENTAX-FA 645 Macro 120mm f/4"));
|
||||||
|
choices.insert(p_t(256*11+ 8, "smc PENTAX-FA 645 80-160mm f/4.5"));
|
||||||
|
choices.insert(p_t(256*11+ 9, "smc PENTAX-FA 645 200mm f/4 [IF]"));
|
||||||
|
choices.insert(p_t(256*11+ 10, "smc PENTAX-FA 645 150mm f/2.8 [IF]"));
|
||||||
choices.insert(p_t(256*11+ 11, "smc PENTAX-FA 645 35mm f/3.5 AL [IF]"));
|
choices.insert(p_t(256*11+ 11, "smc PENTAX-FA 645 35mm f/3.5 AL [IF]"));
|
||||||
|
choices.insert(p_t(256*11+ 12, "smc PENTAX-FA 645 300mm f/5.6 ED [IF]"));
|
||||||
|
choices.insert(p_t(256*11+ 14, "smc PENTAX-FA 645 55-110mm f/5.6"));
|
||||||
|
choices.insert(p_t(256*11+ 16, "smc PENTAX-FA 645 33-55mm f/4.5 AL"));
|
||||||
choices.insert(p_t(256*11+ 17, "smc PENTAX-FA 645 150-300mm f/5.6 ED [IF]"));
|
choices.insert(p_t(256*11+ 17, "smc PENTAX-FA 645 150-300mm f/5.6 ED [IF]"));
|
||||||
choices.insert(p_t(256*13+ 18, "smc PENTAX-D FA 645 55mm f/2.8 AL [IF] SDM AW"));
|
choices.insert(p_t(256*13+ 18, "smc PENTAX-D FA 645 55mm f/2.8 AL [IF] SDM AW"));
|
||||||
|
choices.insert(p_t(256*13+ 19, "smc PENTAX-D FA 645 25mm f/4 AL [IF] SDM AW"));
|
||||||
|
choices.insert(p_t(256*13+ 20, "HD PENTAX-D FA 645 90mm f/2.8 ED AW SR"));
|
||||||
|
choices.insert(p_t(256*21+ 0, "Pentax Q Manual Lens"));
|
||||||
|
choices.insert(p_t(256*21+ 1, "01 Standard Prime 8.5mm f/1.9"));
|
||||||
|
choices.insert(p_t(256*21+ 2, "02 Standard Zoom 5-15mm f/2.8-4.5"));
|
||||||
|
choices.insert(p_t(256*21+ 6, "06 Telephoto Zoom 15-45mm f/2.8"));
|
||||||
|
choices.insert(p_t(256*21+ 7, "07 Mount Shield 11.5mm f/9"));
|
||||||
|
choices.insert(p_t(256*22+ 3, "03 Fish-eye 3.2mm f/5.6"));
|
||||||
|
choices.insert(p_t(256*22+ 4, "04 Toy Lens Wide 6.3mm f/7.1"));
|
||||||
|
choices.insert(p_t(256*22+ 5, "05 Toy Lens Telephoto 18mm f/8"));
|
||||||
}
|
}
|
||||||
virtual std::string toString (Tag* t) {
|
virtual std::string toString (Tag* t) {
|
||||||
double maxApertureAtFocal = 0;
|
double *liArray = NULL;
|
||||||
double focalLength = 0;
|
double maxApertureAtFocal = 0.;
|
||||||
|
double focalLength = 0.;
|
||||||
int lensID = 256*t->toInt(0,BYTE) + t->toInt(1,BYTE);
|
int lensID = 256*t->toInt(0,BYTE) + t->toInt(1,BYTE);
|
||||||
TagDirectory *root=t->getParent()->getRoot();
|
TagDirectory *root=t->getParent()->getRoot();
|
||||||
if (root){
|
if (root){
|
||||||
Tag *t1;
|
|
||||||
t1 = root->findTag("FocalLength");
|
Tag *t1;
|
||||||
if( t1)
|
t1 = root->findTag("FocalLength"); // Should get tag 0x920A (rational64u) from the standard Exif tag list
|
||||||
focalLength = t1->toDouble(); // Focal Length
|
if( t1)
|
||||||
t1 = root->findTag("MaxAperture");
|
focalLength = t1->toDouble(); // Focal Length
|
||||||
if( t1){
|
|
||||||
int a=t1->toInt(0,BYTE)&0x7F;
|
t1 = root->findTag("MaxAperture");
|
||||||
maxApertureAtFocal = pow(2.0, (a-1)/32.0) ; // MaxApertureValue at focal Length
|
if(t1){
|
||||||
}
|
double maxAperture = t1->toDouble(); // MaxApertureValue at focal Length
|
||||||
|
if (maxAperture != 0.)
|
||||||
|
maxApertureAtFocal = maxAperture;
|
||||||
|
else {
|
||||||
|
t1 = root->findTag("NominalMaxAperture");
|
||||||
|
if(t1)
|
||||||
|
maxApertureAtFocal = t1->toDouble();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
t1 = root->getTagP("LensInfo");
|
||||||
|
if(t1)
|
||||||
|
liArray = t1->toDoubleArray();
|
||||||
|
|
||||||
|
// Focal length below 10mm are set to 0 by the camera in the standard Exif tag, so we'll look into the makernotes
|
||||||
|
// This value will have decimals, which reflects more precision... or imprecision, due to the packed form of this value, who knows?
|
||||||
|
if (focalLength == 0.) {
|
||||||
|
rtexif::TagDirectory* mnote = root->findTag("MakerNote")->getDirectory();
|
||||||
|
rtexif::Tag* flt=mnote->getTagP("LensInfo/FocalLength");
|
||||||
|
if (flt)
|
||||||
|
focalLength = flt->toDouble ();
|
||||||
|
else if ((flt = mnote->getTagP ("FocalLength")))
|
||||||
|
focalLength = flt->toDouble();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return guess( lensID, focalLength, maxApertureAtFocal);
|
return guess( lensID, focalLength, maxApertureAtFocal, liArray);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
PALensTypeInterpreter paLensTypeInterpreter;
|
PALensTypeInterpreter paLensTypeInterpreter;
|
||||||
@ -703,6 +817,84 @@ public:
|
|||||||
};
|
};
|
||||||
PAPowerSourceInterpreter paPowerSourceInterpreter;
|
PAPowerSourceInterpreter paPowerSourceInterpreter;
|
||||||
|
|
||||||
|
class PALensModelQInterpreter: public Interpreter {
|
||||||
|
public:
|
||||||
|
PALensModelQInterpreter(){}
|
||||||
|
virtual std::string toString (Tag* t){
|
||||||
|
char buffer[31];
|
||||||
|
buffer[0] = 0; //
|
||||||
|
return buffer; // TODO: how to get the string content!?
|
||||||
|
|
||||||
|
// normal path below (copy the content of the string), but has to be bug fixed
|
||||||
|
memcpy(buffer, t->getValue(), 30);
|
||||||
|
buffer[30] = 0;
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
PALensModelQInterpreter paLensModelQInterpreter;
|
||||||
|
|
||||||
|
class PALensInfoQInterpreter: public Interpreter {
|
||||||
|
public:
|
||||||
|
PALensInfoQInterpreter(){}
|
||||||
|
virtual std::string toString (Tag* t){
|
||||||
|
char buffer[21];
|
||||||
|
buffer[0] = 0;
|
||||||
|
return buffer; // TODO: how to get the string content!?
|
||||||
|
|
||||||
|
// normal path below (copy the content of the string), but has to be bug fixed
|
||||||
|
memcpy(buffer, t->getValue(), 20);
|
||||||
|
buffer[20] = 0;
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
PALensInfoQInterpreter paLensInfoQInterpreter;
|
||||||
|
|
||||||
|
class PAFocalLengthInterpreter: public Interpreter {
|
||||||
|
public:
|
||||||
|
PAFocalLengthInterpreter(){}
|
||||||
|
virtual std::string toString (Tag* t){
|
||||||
|
double a = double(t->toInt(0,LONG));
|
||||||
|
if(a>1.){
|
||||||
|
char buffer[10];
|
||||||
|
sprintf (buffer, "%.2f", a/100. );
|
||||||
|
return buffer;
|
||||||
|
}else
|
||||||
|
return "n/a";
|
||||||
|
}
|
||||||
|
virtual double toDouble (Tag* t, int ofs){
|
||||||
|
double a = double(t->toInt(0,LONG));
|
||||||
|
if(a>1.)
|
||||||
|
return a/100.;
|
||||||
|
else
|
||||||
|
return 0.;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
PAFocalLengthInterpreter paFocalLengthInterpreter;
|
||||||
|
|
||||||
|
class PALensDataFocalLengthInterpreter: public Interpreter {
|
||||||
|
public:
|
||||||
|
PALensDataFocalLengthInterpreter(){}
|
||||||
|
virtual std::string toString (Tag* t){
|
||||||
|
int a = t->toInt(0,BYTE);
|
||||||
|
float b = float(10*int(a>>2)) * pow(4.f, float(int(a&0x03)-2));
|
||||||
|
if(b>1.f){
|
||||||
|
char buffer[10];
|
||||||
|
sprintf (buffer, "%.2f", b );
|
||||||
|
return buffer;
|
||||||
|
}else
|
||||||
|
return "n/a";
|
||||||
|
}
|
||||||
|
virtual double toDouble (Tag* t, int ofs){
|
||||||
|
int a = t->toInt(ofs,BYTE);
|
||||||
|
float b = float(10*int(a>>2)) * pow(4.f, float(int(a&0x03)-2));
|
||||||
|
if(b>1.f)
|
||||||
|
return b;
|
||||||
|
else
|
||||||
|
return 0.;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
PALensDataFocalLengthInterpreter paLensDataFocalLengthInterpreter;
|
||||||
|
|
||||||
class PAMaxApertureInterpreter: public Interpreter {
|
class PAMaxApertureInterpreter: public Interpreter {
|
||||||
public:
|
public:
|
||||||
PAMaxApertureInterpreter(){}
|
PAMaxApertureInterpreter(){}
|
||||||
@ -718,23 +910,50 @@ class PAMaxApertureInterpreter: public Interpreter {
|
|||||||
}else
|
}else
|
||||||
return "n/a";
|
return "n/a";
|
||||||
}
|
}
|
||||||
|
virtual double toDouble (Tag* t, int ofs){
|
||||||
|
int a = t->toInt(0,BYTE);
|
||||||
|
a &= 0x7F;
|
||||||
|
if(a>1)
|
||||||
|
return pow(2.0, double(a-1)/32.0);
|
||||||
|
else
|
||||||
|
return 0.;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
PAMaxApertureInterpreter paMaxApertureInterpreter;
|
PAMaxApertureInterpreter paMaxApertureInterpreter;
|
||||||
|
|
||||||
class PANominalMinMaxApertureInterpreter: public Interpreter {
|
class PANominalMinApertureInterpreter: public Interpreter {
|
||||||
public:
|
public:
|
||||||
PANominalMinMaxApertureInterpreter(){}
|
PANominalMinApertureInterpreter(){}
|
||||||
virtual std::string toString (Tag* t){
|
virtual std::string toString (Tag* t){
|
||||||
char buffer[1024];
|
char buffer[32];
|
||||||
int a = t->toInt(0,BYTE);
|
int a = t->toInt(0,BYTE);
|
||||||
int mina = a & 0x0F;
|
int mina = a & 0x0F;
|
||||||
int maxa = (a & 0xF0)>>4;
|
sprintf (buffer, "%.1f", double(int(pow(2.0, double(mina+10)/4.0)+0.2)));
|
||||||
sprintf (buffer, "%.1f - %.0f", pow(2.0, maxa/4.0), pow(2.0, (mina+10)/4.0));
|
|
||||||
return buffer;
|
return buffer;
|
||||||
|
}
|
||||||
|
virtual double toDouble (Tag* t, int ofs){
|
||||||
|
int a = t->toInt(0,BYTE) & 0x0F;
|
||||||
|
return double(int(pow(2.0, double(a+10)/4.0)+0.2));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
PANominalMinMaxApertureInterpreter paNominalMinMaxApertureInterpreter;
|
PANominalMinApertureInterpreter paNominalMinApertureInterpreter;
|
||||||
|
|
||||||
|
class PANominalMaxApertureInterpreter: public Interpreter {
|
||||||
|
public:
|
||||||
|
PANominalMaxApertureInterpreter(){}
|
||||||
|
virtual std::string toString (Tag* t){
|
||||||
|
char buffer[32];
|
||||||
|
int a = t->toInt(0,BYTE);
|
||||||
|
int maxa = (a & 0xF0)>>4;
|
||||||
|
sprintf (buffer, "%.1f", double(int(pow(2.0, double(maxa)/4.0)+0.2)) );
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
virtual double toDouble (Tag* t, int ofs){
|
||||||
|
int a = ( t->toInt(0,BYTE) & 0xF0)>>4;
|
||||||
|
return double(int(pow(2.0, double(a)/4.0)+0.2));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
PANominalMaxApertureInterpreter paNominalMaxApertureInterpreter;
|
||||||
|
|
||||||
class PAFlashStatusInterpreter: public ChoiceInterpreter {
|
class PAFlashStatusInterpreter: public ChoiceInterpreter {
|
||||||
public:
|
public:
|
||||||
@ -1037,167 +1256,175 @@ public:
|
|||||||
PADriveMode2Interpreter paDriveMode2Interpreter;
|
PADriveMode2Interpreter paDriveMode2Interpreter;
|
||||||
|
|
||||||
const TagAttrib pentaxAttribs[] = {
|
const TagAttrib pentaxAttribs[] = {
|
||||||
{0, 1, 0, 0, 0x0000, "PentaxVersion", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0000, AUTO, "PentaxVersion", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0001, "PentaxModelType", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0001, AUTO, "PentaxModelType", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x0002, "PreviewImageSize", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0002, AUTO, "PreviewImageSize", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x0003, "PreviewImageLength", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0003, AUTO, "PreviewImageLength", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x0004, "PreviewImageStart", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0004, AUTO, "PreviewImageStart", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0005, "PentaxModelID", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0005, AUTO, "PentaxModelID", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0006, "Date", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0006, AUTO, "Date", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0007, "Time", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0007, AUTO, "Time", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0008, "Quality", &paQualityInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0008, AUTO, "Quality", &paQualityInterpreter},
|
||||||
{0, 1, 0, 0, 0x0009, "PentaxImageSize", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0009, AUTO, "PentaxImageSize", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x000b, "PictureMode", &paPictureModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000b, AUTO, "PictureMode", &paPictureModeInterpreter},
|
||||||
{0, 1, 0, 0, 0x000c, "FlashMode", &paFlashModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000c, AUTO, "FlashMode", &paFlashModeInterpreter},
|
||||||
{0, 1, 0, 0, 0x000d, "FocusMode", &paFocusModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000d, AUTO, "FocusMode", &paFocusModeInterpreter},
|
||||||
{0, 1, 0, 0, 0x000e, "AFPointSelected", &paAFPointInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000e, AUTO, "AFPointSelected", &paAFPointInterpreter},
|
||||||
{0, 1, 0, 0, 0x000f, "AFPointsInFocus", &paAFFocusInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000f, AUTO, "AFPointsInFocus", &paAFFocusInterpreter},
|
||||||
{0, 1, 0, 0, 0x0010, "FocusPosition", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0010, AUTO, "FocusPosition", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0012, "ExposureTime", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0012, AUTO, "ExposureTime", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0013, "FNumber", &paFNumberInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0013, AUTO, "FNumber", &paFNumberInterpreter},
|
||||||
{0, 1, 0, 0, 0x0014, "ISO", &paISOInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0014, AUTO, "ISO", &paISOInterpreter},
|
||||||
{0, 1, 0, 0, 0x0015, "LightReading", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0015, AUTO, "LightReading", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0016, "ExposureCompensation", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0016, AUTO, "ExposureCompensation", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0017, "MeteringMode", &paMeteringModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0017, AUTO, "MeteringMode", &paMeteringModeInterpreter},
|
||||||
{0, 1, 0, 0, 0x0018, "AutoBracketing", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0018, AUTO, "AutoBracketing", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0019, "WhiteBalance", &paWhiteBalanceInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0019, AUTO, "WhiteBalance", &paWhiteBalanceInterpreter},
|
||||||
{0, 1, 0, 0, 0x001a, "WhiteBalanceMode", &paWhiteBalanceModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x001a, AUTO, "WhiteBalanceMode", &paWhiteBalanceModeInterpreter},
|
||||||
{0, 1, 0, 0, 0x001b, "BlueBalance", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x001b, AUTO, "BlueBalance", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x001c, "RedBalance", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x001c, AUTO, "RedBalance", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x001d, "FocalLength", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x001d, AUTO, "FocalLength", &paFocalLengthInterpreter},
|
||||||
{0, 1, 0, 0, 0x001e, "DigitalZoom", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x001e, AUTO, "DigitalZoom", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x001f, "Saturation", &paSaturationInterpreter},
|
{0, AC_WRITE, 0, 0, 0x001f, AUTO, "Saturation", &paSaturationInterpreter},
|
||||||
{0, 1, 0, 0, 0x0020, "Contrast", &paContrastInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0020, AUTO, "Contrast", &paContrastInterpreter},
|
||||||
{0, 1, 0, 0, 0x0021, "Sharpness", &paSharpnessInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0021, AUTO, "Sharpness", &paSharpnessInterpreter},
|
||||||
{0, 1, 0, 0, 0x0022, "WorldTimeLocation", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0022, AUTO, "WorldTimeLocation", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0023, "HometownCity", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0023, AUTO, "HometownCity", &stdInterpreter},
|
||||||
{0, 3, 0, 0, 0x0024, "DestinationCity", &stdInterpreter},
|
{0, AC_NEW, 0, 0, 0x0024, AUTO, "DestinationCity", &stdInterpreter},
|
||||||
{0, 3, 0, 0, 0x0025, "HometownDST", &stdInterpreter},
|
{0, AC_NEW, 0, 0, 0x0025, AUTO, "HometownDST", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0026, "DestinationDST", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0026, AUTO, "DestinationDST", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0027, "DSPFirmwareVersion", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0027, AUTO, "DSPFirmwareVersion", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0028, "CPUFirmwareVersion", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0028, AUTO, "CPUFirmwareVersion", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0029, "FrameNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0029, AUTO, "FrameNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x002d, "EffectiveLV", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x002d, AUTO, "EffectiveLV", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0032, "ImageProcessing", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0032, AUTO, "ImageProcessing", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0033, "PictureMode", &paPictureModeInterpreter2},
|
{0, AC_WRITE, 0, 0, 0x0033, AUTO, "PictureMode", &paPictureModeInterpreter2},
|
||||||
{0, 1, 0, 0, 0x0034, "DriveMode", &paDriveModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0034, AUTO, "DriveMode", &paDriveModeInterpreter},
|
||||||
{0, 1, 0, 0, 0x0037, "ColorSpace", &paColorSpaceInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0037, AUTO, "ColorSpace", &paColorSpaceInterpreter},
|
||||||
{0, 1, 0, 0, 0x0038, "ImageAreaOffset", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0038, AUTO, "ImageAreaOffset", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0039, "RawImageSize", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0039, AUTO, "RawImageSize", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x003c, "AFPointsInFocus", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x003c, AUTO, "AFPointsInFocus", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x003e, "PreviewImageBorders", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x003e, AUTO, "PreviewImageBorders", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x003f, "LensType", &paLensTypeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x003f, AUTO, "LensType", &paLensTypeInterpreter},
|
||||||
{0, 1, 0, 0, 0x0040, "SensitivityAdjust", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0040, AUTO, "SensitivityAdjust", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0041, "ImageProcessingCount", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0041, AUTO, "ImageProcessingCount", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0047, "CameraTemperature", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0047, AUTO, "CameraTemperature", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0048, "AELock", &paOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0048, AUTO, "AELock", &paOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x0049, "NoiseReduction", &paOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0049, AUTO, "NoiseReduction", &paOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x004d, "FlashExposureComp", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x004d, AUTO, "FlashExposureComp", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x004f, "ImageTone", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x004f, AUTO, "ImageTone", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0050, "ColorTemperature", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0050, AUTO, "ColorTemperature", &stdInterpreter},
|
||||||
{0, 1, 0, pentaxSRInfoAttribs, 0x005c, "ShakeReductionInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, pentaxSRInfoAttribs, 0x005c, AUTO, "ShakeReductionInfo", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x005d, "ShutterCount", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x005d, AUTO, "ShutterCount", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0069, "DynamicRangeExpansion", &paOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0069, AUTO, "DynamicRangeExpansion", &paOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 0x0071, "HighISONoiseReduction", &paHighISONoiseInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0071, AUTO, "HighISONoiseReduction", &paHighISONoiseInterpreter},
|
||||||
{0, 1, 0, 0, 0x0072, "AFAdjustment", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0072, AUTO, "AFAdjustment", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0200, "BlackPoint", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0200, AUTO, "BlackPoint", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0201, "WhitePoint", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0201, AUTO, "WhitePoint", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0203, "ColorMatrixA", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0203, AUTO, "ColorMatrixA", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0204, "ColorMatrixB", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0204, AUTO, "ColorMatrixB", &stdInterpreter},
|
||||||
{0, 1, 0, pentaxCameraSettingsAttribs, 0x0205, "CameraSettings", &stdInterpreter},
|
{0, AC_WRITE, 0, pentaxCameraSettingsAttribs, 0x0205, AUTO, "CameraSettings", &stdInterpreter},
|
||||||
{0, 1, 0, pentaxAEInfoAttribs, 0x0206, "AEInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, pentaxAEInfoAttribs, 0x0206, AUTO, "AEInfo", &stdInterpreter},
|
||||||
{0, 1, 0, pentaxLensDataAttribs, 0x0207, "LensInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, pentaxLensDataAttribs, 0x0207, AUTO, "LensInfo", &stdInterpreter},
|
||||||
{0, 1, 0, pentaxFlashInfoAttribs, 0x0208, "FlashInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, pentaxFlashInfoAttribs, 0x0208, AUTO, "FlashInfo", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0209, "AEMeteringSegments", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0209, AUTO, "AEMeteringSegments", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x020a, "FlashADump", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x020a, AUTO, "FlashADump", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x020b, "FlashBDump", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x020b, AUTO, "FlashBDump", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x020d, "WB_RGGBLevelsDaylight", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x020d, AUTO, "WB_RGGBLevelsDaylight", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x020e, "WB_RGGBLevelsShade", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x020e, AUTO, "WB_RGGBLevelsShade", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x020f, "WB_RGGBLevelsCloudy", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x020f, AUTO, "WB_RGGBLevelsCloudy", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0210, "WB_RGGBLevelsTungsten", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0210, AUTO, "WB_RGGBLevelsTungsten", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0211, "WB_RGGBLevelsFluorescentD", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0211, AUTO, "WB_RGGBLevelsFluorescentD", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0212, "WB_RGGBLevelsFluorescentN", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0212, AUTO, "WB_RGGBLevelsFluorescentN", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0213, "WB_RGGBLevelsFluorescentW", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0213, AUTO, "WB_RGGBLevelsFluorescentW", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0214, "WB_RGGBLevelsFlash", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0214, AUTO, "WB_RGGBLevelsFlash", &stdInterpreter},
|
||||||
{0, 1, 0, pentaxCameraInfoAttribs, 0x0215, "CameraInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, pentaxCameraInfoAttribs, 0x0215, AUTO, "CameraInfo", &stdInterpreter},
|
||||||
{0, 1, 0, pentaxBatteryInfoAttribs, 0x0216, "BatteryInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, pentaxBatteryInfoAttribs, 0x0216, AUTO, "BatteryInfo", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x021f, "AFInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x021f, AUTO, "AFInfo", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0222, "ColorInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0222, AUTO, "ColorInfo", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x03fe, "DataDump", &stdInterpreter},
|
{0, AC_WRITE, 0, pentaxLensInfoQAttribs, 0x0239, AUTO, "LensInfoQ", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x03ff, "UnknownInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x03fe, AUTO, "DataDump", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0402, "ToneCurve", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x03ff, AUTO, "UnknownInfo", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0403, "ToneCurves", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0402, AUTO, "ToneCurve", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0e00, "PrintIM", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0403, AUTO, "ToneCurves", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{0, AC_WRITE, 0, 0, 0x0e00, AUTO, "PrintIM", &stdInterpreter},
|
||||||
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
|
|
||||||
const TagAttrib pentaxSRInfoAttribs[] = {
|
const TagAttrib pentaxSRInfoAttribs[] = {
|
||||||
{0, 1, 0, 0, 0, "SRResult", &paSRResultInterpreter},
|
{0, AC_WRITE, 0, 0, 0, AUTO, "SRResult", &paSRResultInterpreter},
|
||||||
{0, 1, 0, 0, 1, "ShakeReduction", &paOnOffInterpreter},
|
{0, AC_WRITE, 0, 0, 1, AUTO, "ShakeReduction", &paOnOffInterpreter},
|
||||||
{0, 1, 0, 0, 2, "SRHalfPressTime", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 2, AUTO, "SRHalfPressTime", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 3, "SRFocalLength", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 3, AUTO, "SRFocalLength", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
|
|
||||||
const TagAttrib pentaxLensDataAttribs[] = {
|
const TagAttrib pentaxLensDataAttribs[] = {
|
||||||
{0, 1, 0, 0, 10, "NominalMinMaxAperture", &paNominalMinMaxApertureInterpreter},
|
{0, AC_WRITE, 0, 0, 9, AUTO, "FocalLength", &paLensDataFocalLengthInterpreter},
|
||||||
{0, 1, 0, 0, 14, "MaxAperture", &paMaxApertureInterpreter},
|
{0, AC_WRITE, 0, 0, 10, AUTO, "NominalMaxAperture", &paNominalMaxApertureInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{0, AC_WRITE, 0, 0, 10, AUTO, "NominalMinAperture", &paNominalMinApertureInterpreter},
|
||||||
|
{0, AC_WRITE, 0, 0, 14, AUTO, "MaxAperture", &paMaxApertureInterpreter},
|
||||||
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
|
|
||||||
|
const TagAttrib pentaxLensInfoQAttribs[] = {
|
||||||
|
{0, AC_WRITE, 0, 0, 12, AUTO, "LensModel", &paLensModelQInterpreter},
|
||||||
|
{0, AC_WRITE, 0, 0, 42, AUTO, "LensInfo", &paLensInfoQInterpreter},
|
||||||
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
|
|
||||||
const TagAttrib pentaxCameraSettingsAttribs[] = {
|
const TagAttrib pentaxCameraSettingsAttribs[] = {
|
||||||
{0, 1, 0, 0, 0, "PictureMode2", &paPictureMode2Interpreter},
|
{0, AC_WRITE, 0, 0, 0, AUTO, "PictureMode2", &paPictureMode2Interpreter},
|
||||||
{0, 1, 0, 0, 1, "ProgramLine", &paProgramLineInterpreter},
|
{0, AC_WRITE, 0, 0, 1, AUTO, "ProgramLine", &paProgramLineInterpreter},
|
||||||
{0, 1, 0, 0, 1, "EVSteps", &paEVStepsInterpreter},
|
{0, AC_WRITE, 0, 0, 1, AUTO, "EVSteps", &paEVStepsInterpreter},
|
||||||
{0, 1, 0, 0, 1, "E-DialinProgram", &paEDialinInterpreter},
|
{0, AC_WRITE, 0, 0, 1, AUTO, "E-DialinProgram", &paEDialinInterpreter},
|
||||||
{0, 1, 0, 0, 1, "ApertureRing", &paApertureRingUseInterpreter},
|
{0, AC_WRITE, 0, 0, 1, AUTO, "ApertureRing", &paApertureRingUseInterpreter},
|
||||||
{0, 1, 0, 0, 2, "FlashOptions", &paFlashOptionInterpreter},
|
{0, AC_WRITE, 0, 0, 2, AUTO, "FlashOptions", &paFlashOptionInterpreter},
|
||||||
{0, 1, 0, 0, 2, "MeteringMode2", &paMeteringMode2Interpreter},
|
{0, AC_WRITE, 0, 0, 2, AUTO, "MeteringMode2", &paMeteringMode2Interpreter},
|
||||||
{0, 1, 0, 0, 3, "AFMode", &paAFModeInterpreter},
|
{0, AC_WRITE, 0, 0, 3, AUTO, "AFMode", &paAFModeInterpreter},
|
||||||
{0, 1, 0, 0, 4, "AFPointSelected2", &paAFPointSelectedInterpreter},
|
{0, AC_WRITE, 0, 0, 4, AUTO, "AFPointSelected2", &paAFPointSelectedInterpreter},
|
||||||
{0, 1, 0, 0, 7, "DriveMode2", &paDriveMode2Interpreter},
|
{0, AC_WRITE, 0, 0, 7, AUTO, "DriveMode2", &paDriveMode2Interpreter},
|
||||||
{0, 1, 0, 0, 8, "ExposureBracketStepSize", &paExposureBracketStepSizeInterpreter},
|
{0, AC_WRITE, 0, 0, 8, AUTO, "ExposureBracketStepSize", &paExposureBracketStepSizeInterpreter},
|
||||||
{0, 1, 0, 0, 9, "BracketShotNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 9, AUTO, "BracketShotNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 10, "WhiteBalanceSet", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 10, AUTO, "WhiteBalanceSet", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
|
|
||||||
const TagAttrib pentaxAEInfoAttribs[] = {
|
const TagAttrib pentaxAEInfoAttribs[] = {
|
||||||
{0, 1, 0, 0, 0, "AEExposureTime", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0, AUTO, "AEExposureTime", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 1, "AEAperture", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 1, AUTO, "AEAperture", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 2, "AE_ISO", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 2, AUTO, "AE_ISO", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 3, "AEXv", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 3, AUTO, "AEXv", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 4, "AEBXv", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 4, AUTO, "AEBXv", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 5, "AEMinExposureTime", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 5, AUTO, "AEMinExposureTime", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 6, "AEProgramMode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 6, AUTO, "AEProgramMode", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 9, "AEMaxAperture", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 9, AUTO, "AEMaxAperture", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 10, "AEMaxAperture2", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 10, AUTO, "AEMaxAperture2", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 11, "AEMinAperture", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 11, AUTO, "AEMinAperture", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 12, "AEMeteringMode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 12, AUTO, "AEMeteringMode", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 14, "FlashExposureCompSet", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 14, AUTO, "FlashExposureCompSet", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
|
|
||||||
const TagAttrib pentaxFlashInfoAttribs[] = {
|
const TagAttrib pentaxFlashInfoAttribs[] = {
|
||||||
{0, 1, 0, 0, 0, "FlashStatus", &paFlashStatusInterpreter},
|
{0, AC_WRITE, 0, 0, 0, AUTO, "FlashStatus", &paFlashStatusInterpreter},
|
||||||
{0, 1, 0, 0, 1, "InternalFlashMode", &paInternalFlashModeInterpreter},
|
{0, AC_WRITE, 0, 0, 1, AUTO, "InternalFlashMode", &paInternalFlashModeInterpreter},
|
||||||
{0, 1, 0, 0, 2, "ExternalFlashMode", &paExternalFlashModeInterpreter},
|
{0, AC_WRITE, 0, 0, 2, AUTO, "ExternalFlashMode", &paExternalFlashModeInterpreter},
|
||||||
{0, 1, 0, 0, 3, "InternalFlashStrength", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 3, AUTO, "InternalFlashStrength", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 24, "ExternalFlashGuideNumber", &paExternalFlashGNInterpreter},
|
{0, AC_WRITE, 0, 0, 24, AUTO, "ExternalFlashGuideNumber", &paExternalFlashGNInterpreter},
|
||||||
{0, 1, 0, 0, 25, "ExternalFlashExposureComp", &paExternalFlashExposureCompInterpreter},
|
{0, AC_WRITE, 0, 0, 25, AUTO, "ExternalFlashExposureComp", &paExternalFlashExposureCompInterpreter},
|
||||||
{0, 1, 0, 0, 26, "ExternalFlashBounce", &paExternalFlashBounceInterpreter},
|
{0, AC_WRITE, 0, 0, 26, AUTO, "ExternalFlashBounce", &paExternalFlashBounceInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
|
|
||||||
const TagAttrib pentaxBatteryInfoAttribs[] = {
|
const TagAttrib pentaxBatteryInfoAttribs[] = {
|
||||||
{0, 1, 0, 0, 0, "PowerSource", &paPowerSourceInterpreter},
|
{0, AC_WRITE, 0, 0, 0, AUTO, "PowerSource", &paPowerSourceInterpreter},
|
||||||
{0, 1, 0, 0, 1, "BatteryStates", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 1, AUTO, "BatteryStates", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 2, "BatteryADBodyNoLoad", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 2, AUTO, "BatteryADBodyNoLoad", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 3, "BatteryADBodyLoad", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 3, AUTO, "BatteryADBodyLoad", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 4, "BatteryADGripNoLoad", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 4, AUTO, "BatteryADGripNoLoad", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 5, "BatteryADGripLoad", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 5, AUTO, "BatteryADGripLoad", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
|
|
||||||
const TagAttrib pentaxCameraInfoAttribs[] = {
|
const TagAttrib pentaxCameraInfoAttribs[] = {
|
||||||
{0, 1, 0, 0, 0, "PentaxModelID", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0, AUTO, "PentaxModelID", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 1, "ManufactureDate", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 1, AUTO, "ManufactureDate", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 2, "ProductionCode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 2, AUTO, "ProductionCode", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 4, "InternalSerialNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 4, AUTO, "InternalSerialNumber", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
669
rtexif/rtexif.cc
669
rtexif/rtexif.cc
@ -31,7 +31,7 @@ using namespace std;
|
|||||||
|
|
||||||
namespace rtexif {
|
namespace rtexif {
|
||||||
|
|
||||||
StdInterpreter stdInterpreter;
|
Interpreter stdInterpreter;
|
||||||
|
|
||||||
//--------------- class TagDirectory ------------------------------------------
|
//--------------- class TagDirectory ------------------------------------------
|
||||||
// this class is a collection (an array) of tags
|
// this class is a collection (an array) of tags
|
||||||
@ -45,12 +45,10 @@ TagDirectory::TagDirectory ()
|
|||||||
TagDirectory::TagDirectory (TagDirectory* p, const TagAttrib* ta, ByteOrder border)
|
TagDirectory::TagDirectory (TagDirectory* p, const TagAttrib* ta, ByteOrder border)
|
||||||
: attribs(ta), order(border), parent(p) {}
|
: attribs(ta), order(border), parent(p) {}
|
||||||
|
|
||||||
TagDirectory::TagDirectory (TagDirectory* p, FILE* f, int base, const TagAttrib* ta, ByteOrder border, bool skipIgnored) {
|
TagDirectory::TagDirectory (TagDirectory* p, FILE* f, int base, const TagAttrib* ta, ByteOrder border, bool skipIgnored)
|
||||||
|
: attribs(ta), order(border), parent(p)
|
||||||
|
{
|
||||||
|
|
||||||
attribs = ta;
|
|
||||||
order = border;
|
|
||||||
parent = p;
|
|
||||||
|
|
||||||
int numOfTags = get2 (f, order);
|
int numOfTags = get2 (f, order);
|
||||||
if (numOfTags<=0 || numOfTags>200)
|
if (numOfTags<=0 || numOfTags>200)
|
||||||
return;
|
return;
|
||||||
@ -106,8 +104,8 @@ void TagDirectory::sort () {
|
|||||||
}
|
}
|
||||||
TagDirectory* TagDirectory::getRoot()
|
TagDirectory* TagDirectory::getRoot()
|
||||||
{
|
{
|
||||||
if(parent) return parent->getRoot();
|
if(parent) return parent->getRoot();
|
||||||
else return this;
|
else return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
const TagAttrib* TagDirectory::getAttrib (int id) {
|
const TagAttrib* TagDirectory::getAttrib (int id) {
|
||||||
@ -130,20 +128,49 @@ const TagAttrib* TagDirectory::getAttrib (const char* name) {
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TagDirectory::printAll () const {
|
const TagAttrib* TagDirectory::getAttribP (const char* name) {
|
||||||
|
|
||||||
|
if (attribs)
|
||||||
|
for (int i=0; attribs[i].ignore!=-1; i++) {
|
||||||
|
// Yeah, self made comparison!
|
||||||
|
const char *n = name;
|
||||||
|
const char *a = attribs[i].name;
|
||||||
|
while (*n && *a && *n==*a) { n++; a++; };
|
||||||
|
if (!*a && (!*n || *n=='/')) {
|
||||||
|
// we reached the end of the subpart of name and the end of attribs->name, so they match
|
||||||
|
if (*n=='/') {
|
||||||
|
Tag* tag = getTag (attribs[i].ID);
|
||||||
|
TagDirectory *tagDir;
|
||||||
|
if (attribs[i].subdirAttribs && tag && (tagDir=tag->getDirectory()))
|
||||||
|
return tagDir->getAttribP(n+1);
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return &attribs[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TagDirectory::printAll (unsigned int level) const {
|
||||||
|
|
||||||
|
// set the spacer prefix string
|
||||||
|
char prefixStr[level*4+1];
|
||||||
|
unsigned int i;
|
||||||
|
for (i=0; i<level*4; i++)
|
||||||
|
prefixStr[i] = ' ';
|
||||||
|
prefixStr[i] = '\0';
|
||||||
|
|
||||||
|
// recursively iterate over the tag list
|
||||||
for (size_t i=0; i<tags.size(); i++) {
|
for (size_t i=0; i<tags.size(); i++) {
|
||||||
std::string name = tags[i]->nameToString ();
|
std::string name = tags[i]->nameToString ();
|
||||||
if (tags[i]->isDirectory())
|
if (tags[i]->isDirectory())
|
||||||
for (int j=0; tags[i]->getDirectory(j); j++) {
|
for (int j=0; tags[i]->getDirectory(j); j++) {
|
||||||
printf ("==== DIRECTORY %s[%d]: ====\n", name.c_str(), j);
|
tags[i]->getDirectory(j)->printAll (level+1);
|
||||||
tags[i]->getDirectory(j)->printAll ();
|
|
||||||
printf ("==== END OF DIRECTORY %s[%d] ====\n", name.c_str(), j);
|
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
std::string value = tags[i]->valueToString ();
|
std::string value = tags[i]->valueToString ();
|
||||||
printf ("%s: %s\n", name.c_str(), value.c_str());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,22 +222,47 @@ Tag* TagDirectory::getTag (const char* name) const {
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Tag* TagDirectory::getTagP (const char* name) const {
|
||||||
|
|
||||||
|
if (attribs)
|
||||||
|
for (int i=0; attribs[i].ignore!=-1; i++) {
|
||||||
|
// Yeah, self made comparison!
|
||||||
|
const char *n = name;
|
||||||
|
const char *a = attribs[i].name;
|
||||||
|
while (*n && *a && *n==*a) { n++; a++; };
|
||||||
|
if (!*a && (!*n || *n=='/')) {
|
||||||
|
// we reached the end of the subpart of name and the end of attribs->name, so they match
|
||||||
|
if (*n=='/') {
|
||||||
|
Tag* tag = getTag (attribs[i].ID);
|
||||||
|
TagDirectory *tagDir;
|
||||||
|
if (attribs[i].subdirAttribs && tag && (tagDir=tag->getDirectory()))
|
||||||
|
return tagDir->getTagP(n+1);
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return getTag (attribs[i].ID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
Tag* TagDirectory::findTag (const char* name) const {
|
Tag* TagDirectory::findTag (const char* name) const {
|
||||||
if (attribs) {
|
if (attribs) {
|
||||||
for (int i=0; attribs[i].ignore!=-1; i++)
|
for (int i=0; attribs[i].ignore!=-1; i++)
|
||||||
if (!strcmp (attribs[i].name, name)){
|
if (!strcmp (attribs[i].name, name)){
|
||||||
Tag* t= getTag (attribs[i].ID);
|
Tag* t= getTag (attribs[i].ID);
|
||||||
if(t) return t;
|
if(t) return t;
|
||||||
else break;
|
else break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (size_t i=0; i<tags.size(); i++)
|
for (size_t i=0; i<tags.size(); i++)
|
||||||
if(tags[i]->isDirectory()){
|
if(tags[i]->isDirectory()){
|
||||||
TagDirectory *dir = tags[i]->getDirectory();
|
TagDirectory *dir = tags[i]->getDirectory();
|
||||||
Tag* t=dir->findTag(name);
|
Tag* t=dir->findTag(name);
|
||||||
if(t) return t;
|
if(t) return t;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Searches a simple value, as either attribute or element
|
// Searches a simple value, as either attribute or element
|
||||||
@ -395,24 +447,24 @@ TagDirectoryTable::TagDirectoryTable ()
|
|||||||
TagDirectoryTable::TagDirectoryTable (TagDirectory* p, unsigned char *v,int memsize,int offs, TagType type, const TagAttrib* ta, ByteOrder border)
|
TagDirectoryTable::TagDirectoryTable (TagDirectory* p, unsigned char *v,int memsize,int offs, TagType type, const TagAttrib* ta, ByteOrder border)
|
||||||
:TagDirectory(p,ta,border),zeroOffset(offs),valuesSize(memsize),defaultType( type )
|
:TagDirectory(p,ta,border),zeroOffset(offs),valuesSize(memsize),defaultType( type )
|
||||||
{
|
{
|
||||||
values = new unsigned char[valuesSize];
|
values = new unsigned char[valuesSize];
|
||||||
memcpy(values,v,valuesSize);
|
memcpy(values,v,valuesSize);
|
||||||
for( const TagAttrib* tattr = ta; tattr->ignore != -1; tattr++){
|
for( const TagAttrib* tattr = ta; tattr->ignore != -1; tattr++){
|
||||||
Tag* newTag = new Tag (this, tattr, (values + zeroOffset+ tattr->ID*getTypeSize(type)),type);
|
Tag* newTag = new Tag (this, tattr, (values + zeroOffset+ tattr->ID*getTypeSize(type)), tattr->type == AUTO ? type : tattr->type);
|
||||||
tags.push_back(newTag); // Here we can insert more tag in the same offset because of bitfield meaning
|
tags.push_back(newTag); // Here we can insert more tag in the same offset because of bitfield meaning
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TagDirectoryTable::TagDirectoryTable (TagDirectory* p, FILE* f, int memsize,int offs, TagType type, const TagAttrib* ta, ByteOrder border)
|
TagDirectoryTable::TagDirectoryTable (TagDirectory* p, FILE* f, int memsize,int offs, TagType type, const TagAttrib* ta, ByteOrder border)
|
||||||
:TagDirectory(p,ta,border),zeroOffset(offs),valuesSize(memsize),defaultType( type )
|
:TagDirectory(p,ta,border),zeroOffset(offs),valuesSize(memsize),defaultType( type )
|
||||||
{
|
{
|
||||||
values = new unsigned char[valuesSize];
|
values = new unsigned char[valuesSize];
|
||||||
fread (values, 1, valuesSize, f);
|
fread (values, 1, valuesSize, f);
|
||||||
|
|
||||||
for( const TagAttrib* tattr = ta; tattr->ignore != -1; tattr++){
|
for( const TagAttrib* tattr = ta; tattr->ignore != -1; tattr++){
|
||||||
Tag* newTag = new Tag (this, tattr, (values + zeroOffset+ tattr->ID*getTypeSize(type)),type);
|
Tag* newTag = new Tag (this, tattr, (values + zeroOffset+ tattr->ID*getTypeSize(type)), tattr->type == AUTO ? type : tattr->type);
|
||||||
tags.push_back(newTag); // Here we can insert more tag in the same offset because of bitfield meaning
|
tags.push_back(newTag); // Here we can insert more tag in the same offset because of bitfield meaning
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TagDirectory* TagDirectoryTable::clone (TagDirectory* parent) {
|
TagDirectory* TagDirectoryTable::clone (TagDirectory* parent) {
|
||||||
|
|
||||||
@ -422,20 +474,20 @@ TagDirectory* TagDirectoryTable::clone (TagDirectory* parent) {
|
|||||||
|
|
||||||
TagDirectoryTable::~TagDirectoryTable()
|
TagDirectoryTable::~TagDirectoryTable()
|
||||||
{
|
{
|
||||||
if(values)
|
if(values)
|
||||||
delete [] values;
|
delete [] values;
|
||||||
}
|
}
|
||||||
int TagDirectoryTable::calculateSize ()
|
int TagDirectoryTable::calculateSize ()
|
||||||
{
|
{
|
||||||
return valuesSize;
|
return valuesSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TagDirectoryTable::write (int start, unsigned char* buffer) {
|
int TagDirectoryTable::write (int start, unsigned char* buffer) {
|
||||||
if( values && valuesSize){
|
if( values && valuesSize){
|
||||||
memcpy(buffer+start,values,valuesSize);
|
memcpy(buffer+start,values,valuesSize);
|
||||||
return start+valuesSize;
|
return start+valuesSize;
|
||||||
}else
|
}else
|
||||||
return start;
|
return start;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------- class Tag ---------------------------------------------------
|
//--------------- class Tag ---------------------------------------------------
|
||||||
@ -445,67 +497,280 @@ int TagDirectoryTable::write (int start, unsigned char* buffer) {
|
|||||||
Tag::Tag (TagDirectory* p, FILE* f, int base)
|
Tag::Tag (TagDirectory* p, FILE* f, int base)
|
||||||
: type(INVALID), count(0), value(NULL), allocOwnMemory(true), attrib(NULL), parent(p), directory(NULL) {
|
: type(INVALID), count(0), value(NULL), allocOwnMemory(true), attrib(NULL), parent(p), directory(NULL) {
|
||||||
|
|
||||||
tag = get2 (f, getOrder());
|
ByteOrder order = getOrder();
|
||||||
type = (TagType)get2 (f, getOrder());
|
|
||||||
count = get4 (f, getOrder());
|
|
||||||
|
|
||||||
makerNoteKind = NOMK;
|
tag = get2 (f, order);
|
||||||
keep = false;
|
type = (TagType)get2 (f, order);
|
||||||
|
count = get4 (f, order);
|
||||||
|
|
||||||
// filter out invalid tags
|
makerNoteKind = NOMK;
|
||||||
// note the large count is to be able to pass LeafData ASCII tag which can be up to almost 10 megabytes,
|
keep = false;
|
||||||
// (only a small part of it will actually be parsed though)
|
|
||||||
if ((int)type<1 || (int)type>14 || count>10*1024*1024) {
|
// filter out invalid tags
|
||||||
type = INVALID;
|
// note the large count is to be able to pass LeafData ASCII tag which can be up to almost 10 megabytes,
|
||||||
|
// (only a small part of it will actually be parsed though)
|
||||||
|
if ((int)type<1 || (int)type>14 || count>10*1024*1024) {
|
||||||
|
type = INVALID;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// store next Tag's position in file
|
||||||
|
int save = ftell(f) + 4;
|
||||||
|
|
||||||
|
// load value field (possibly seek before)
|
||||||
|
valuesize = count * getTypeSize(type);
|
||||||
|
|
||||||
|
if (valuesize > 4)
|
||||||
|
fseek (f, get4(f, getOrder()) + base, SEEK_SET);
|
||||||
|
|
||||||
|
attrib = parent->getAttrib (tag);
|
||||||
|
|
||||||
|
if (attrib && (attrib->action==AC_WRITE || attrib->action==AC_NEW))
|
||||||
|
keep = true;
|
||||||
|
|
||||||
|
if( tag == 0xc634 ){ // DNGPrivateData
|
||||||
|
int currPos = ftell(f);
|
||||||
|
char buffer[32],*p=buffer;
|
||||||
|
while( fread (p, 1, 1, f ) && *p != 0 && p-buffer<sizeof(buffer)-1 )p++;
|
||||||
|
*p=0;
|
||||||
|
if( !strncmp(buffer,"Adobe",5) ){
|
||||||
|
fread (buffer, 1, 14, f );
|
||||||
|
if( !strncmp( buffer,"MakN",4) ){
|
||||||
|
ByteOrder bom = ((buffer[8]=='M' && buffer[9]=='M')?MOTOROLA:INTEL) ;
|
||||||
|
Tag* tmake = parent->getRoot()->findTag("Make");
|
||||||
|
std::string make( tmake ? tmake->valueToString():"");
|
||||||
|
int save = ftell(f);
|
||||||
|
int originalOffset = sget4( (unsigned char*)&buffer[10], ( make.find("SONY") != std::string::npos ) || ( make.find("Canon") != std::string::npos ) || ( make.find("OLYMPUS") != std::string::npos ) ?MOTOROLA:bom );
|
||||||
|
|
||||||
|
if( !parseMakerNote(f, save - originalOffset , bom ))
|
||||||
|
type = INVALID;
|
||||||
|
}
|
||||||
|
}else if( !strncmp(buffer,"PENTAX",6) ){
|
||||||
|
makerNoteKind = HEADERIFD;
|
||||||
|
fread (buffer, 1, 2, f);
|
||||||
|
directory = new TagDirectory*[2];
|
||||||
|
directory[0] = new TagDirectory (parent, f, currPos, pentaxAttribs, strncmp(buffer,"MM",2)? INTEL:MOTOROLA);
|
||||||
|
directory[1] = NULL;
|
||||||
|
}else
|
||||||
|
/* SONY uses this tag to write hidden info and pointer to private encrypted tags
|
||||||
|
{
|
||||||
|
unsigned offset =sget4((unsigned char*)buffer, order);
|
||||||
|
fseek(f,offset,SEEK_SET);
|
||||||
|
makerNoteKind = TABLESUBDIR;
|
||||||
|
directory = new TagDirectory*[2];
|
||||||
|
directory[0] = new TagDirectory (parent, f, base, sonyDNGMakerNote, order);
|
||||||
|
directory[1] = NULL;
|
||||||
|
fseek (f, save, SEEK_SET);
|
||||||
|
return;
|
||||||
|
}*/
|
||||||
|
type = INVALID;
|
||||||
|
}
|
||||||
|
// if this tag is the makernote, it needs special treatment (brand specific parsing)
|
||||||
|
if (tag==0x927C && attrib && !strcmp (attrib->name, "MakerNote") ) {
|
||||||
|
if( !parseMakerNote(f,base,order )){
|
||||||
|
type = INVALID;
|
||||||
|
fseek (f, save, SEEK_SET);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (attrib && attrib->subdirAttribs) {
|
||||||
|
// Some subdirs are specific of maker and model
|
||||||
|
char make[128], model[128];
|
||||||
|
make[0]=0;
|
||||||
|
model[0]=0;
|
||||||
|
Tag* tmake = parent->getRoot()->getTag ("Make");
|
||||||
|
if (tmake) tmake->toString (make);
|
||||||
|
Tag* tmodel = parent->getRoot()->getTag ("Model");
|
||||||
|
if (tmodel) tmodel->toString (model);
|
||||||
|
if (!strncmp(make, "SONY", 4)) {
|
||||||
|
switch( tag ){
|
||||||
|
case 0x0010:
|
||||||
|
directory = new TagDirectory*[2];
|
||||||
|
directory[1] = NULL;
|
||||||
|
if (count == 15360)
|
||||||
|
directory[0] = new TagDirectoryTable (parent, f, valuesize,0,BYTE , sonyCameraInfoAttribs, order);
|
||||||
|
else
|
||||||
|
directory[0] = new TagDirectoryTable (parent, f, valuesize,0,BYTE , sonyCameraInfo2Attribs, order);
|
||||||
|
break;
|
||||||
|
case 0x0114:
|
||||||
|
directory = new TagDirectory*[2];
|
||||||
|
directory[1] = NULL;
|
||||||
|
if (count == 280 || count == 364)
|
||||||
|
directory[0] = new TagDirectoryTable (parent, f, valuesize,0,SHORT , sonyCameraSettingsAttribs, MOTOROLA);
|
||||||
|
else if (count == 332)
|
||||||
|
directory[0] = new TagDirectoryTable (parent, f, valuesize,0,SHORT , sonyCameraSettingsAttribs2, MOTOROLA);
|
||||||
|
else if(count == 1536 || count == 2048)
|
||||||
|
directory[0] = new TagDirectoryTable (parent, f, valuesize,0,BYTE , sonyCameraSettingsAttribs3, INTEL);
|
||||||
|
makerNoteKind = TABLESUBDIR;
|
||||||
|
break;
|
||||||
|
case 0x9405:
|
||||||
|
directory = new TagDirectory*[2];
|
||||||
|
directory[1] = NULL;
|
||||||
|
directory[0] = new TagDirectoryTable (parent, f, valuesize,0,SHORT , attrib->subdirAttribs, order);
|
||||||
|
makerNoteKind = TABLESUBDIR;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
goto defsubdirs;
|
||||||
|
}
|
||||||
|
}else if (!strncmp(make, "PENTAX", 6)) {
|
||||||
|
switch( tag ){
|
||||||
|
case 0x005c:
|
||||||
|
case 0x0205:
|
||||||
|
case 0x0206:
|
||||||
|
case 0x0208:
|
||||||
|
case 0x0216:
|
||||||
|
directory = new TagDirectory*[2];
|
||||||
|
directory[1] = NULL;
|
||||||
|
directory[0] = new TagDirectoryTable (parent, f, valuesize,0,BYTE , attrib->subdirAttribs, order);
|
||||||
|
makerNoteKind = TABLESUBDIR;
|
||||||
|
break;
|
||||||
|
case 0x0215:
|
||||||
|
directory = new TagDirectory*[2];
|
||||||
|
directory[1] = NULL;
|
||||||
|
directory[0] = new TagDirectoryTable (parent, f, valuesize,0,LONG , attrib->subdirAttribs, order);
|
||||||
|
makerNoteKind = TABLESUBDIR;
|
||||||
|
break;
|
||||||
|
case 0x0207:
|
||||||
|
{ // There are 2 format pentaxLensDataAttribs
|
||||||
|
int offsetFirst = 4; // LensInfo2
|
||||||
|
if( strstr(model, "*ist") || strstr(model, "GX-1") || strstr(model, "K100D") || strstr(model, "K110D") )
|
||||||
|
offsetFirst = 3; // LensInfo
|
||||||
|
else if( strstr(model, "645D") )
|
||||||
|
offsetFirst = 13; // LensInfo3
|
||||||
|
else if( strstr(model, "K-5") || strstr(model, "K-r") )
|
||||||
|
offsetFirst = 12; // LensInfo4
|
||||||
|
else if( strstr(model, "K-01") )
|
||||||
|
offsetFirst = 15; // LensInfo5
|
||||||
|
directory = new TagDirectory*[2];
|
||||||
|
directory[1] = NULL;
|
||||||
|
directory[0] = new TagDirectoryTable (parent, f, valuesize,offsetFirst,BYTE , attrib->subdirAttribs, order);
|
||||||
|
makerNoteKind = TABLESUBDIR;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x0239:
|
||||||
|
directory = new TagDirectory*[2];
|
||||||
|
directory[1] = NULL;
|
||||||
|
directory[0] = new TagDirectoryTable (parent, f, valuesize,0,BYTE , attrib->subdirAttribs, order);
|
||||||
|
makerNoteKind = TABLESUBDIR;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
goto defsubdirs;
|
||||||
|
}
|
||||||
|
}else if (!strncmp(make, "Canon", 5)) {
|
||||||
|
switch( tag ){
|
||||||
|
case 0x0001:
|
||||||
|
case 0x0002:
|
||||||
|
case 0x0004:
|
||||||
|
case 0x0005:
|
||||||
|
case 0x0093:
|
||||||
|
case 0x0098:
|
||||||
|
case 0x00a0:
|
||||||
|
directory = new TagDirectory*[2];
|
||||||
|
directory[1] = NULL;
|
||||||
|
directory[0] = new TagDirectoryTable (parent, f, valuesize,0,SSHORT , attrib->subdirAttribs, order);
|
||||||
|
makerNoteKind = TABLESUBDIR;
|
||||||
|
break;
|
||||||
|
case 0x009a:
|
||||||
|
case 0x4013:
|
||||||
|
directory = new TagDirectory*[2];
|
||||||
|
directory[1] = NULL;
|
||||||
|
directory[0] = new TagDirectoryTable (parent, f, valuesize,0,LONG , attrib->subdirAttribs, order);
|
||||||
|
makerNoteKind = TABLESUBDIR;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
goto defsubdirs;
|
||||||
|
}
|
||||||
|
}else if (!strncmp(make, "NIKON", 5)) {
|
||||||
|
switch (tag) {
|
||||||
|
case 0x0025: {
|
||||||
|
directory = new TagDirectory*[2];
|
||||||
|
directory[1] = NULL;
|
||||||
|
directory[0] = new TagDirectoryTable (parent, f, valuesize,0,BYTE , attrib->subdirAttribs, order);
|
||||||
|
makerNoteKind = TABLESUBDIR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
goto defsubdirs;
|
||||||
|
}
|
||||||
|
}else if(type==UNDEFINED){
|
||||||
|
count = 1;
|
||||||
|
type = LONG;
|
||||||
|
directory = new TagDirectory*[2];
|
||||||
|
directory[0] = new TagDirectory (parent, f, base, attrib->subdirAttribs, order);
|
||||||
|
directory[1] = NULL;
|
||||||
|
}else
|
||||||
|
goto defsubdirs;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// read value
|
||||||
|
value = new unsigned char [valuesize];
|
||||||
|
fread (value, 1, valuesize, f);
|
||||||
|
}
|
||||||
|
// seek back to the saved position
|
||||||
|
fseek (f, save, SEEK_SET);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
// save file position
|
defsubdirs:
|
||||||
int save = ftell(f) + 4;
|
// read value
|
||||||
|
value = new unsigned char [valuesize];
|
||||||
|
fread (value, 1, valuesize, f);
|
||||||
|
int pos = ftell (f);
|
||||||
|
// count the number of valid subdirs
|
||||||
|
int sdcount = count;
|
||||||
|
if (sdcount>0) {
|
||||||
|
if (parent->getAttribTable()==olympusAttribs)
|
||||||
|
sdcount = 1;
|
||||||
|
// allocate space
|
||||||
|
directory = new TagDirectory*[sdcount+1];
|
||||||
|
// load directories
|
||||||
|
for (size_t j=0,i=0; j<count; j++,i++) {
|
||||||
|
int newpos = base + toInt(j*4, LONG);
|
||||||
|
fseek (f, newpos, SEEK_SET);
|
||||||
|
directory[i] = new TagDirectory (parent, f, base, attrib->subdirAttribs, order);
|
||||||
|
fseek (f, pos, SEEK_SET);
|
||||||
|
}
|
||||||
|
// set the terminating NULL
|
||||||
|
directory[sdcount] = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
type = INVALID;
|
||||||
|
|
||||||
// load value field (possibly seek before)
|
// seek back to the saved position
|
||||||
valuesize = count * getTypeSize(type);
|
fseek (f, save, SEEK_SET);
|
||||||
|
return;
|
||||||
|
|
||||||
if (valuesize > 4)
|
}
|
||||||
fseek (f, get4(f, getOrder()) + base, SEEK_SET);
|
|
||||||
|
|
||||||
attrib = parent->getAttrib (tag);
|
bool Tag::parseMakerNote(FILE* f, int base, ByteOrder bom )
|
||||||
|
{
|
||||||
if (attrib && (attrib->action==1 || attrib->action==3))
|
|
||||||
keep = true;
|
|
||||||
|
|
||||||
// if this tag is the makernote, it needs special treatment (brand specific parsing)
|
|
||||||
if (tag==0x927C && attrib && !strcmp (attrib->name, "MakerNote")) {
|
|
||||||
value = NULL;
|
value = NULL;
|
||||||
// select format of makernote
|
Tag* tmake = parent->getRoot()->findTag("Make");
|
||||||
char make[128], model[128];
|
std::string make( tmake ? tmake->valueToString():"");
|
||||||
Tag* tmake = parent->getParent()->getTag ("Make");
|
|
||||||
if (tmake)
|
Tag* tmodel = parent->getRoot()->findTag ("Model");
|
||||||
tmake->toString (make);
|
std::string model( tmodel ? tmodel->valueToString():"");
|
||||||
else
|
|
||||||
make[0] = 0;
|
if ( make.find( "NIKON" ) != std::string::npos ) {
|
||||||
Tag* tmodel = parent->getParent()->getTag ("Model");
|
if ( model.find("NIKON E700")!= std::string::npos ||
|
||||||
if (tmodel)
|
model.find("NIKON E800")!= std::string::npos ||
|
||||||
tmodel->toString (model);
|
model.find("NIKON E900")!= std::string::npos ||
|
||||||
else
|
model.find("NIKON E900S")!= std::string::npos ||
|
||||||
model[0] = 0;
|
model.find("NIKON E910")!= std::string::npos ||
|
||||||
if (!strncmp(make, "NIKON", 5)) {
|
model.find("NIKON E950")!= std::string::npos ) {
|
||||||
if (!strncmp(model, "NIKON E700",10)||!strncmp(model, "NIKON E800",10)||!strncmp(model, "NIKON E900",10)||!strncmp(model, "NIKON E900S",11)||!strncmp(model, "NIKON E910", 10)||!strncmp(model, "NIKON E950", 10)) {
|
|
||||||
makerNoteKind = HEADERIFD;
|
makerNoteKind = HEADERIFD;
|
||||||
valuesize = 8;
|
valuesize = 8;
|
||||||
value = new unsigned char[8];
|
value = new unsigned char[8];
|
||||||
fread (value, 1, 8, f);
|
fread (value, 1, 8, f);
|
||||||
directory = new TagDirectory*[2];
|
directory = new TagDirectory*[2];
|
||||||
directory[0] = new TagDirectory (parent, f, base, nikon2Attribs, getOrder());
|
directory[0] = new TagDirectory (parent, f, base, nikon2Attribs, bom);
|
||||||
directory[1] = NULL;
|
directory[1] = NULL;
|
||||||
}
|
} else if ( model.find("NIKON E990")!= std::string::npos ||
|
||||||
else if (!strncmp(model, "NIKON E990",10)||(!strncmp(model, "NIKON D1",8) && model[8]!='0')) {
|
(model.find("NIKON D1")!= std::string::npos && model.size()>8 && model.at(8)!='0')) {
|
||||||
makerNoteKind = IFD;
|
makerNoteKind = IFD;
|
||||||
directory = new TagDirectory*[2];
|
directory = new TagDirectory*[2];
|
||||||
directory[0] = new TagDirectory (parent, f, base, nikon3Attribs, getOrder());
|
directory[0] = new TagDirectory (parent, f, base, nikon3Attribs, bom);
|
||||||
directory[1] = NULL;
|
directory[1] = NULL;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
// needs refinement! (embedded tiff header parsing)
|
// needs refinement! (embedded tiff header parsing)
|
||||||
makerNoteKind = NIKON3;
|
makerNoteKind = NIKON3;
|
||||||
valuesize = 18;
|
valuesize = 18;
|
||||||
@ -513,26 +778,23 @@ Tag::Tag (TagDirectory* p, FILE* f, int base)
|
|||||||
int basepos = ftell (f);
|
int basepos = ftell (f);
|
||||||
fread (value, 1, 18, f);
|
fread (value, 1, 18, f);
|
||||||
directory = new TagDirectory*[2];
|
directory = new TagDirectory*[2];
|
||||||
directory[0] = new TagDirectory (parent, f, basepos+10, nikon3Attribs, getOrder());
|
directory[0] = new TagDirectory (parent, f, basepos+10, nikon3Attribs, bom);
|
||||||
directory[1] = NULL;
|
directory[1] = NULL;
|
||||||
}
|
}
|
||||||
}
|
} else if ( make.find( "Canon" ) != std::string::npos ) {
|
||||||
else if (!strncmp(make, "Canon", 5)) {
|
|
||||||
makerNoteKind = IFD;
|
makerNoteKind = IFD;
|
||||||
directory = new TagDirectory*[2];
|
directory = new TagDirectory*[2];
|
||||||
directory[0] = new TagDirectory (parent, f, base, canonAttribs, getOrder());
|
directory[0] = new TagDirectory (parent, f, base, canonAttribs, bom);
|
||||||
directory[1] = NULL;
|
directory[1] = NULL;
|
||||||
}
|
} else if ( make.find( "PENTAX" ) != std::string::npos ) {
|
||||||
else if (!strncmp(make, "PENTAX", 6)) {
|
|
||||||
makerNoteKind = HEADERIFD;
|
makerNoteKind = HEADERIFD;
|
||||||
valuesize = 6;
|
valuesize = 6;
|
||||||
value = new unsigned char[6];
|
value = new unsigned char[6];
|
||||||
fread (value, 1, 6, f);
|
fread (value, 1, 6, f);
|
||||||
directory = new TagDirectory*[2];
|
directory = new TagDirectory*[2];
|
||||||
directory[0] = new TagDirectory (parent, f, base, pentaxAttribs, getOrder());
|
directory[0] = new TagDirectory (parent, f, base, pentaxAttribs, bom);
|
||||||
directory[1] = NULL;
|
directory[1] = NULL;
|
||||||
}
|
} else if ( make.find( "FUJIFILM" ) != std::string::npos ) {
|
||||||
else if (!strncmp(make, "FUJIFILM", 8)) {
|
|
||||||
makerNoteKind = FUJI;
|
makerNoteKind = FUJI;
|
||||||
valuesize = 12;
|
valuesize = 12;
|
||||||
value = new unsigned char[12];
|
value = new unsigned char[12];
|
||||||
@ -540,28 +802,25 @@ Tag::Tag (TagDirectory* p, FILE* f, int base)
|
|||||||
directory = new TagDirectory*[2];
|
directory = new TagDirectory*[2];
|
||||||
directory[0] = new TagDirectory (parent, f, ftell(f)-12, fujiAttribs, INTEL);
|
directory[0] = new TagDirectory (parent, f, ftell(f)-12, fujiAttribs, INTEL);
|
||||||
directory[1] = NULL;
|
directory[1] = NULL;
|
||||||
}
|
} else if ( make.find( "KONICA MINOLTA" ) != std::string::npos || make.find( "Minolta" ) != std::string::npos ) {
|
||||||
else if (!strncmp(make, "KONICA MINOLTA", 14) || !strncmp(make, "Minolta", 7)) {
|
|
||||||
makerNoteKind = IFD;
|
makerNoteKind = IFD;
|
||||||
directory = new TagDirectory*[2];
|
directory = new TagDirectory*[2];
|
||||||
directory[0] = new TagDirectory (parent, f, base, minoltaAttribs, getOrder());
|
directory[0] = new TagDirectory (parent, f, base, minoltaAttribs, bom);
|
||||||
directory[1] = NULL;
|
directory[1] = NULL;
|
||||||
}
|
} else if ( make.find( "SONY" ) != std::string::npos ) {
|
||||||
else if (!strncmp(make, "SONY", 4)) {
|
|
||||||
valuesize = 12;
|
valuesize = 12;
|
||||||
value = new unsigned char[12];
|
value = new unsigned char[12];
|
||||||
fread (value, 1, 12, f);
|
fread (value, 1, 12, f);
|
||||||
if (!strncmp((char*)value, "SONY DSC", 8))
|
if (!strncmp((char*)value, "SONY DSC", 8))
|
||||||
makerNoteKind = HEADERIFD;
|
makerNoteKind = HEADERIFD;
|
||||||
else {
|
else {
|
||||||
makerNoteKind = IFD;
|
makerNoteKind = IFD;
|
||||||
fseek (f, -12, SEEK_CUR);
|
fseek (f, -12, SEEK_CUR);
|
||||||
}
|
}
|
||||||
directory = new TagDirectory*[2];
|
directory = new TagDirectory*[2];
|
||||||
directory[0] = new TagDirectory (parent, f, base, sonyAttribs, getOrder());
|
directory[0] = new TagDirectory (parent, f, base, sonyAttribs, bom );
|
||||||
directory[1] = NULL;
|
directory[1] = NULL;
|
||||||
}
|
} else if ( make.find( "OLYMPUS" ) != std::string::npos ) {
|
||||||
else if (!strncmp(make, "OLYMPUS", 7)) {
|
|
||||||
makerNoteKind = HEADERIFD;
|
makerNoteKind = HEADERIFD;
|
||||||
valuesize = 8;
|
valuesize = 8;
|
||||||
value = new unsigned char[12];
|
value = new unsigned char[12];
|
||||||
@ -573,147 +832,11 @@ Tag::Tag (TagDirectory* p, FILE* f, int base)
|
|||||||
fread (value+8, 1, 4, f);
|
fread (value+8, 1, 4, f);
|
||||||
valuesize = 12;
|
valuesize = 12;
|
||||||
directory[0] = new TagDirectory (parent, f, ftell(f)-12, olympusAttribs, value[8]=='I' ? INTEL : MOTOROLA);
|
directory[0] = new TagDirectory (parent, f, ftell(f)-12, olympusAttribs, value[8]=='I' ? INTEL : MOTOROLA);
|
||||||
}
|
} else
|
||||||
else
|
directory[0] = new TagDirectory (parent, f, base, olympusAttribs, bom);
|
||||||
directory[0] = new TagDirectory (parent, f, base, olympusAttribs, getOrder());
|
} else
|
||||||
}
|
return false;
|
||||||
else {
|
return true;
|
||||||
type = INVALID;
|
|
||||||
fseek (f, save, SEEK_SET);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (attrib && attrib->subdirAttribs) {
|
|
||||||
// Some subdirs are specific of maker and model
|
|
||||||
char make[128], model[128];
|
|
||||||
Tag* tmake = parent->getRoot()->getTag ("Make");
|
|
||||||
if (tmake) tmake->toString (make);
|
|
||||||
else make[0] = 0;
|
|
||||||
Tag* tmodel = parent->getRoot()->getTag ("Model");
|
|
||||||
if (tmodel) tmodel->toString (model);
|
|
||||||
else model[0] = 0;
|
|
||||||
|
|
||||||
|
|
||||||
if (!strncmp(make, "SONY", 4)) {
|
|
||||||
switch( tag ){
|
|
||||||
case 0x0114:
|
|
||||||
{
|
|
||||||
directory = new TagDirectory*[2];
|
|
||||||
directory[1] = NULL;
|
|
||||||
if( strstr(model, "A330") || strstr(model, "A380") )
|
|
||||||
directory[0] = new TagDirectoryTable (parent, f, valuesize*2,0,SHORT , sonyCameraSettingsAttribs2, MOTOROLA);
|
|
||||||
else
|
|
||||||
directory[0] = new TagDirectoryTable (parent, f, valuesize*2,0,SHORT , sonyCameraSettingsAttribs, MOTOROLA);
|
|
||||||
makerNoteKind = TABLESUBDIR;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
goto defsubdirs;
|
|
||||||
}
|
|
||||||
}else if (!strncmp(make, "PENTAX", 6)) {
|
|
||||||
switch( tag ){
|
|
||||||
case 0x005c:
|
|
||||||
case 0x0205:
|
|
||||||
case 0x0206:
|
|
||||||
case 0x0208:
|
|
||||||
case 0x0216:
|
|
||||||
directory = new TagDirectory*[2];
|
|
||||||
directory[1] = NULL;
|
|
||||||
directory[0] = new TagDirectoryTable (parent, f, valuesize,0,BYTE , attrib->subdirAttribs, getOrder());
|
|
||||||
makerNoteKind = TABLESUBDIR;
|
|
||||||
break;
|
|
||||||
case 0x0215:
|
|
||||||
directory = new TagDirectory*[2];
|
|
||||||
directory[1] = NULL;
|
|
||||||
directory[0] = new TagDirectoryTable (parent, f, valuesize,0,LONG , attrib->subdirAttribs, getOrder());
|
|
||||||
makerNoteKind = TABLESUBDIR;
|
|
||||||
break;
|
|
||||||
case 0x0207:
|
|
||||||
{ // There are 2 format pentaxLensDataAttribs
|
|
||||||
int offsetFirst = 4;
|
|
||||||
if( strstr(model, "*ist") || strstr(model, "GX-1") || strstr(model, "K100D") || strstr(model, "K110D") )
|
|
||||||
offsetFirst = 3;
|
|
||||||
if( strstr(model, "K-5") || strstr(model, "K-r") )
|
|
||||||
offsetFirst = 12;
|
|
||||||
directory = new TagDirectory*[2];
|
|
||||||
directory[1] = NULL;
|
|
||||||
directory[0] = new TagDirectoryTable (parent, f, valuesize,offsetFirst,BYTE , attrib->subdirAttribs, getOrder());
|
|
||||||
makerNoteKind = TABLESUBDIR;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
goto defsubdirs;
|
|
||||||
}
|
|
||||||
}else if (!strncmp(make, "Canon", 5)) {
|
|
||||||
switch( tag ){
|
|
||||||
case 0x0001:
|
|
||||||
case 0x0002:
|
|
||||||
case 0x0004:
|
|
||||||
case 0x0005:
|
|
||||||
case 0x0093:
|
|
||||||
case 0x0098:
|
|
||||||
case 0x00a0:
|
|
||||||
directory = new TagDirectory*[2];
|
|
||||||
directory[1] = NULL;
|
|
||||||
directory[0] = new TagDirectoryTable (parent, f, valuesize,0,SSHORT , attrib->subdirAttribs, getOrder());
|
|
||||||
makerNoteKind = TABLESUBDIR;
|
|
||||||
break;
|
|
||||||
case 0x009a:
|
|
||||||
case 0x4013:
|
|
||||||
directory = new TagDirectory*[2];
|
|
||||||
directory[1] = NULL;
|
|
||||||
directory[0] = new TagDirectoryTable (parent, f, valuesize,0,LONG , attrib->subdirAttribs, getOrder());
|
|
||||||
makerNoteKind = TABLESUBDIR;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
goto defsubdirs;
|
|
||||||
}
|
|
||||||
}else if(type==UNDEFINED){
|
|
||||||
count = 1;
|
|
||||||
type = LONG;
|
|
||||||
directory = new TagDirectory*[2];
|
|
||||||
directory[0] = new TagDirectory (parent, f, base, attrib->subdirAttribs, getOrder());
|
|
||||||
directory[1] = NULL;
|
|
||||||
}else
|
|
||||||
goto defsubdirs;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// read value
|
|
||||||
value = new unsigned char [valuesize];
|
|
||||||
fread (value, 1, valuesize, f);
|
|
||||||
}
|
|
||||||
// seek back to the saved position
|
|
||||||
fseek (f, save, SEEK_SET);
|
|
||||||
return;
|
|
||||||
defsubdirs:
|
|
||||||
// read value
|
|
||||||
value = new unsigned char [valuesize];
|
|
||||||
fread (value, 1, valuesize, f);
|
|
||||||
int pos = ftell (f);
|
|
||||||
// count the number of valid subdirs
|
|
||||||
int sdcount = count;
|
|
||||||
if (sdcount>0) {
|
|
||||||
if (parent->getAttribTable()==olympusAttribs)
|
|
||||||
sdcount = 1;
|
|
||||||
// allocate space
|
|
||||||
directory = new TagDirectory*[sdcount+1];
|
|
||||||
// load directories
|
|
||||||
for (size_t j=0,i=0; j<count; j++,i++) {
|
|
||||||
int newpos = base + toInt(j*4, LONG);
|
|
||||||
fseek (f, newpos, SEEK_SET);
|
|
||||||
directory[i] = new TagDirectory (parent, f, base, attrib->subdirAttribs, getOrder());
|
|
||||||
fseek (f, pos, SEEK_SET);
|
|
||||||
}
|
|
||||||
// set the terminating NULL
|
|
||||||
directory[sdcount] = NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
type = INVALID;
|
|
||||||
|
|
||||||
// seek back to the saved position
|
|
||||||
fseek (f, save, SEEK_SET);
|
|
||||||
return;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Tag* Tag::clone (TagDirectory* parent) {
|
Tag* Tag::clone (TagDirectory* parent) {
|
||||||
@ -782,7 +905,7 @@ void Tag::fromInt (int v) {
|
|||||||
|
|
||||||
void Tag::fromString (const char* v, int size) {
|
void Tag::fromString (const char* v, int size) {
|
||||||
|
|
||||||
if( value && allocOwnMemory)
|
if( value && allocOwnMemory)
|
||||||
delete [] value;
|
delete [] value;
|
||||||
if (size<0)
|
if (size<0)
|
||||||
valuesize = strlen (v) + 1;
|
valuesize = strlen (v) + 1;
|
||||||
@ -795,6 +918,8 @@ void Tag::fromString (const char* v, int size) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int Tag::toInt (int ofs, TagType astype) {
|
int Tag::toInt (int ofs, TagType astype) {
|
||||||
|
if (attrib)
|
||||||
|
return attrib->interpreter->toInt(this, ofs, astype);
|
||||||
|
|
||||||
int a;
|
int a;
|
||||||
if (astype == INVALID)
|
if (astype == INVALID)
|
||||||
@ -816,7 +941,10 @@ int Tag::toInt (int ofs, TagType astype) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
double Tag::toDouble (int ofs) {
|
double Tag::toDouble (int ofs) {
|
||||||
union IntFloat { uint32_t i; float f; } conv;
|
if (attrib)
|
||||||
|
return attrib->interpreter->toDouble(this, ofs);
|
||||||
|
|
||||||
|
union IntFloat { uint32_t i; float f; } conv;
|
||||||
|
|
||||||
double ud, dd;
|
double ud, dd;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
@ -838,6 +966,17 @@ double Tag::toDouble (int ofs) {
|
|||||||
return 0.;
|
return 0.;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Create an array of the elements
|
||||||
|
*/
|
||||||
|
double *Tag::toDoubleArray(int ofs) {
|
||||||
|
double *values = new double[count];
|
||||||
|
for (int i=0; i<count; ++i) {
|
||||||
|
values[i] = toDouble(ofs+i*getTypeSize(type));
|
||||||
|
}
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
void Tag::toRational (int& num, int& denom, int ofs) {
|
void Tag::toRational (int& num, int& denom, int ofs) {
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
@ -899,7 +1038,7 @@ void Tag::toString (char* buffer, int ofs) {
|
|||||||
case SRATIONAL:
|
case SRATIONAL:
|
||||||
case RATIONAL: sprintf (b, "%d/%d", (int)sget4 (value+8*i+ofs, getOrder()), (int)sget4 (value+8*i+ofs+4, getOrder())); break;
|
case RATIONAL: sprintf (b, "%d/%d", (int)sget4 (value+8*i+ofs, getOrder()), (int)sget4 (value+8*i+ofs+4, getOrder())); break;
|
||||||
case FLOAT: sprintf (b, "%g", toDouble(8*i+ofs)); break;
|
case FLOAT: sprintf (b, "%g", toDouble(8*i+ofs)); break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (count > maxcount)
|
if (count > maxcount)
|
||||||
@ -1005,7 +1144,7 @@ int Tag::write (int offs, int dataOffs, unsigned char* buffer) {
|
|||||||
return dataOffs;
|
return dataOffs;
|
||||||
}
|
}
|
||||||
else if( makerNoteKind==TABLESUBDIR){
|
else if( makerNoteKind==TABLESUBDIR){
|
||||||
sset4 (dataOffs, buffer+offs, parent->getOrder());
|
sset4 (dataOffs, buffer+offs, parent->getOrder());
|
||||||
dataOffs = directory[0]->write (dataOffs, buffer);
|
dataOffs = directory[0]->write (dataOffs, buffer);
|
||||||
return dataOffs;
|
return dataOffs;
|
||||||
}
|
}
|
||||||
@ -1057,7 +1196,7 @@ void Tag::initType (unsigned char *data, TagType type)
|
|||||||
value = new unsigned char[valuesize];
|
value = new unsigned char[valuesize];
|
||||||
memcpy ((char*)value, data, valuesize);
|
memcpy ((char*)value, data, valuesize);
|
||||||
}else
|
}else
|
||||||
value = data;
|
value = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tag::initInt (int data, TagType t, int cnt) {
|
void Tag::initInt (int data, TagType t, int cnt) {
|
||||||
@ -1067,6 +1206,8 @@ void Tag::initInt (int data, TagType t, int cnt) {
|
|||||||
valuesize = 4;
|
valuesize = 4;
|
||||||
else if (t==SHORT)
|
else if (t==SHORT)
|
||||||
valuesize = 2;
|
valuesize = 2;
|
||||||
|
else if (t==BYTE)
|
||||||
|
valuesize = 1;
|
||||||
else if (t==RATIONAL)
|
else if (t==RATIONAL)
|
||||||
valuesize = 8;
|
valuesize = 8;
|
||||||
|
|
||||||
@ -1187,7 +1328,7 @@ void ExifManager::parseCIFF (FILE* f, int base, int length, TagDirectory* root)
|
|||||||
if (numOfTags > 100) return;
|
if (numOfTags > 100) return;
|
||||||
|
|
||||||
float exptime, shutter, aperture, fnumber, ev;
|
float exptime, shutter, aperture, fnumber, ev;
|
||||||
exptime = fnumber = shutter = aperture = ev = -1000;
|
exptime = fnumber = shutter = aperture = ev = -1000.f;
|
||||||
int focal_len, iso;
|
int focal_len, iso;
|
||||||
focal_len = iso = -1;
|
focal_len = iso = -1;
|
||||||
|
|
||||||
@ -1285,12 +1426,12 @@ void ExifManager::parseCIFF (FILE* f, int base, int length, TagDirectory* root)
|
|||||||
saveCIFFMNTag (f, root, len, "CanonShotInfo");
|
saveCIFFMNTag (f, root, len, "CanonShotInfo");
|
||||||
|
|
||||||
iso = pow (2, (get4(f, INTEL),get2(f, INTEL))/32.0 - 4) * 50;
|
iso = pow (2, (get4(f, INTEL),get2(f, INTEL))/32.0 - 4) * 50;
|
||||||
aperture = ((get2(f, INTEL),(short)get2(f, INTEL))/32.0);
|
aperture = (get2(f, INTEL),(short)get2(f, INTEL))/32.0f;
|
||||||
fnumber = pow (2, aperture/2);
|
fnumber = pow (2, aperture/2);
|
||||||
shutter = ((short)get2(f, INTEL))/32.0;
|
shutter = ((short)get2(f, INTEL))/32.0f;
|
||||||
ev = ((short)get2(f, INTEL))/32.0;
|
ev = ((short)get2(f, INTEL))/32.0f;
|
||||||
fseek (f, 34, SEEK_CUR);
|
fseek (f, 34, SEEK_CUR);
|
||||||
if (shutter > 1e6) shutter = get2 (f, INTEL) / 10.0;
|
if (shutter > 1e6) shutter = get2 (f, INTEL) / 10.0f;
|
||||||
exptime = pow (2,-shutter);
|
exptime = pow (2,-shutter);
|
||||||
}
|
}
|
||||||
if (type == 0x5029) {
|
if (type == 0x5029) {
|
||||||
@ -1862,13 +2003,13 @@ unsigned short sget2 (unsigned char *s, rtexif::ByteOrder order) {
|
|||||||
else return s[0] << 8 | s[1];
|
else return s[0] << 8 | s[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
int sget4 (unsigned char *s, rtexif::ByteOrder order) {
|
inline int sget4 (unsigned char *s, rtexif::ByteOrder order) {
|
||||||
|
|
||||||
if (order == rtexif::INTEL) return s[0] | s[1] << 8 | s[2] << 16 | s[3] << 24;
|
if (order == rtexif::INTEL) return s[0] | s[1] << 8 | s[2] << 16 | s[3] << 24;
|
||||||
else return s[0] << 24 | s[1] << 16 | s[2] << 8 | s[3];
|
else return s[0] << 24 | s[1] << 16 | s[2] << 8 | s[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned short get2 (FILE* f, rtexif::ByteOrder order) {
|
inline unsigned short get2 (FILE* f, rtexif::ByteOrder order) {
|
||||||
|
|
||||||
unsigned char str[2] = { 0xff,0xff };
|
unsigned char str[2] = { 0xff,0xff };
|
||||||
fread (str, 1, 2, f);
|
fread (str, 1, 2, f);
|
||||||
|
299
rtexif/rtexif.h
299
rtexif/rtexif.h
@ -24,19 +24,37 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <iomanip>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include "../rtengine/procparams.h"
|
#include "../rtengine/procparams.h"
|
||||||
|
|
||||||
namespace rtexif {
|
namespace rtexif {
|
||||||
|
|
||||||
enum TagType {INVALID=0, BYTE=1, ASCII=2, SHORT=3, LONG=4, RATIONAL=5, UNDEFINED=7, SSHORT=8, SLONG=9, SRATIONAL=10, FLOAT=11, DOUBLE=12, OLYUNDEF=13, SUBDIR=99};
|
enum TagType {INVALID=0, BYTE=1, ASCII=2, SHORT=3, LONG=4, RATIONAL=5, UNDEFINED=7, SSHORT=8, SLONG=9, SRATIONAL=10, FLOAT=11, DOUBLE=12, OLYUNDEF=13, AUTO=98, SUBDIR=99};
|
||||||
enum ActionCode {DONTWRITE=0, WRITE=1, SYSTEM=2};
|
enum ActionCode {
|
||||||
|
AC_DONTWRITE, // don't write it to the output
|
||||||
|
AC_WRITE, // write it to the output
|
||||||
|
AC_SYSTEM, // changed by RT (not editable/deletable) - don't write, don't show
|
||||||
|
AC_NEW, // new addition - write, don't show
|
||||||
|
|
||||||
|
AC_INVALID=100, // invalid state
|
||||||
|
};
|
||||||
enum ByteOrder {INTEL=0x4949, MOTOROLA=0x4D4D};
|
enum ByteOrder {INTEL=0x4949, MOTOROLA=0x4D4D};
|
||||||
enum MNKind {NOMK, IFD, HEADERIFD, NIKON3, OLYMPUS2, FUJI,TABLESUBDIR};
|
enum MNKind {NOMK, IFD, HEADERIFD, NIKON3, OLYMPUS2, FUJI,TABLESUBDIR};
|
||||||
|
|
||||||
bool extractLensInfo(std::string &fullname,double &minFocal, double &maxFocal, double &maxApertureAtMinFocal, double &maxApertureAtMaxFocal);
|
bool extractLensInfo(std::string &fullname,double &minFocal, double &maxFocal, double &maxApertureAtMinFocal, double &maxApertureAtMaxFocal);
|
||||||
|
|
||||||
|
unsigned short sget2 (unsigned char *s, ByteOrder order);
|
||||||
|
int sget4 (unsigned char *s, ByteOrder order);
|
||||||
|
inline unsigned short get2 (FILE* f, ByteOrder order);
|
||||||
|
inline int get4 (FILE* f, ByteOrder order);
|
||||||
|
inline void sset2 (unsigned short v, unsigned char *s, ByteOrder order);
|
||||||
|
inline void sset4 (int v, unsigned char *s, ByteOrder order);
|
||||||
|
inline float int_to_float (int i);
|
||||||
|
short int int2_to_signed (short unsigned int i);
|
||||||
|
|
||||||
|
|
||||||
struct TIFFHeader {
|
struct TIFFHeader {
|
||||||
|
|
||||||
unsigned short byteOrder;
|
unsigned short byteOrder;
|
||||||
@ -47,18 +65,24 @@ struct TIFFHeader {
|
|||||||
class Tag;
|
class Tag;
|
||||||
class Interpreter;
|
class Interpreter;
|
||||||
|
|
||||||
// structure of informations describing an exif tag
|
/// Structure of informations describing an Exif tag
|
||||||
struct TagAttrib {
|
struct TagAttrib {
|
||||||
int ignore; // =0: never ignore, =1: always ignore, =2: ignore if the subdir type is reduced image, =-1: end of table
|
int ignore; // =0: never ignore, =1: always ignore, =2: ignore if the subdir type is reduced image, =-1: end of table
|
||||||
int action; //=0: dont write it to the output, =1: write it to the output, =2: dont write, dont show, =3: write, dont show
|
ActionCode action;
|
||||||
int editable;
|
int editable;
|
||||||
const TagAttrib* subdirAttribs; // =0 ->not subdir
|
const TagAttrib* subdirAttribs; // !NULL if this tag points to a subdir
|
||||||
unsigned short ID; // Numeric identifier of tag (or index inside DirectoryTable)
|
/** Numeric identifier of tag (or index inside DirectoryTable)
|
||||||
|
To avoid rewriting all the tables, and to address the problem of TagDirectoryTable with heterogeneous tag's type,
|
||||||
|
this parameter is now an unsigned int, where the leftmost 2 bytes represent the tag's type, which by default will be aqual
|
||||||
|
to 0 (INVALID). Only non null tag type will be used. See nikon attrib for an example
|
||||||
|
*/
|
||||||
|
unsigned short ID;
|
||||||
|
TagType type;
|
||||||
const char* name;
|
const char* name;
|
||||||
Interpreter* interpreter;
|
Interpreter* interpreter; // Call back hook
|
||||||
};
|
};
|
||||||
|
|
||||||
// a directory of tags
|
/// A directory of tags
|
||||||
class TagDirectory {
|
class TagDirectory {
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -66,7 +90,7 @@ class TagDirectory {
|
|||||||
const TagAttrib* attribs; // descriptor table to decode the tags
|
const TagAttrib* attribs; // descriptor table to decode the tags
|
||||||
ByteOrder order; // byte order
|
ByteOrder order; // byte order
|
||||||
TagDirectory* parent; // parent directory (NULL if root)
|
TagDirectory* parent; // parent directory (NULL if root)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TagDirectory ();
|
TagDirectory ();
|
||||||
TagDirectory (TagDirectory* p, FILE* f, int base, const TagAttrib* ta, ByteOrder border, bool skipIgnored=true);
|
TagDirectory (TagDirectory* p, FILE* f, int base, const TagAttrib* ta, ByteOrder border, bool skipIgnored=true);
|
||||||
@ -78,10 +102,12 @@ class TagDirectory {
|
|||||||
TagDirectory* getRoot ();
|
TagDirectory* getRoot ();
|
||||||
inline int getCount () const { return tags.size (); }
|
inline int getCount () const { return tags.size (); }
|
||||||
const TagAttrib* getAttrib (int id);
|
const TagAttrib* getAttrib (int id);
|
||||||
const TagAttrib* getAttrib (const char* name);
|
const TagAttrib* getAttrib (const char* name); // Find a Tag by scanning the whole tag tree and stopping at the first occurrence
|
||||||
|
const TagAttrib* getAttribP (const char* name); // Try to get the Tag at a given location. 'name' is a path relative to this directory (e.g. "LensInfo/FocalLength")
|
||||||
const TagAttrib* getAttribTable() { return attribs; }
|
const TagAttrib* getAttribTable() { return attribs; }
|
||||||
virtual Tag* getTag (const char* name) const;
|
Tag* getTag (const char* name) const; // Find a Tag by scanning the whole tag tree and stopping at the first occurrence
|
||||||
virtual Tag* getTag (int ID) const;
|
Tag* getTagP (const char* name) const; // Try to get the Tag at a given location. 'name' is a path relative to this directory (e.g. "LensInfo/FocalLength")
|
||||||
|
Tag* getTag (int ID) const;
|
||||||
virtual Tag* findTag (const char* name) const;
|
virtual Tag* findTag (const char* name) const;
|
||||||
bool getXMPTagValue(const char* name, char* value) const;
|
bool getXMPTagValue(const char* name, char* value) const;
|
||||||
|
|
||||||
@ -97,7 +123,7 @@ class TagDirectory {
|
|||||||
virtual TagDirectory* clone (TagDirectory* parent);
|
virtual TagDirectory* clone (TagDirectory* parent);
|
||||||
virtual void applyChange (std::string field, std::string value);
|
virtual void applyChange (std::string field, std::string value);
|
||||||
|
|
||||||
virtual void printAll () const;
|
virtual void printAll (unsigned int level=0) const; // reentrant debug function, keep level=0 on first call !
|
||||||
virtual void sort ();
|
virtual void sort ();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -134,7 +160,8 @@ class Tag {
|
|||||||
TagDirectory* parent;
|
TagDirectory* parent;
|
||||||
TagDirectory** directory;
|
TagDirectory** directory;
|
||||||
MNKind makerNoteKind;
|
MNKind makerNoteKind;
|
||||||
|
bool parseMakerNote(FILE* f, int base, ByteOrder bom );
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Tag (TagDirectory* parent, FILE* f, int base); // parse next tag from the file
|
Tag (TagDirectory* parent, FILE* f, int base); // parse next tag from the file
|
||||||
Tag (TagDirectory* parent, const TagAttrib* attr);
|
Tag (TagDirectory* parent, const TagAttrib* attr);
|
||||||
@ -154,7 +181,7 @@ class Tag {
|
|||||||
// get basic tag properties
|
// get basic tag properties
|
||||||
int getID () const { return tag; }
|
int getID () const { return tag; }
|
||||||
int getCount () const { return count; }
|
int getCount () const { return count; }
|
||||||
TagType getType () const { return type; }
|
TagType getType () const { return (attrib && attrib->type > INVALID && attrib->type < AUTO) ? attrib->type : type; }
|
||||||
unsigned char* getValue () const { return value; }
|
unsigned char* getValue () const { return value; }
|
||||||
const TagAttrib* getAttrib () const { return attrib; }
|
const TagAttrib* getAttrib () const { return attrib; }
|
||||||
inline ByteOrder getOrder () const { return parent ? parent->getOrder() : INTEL; }
|
inline ByteOrder getOrder () const { return parent ? parent->getOrder() : INTEL; }
|
||||||
@ -163,15 +190,17 @@ class Tag {
|
|||||||
bool getOwnMemory() const { return allocOwnMemory; }
|
bool getOwnMemory() const { return allocOwnMemory; }
|
||||||
|
|
||||||
// read/write value
|
// read/write value
|
||||||
int toInt (int ofs=0, TagType astype=INVALID);
|
int toInt (int ofs=0, TagType astype=INVALID);
|
||||||
void fromInt (int v);
|
void fromInt (int v);
|
||||||
double toDouble (int ofs=0);
|
double toDouble (int ofs=0);
|
||||||
void toRational (int& num, int& denom, int ofs=0);
|
double *toDoubleArray (int ofs=0);
|
||||||
void toString (char* buffer, int ofs=0);
|
void toRational (int& num, int& denom, int ofs=0);
|
||||||
void fromString (const char* v, int size=-1);
|
void toString (char* buffer, int ofs=0);
|
||||||
void setInt (int v, int ofs=0, TagType astype=LONG);
|
void fromString (const char* v, int size=-1);
|
||||||
|
void setInt (int v, int ofs=0, TagType astype=LONG);
|
||||||
|
|
||||||
// additional getter/setter for more confortable use
|
|
||||||
|
// additional getter/setter for more comfortable use
|
||||||
std::string valueToString ();
|
std::string valueToString ();
|
||||||
std::string nameToString (int i=0);
|
std::string nameToString (int i=0);
|
||||||
void valueFromString (const std::string& value);
|
void valueFromString (const std::string& value);
|
||||||
@ -213,22 +242,15 @@ class Interpreter {
|
|||||||
public:
|
public:
|
||||||
Interpreter () {}
|
Interpreter () {}
|
||||||
virtual ~Interpreter() {};
|
virtual ~Interpreter() {};
|
||||||
virtual std::string toString (Tag* t) { return ""; }
|
|
||||||
virtual void fromString (Tag* t, const std::string& value) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
class StdInterpreter : public Interpreter {
|
|
||||||
public:
|
|
||||||
StdInterpreter () {}
|
|
||||||
virtual std::string toString (Tag* t) {
|
virtual std::string toString (Tag* t) {
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
t->toString (buffer);
|
t->toString (buffer);
|
||||||
std::string s(buffer);
|
std::string s(buffer);
|
||||||
std::string::size_type p1 = s.find_first_not_of(' ');
|
std::string::size_type p1 = s.find_first_not_of(' ');
|
||||||
if( p1 == std::string::npos )
|
if( p1 == std::string::npos )
|
||||||
return s;
|
return s;
|
||||||
else
|
else
|
||||||
return s.substr(p1, s.find_last_not_of(' ')-p1+1);
|
return s.substr(p1, s.find_last_not_of(' ')-p1+1);
|
||||||
}
|
}
|
||||||
virtual void fromString (Tag* t, const std::string& value) {
|
virtual void fromString (Tag* t, const std::string& value) {
|
||||||
if (t->getType()==SHORT || t->getType()==LONG)
|
if (t->getType()==SHORT || t->getType()==LONG)
|
||||||
@ -236,8 +258,46 @@ class StdInterpreter : public Interpreter {
|
|||||||
else
|
else
|
||||||
t->fromString (value.c_str());
|
t->fromString (value.c_str());
|
||||||
}
|
}
|
||||||
|
// Get the value as a double
|
||||||
|
virtual double toDouble(Tag* t, int ofs=0) {
|
||||||
|
double ud, dd;
|
||||||
|
switch (t->getType()) {
|
||||||
|
case BYTE: return (double)((int)t->getValue()[ofs]);
|
||||||
|
case ASCII: return 0.0;
|
||||||
|
case SSHORT:return (double)int2_to_signed(sget2 (t->getValue()+ofs, t->getOrder()));
|
||||||
|
case SHORT: return (double)((int)sget2 (t->getValue()+ofs, t->getOrder()));
|
||||||
|
case SLONG:
|
||||||
|
case LONG: return (double)((int)sget4 (t->getValue()+ofs, t->getOrder()));
|
||||||
|
case SRATIONAL:
|
||||||
|
case RATIONAL: ud = (int)sget4 (t->getValue()+ofs, t->getOrder()); dd = (int)sget4 (t->getValue()+ofs+4, t->getOrder()); return dd==0. ? 0. : (double)ud / (double)dd;
|
||||||
|
case FLOAT: return double(sget4 (t->getValue()+ofs, t->getOrder()));
|
||||||
|
case UNDEFINED: return 0.;
|
||||||
|
default: return 0.; // Quick fix for missing cases (INVALID, DOUBLE, OLYUNDEF, SUBDIR)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Get the value as an int
|
||||||
|
virtual int toInt (Tag* t, int ofs=0, TagType astype=INVALID) {
|
||||||
|
int a;
|
||||||
|
if (astype == INVALID || astype==AUTO)
|
||||||
|
astype = t->getType();
|
||||||
|
switch (astype) {
|
||||||
|
case BYTE: return t->getValue()[ofs];
|
||||||
|
case ASCII: return 0;
|
||||||
|
case SSHORT:return (int)int2_to_signed(sget2 (t->getValue()+ofs, t->getOrder()));
|
||||||
|
case SHORT: return (int)sget2 (t->getValue()+ofs, t->getOrder());
|
||||||
|
case SLONG:
|
||||||
|
case LONG: return (int)sget4 (t->getValue()+ofs, t->getOrder());
|
||||||
|
case SRATIONAL:
|
||||||
|
case RATIONAL: a = (int)sget4 (t->getValue()+ofs+4, t->getOrder()); return a==0 ? 0 : (int)sget4 (t->getValue()+ofs, t->getOrder()) / a;
|
||||||
|
case FLOAT: return (int)toDouble(t, ofs);
|
||||||
|
case UNDEFINED: return 0;
|
||||||
|
default: return 0; // Quick fix for missing cases (INVALID, DOUBLE, OLYUNDEF, SUBDIR)
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
extern StdInterpreter stdInterpreter;
|
|
||||||
|
extern Interpreter stdInterpreter;
|
||||||
class ChoiceInterpreter : public Interpreter {
|
class ChoiceInterpreter : public Interpreter {
|
||||||
protected:
|
protected:
|
||||||
std::map<int,std::string> choices;
|
std::map<int,std::string> choices;
|
||||||
@ -248,7 +308,7 @@ class ChoiceInterpreter : public Interpreter {
|
|||||||
if (r!=choices.end())
|
if (r!=choices.end())
|
||||||
return r->second;
|
return r->second;
|
||||||
else {
|
else {
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
t->toString (buffer);
|
t->toString (buffer);
|
||||||
return std::string (buffer);
|
return std::string (buffer);
|
||||||
}
|
}
|
||||||
@ -258,92 +318,109 @@ class ChoiceInterpreter : public Interpreter {
|
|||||||
template< class T >
|
template< class T >
|
||||||
class IntLensInterpreter : public Interpreter {
|
class IntLensInterpreter : public Interpreter {
|
||||||
protected:
|
protected:
|
||||||
typedef std::multimap< T, std::string> container_t;
|
typedef std::multimap< T, std::string> container_t;
|
||||||
typedef typename std::multimap< T, std::string>::iterator it_t;
|
typedef typename std::multimap< T, std::string>::iterator it_t;
|
||||||
typedef std::pair< T, std::string> p_t;
|
typedef std::pair< T, std::string> p_t;
|
||||||
container_t choices;
|
container_t choices;
|
||||||
|
|
||||||
virtual std::string guess(const T lensID, double focalLength, double maxApertureAtFocal )
|
virtual std::string guess(const T lensID, double focalLength, double maxApertureAtFocal, double *lensInfoArray) {
|
||||||
{
|
it_t r;
|
||||||
it_t r;
|
size_t nFound = choices.count( lensID );
|
||||||
size_t nFound = choices.count( lensID );
|
|
||||||
|
|
||||||
switch( nFound )
|
switch( nFound ) {
|
||||||
{
|
case 0: // lens Unknown
|
||||||
case 0: // lens Unknown
|
{
|
||||||
{
|
std::ostringstream s;
|
||||||
std::ostringstream s;
|
s << lensID;
|
||||||
s << lensID;
|
return s.str();
|
||||||
return s.str();
|
}
|
||||||
}
|
case 1: // lens found
|
||||||
case 1: // lens found
|
r = choices.find ( lensID );
|
||||||
r = choices.find ( lensID );
|
return r->second;
|
||||||
return r->second;
|
default:
|
||||||
default:
|
// More than one hit: we must guess
|
||||||
// More than one hit: we must guess
|
break;
|
||||||
break;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
std::string bestMatch("Unknown");
|
||||||
|
double a1,a2,f1,f2;
|
||||||
|
|
||||||
double deltaMin = 1000.;
|
/* FIRST TRY
|
||||||
|
*
|
||||||
|
* Get the lens info (min/man focal, min/max aperture) and compare them to the possible choice
|
||||||
|
*/
|
||||||
|
if (lensInfoArray) {
|
||||||
|
for ( r = choices.lower_bound( lensID ); r != choices.upper_bound(lensID); r++ ){
|
||||||
|
if( !extractLensInfo( r->second ,f1,f2,a1,a2) )
|
||||||
|
continue;
|
||||||
|
if (f1==lensInfoArray[0] && f2==lensInfoArray[1] && a1==lensInfoArray[2] && a2==lensInfoArray[3])
|
||||||
|
// can't match better! we take this entry as being the one
|
||||||
|
return r->second;
|
||||||
|
}
|
||||||
|
// No lens found, we update the "unknown" string with the lens info values
|
||||||
|
if (lensInfoArray[0]==lensInfoArray[1])
|
||||||
|
bestMatch += Glib::ustring::compose(" (%1mm", int(lensInfoArray[0]));
|
||||||
|
else
|
||||||
|
bestMatch += Glib::ustring::compose(" (%1-%2mm", int(lensInfoArray[0]), int(lensInfoArray[1]));
|
||||||
|
|
||||||
/* Choose the best match: thanks to exiftool by Phil Harvey
|
if (lensInfoArray[2]==lensInfoArray[3])
|
||||||
* first throws for "out of focal range" and lower or upper aperture of the lens compared to MaxApertureAtFocal
|
bestMatch += Glib::ustring::compose(" f/%1)", Glib::ustring::format(std::fixed, std::setprecision(1), lensInfoArray[2]));
|
||||||
* if the lens is not constant aperture, calculate aprox. aperture of the lens at focalLength
|
else
|
||||||
* and compare with actual aperture.
|
bestMatch += Glib::ustring::compose(" f/%1-%2)",
|
||||||
*/
|
Glib::ustring::format(std::fixed, std::setprecision(1), lensInfoArray[2]),
|
||||||
std::string bestMatch("Unknown");
|
Glib::ustring::format(std::fixed, std::setprecision(1), lensInfoArray[3]));
|
||||||
std::ostringstream candidates;
|
}
|
||||||
for ( r = choices.lower_bound( lensID ); r != choices.upper_bound(lensID); r++ ){
|
|
||||||
double a1,a2,f1,f2,lensAperture,dif;
|
|
||||||
|
|
||||||
if( !extractLensInfo( r->second ,f1,f2,a1,a2) )
|
/* SECOND TRY
|
||||||
continue;
|
*
|
||||||
if( f1 == 0. || a1 == 0.)
|
* Choose the best match: thanks to exiftool by Phil Harvey
|
||||||
continue;
|
* first throws for "out of focal range" and lower or upper aperture of the lens compared to MaxApertureAtFocal
|
||||||
|
* if the lens is not constant aperture, calculate aprox. aperture of the lens at focalLength
|
||||||
|
* and compare with actual aperture.
|
||||||
|
*/
|
||||||
|
std::ostringstream candidates;
|
||||||
|
double deltaMin = 1000.;
|
||||||
|
for ( r = choices.lower_bound( lensID ); r != choices.upper_bound(lensID); r++ ){
|
||||||
|
double lensAperture,dif;
|
||||||
|
|
||||||
if( focalLength < f1 - .5 || focalLength > f2 + 0.5 )
|
if( !extractLensInfo( r->second ,f1,f2,a1,a2) )
|
||||||
continue;
|
continue;
|
||||||
if( maxApertureAtFocal > 0.1){
|
if( f1 == 0. || a1 == 0.)
|
||||||
if( maxApertureAtFocal < a1 - 0.15 || maxApertureAtFocal > a2 +0.15)
|
continue;
|
||||||
continue;
|
|
||||||
|
|
||||||
if( a1 == a2 || f1 == f2)
|
if( focalLength < f1 - .5 || focalLength > f2 + 0.5 )
|
||||||
lensAperture = a1;
|
continue;
|
||||||
else
|
if( maxApertureAtFocal > 0.1){
|
||||||
lensAperture = exp( log(a1)+(log(a2)-log(a1))/(log(f2)-log(f1))*(log(focalLength)-log(f1)) );
|
if( maxApertureAtFocal < a1 - 0.15 || maxApertureAtFocal > a2 +0.15)
|
||||||
|
continue;
|
||||||
|
|
||||||
dif = abs(lensAperture - maxApertureAtFocal);
|
if( a1 == a2 || f1 == f2)
|
||||||
}else
|
lensAperture = a1;
|
||||||
dif = 0;
|
else
|
||||||
if( dif < deltaMin ){
|
lensAperture = exp( log(a1)+(log(a2)-log(a1))/(log(f2)-log(f1))*(log(focalLength)-log(f1)) );
|
||||||
deltaMin = dif;
|
|
||||||
bestMatch = r->second;
|
|
||||||
}
|
|
||||||
if( dif < 0.15){
|
|
||||||
if( candidates.tellp() )
|
|
||||||
candidates << "\n or " << r->second;
|
|
||||||
else
|
|
||||||
candidates << r->second;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
dif = abs(lensAperture - maxApertureAtFocal);
|
||||||
if( !candidates.tellp() )
|
}else
|
||||||
return bestMatch;
|
dif = 0;
|
||||||
else
|
if( dif < deltaMin ){
|
||||||
return candidates.str();
|
deltaMin = dif;
|
||||||
}
|
bestMatch = r->second;
|
||||||
|
}
|
||||||
|
if( dif < 0.15){
|
||||||
|
if( candidates.tellp() )
|
||||||
|
candidates << "\n or " << r->second;
|
||||||
|
else
|
||||||
|
candidates << r->second;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( !candidates.tellp() )
|
||||||
|
return bestMatch;
|
||||||
|
else
|
||||||
|
return candidates.str();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
inline int getTypeSize( TagType type );
|
inline int getTypeSize( TagType type );
|
||||||
inline unsigned short sget2 (unsigned char *s, ByteOrder order);
|
|
||||||
inline int sget4 (unsigned char *s, ByteOrder order);
|
|
||||||
inline unsigned short get2 (FILE* f, ByteOrder order);
|
|
||||||
inline int get4 (FILE* f, ByteOrder order);
|
|
||||||
inline void sset2 (unsigned short v, unsigned char *s, ByteOrder order);
|
|
||||||
inline void sset4 (int v, unsigned char *s, ByteOrder order);
|
|
||||||
inline float int_to_float (int i);
|
|
||||||
inline short int int2_to_signed (short unsigned int i);
|
|
||||||
|
|
||||||
extern const TagAttrib exifAttribs[];
|
extern const TagAttrib exifAttribs[];
|
||||||
extern const TagAttrib gpsAttribs[];
|
extern const TagAttrib gpsAttribs[];
|
||||||
@ -354,6 +431,7 @@ extern const TagAttrib nikon3Attribs[];
|
|||||||
extern const TagAttrib canonAttribs[];
|
extern const TagAttrib canonAttribs[];
|
||||||
extern const TagAttrib pentaxAttribs[];
|
extern const TagAttrib pentaxAttribs[];
|
||||||
extern const TagAttrib pentaxLensDataAttribs[];
|
extern const TagAttrib pentaxLensDataAttribs[];
|
||||||
|
extern const TagAttrib pentaxLensInfoQAttribs[];
|
||||||
extern const TagAttrib pentaxAEInfoAttribs[];
|
extern const TagAttrib pentaxAEInfoAttribs[];
|
||||||
extern const TagAttrib pentaxCameraSettingsAttribs[];
|
extern const TagAttrib pentaxCameraSettingsAttribs[];
|
||||||
extern const TagAttrib pentaxFlashInfoAttribs[];
|
extern const TagAttrib pentaxFlashInfoAttribs[];
|
||||||
@ -363,8 +441,13 @@ extern const TagAttrib pentaxCameraInfoAttribs[];
|
|||||||
extern const TagAttrib fujiAttribs[];
|
extern const TagAttrib fujiAttribs[];
|
||||||
extern const TagAttrib minoltaAttribs[];
|
extern const TagAttrib minoltaAttribs[];
|
||||||
extern const TagAttrib sonyAttribs[];
|
extern const TagAttrib sonyAttribs[];
|
||||||
|
extern const TagAttrib sonyTag9405Attribs[];
|
||||||
|
extern const TagAttrib sonyCameraInfoAttribs[];
|
||||||
|
extern const TagAttrib sonyCameraInfo2Attribs[];
|
||||||
extern const TagAttrib sonyCameraSettingsAttribs[];
|
extern const TagAttrib sonyCameraSettingsAttribs[];
|
||||||
extern const TagAttrib sonyCameraSettingsAttribs2[];
|
extern const TagAttrib sonyCameraSettingsAttribs2[];
|
||||||
|
extern const TagAttrib sonyCameraSettingsAttribs3[];
|
||||||
|
//extern const TagAttrib sonyDNGMakerNote[];
|
||||||
extern const TagAttrib olympusAttribs[];
|
extern const TagAttrib olympusAttribs[];
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -392,173 +392,177 @@ class UTF8BinInterpreter : public Interpreter {
|
|||||||
UTF8BinInterpreter utf8BinInterpreter;
|
UTF8BinInterpreter utf8BinInterpreter;
|
||||||
|
|
||||||
const TagAttrib exifAttribs[] = {
|
const TagAttrib exifAttribs[] = {
|
||||||
{0, 2, 0, 0, 0x0100, "ImageWidth", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0100, AUTO, "ImageWidth", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x0101, "ImageHeight", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0101, AUTO, "ImageHeight", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x0102, "BitsPerSample", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0102, AUTO, "BitsPerSample", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x0103, "Compression", &compressionInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0103, AUTO, "Compression", &compressionInterpreter},
|
||||||
{0, 1, 0, 0, 0x828d, "CFAPatternDim", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x828d, AUTO, "CFAPatternDim", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x828e, "CFAPattern", &cfaInterpreter},
|
{0, AC_WRITE, 0, 0, 0x828e, AUTO, "CFAPattern", &cfaInterpreter},
|
||||||
{0, 1, 0, 0, 0x829A, "ExposureTime", &exposureTimeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x829A, AUTO, "ExposureTime", &exposureTimeInterpreter},
|
||||||
{0, 1, 0, 0, 0x829D, "FNumber", &fNumberInterpreter},
|
{0, AC_WRITE, 0, 0, 0x829D, AUTO, "FNumber", &fNumberInterpreter},
|
||||||
{0, 1, 0, 0, 0x8822, "ExposureProgram", &exposureProgramInterpreter},
|
{0, AC_WRITE, 0, 0, 0x8822, AUTO, "ExposureProgram", &exposureProgramInterpreter},
|
||||||
{0, 1, 0, 0, 0x8824, "SpectralSensitivity", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x8824, AUTO, "SpectralSensitivity", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x8827, "ISOSpeedRatings", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x8827, AUTO, "ISOSpeedRatings", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x8828, "OECF", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x8828, AUTO, "OECF", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x9000, "ExifVersion", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9000, AUTO, "ExifVersion", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x9003, "DateTimeOriginal", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9003, AUTO, "DateTimeOriginal", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x9004, "DateTimeDigitized", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9004, AUTO, "DateTimeDigitized", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x9101, "ComponentsConfiguration", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x9101, AUTO, "ComponentsConfiguration", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x9102, "CompressedBitsPerPixel", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x9102, AUTO, "CompressedBitsPerPixel", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x9201, "ShutterSpeedValue", &shutterSpeedInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9201, AUTO, "ShutterSpeedValue", &shutterSpeedInterpreter},
|
||||||
{0, 1, 0, 0, 0x9202, "ApertureValue", &apertureInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9202, AUTO, "ApertureValue", &apertureInterpreter},
|
||||||
{0, 1, 0, 0, 0x9203, "BrightnessValue", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9203, AUTO, "BrightnessValue", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x9204, "ExposureBiasValue", &exposureBiasInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9204, AUTO, "ExposureBiasValue", &exposureBiasInterpreter},
|
||||||
{0, 1, 0, 0, 0x9205, "MaxApertureValue", &apertureInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9205, AUTO, "MaxApertureValue", &apertureInterpreter},
|
||||||
{0, 1, 0, 0, 0x9206, "SubjectDistance", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9206, AUTO, "SubjectDistance", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x9207, "MeteringMode", &meteringModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9207, AUTO, "MeteringMode", &meteringModeInterpreter},
|
||||||
{0, 1, 0, 0, 0x9208, "LightSource", &lightSourceInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9208, AUTO, "LightSource", &lightSourceInterpreter},
|
||||||
{0, 1, 0, 0, 0x9209, "Flash", &flashInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9209, AUTO, "Flash", &flashInterpreter},
|
||||||
{0, 1, 0, 0, 0x920A, "FocalLength", &focalLengthInterpreter},
|
{0, AC_WRITE, 0, 0, 0x920A, AUTO, "FocalLength", &focalLengthInterpreter},
|
||||||
{0, 1, 0, 0, 0x9214, "SubjectArea", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9214, AUTO, "SubjectArea", &stdInterpreter},
|
||||||
{0, 0, 0, 0, 0x9216, "TIFFEPSStandardID", &stdInterpreter},
|
{0, AC_DONTWRITE, 0, 0, 0x9216, AUTO, "TIFFEPSStandardID", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x9217, "SensingMethod", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9217, AUTO, "SensingMethod", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x927C, "MakerNote", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x927C, AUTO, "MakerNote", &stdInterpreter},
|
||||||
{0, 1, 1, 0, 0x9286, "UserComment", &userCommentInterpreter},
|
{0, AC_WRITE, 1, 0, 0x9286, AUTO, "UserComment", &userCommentInterpreter},
|
||||||
{0, 1, 0, 0, 0x9290, "SubSecTime", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9290, AUTO, "SubSecTime", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x9291, "SubSecTimeOriginal", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9291, AUTO, "SubSecTimeOriginal", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x9292, "SubSecTimeDigitized", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9292, AUTO, "SubSecTimeDigitized", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0xA000, "FlashpixVersion", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0xA000, AUTO, "FlashpixVersion", &stdInterpreter},
|
||||||
{0, 0, 0, 0, 0xA001, "ColorSpace", &colorSpaceInterpreter},
|
{0, AC_DONTWRITE, 0, 0, 0xA001, AUTO, "ColorSpace", &colorSpaceInterpreter},
|
||||||
{0, 2, 0, 0, 0xA002, "PixelXDimension", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0xA002, AUTO, "PixelXDimension", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0xA003, "PixelYDimension", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0xA003, AUTO, "PixelYDimension", &stdInterpreter},
|
||||||
{1, 0, 0, 0, 0xA004, "RelatedSoundFile", &stdInterpreter},
|
{1, AC_DONTWRITE, 0, 0, 0xA004, AUTO, "RelatedSoundFile", &stdInterpreter},
|
||||||
{0, 2, 0, iopAttribs, 0xA005, "Interoperability", &stdInterpreter}, // do not enable, as it causes trouble with FUJI files
|
{0, AC_SYSTEM, 0, iopAttribs, 0xA005, AUTO, "Interoperability", &stdInterpreter}, // do not enable, as it causes trouble with FUJI files
|
||||||
{0, 1, 0, 0, 0xA20B, "FlashEnergy", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA20B, AUTO, "FlashEnergy", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xA20C, "SpatialFrequencyResponse", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA20C, AUTO, "SpatialFrequencyResponse", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xA20E, "FocalPlaneXResolution", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA20E, AUTO, "FocalPlaneXResolution", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xA20F, "FocalPlaneYResolution", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA20F, AUTO, "FocalPlaneYResolution", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xA210, "FocalPlaneResolutionUnit", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA210, AUTO, "FocalPlaneResolutionUnit", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xA214, "SubjectLocation", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA214, AUTO, "SubjectLocation", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xA215, "ExposureIndex", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA215, AUTO, "ExposureIndex", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xA217, "SensingMethod", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA217, AUTO, "SensingMethod", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xA300, "FileSource", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA300, AUTO, "FileSource", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xA301, "SceneType", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA301, AUTO, "SceneType", &stdInterpreter},
|
||||||
{0, 0, 0, 0, 0xA302, "CFAPattern", &cfaInterpreter},
|
{0, AC_DONTWRITE, 0, 0, 0xA302, AUTO, "CFAPattern", &cfaInterpreter},
|
||||||
{0, 1, 0, 0, 0xA401, "CustomRendered", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA401, AUTO, "CustomRendered", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xA402, "ExposureMode", &exposureModeInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA402, AUTO, "ExposureMode", &exposureModeInterpreter},
|
||||||
{0, 1, 0, 0, 0xA403, "WhiteBalance", &whiteBalanceInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA403, AUTO, "WhiteBalance", &whiteBalanceInterpreter},
|
||||||
{0, 1, 0, 0, 0xA404, "DigitalZoomRatio", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA404, AUTO, "DigitalZoomRatio", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xA405, "FocalLengthIn35mmFilm", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA405, AUTO, "FocalLengthIn35mmFilm", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xA406, "SceneCaptureType", &sceneCaptureInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA406, AUTO, "SceneCaptureType", &sceneCaptureInterpreter},
|
||||||
{0, 1, 0, 0, 0xA407, "GainControl", &gainControlInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA407, AUTO, "GainControl", &gainControlInterpreter},
|
||||||
{0, 1, 0, 0, 0xA408, "Contrast", &contrastInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA408, AUTO, "Contrast", &contrastInterpreter},
|
||||||
{0, 1, 0, 0, 0xA409, "Saturation", &saturationInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA409, AUTO, "Saturation", &saturationInterpreter},
|
||||||
{0, 1, 0, 0, 0xA40A, "Sharpness", &sharpnessInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA40A, AUTO, "Sharpness", &sharpnessInterpreter},
|
||||||
{0, 1, 0, 0, 0xA40B, "DeviceSettingDescription", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA40B, AUTO, "DeviceSettingDescription", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xA40C, "SubjectDistanceRange", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA40C, AUTO, "SubjectDistanceRange", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xA420, "ImageUniqueID", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA420, AUTO, "ImageUniqueID", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xA431, "SerialNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA431, AUTO, "SerialNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xA432, "LensInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA432, AUTO, "LensInfo", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xA433, "LensMake", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA433, AUTO, "LensMake", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xA434, "LensModel", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA434, AUTO, "LensModel", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xA435, "LensSerialNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xA435, AUTO, "LensSerialNumber", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xc630, "DNGLensInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xc630, AUTO, "DNGLensInfo", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL }};
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL }};
|
||||||
|
|
||||||
|
|
||||||
const TagAttrib gpsAttribs[] = {
|
const TagAttrib gpsAttribs[] = {
|
||||||
{0, 1, 0, 0, 0x0000, "GPSVersionID", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0000, AUTO, "GPSVersionID", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0001, "GPSLatitudeRef", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0001, AUTO, "GPSLatitudeRef", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0002, "GPSLatitude", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0002, AUTO, "GPSLatitude", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0003, "GPSLongitudeRef", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0003, AUTO, "GPSLongitudeRef", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0004, "GPSLongitude", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0004, AUTO, "GPSLongitude", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0005, "GPSAltitudeRef", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0005, AUTO, "GPSAltitudeRef", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0006, "GPSAltitude", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0006, AUTO, "GPSAltitude", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0007, "GPSTimeStamp", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0007, AUTO, "GPSTimeStamp", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0008, "GPSSatelites", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0008, AUTO, "GPSSatelites", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0009, "GPSStatus", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0009, AUTO, "GPSStatus", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x000a, "GPSMeasureMode", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000a, AUTO, "GPSMeasureMode", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x000b, "GPSDOP", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000b, AUTO, "GPSDOP", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x000c, "GPSSpeedRef", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000c, AUTO, "GPSSpeedRef", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x000d, "GPSSpeed", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000d, AUTO, "GPSSpeed", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x000e, "GPSTrackRef", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000e, AUTO, "GPSTrackRef", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x000f, "GPSTrack", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x000f, AUTO, "GPSTrack", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0010, "GPSImgDirectionRef", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0010, AUTO, "GPSImgDirectionRef", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0011, "GPSImgDirection", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0011, AUTO, "GPSImgDirection", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0012, "GPSMapDatum", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0012, AUTO, "GPSMapDatum", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0013, "GPSDestLatitudeRef", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0013, AUTO, "GPSDestLatitudeRef", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0014, "GPSDestLatitude", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0014, AUTO, "GPSDestLatitude", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0015, "GPSDestLongitudeRef", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0015, AUTO, "GPSDestLongitudeRef", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0016, "GPSDestLongitude", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0016, AUTO, "GPSDestLongitude", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0017, "GPSDestBearingRef", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0017, AUTO, "GPSDestBearingRef", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0018, "GPSDestBearing", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0018, AUTO, "GPSDestBearing", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0019, "GPSDestDistanceRef", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0019, AUTO, "GPSDestDistanceRef", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x001a, "GPSDestDistance", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x001a, AUTO, "GPSDestDistance", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x001b, "GPSProcessingMethod", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x001b, AUTO, "GPSProcessingMethod", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x001c, "GPSAreaInformation", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x001c, AUTO, "GPSAreaInformation", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x001d, "GPSDateStamp", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x001d, AUTO, "GPSDateStamp", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x001e, "GPSDifferential", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x001e, AUTO, "GPSDifferential", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL }};
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL }};
|
||||||
|
|
||||||
const TagAttrib iopAttribs[] = {
|
const TagAttrib iopAttribs[] = {
|
||||||
{0, 1, 0, 0, 0x0001, "InteroperabilityIndex", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0001, AUTO, "InteroperabilityIndex", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0002, "InteroperabilityVersion", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0002, AUTO, "InteroperabilityVersion", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL }};
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL }};
|
||||||
|
|
||||||
const TagAttrib ifdAttribs[] = {
|
const TagAttrib ifdAttribs[] = {
|
||||||
{0, 2, 0, 0, 0x0017, "PanaISO", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0017, AUTO, "PanaISO", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x0100, "ImageWidth", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0100, AUTO, "ImageWidth", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x0101, "ImageHeight", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0101, AUTO, "ImageHeight", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x0102, "BitsPerSample", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0102, AUTO, "BitsPerSample", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x0103, "Compression", &compressionInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0103, AUTO, "Compression", &compressionInterpreter},
|
||||||
{0, 2, 0, 0, 0x0106, "PhotometricInterpretation", &photometricInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0106, AUTO, "PhotometricInterpretation", &photometricInterpreter},
|
||||||
{0, 1, 1, 0, 0x010E, "ImageDescription", &stdInterpreter},
|
{0, AC_WRITE, 1, 0, 0x010E, AUTO, "ImageDescription", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x010F, "Make", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x010F, AUTO, "Make", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0110, "Model", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0110, AUTO, "Model", &stdInterpreter},
|
||||||
{1, 0, 0, 0, 0x0111, "StripOffsets", &stdInterpreter},
|
{1, AC_DONTWRITE, 0, 0, 0x0111, AUTO, "StripOffsets", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x0112, "Orientation", &orientationInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0112, AUTO, "Orientation", &orientationInterpreter},
|
||||||
{0, 2, 0, 0, 0x0115, "SamplesPerPixel", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0115, AUTO, "SamplesPerPixel", &stdInterpreter},
|
||||||
{1, 0, 0, 0, 0x0116, "RowsPerStrip", &stdInterpreter},
|
{1, AC_DONTWRITE, 0, 0, 0x0116, AUTO, "RowsPerStrip", &stdInterpreter},
|
||||||
{1, 0, 0, 0, 0x0117, "StripByteCounts", &stdInterpreter},
|
{1, AC_DONTWRITE, 0, 0, 0x0117, AUTO, "StripByteCounts", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x011A, "XResolution", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x011A, AUTO, "XResolution", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x011B, "YResolution", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x011B, AUTO, "YResolution", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x011C, "PlanarConfiguration", &planarConfigInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x011C, AUTO, "PlanarConfiguration", &planarConfigInterpreter},
|
||||||
{0, 2, 0, 0, 0x0128, "ResolutionUnit", &unitsInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0128, AUTO, "ResolutionUnit", &unitsInterpreter},
|
||||||
{0, 2, 0, 0, 0x012D, "TransferFunction", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x012D, AUTO, "TransferFunction", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x0131, "Software", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0131, AUTO, "Software", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x0132, "DateTime", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x0132, AUTO, "DateTime", &stdInterpreter},
|
||||||
{0, 1, 1, 0, 0x013B, "Artist", &stdInterpreter},
|
{0, AC_WRITE, 1, 0, 0x013B, AUTO, "Artist", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x013E, "WhitePoint", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x013E, AUTO, "WhitePoint", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x013F, "PriomaryChromaticities", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x013F, AUTO, "PriomaryChromaticities", &stdInterpreter},
|
||||||
{0, 1, 0, ifdAttribs, 0x014A, "SubIFD", &stdInterpreter},
|
{0, AC_WRITE, 0, ifdAttribs, 0x014A, AUTO, "SubIFD", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x0201, "JPEGInterchangeFormat", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0201, AUTO, "JPEGInterchangeFormat", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x0202, "JPEGInterchangeFormatLength", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0202, AUTO, "JPEGInterchangeFormatLength", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x0211, "YCbCrCoefficients", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0211, AUTO, "YCbCrCoefficients", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x0212, "YCbCrSubSampling", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0212, AUTO, "YCbCrSubSampling", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x0213, "YCbCrPositioning", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0213, AUTO, "YCbCrPositioning", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x0214, "ReferenceBlackWhite", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x0214, AUTO, "ReferenceBlackWhite", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x02bc, "ApplicationNotes", &utf8BinInterpreter}, // XMP
|
{0, AC_SYSTEM, 0, 0, 0x02bc, AUTO, "ApplicationNotes", &utf8BinInterpreter}, // XMP
|
||||||
{0, 1, 0, 0, 0x4746, "Rating",&stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x4746, AUTO, "Rating",&stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x4749, "RatingPercent",&stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x4749, AUTO, "RatingPercent",&stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x828d, "CFAPatternDim", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x828d, AUTO, "CFAPatternDim", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x828e, "CFAPattern", &cfaInterpreter},
|
{0, AC_WRITE, 0, 0, 0x828e, AUTO, "CFAPattern", &cfaInterpreter},
|
||||||
{0, 1, 1, 0, 0x8298, "Copyright", &stdInterpreter},
|
{0, AC_WRITE, 1, 0, 0x8298, AUTO, "Copyright", &stdInterpreter},
|
||||||
{0, 0, 0, 0, 0x8606, "LeafData", &stdInterpreter}, // is actually a subdir, but a proprietary format
|
{0, AC_DONTWRITE, 0, 0, 0x8606, AUTO, "LeafData", &stdInterpreter}, // is actually a subdir, but a proprietary format
|
||||||
{0, 1, 0, exifAttribs, 0x8769, "Exif", &stdInterpreter},
|
{0, AC_WRITE, 0, exifAttribs, 0x8769, AUTO, "Exif", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x8773, "ICCProfile", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x8773, AUTO, "ICCProfile", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x83BB, "IPTCData", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0x83BB, AUTO, "IPTCData", &stdInterpreter},
|
||||||
{0, 1, 0, gpsAttribs, 0x8825, "GPSInfo", &stdInterpreter},
|
{0, AC_WRITE, 0, gpsAttribs, 0x8825, AUTO, "GPSInfo", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x9003, "DateTimeOriginal", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9003, AUTO, "DateTimeOriginal", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x9004, "DateTimeDigitized", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9004, AUTO, "DateTimeDigitized", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0x9211, "ImageNumber", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0x9211, AUTO, "ImageNumber", &stdInterpreter},
|
||||||
{0, 1, 0, iopAttribs, 0xA005, "Interoperability", &stdInterpreter},
|
{0, AC_WRITE, 0, iopAttribs, 0xA005, AUTO, "Interoperability", &stdInterpreter},
|
||||||
{0, 0, 0, 0, 0xC4A5, "PrintIMInformation", &stdInterpreter},
|
{0, AC_DONTWRITE, 0, 0, 0xC4A5, AUTO, "PrintIMInformation", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xc62f, "CameraSerialNumber", &stdInterpreter},
|
{0, AC_DONTWRITE, 0, 0, 0xC612, AUTO, "DNGVersion", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0xc630, "DNGLensInfo", &stdInterpreter},
|
{0, AC_DONTWRITE, 0, 0, 0xC613, AUTO, "DNGBackwardVersion", &stdInterpreter},
|
||||||
{0, 1, 0, 0, 0xc65d, "RawDataUniqueID", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xC614, AUTO, "UniqueCameraModel", &stdInterpreter},
|
||||||
{0, 0, 0, 0, 0xc761, "NoiseProfile", &stdInterpreter},
|
{0, AC_WRITE, 0, 0, 0xc62f, AUTO, "CameraSerialNumber", &stdInterpreter},
|
||||||
{0, 2, 0, 0, 0x00fe, "NewSubFileType", &stdInterpreter},
|
{0, AC_SYSTEM, 0, 0, 0xc630, AUTO, "DNGLensInfo", &stdInterpreter},
|
||||||
{-1, 0, 0, 0, 0, "", NULL}};
|
{0, AC_DONTWRITE, 0, 0, 0xC634, AUTO, "MakerNote", &stdInterpreter}, //DNGPrivateData
|
||||||
|
{0, AC_WRITE, 0, 0, 0xc65d, AUTO, "RawDataUniqueID", &stdInterpreter},
|
||||||
|
{0, AC_DONTWRITE, 0, 0, 0xc761, AUTO, "NoiseProfile", &stdInterpreter},
|
||||||
|
{0, AC_SYSTEM, 0, 0, 0x00fe, AUTO, "NewSubFileType", &stdInterpreter},
|
||||||
|
{-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -737,7 +737,7 @@ void EditorPanel::info_toggled () {
|
|||||||
Glib::ustring(idata->apertureToString(idata->getFNumber())),
|
Glib::ustring(idata->apertureToString(idata->getFNumber())),
|
||||||
Glib::ustring(idata->shutterToString(idata->getShutterSpeed())),
|
Glib::ustring(idata->shutterToString(idata->getShutterSpeed())),
|
||||||
M("QINFO_ISO"), idata->getISOSpeed(),
|
M("QINFO_ISO"), idata->getISOSpeed(),
|
||||||
idata->getFocalLen());
|
Glib::ustring::format(std::setw(3), std::fixed, std::setprecision(2), idata->getFocalLen()));
|
||||||
|
|
||||||
expcomp = Glib::ustring(idata->expcompToString(idata->getExpComp(),true)); // maskZeroexpcomp
|
expcomp = Glib::ustring(idata->expcompToString(idata->getExpComp(),true)); // maskZeroexpcomp
|
||||||
if (expcomp!=""){
|
if (expcomp!=""){
|
||||||
|
@ -24,7 +24,6 @@
|
|||||||
using namespace rtengine;
|
using namespace rtengine;
|
||||||
using namespace rtengine::procparams;
|
using namespace rtengine::procparams;
|
||||||
using namespace rtexif;
|
using namespace rtexif;
|
||||||
extern Glib::ustring argv0;
|
|
||||||
|
|
||||||
ExifPanel::ExifPanel () : idata(NULL) {
|
ExifPanel::ExifPanel () : idata(NULL) {
|
||||||
|
|
||||||
@ -154,9 +153,9 @@ void ExifPanel::setImageData (const ImageMetaData* id) {
|
|||||||
const std::vector<Tag*>& defTags = ExifManager::getDefaultTIFFTags (NULL);
|
const std::vector<Tag*>& defTags = ExifManager::getDefaultTIFFTags (NULL);
|
||||||
for (size_t i=0; i<defTags.size(); i++)
|
for (size_t i=0; i<defTags.size(); i++)
|
||||||
if (defTags[i]->nameToString() == "ImageWidth" || defTags[i]->nameToString() == "ImageHeight" || defTags[i]->nameToString() == "BitsPerSample")
|
if (defTags[i]->nameToString() == "ImageWidth" || defTags[i]->nameToString() == "ImageHeight" || defTags[i]->nameToString() == "BitsPerSample")
|
||||||
addTag (exifTreeModel->children(), defTags[i]->nameToString(), "?", SYSTEM, false);
|
addTag (exifTreeModel->children(), defTags[i]->nameToString(), "?", AC_SYSTEM, false);
|
||||||
else
|
else
|
||||||
addTag (exifTreeModel->children(), defTags[i]->nameToString(), defTags[i]->valueToString(), SYSTEM, false);
|
addTag (exifTreeModel->children(), defTags[i]->nameToString(), defTags[i]->valueToString(), AC_SYSTEM, false);
|
||||||
|
|
||||||
if (id && id->getExifData ()) {
|
if (id && id->getExifData ()) {
|
||||||
// id->getExifData ()->printAll ();
|
// id->getExifData ()->printAll ();
|
||||||
@ -164,7 +163,7 @@ void ExifPanel::setImageData (const ImageMetaData* id) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Gtk::TreeModel::Children ExifPanel::addTag (const Gtk::TreeModel::Children& root, Glib::ustring field, Glib::ustring value, int action, bool editable) {
|
Gtk::TreeModel::Children ExifPanel::addTag (const Gtk::TreeModel::Children& root, Glib::ustring field, Glib::ustring value, rtexif::ActionCode action, bool editable) {
|
||||||
|
|
||||||
Gtk::TreeModel::Row row = *(exifTreeModel->append(root));
|
Gtk::TreeModel::Row row = *(exifTreeModel->append(root));
|
||||||
row[exifColumns.action] = action;
|
row[exifColumns.action] = action;
|
||||||
@ -174,22 +173,22 @@ Gtk::TreeModel::Children ExifPanel::addTag (const Gtk::TreeModel::Children& root
|
|||||||
row[exifColumns.value_nopango] = value;
|
row[exifColumns.value_nopango] = value;
|
||||||
row[exifColumns.orig_value] = value;
|
row[exifColumns.orig_value] = value;
|
||||||
|
|
||||||
if (action==WRITE)
|
if (action==AC_WRITE)
|
||||||
row[exifColumns.icon] = keepicon;
|
row[exifColumns.icon] = keepicon;
|
||||||
else if (action==DONTWRITE)
|
else if (action==AC_DONTWRITE)
|
||||||
row[exifColumns.icon] = delicon;
|
row[exifColumns.icon] = delicon;
|
||||||
|
|
||||||
if (editable) {
|
if (editable) {
|
||||||
row[exifColumns.field] = Glib::ustring("<b>") + field + "</b>";
|
row[exifColumns.field] = Glib::ustring("<b>") + escapeHtmlChars(field) + "</b>";
|
||||||
row[exifColumns.value] = Glib::ustring("<b>") + value + "</b>";
|
row[exifColumns.value] = Glib::ustring("<b>") + escapeHtmlChars(value) + "</b>";
|
||||||
}
|
}
|
||||||
else if (action==SYSTEM) {
|
else if (action==AC_SYSTEM) {
|
||||||
row[exifColumns.field] = Glib::ustring("<i>") + field + "</i>";
|
row[exifColumns.field] = Glib::ustring("<i>") + escapeHtmlChars(field) + "</i>";
|
||||||
row[exifColumns.value] = Glib::ustring("<i>") + value + "</i>";
|
row[exifColumns.value] = Glib::ustring("<i>") + escapeHtmlChars(value) + "</i>";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
row[exifColumns.field] = field;
|
row[exifColumns.field] = escapeHtmlChars(field);
|
||||||
row[exifColumns.value] = value;
|
row[exifColumns.value] = escapeHtmlChars(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
return row.children();
|
return row.children();
|
||||||
@ -199,15 +198,15 @@ void ExifPanel::addDirectory (const TagDirectory* dir, Gtk::TreeModel::Children
|
|||||||
|
|
||||||
for (int i=0; i<dir->getCount(); i++) {
|
for (int i=0; i<dir->getCount(); i++) {
|
||||||
Tag* t = (const_cast<TagDirectory*>(dir))->getTagByIndex (i);
|
Tag* t = (const_cast<TagDirectory*>(dir))->getTagByIndex (i);
|
||||||
if (t->getAttrib() && t->getAttrib()->action==SYSTEM)
|
if (t->getAttrib() && t->getAttrib()->action==AC_SYSTEM)
|
||||||
continue;
|
continue;
|
||||||
if (t->isDirectory())
|
if (t->isDirectory())
|
||||||
for (int j=0; t->getDirectory(j); j++) {
|
for (int j=0; t->getDirectory(j); j++) {
|
||||||
Gtk::TreeModel::Children ch = addTag (root, t->nameToString (j), M("EXIFPANEL_SUBDIRECTORY"), t->getAttrib() ? t->getAttrib()->action : 0, t->getAttrib() && t->getAttrib()->editable);
|
Gtk::TreeModel::Children ch = addTag (root, t->nameToString (j), M("EXIFPANEL_SUBDIRECTORY"), t->getAttrib() ? t->getAttrib()->action : AC_DONTWRITE, t->getAttrib() && t->getAttrib()->editable);
|
||||||
addDirectory (t->getDirectory(j), ch);
|
addDirectory (t->getDirectory(j), ch);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
addTag (root, t->nameToString (), t->valueToString (), t->getAttrib() ? (t->getOwnMemory()?t->getAttrib()->action:SYSTEM) : 0, t->getAttrib() && t->getAttrib()->editable);
|
addTag (root, t->nameToString (), t->valueToString (), t->getAttrib() ? (t->getOwnMemory()?t->getAttrib()->action:AC_SYSTEM) : AC_DONTWRITE, t->getAttrib() && t->getAttrib()->editable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -222,7 +221,7 @@ void ExifPanel::exifSelectionChanged () {
|
|||||||
}
|
}
|
||||||
else if (sel.size()==1) {
|
else if (sel.size()==1) {
|
||||||
Gtk::TreeModel::iterator iter = exifTreeModel->get_iter (sel[0]);
|
Gtk::TreeModel::iterator iter = exifTreeModel->get_iter (sel[0]);
|
||||||
if (iter->get_value (exifColumns.action)==SYSTEM) {
|
if (iter->get_value (exifColumns.action)==AC_SYSTEM) {
|
||||||
remove->set_sensitive (0);
|
remove->set_sensitive (0);
|
||||||
keep->set_sensitive (0);
|
keep->set_sensitive (0);
|
||||||
reset->set_sensitive (0);
|
reset->set_sensitive (0);
|
||||||
@ -255,7 +254,7 @@ void ExifPanel::delIt (Gtk::TreeModel::iterator iter) {
|
|||||||
if (!iter)
|
if (!iter)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (iter->get_value (exifColumns.action) != SYSTEM)
|
if (iter->get_value (exifColumns.action) != AC_SYSTEM)
|
||||||
iter->set_value (exifColumns.icon, delicon);
|
iter->set_value (exifColumns.icon, delicon);
|
||||||
if (recursiveOp)
|
if (recursiveOp)
|
||||||
for (Gtk::TreeModel::iterator i=iter->children().begin(); i!=iter->children().end(); i++)
|
for (Gtk::TreeModel::iterator i=iter->children().begin(); i!=iter->children().end(); i++)
|
||||||
@ -278,7 +277,7 @@ void ExifPanel::keepIt (Gtk::TreeModel::iterator iter) {
|
|||||||
if (!iter)
|
if (!iter)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (iter->get_value (exifColumns.action) != SYSTEM)
|
if (iter->get_value (exifColumns.action) != AC_SYSTEM)
|
||||||
iter->set_value (exifColumns.icon, iter->get_value (exifColumns.edited) ? editicon : keepicon);
|
iter->set_value (exifColumns.icon, iter->get_value (exifColumns.edited) ? editicon : keepicon);
|
||||||
if (recursiveOp)
|
if (recursiveOp)
|
||||||
for (Gtk::TreeModel::iterator i=iter->children().begin(); i!=iter->children().end(); i++)
|
for (Gtk::TreeModel::iterator i=iter->children().begin(); i!=iter->children().end(); i++)
|
||||||
@ -301,14 +300,14 @@ void ExifPanel::keepPressed () {
|
|||||||
if (!iter)
|
if (!iter)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (iter->get_value (exifColumns.action)!=SYSTEM)
|
if (iter->get_value (exifColumns.action)!=AC_SYSTEM)
|
||||||
iter->set_value (exifColumns.icon, iter->get_value (exifColumns.action) ? keepicon : delicon);
|
iter->set_value (exifColumns.icon, iter->get_value (exifColumns.action) ? keepicon : delicon);
|
||||||
if (iter->get_value (exifColumns.edited)) {
|
if (iter->get_value (exifColumns.edited)) {
|
||||||
iter->set_value (exifColumns.value, Glib::ustring("<b>") + iter->get_value(exifColumns.orig_value) + "</b>");
|
iter->set_value (exifColumns.value, Glib::ustring("<b>") + iter->get_value(exifColumns.orig_value) + "</b>");
|
||||||
iter->set_value (exifColumns.value_nopango, iter->get_value(exifColumns.orig_value));
|
iter->set_value (exifColumns.value_nopango, iter->get_value(exifColumns.orig_value));
|
||||||
iter->set_value (exifColumns.edited, false);
|
iter->set_value (exifColumns.edited, false);
|
||||||
}
|
}
|
||||||
if (iter->get_value (exifColumns.action)==100)
|
if (iter->get_value (exifColumns.action)==AC_INVALID)
|
||||||
exifTreeModel->erase (iter);
|
exifTreeModel->erase (iter);
|
||||||
else
|
else
|
||||||
if (recursiveOp)
|
if (recursiveOp)
|
||||||
@ -320,14 +319,14 @@ Gtk::TreeModel::iterator ExifPanel::resetIt (Gtk::TreeModel::iterator iter) {
|
|||||||
if (!iter)
|
if (!iter)
|
||||||
return iter;
|
return iter;
|
||||||
|
|
||||||
if (iter->get_value (exifColumns.action)!=SYSTEM)
|
if (iter->get_value (exifColumns.action)!=AC_SYSTEM)
|
||||||
iter->set_value (exifColumns.icon, iter->get_value (exifColumns.action) ? keepicon : delicon);
|
iter->set_value (exifColumns.icon, iter->get_value (exifColumns.action) ? keepicon : delicon);
|
||||||
if (iter->get_value (exifColumns.edited)) {
|
if (iter->get_value (exifColumns.edited)) {
|
||||||
iter->set_value (exifColumns.value, Glib::ustring("<b>") + iter->get_value(exifColumns.orig_value) + "</b>");
|
iter->set_value (exifColumns.value, Glib::ustring("<b>") + iter->get_value(exifColumns.orig_value) + "</b>");
|
||||||
iter->set_value (exifColumns.value_nopango, iter->get_value(exifColumns.orig_value));
|
iter->set_value (exifColumns.value_nopango, iter->get_value(exifColumns.orig_value));
|
||||||
iter->set_value (exifColumns.edited, false);
|
iter->set_value (exifColumns.edited, false);
|
||||||
}
|
}
|
||||||
if (iter->get_value (exifColumns.action)==100) {
|
if (iter->get_value (exifColumns.action)==AC_INVALID) {
|
||||||
return exifTreeModel->erase (iter);
|
return exifTreeModel->erase (iter);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -434,7 +433,7 @@ void ExifPanel::editTag (Gtk::TreeModel::Children root, Glib::ustring name, Glib
|
|||||||
if (iter==root.end() && value!="#keep" && value!="#delete") {
|
if (iter==root.end() && value!="#keep" && value!="#delete") {
|
||||||
iter = exifTreeModel->append(root);
|
iter = exifTreeModel->append(root);
|
||||||
iter->set_value (exifColumns.field_nopango, fseg);
|
iter->set_value (exifColumns.field_nopango, fseg);
|
||||||
iter->set_value (exifColumns.action, 100);
|
iter->set_value (exifColumns.action, AC_INVALID);
|
||||||
if (dp==Glib::ustring::npos) {
|
if (dp==Glib::ustring::npos) {
|
||||||
iter->set_value (exifColumns.value, Glib::ustring("<b>") + value + "</b>");
|
iter->set_value (exifColumns.value, Glib::ustring("<b>") + value + "</b>");
|
||||||
iter->set_value (exifColumns.value_nopango, value);
|
iter->set_value (exifColumns.value_nopango, value);
|
||||||
@ -454,9 +453,9 @@ void ExifPanel::editTag (Gtk::TreeModel::Children root, Glib::ustring name, Glib
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (dp==Glib::ustring::npos) {
|
if (dp==Glib::ustring::npos) {
|
||||||
if (value=="#keep" && iter->get_value (exifColumns.action)!=SYSTEM)
|
if (value=="#keep" && iter->get_value (exifColumns.action)!=AC_SYSTEM)
|
||||||
iter->set_value (exifColumns.icon, iter->get_value (exifColumns.edited) ? editicon : keepicon);
|
iter->set_value (exifColumns.icon, iter->get_value (exifColumns.edited) ? editicon : keepicon);
|
||||||
else if (value=="#delete" && iter->get_value (exifColumns.action)!=SYSTEM)
|
else if (value=="#delete" && iter->get_value (exifColumns.action)!=AC_SYSTEM)
|
||||||
iter->set_value (exifColumns.icon, delicon);
|
iter->set_value (exifColumns.icon, delicon);
|
||||||
else {
|
else {
|
||||||
iter->set_value (exifColumns.value, Glib::ustring("<b>") + value + "</b>");
|
iter->set_value (exifColumns.value, Glib::ustring("<b>") + value + "</b>");
|
||||||
@ -516,9 +515,9 @@ void ExifPanel::updateChangeList (Gtk::TreeModel::Children root, std::string pre
|
|||||||
for (iter = root.begin(); iter!=root.end(); iter++) {
|
for (iter = root.begin(); iter!=root.end(); iter++) {
|
||||||
if (iter->get_value (exifColumns.edited) == true)
|
if (iter->get_value (exifColumns.edited) == true)
|
||||||
changeList[ prefix+iter->get_value (exifColumns.field_nopango) ] = iter->get_value (exifColumns.value_nopango);
|
changeList[ prefix+iter->get_value (exifColumns.field_nopango) ] = iter->get_value (exifColumns.value_nopango);
|
||||||
else if (iter->get_value (exifColumns.action) == WRITE && iter->get_value (exifColumns.icon) == delicon)
|
else if (iter->get_value (exifColumns.action) == AC_WRITE && iter->get_value (exifColumns.icon) == delicon)
|
||||||
changeList[ prefix+iter->get_value (exifColumns.field_nopango) ] = "#delete";
|
changeList[ prefix+iter->get_value (exifColumns.field_nopango) ] = "#delete";
|
||||||
else if (iter->get_value (exifColumns.action) == DONTWRITE && iter->get_value (exifColumns.icon) == keepicon)
|
else if (iter->get_value (exifColumns.action) == AC_DONTWRITE && iter->get_value (exifColumns.icon) == keepicon)
|
||||||
changeList[ prefix+iter->get_value (exifColumns.field_nopango) ] = "#keep";
|
changeList[ prefix+iter->get_value (exifColumns.field_nopango) ] = "#keep";
|
||||||
if (iter->get_value (exifColumns.icon) == keepicon)
|
if (iter->get_value (exifColumns.icon) == keepicon)
|
||||||
updateChangeList (iter->children(), prefix + iter->get_value (exifColumns.field_nopango));
|
updateChangeList (iter->children(), prefix + iter->get_value (exifColumns.field_nopango));
|
||||||
|
@ -31,7 +31,7 @@ class ExifPanel : public Gtk::VBox, public ToolPanel {
|
|||||||
rtengine::procparams::ExifPairs changeList;
|
rtengine::procparams::ExifPairs changeList;
|
||||||
rtengine::procparams::ExifPairs defChangeList;
|
rtengine::procparams::ExifPairs defChangeList;
|
||||||
bool recursiveOp;
|
bool recursiveOp;
|
||||||
|
|
||||||
class ExifColumns : public Gtk::TreeModelColumnRecord {
|
class ExifColumns : public Gtk::TreeModelColumnRecord {
|
||||||
public:
|
public:
|
||||||
Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf> > icon;
|
Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf> > icon;
|
||||||
@ -40,31 +40,31 @@ class ExifPanel : public Gtk::VBox, public ToolPanel {
|
|||||||
Gtk::TreeModelColumn<Glib::ustring> value;
|
Gtk::TreeModelColumn<Glib::ustring> value;
|
||||||
Gtk::TreeModelColumn<Glib::ustring> value_nopango;
|
Gtk::TreeModelColumn<Glib::ustring> value_nopango;
|
||||||
Gtk::TreeModelColumn<Glib::ustring> orig_value;
|
Gtk::TreeModelColumn<Glib::ustring> orig_value;
|
||||||
Gtk::TreeModelColumn<int> action; // = 0: dont write to output, =1: write to output, =2: chagned by RT (not editable/deletable), =3: new addition
|
Gtk::TreeModelColumn<rtexif::ActionCode> action;
|
||||||
Gtk::TreeModelColumn<bool> editable;
|
Gtk::TreeModelColumn<bool> editable;
|
||||||
Gtk::TreeModelColumn<bool> edited;
|
Gtk::TreeModelColumn<bool> edited;
|
||||||
|
|
||||||
ExifColumns() { add(field); add(value); add(icon); add(action); add(edited); add(field_nopango); add(value_nopango); add(editable); add(orig_value); }
|
ExifColumns() { add(field); add(value); add(icon); add(action); add(edited); add(field_nopango); add(value_nopango); add(editable); add(orig_value); }
|
||||||
};
|
};
|
||||||
Glib::RefPtr<Gdk::Pixbuf> delicon;
|
Glib::RefPtr<Gdk::Pixbuf> delicon;
|
||||||
Glib::RefPtr<Gdk::Pixbuf> keepicon;
|
Glib::RefPtr<Gdk::Pixbuf> keepicon;
|
||||||
Glib::RefPtr<Gdk::Pixbuf> editicon;
|
Glib::RefPtr<Gdk::Pixbuf> editicon;
|
||||||
|
|
||||||
ExifColumns exifColumns;
|
ExifColumns exifColumns;
|
||||||
Gtk::TreeView* exifTree;
|
Gtk::TreeView* exifTree;
|
||||||
Gtk::ScrolledWindow* scrolledWindow;
|
Gtk::ScrolledWindow* scrolledWindow;
|
||||||
Glib::RefPtr<Gtk::TreeStore> exifTreeModel;
|
Glib::RefPtr<Gtk::TreeStore> exifTreeModel;
|
||||||
|
|
||||||
Gtk::Button* remove;
|
Gtk::Button* remove;
|
||||||
Gtk::Button* keep;
|
Gtk::Button* keep;
|
||||||
Gtk::Button* add;
|
Gtk::Button* add;
|
||||||
Gtk::Button* reset;
|
Gtk::Button* reset;
|
||||||
Gtk::Button* resetAll;
|
Gtk::Button* resetAll;
|
||||||
|
|
||||||
Gtk::TreeModel::Children addTag (const Gtk::TreeModel::Children& root, Glib::ustring field, Glib::ustring value, int action, bool editable);
|
Gtk::TreeModel::Children addTag (const Gtk::TreeModel::Children& root, Glib::ustring field, Glib::ustring value, rtexif::ActionCode action, bool editable);
|
||||||
void editTag (Gtk::TreeModel::Children root, Glib::ustring name, Glib::ustring value);
|
void editTag (Gtk::TreeModel::Children root, Glib::ustring name, Glib::ustring value);
|
||||||
void updateChangeList (Gtk::TreeModel::Children root, std::string prefix);
|
void updateChangeList (Gtk::TreeModel::Children root, std::string prefix);
|
||||||
void addDirectory (const rtexif::TagDirectory* dir, Gtk::TreeModel::Children root);
|
void addDirectory (const rtexif::TagDirectory* dir, Gtk::TreeModel::Children root);
|
||||||
Glib::ustring getSelection (bool onlyifeditable=false);
|
Glib::ustring getSelection (bool onlyifeditable=false);
|
||||||
Glib::ustring getSelectedValue ();
|
Glib::ustring getSelectedValue ();
|
||||||
void updateChangeList ();
|
void updateChangeList ();
|
||||||
@ -75,12 +75,12 @@ class ExifPanel : public Gtk::VBox, public ToolPanel {
|
|||||||
public:
|
public:
|
||||||
ExifPanel ();
|
ExifPanel ();
|
||||||
virtual ~ExifPanel ();
|
virtual ~ExifPanel ();
|
||||||
|
|
||||||
void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited=NULL);
|
void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited=NULL);
|
||||||
void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited=NULL);
|
void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited=NULL);
|
||||||
void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited=NULL);
|
void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited=NULL);
|
||||||
|
|
||||||
void setImageData (const rtengine::ImageMetaData* id);
|
void setImageData (const rtengine::ImageMetaData* id);
|
||||||
|
|
||||||
void exifSelectionChanged ();
|
void exifSelectionChanged ();
|
||||||
void removePressed ();
|
void removePressed ();
|
||||||
@ -89,9 +89,9 @@ class ExifPanel : public Gtk::VBox, public ToolPanel {
|
|||||||
void resetAllPressed ();
|
void resetAllPressed ();
|
||||||
void addPressed ();
|
void addPressed ();
|
||||||
void row_activated (const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column);
|
void row_activated (const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column);
|
||||||
|
|
||||||
void notifyListener ();
|
void notifyListener ();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -515,7 +515,7 @@ void Thumbnail::generateExifDateTimeStrings () {
|
|||||||
if (!cfs.exifValid)
|
if (!cfs.exifValid)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
exifString = Glib::ustring::compose ("f/%1 %2s %3%4 %5mm", Glib::ustring(rtengine::ImageData::apertureToString(cfs.fnumber)), Glib::ustring(rtengine::ImageData::shutterToString(cfs.shutter)), M("QINFO_ISO"), cfs.iso, cfs.focalLen);
|
exifString = Glib::ustring::compose ("f/%1 %2s %3%4 %5mm", Glib::ustring(rtengine::ImageData::apertureToString(cfs.fnumber)), Glib::ustring(rtengine::ImageData::shutterToString(cfs.shutter)), M("QINFO_ISO"), cfs.iso, Glib::ustring::format(std::setw(3), std::fixed, std::setprecision(2), cfs.focalLen));
|
||||||
|
|
||||||
if (options.fbShowExpComp && cfs.expcomp!="0.00" && cfs.expcomp!="") // don't show exposure compensation if it is 0.00EV;old cache iles do not have ExpComp, so value will not be displayed.
|
if (options.fbShowExpComp && cfs.expcomp!="0.00" && cfs.expcomp!="") // don't show exposure compensation if it is 0.00EV;old cache iles do not have ExpComp, so value will not be displayed.
|
||||||
exifString = Glib::ustring::compose ("%1 %2EV", exifString, cfs.expcomp); // append exposure compensation to exifString
|
exifString = Glib::ustring::compose ("%1 %2EV", exifString, cfs.expcomp); // append exposure compensation to exifString
|
||||||
|
Loading…
x
Reference in New Issue
Block a user