diff --git a/src/easyaccess.cpp b/src/easyaccess.cpp index 823940d8..bbd54478 100644 --- a/src/easyaccess.cpp +++ b/src/easyaccess.cpp @@ -102,7 +102,8 @@ namespace Exiv2 { "Exif.Sony1Cs2.ISOSetting", "Exif.Sony2Cs2.ISOSetting", "Exif.Pentax.ISO", - "Exif.Olympus.ISOSpeed" + "Exif.Olympus.ISOSpeed", + "Exif.Samsung2.ISO" }; // Find the first ISO value which is not "0" @@ -259,7 +260,8 @@ namespace Exiv2 { "Exif.Minolta.LensID", "Exif.SonyMinolta.LensID", "Exif.Sony1.LensID", - "Exif.Sony2.LensID" + "Exif.Sony2.LensID", + "Exif.Samsung2.LensType" }; return findMetadatum(ed, keys, EXV_COUNTOF(keys)); } @@ -358,7 +360,8 @@ namespace Exiv2 { { static const char* keys[] = { "Exif.Photo.ExposureTime", - "Exif.Image.ExposureTime" + "Exif.Image.ExposureTime", + "Exif.Samsung2.ExposureTime" }; return findMetadatum(ed, keys, EXV_COUNTOF(keys)); } @@ -367,7 +370,8 @@ namespace Exiv2 { { static const char* keys[] = { "Exif.Photo.FNumber", - "Exif.Image.FNumber" + "Exif.Image.FNumber", + "Exif.Samsung2.FNumber" }; return findMetadatum(ed, keys, EXV_COUNTOF(keys)); } diff --git a/src/samsungmn.cpp b/src/samsungmn.cpp index 65e2bfaf..6b64ee8b 100644 --- a/src/samsungmn.cpp +++ b/src/samsungmn.cpp @@ -55,32 +55,70 @@ namespace Exiv2 { { 3, N_("Samsung Zoom 50-200mm F4-5.6 ED OIS") } }; + std::ostream& printPictureWizard(std::ostream& os, const Value& value, const ExifData*) + { + if (value.count() != 5 || value.typeId() != unsignedShort) { + return os << value; + } + return os << "Mode: " << value.toLong(0) + << ", Col: " << value.toLong(1) + << ", Sat: " << value.toLong(2) - 4 + << ", Sha: " << value.toLong(3) - 4 + << ", Con: " << value.toLong(4) - 4; + } + + std::ostream& printCameraTemperature(std::ostream& os, const Value& value, const ExifData*) + { + if (value.count() != 1 || value.typeId() != signedRational) { + return os << value; + } + return os << value.toFloat() << " C"; + } + + std::ostream& printFocalLength35(std::ostream& os, const Value& value, const ExifData*) + { + if (value.count() != 1 || value.typeId() != unsignedLong) { + return os << value; + } + long length = value.toLong(); + if (length == 0) { + os << _("Unknown"); + } + else { + std::ostringstream oss; + oss.copyfmt(os); + os << std::fixed << std::setprecision(1) << length / 10.0 << " mm"; + os.copyfmt(oss); + } + return os; + } + // Samsung MakerNote Tag Info const TagInfo Samsung2MakerNote::tagInfo_[] = { TagInfo(0x0001, "Version", N_("Version"), N_("Makernote version"), samsung2Id, makerTags, undefined, -1, printExifVersion), TagInfo(0x0021, "PictureWizard", N_("PictureWizard"), N_("Picture wizard"), - samsung2Id, makerTags, unsignedShort, -1, printValue), + samsung2Id, makerTags, unsignedShort, -1, printPictureWizard), TagInfo(0x0035, "Preview", N_("Pointer to a preview image"), N_("Offset to an IFD containing a preview image"), samsung2Id, makerTags, unsignedLong, -1, printValue), TagInfo(0x0043, "CameraTemperature", N_("Camera Temperature"), N_("Camera temperature"), - samsung2Id, makerTags, undefined, -1, printValue), + samsung2Id, makerTags, signedRational, -1, printCameraTemperature), TagInfo(0xa001, "FirmwareName", N_("Firmware Name"), N_("Firmware name"), samsung2Id, makerTags, asciiString, -1, printValue), TagInfo(0xa003, "LensType", N_("Lens Type"), N_("Lens type"), samsung2Id, makerTags, unsignedShort, -1, EXV_PRINT_TAG(samsung2LensType)), TagInfo(0xa010, "SensorAreas", N_("Sensor Areas"), N_("Sensor areas"), samsung2Id, makerTags, unsignedLong, -1, printValue), - TagInfo(0xa013, "ExposureCompensation", N_("Exposure Compensation"), N_("Exposure compensation"), - samsung2Id, makerTags, undefined, -1, printValue), + TagInfo(0xa013, "ExposureBiasValue", N_("Exposure Bias Value"), N_("Exposure bias value"), + samsung2Id, makerTags, signedRational, -1, print0x9204), TagInfo(0xa014, "ISO", N_("ISO"), N_("ISO"), samsung2Id, makerTags, unsignedLong, -1, printValue), TagInfo(0xa018, "ExposureTime", N_("Exposure Time"), N_("Exposure time"), - samsung2Id, makerTags, undefined, -1, printValue), + samsung2Id, makerTags, unsignedRational, -1, print0x829a), TagInfo(0xa019, "FNumber", N_("FNumber"), N_("The F number."), - samsung2Id, makerTags, undefined, -1, printValue), + samsung2Id, makerTags, unsignedRational, -1, print0x829d), TagInfo(0xa01a, "FocalLengthIn35mmFormat", N_("Focal Length In 35mm Format"), N_("Focal length in 35mm format"), - samsung2Id, makerTags, unsignedLong, -1, printValue), + samsung2Id, makerTags, unsignedLong, -1, printFocalLength35), TagInfo(0xa021, "WB_RGGBLevels", N_("WB RGGB Levels"), N_("WB RGGB levels"), samsung2Id, makerTags, unsignedLong, -1, printValue), // End of list marker diff --git a/src/tags.cpp b/src/tags.cpp index 6e92903a..d41624af 100644 --- a/src/tags.cpp +++ b/src/tags.cpp @@ -261,6 +261,7 @@ namespace Exiv2 { { 10, N_("JBIG Color") }, { 32766, N_("Next 2-bits RLE") }, { 32769, N_("Epson ERF Compressed") }, + { 32770, N_("Samsung SRW Compressed") }, { 32771, N_("CCITT RLE 1-word") }, { 32773, N_("PackBits (Macintosh RLE)") }, { 32809, N_("Thunderscan RLE") },