From 627e06e14d908f1e67bc6b1fd21d8459ea97f246 Mon Sep 17 00:00:00 2001 From: Robin Mills Date: Thu, 23 Apr 2015 15:48:18 +0000 Subject: [PATCH] #1062 Exif.NikonWt.Timezone translated value contains cruft. --- src/nikonmn.cpp | 62 ++++++++++++++++++------------------ test/bugfixes-test.sh | 7 ++++ test/data/bugfixes-test.out | Bin 147792 -> 147889 bytes test/data/exiv2-bug1062.jpg | Bin 0 -> 22326 bytes 4 files changed, 38 insertions(+), 31 deletions(-) create mode 100644 test/data/exiv2-bug1062.jpg diff --git a/src/nikonmn.cpp b/src/nikonmn.cpp index 2b64c872..f9a75935 100644 --- a/src/nikonmn.cpp +++ b/src/nikonmn.cpp @@ -717,14 +717,14 @@ namespace Exiv2 { { return tagInfoPc_; } - + //! OnOff extern const TagDetails aftOnOff[] = { { 0, N_("Off") }, { 1, N_("On") }, { 2, N_("On") } }; - + // Nikon3 AF Fine Tune const TagInfo Nikon3MakerNote::tagInfoAFT_[] = { TagInfo(0, "AFFineTune", N_("AF Fine Tune"), N_("AF fine tune"), nikonAFTId, makerTags, unsignedByte, 1, EXV_PRINT_TAG(aftOnOff)), @@ -733,7 +733,7 @@ namespace Exiv2 { // End of list marker TagInfo(0xffff, "(UnknownNikonAFTTag)", "(UnknownNikonAFTTag)", N_("Unknown Nikon AF Fine Tune Tag"), nikonAFTId, makerTags, unsignedByte, 1, printValue) }; - + const TagInfo* Nikon3MakerNote::tagListAFT() { return tagInfoAFT_; @@ -1747,7 +1747,7 @@ namespace Exiv2 { // // // Seven misidentified lenses due to double LensIDs: -// +// // 2F 48 30 44 24 24 29 02.1: Nikon AF Zoom-Nikkor 20-35mm f/2.8D IF // 2F 48 30 44 24 24 29 02.2: Tokina AT-X 235 AF PRO (AF 20-35mm f/2.8) // @@ -1951,11 +1951,11 @@ fmountlens[] = { {0x81,0x54,0x80,0x80,0x18,0x18,0x86,0x0E,0x03,0x00,0x00, "Nikon", "JAA336DA", "AF-S VR Nikkor 200mm f/2G IF-ED"}, {0x82,0x48,0x8E,0x8E,0x24,0x24,0x87,0x0E,0x13,0x00,0x00, "Nikon", "JAA337DA", "AF-S VR Nikkor 300mm f/2.8G IF-ED"}, {0x83,0x00,0xB0,0xB0,0x5A,0x5A,0x88,0x04,0x00,0x00,0x00, "Nikon", "", "FSA-L2, EDG 65, 800mm F13 G"}, -//84 -//85 +//84 +//85 //86 //87 -//88 +//88 {0x89,0x3C,0x53,0x80,0x30,0x3C,0x8B,0x06,0x01,0x00,0x00, "Nikon", "JAA793DA", "AF-S DX Zoom-Nikkor 55-200mm f/4-5.6G ED"}, {0x8A,0x54,0x6A,0x6A,0x24,0x24,0x8C,0x0E,0x53,0x00,0x00, "Nikon", "JAA630DA", "AF-S VR Micro-Nikkor 105mm f/2.8G IF-ED"}, {0x8B,0x40,0x2D,0x80,0x2C,0x3C,0x8D,0x0E,0x01,0x00,0x00, "Nikon", "JAA794DA", "AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED"}, @@ -2329,10 +2329,10 @@ fmountlens[] = { {0x06,0x3F,0x68,0x68,0x2C,0x2C,0x06,0x00,0x00,0x00,0x00, "Cosina", "", "AF 100mm F3.5 Macro"}, {0x07,0x36,0x3D,0x5F,0x2C,0x3C,0x03,0x00,0x00,0x00,0x00, "Cosina", "", "AF Zoom 28-80mm F3.5-5.6 MC Macro"}, {0x07,0x46,0x3D,0x6A,0x25,0x2F,0x03,0x00,0x00,0x00,0x00, "Cosina", "", "AF Zoom 28-105mm F2.8-3.8 MC"}, -//M "Cosina" "" "AF Zoom 28-210mm F3.5-5.6"; +//M "Cosina" "" "AF Zoom 28-210mm F3.5-5.6"; //M "Cosina" "" "AF Zoom 28-210mm F4.2-6.5 Aspherical IF"; -//M "Cosina" "" "AF Zoom 28-300mm F4.0-6.3"; -//M "Cosina" "" "AF Zoom 70-210mm F2.8-4.0"; +//M "Cosina" "" "AF Zoom 28-300mm F4.0-6.3"; +//M "Cosina" "" "AF Zoom 70-210mm F2.8-4.0"; {0x12,0x36,0x5C,0x81,0x35,0x3D,0x09,0x00,0x00,0x00,0x00, "Cosina", "", "AF Zoom 70-210mm F4.5-5.6 MC Macro"}, {0x12,0x39,0x5C,0x8E,0x34,0x3D,0x08,0x02,0x00,0x00,0x00, "Cosina", "", "AF Zoom 70-300mm F4.5-5.6 MC Macro"}, {0x12,0x3B,0x68,0x8D,0x3D,0x43,0x09,0x02,0x00,0x00,0x00, "Cosina", "", "AF Zoom 100-300mm F5.6-6.7 MC Macro"}, @@ -2464,8 +2464,8 @@ fmountlens[] = { return os; } - std::ostream& Nikon3MakerNote::printAperture(std::ostream& os, - const Value& value, + std::ostream& Nikon3MakerNote::printAperture(std::ostream& os, + const Value& value, const ExifData*) { std::ios::fmtflags f( os.flags() ); @@ -2483,8 +2483,8 @@ fmountlens[] = { return os; } - std::ostream& Nikon3MakerNote::printFocal(std::ostream& os, - const Value& value, + std::ostream& Nikon3MakerNote::printFocal(std::ostream& os, + const Value& value, const ExifData*) { if (value.count() != 1 || value.typeId() != unsignedByte) { @@ -2498,8 +2498,8 @@ fmountlens[] = { return os; } - std::ostream& Nikon3MakerNote::printFStops(std::ostream& os, - const Value& value, + std::ostream& Nikon3MakerNote::printFStops(std::ostream& os, + const Value& value, const ExifData*) { std::ios::fmtflags f( os.flags() ); @@ -2517,8 +2517,8 @@ fmountlens[] = { return os; } - std::ostream& Nikon3MakerNote::printExitPupilPosition(std::ostream& os, - const Value& value, + std::ostream& Nikon3MakerNote::printExitPupilPosition(std::ostream& os, + const Value& value, const ExifData*) { std::ios::fmtflags f( os.flags() ); @@ -2536,8 +2536,8 @@ fmountlens[] = { return os; } - std::ostream& Nikon3MakerNote::printFlashFocalLength(std::ostream& os, - const Value& value, + std::ostream& Nikon3MakerNote::printFlashFocalLength(std::ostream& os, + const Value& value, const ExifData*) { std::ios::fmtflags f( os.flags() ); @@ -2554,8 +2554,8 @@ fmountlens[] = { return os; } - std::ostream& Nikon3MakerNote::printRepeatingFlashRate(std::ostream& os, - const Value& value, + std::ostream& Nikon3MakerNote::printRepeatingFlashRate(std::ostream& os, + const Value& value, const ExifData*) { std::ios::fmtflags f( os.flags() ); @@ -2570,8 +2570,8 @@ fmountlens[] = { return os; } - std::ostream& Nikon3MakerNote::printRepeatingFlashCount(std::ostream& os, - const Value& value, + std::ostream& Nikon3MakerNote::printRepeatingFlashCount(std::ostream& os, + const Value& value, const ExifData*) { std::ios::fmtflags f( os.flags() ); @@ -2586,8 +2586,8 @@ fmountlens[] = { return os; } - std::ostream& Nikon3MakerNote::printTimeZone(std::ostream& os, - const Value& value, + std::ostream& Nikon3MakerNote::printTimeZone(std::ostream& os, + const Value& value, const ExifData*) { std::ios::fmtflags f( os.flags() ); @@ -2599,17 +2599,17 @@ fmountlens[] = { std::ostringstream oss; oss.copyfmt(os); char sign = value.toLong() < 0 ? '-' : '+'; - long h = long(std::abs( (int) (value.toFloat()/60.0) )); - long min = long(std::abs( (int) (value.toFloat()-h*60) )); - os << std::fixed << "UTC " << sign << std::setw(2) << std::setfill('0') << h << ":" + long h = long(std::abs( (int) (value.toFloat()/60.0) ))%24; + long min = long(std::abs( (int) (value.toFloat()-h*60) ))%60; + os << std::fixed << "UTC " << sign << std::setw(2) << std::setfill('0') << h << ":" << std::setw(2) << std::setfill('0') << min; os.copyfmt(oss); os.flags(f); return os; } - std::ostream& Nikon3MakerNote::printPictureControl(std::ostream& os, - const Value& value, + std::ostream& Nikon3MakerNote::printPictureControl(std::ostream& os, + const Value& value, const ExifData*) { if (value.count() != 1 || value.typeId() != unsignedByte) { diff --git a/test/bugfixes-test.sh b/test/bugfixes-test.sh index 6ff9d32d..54a83642 100755 --- a/test/bugfixes-test.sh +++ b/test/bugfixes-test.sh @@ -363,6 +363,13 @@ source ./functions.source runTest exiv2 -M'set Xmp.dc.title' $filename runTest exiv2 -px $filename + num=1062 + filename=exiv2-bug$num.jpg + printf "$num " >&3 + echo '------>' Bug $num '<-------' >&2 + copyTestFile $filename + runTest exiv2 -pa -g zone $filename + ) 3>&1 > $results 2>&1 printf "\n" diff --git a/test/data/bugfixes-test.out b/test/data/bugfixes-test.out index 02d8ce7d92fb0cc40d7e2caf60c2e5e8e93d4d18..e1e5662f9d58077c6e5d98e658d3b626aa2f991a 100644 GIT binary patch delta 91 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

L_}vaB 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 literal 0 HcmV?d00001