diff --git a/src/fujimn_int.cpp b/src/fujimn_int.cpp index 74181136..9668eb7a 100644 --- a/src/fujimn_int.cpp +++ b/src/fujimn_int.cpp @@ -135,6 +135,18 @@ namespace Exiv2 { { 768, N_("Manual") } }; + //! ShadowTone, tag 0x1040 + //! HighlightTone, tag 0x041 + extern const TagDetails fujiSHTone[] = { + { -64, N_("+4") }, + { -48, N_("+3") }, + { -32, N_("+2") }, + { -16, N_("+1") }, + { 0 , N_("0") }, + { 16, N_("-1") }, + { 32, N_("-2") }, + }; + //! Continuous, tag 0x1100 extern const TagDetails fujiContinuous[] = { { 0, N_("Off") }, @@ -180,6 +192,24 @@ namespace Exiv2 { { 32768, N_("Film simulation mode") } }; + //! DRangePriority, tag 0x1443 + extern const TagDetails fujiDRangePriority[] = { + { 0, N_("Auto") }, + { 1, N_("Fixed") } + }; + + //! DRangePriorityAuto, tag 0x1444 + extern const TagDetails fujiDRangePriorityAuto[] = { + { 1, N_("Weak") }, + { 2, N_("Strong") } + }; + + //! DRangePriorityFixed, tag 0x1445 + extern const TagDetails fujiDRangePriorityFixed[] = { + { 1, N_("Weak") }, + { 2, N_("Strong") } + }; + // Fujifilm MakerNote Tag Info const TagInfo FujiMakerNote::tagInfo_[] = { TagInfo(0x0000, "Version", N_("Version"), @@ -228,6 +258,12 @@ namespace Exiv2 { TagInfo(0x1032, "0x1032", "0x1032", N_("Unknown"), fujiId, makerTags, unsignedShort, -1, printValue), + TagInfo(0x1040, "ShadowTone", N_("Shadow Tone"), + N_("Shadow tone"), + fujiId, makerTags, signedLong, -1, EXV_PRINT_TAG(fujiSHTone)), + TagInfo(0x1041, "HighlightTone", N_("Highlight Tone"), + N_("Highlight tone"), + fujiId, makerTags, signedLong, -1, EXV_PRINT_TAG(fujiSHTone)), TagInfo(0x1100, "Continuous", N_("Continuous"), N_("Continuous shooting or auto bracketing setting"), fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiContinuous)), @@ -273,6 +309,18 @@ namespace Exiv2 { TagInfo(0x1407, "MaxApertureAtMaxFocal", N_("Maximum Aperture at Maximum Focal"), N_("Maximum aperture at maximum focal"), fujiId, makerTags, unsignedRational, -1, printValue), + TagInfo(0x1431, "Rating", N_("Rating"), + N_("Rating"), + fujiId, makerTags, unsignedLong, -1, printValue), + TagInfo(0x1443, "DRangePriority", N_("D Range Priority"), + N_("Dynamic range priority"), + fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiDRangePriority)), + TagInfo(0x1444, "DRangePriorityFixed", N_("D Range Priority Fixed"), + N_("Dynamic range priority fixed"), + fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiDRangePriorityFixed)), + TagInfo(0x1445, "DRangePriorityAuto", N_("D Range Priority Auto"), + N_("Dynamic range priority auto"), + fujiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiDRangePriorityAuto)), TagInfo(0x8000, "FileSource", N_("File Source"), N_("File source"), fujiId, makerTags, asciiString, -1, printValue), diff --git a/test/data/FujiTagsDRangeAutoRating1.jpg b/test/data/FujiTagsDRangeAutoRating1.jpg new file mode 100644 index 00000000..92b39bd3 Binary files /dev/null and b/test/data/FujiTagsDRangeAutoRating1.jpg differ diff --git a/test/data/FujiTagsDRangeStrongRating3.jpg b/test/data/FujiTagsDRangeStrongRating3.jpg new file mode 100644 index 00000000..1a1dcb82 Binary files /dev/null and b/test/data/FujiTagsDRangeStrongRating3.jpg differ diff --git a/test/data/FujiTagsDRangeWeakRating2.jpg b/test/data/FujiTagsDRangeWeakRating2.jpg new file mode 100644 index 00000000..bf7814b7 Binary files /dev/null and b/test/data/FujiTagsDRangeWeakRating2.jpg differ diff --git a/test/data/FujiTagsSTone-2HTone4.jpg b/test/data/FujiTagsSTone-2HTone4.jpg new file mode 100644 index 00000000..e544fcb3 Binary files /dev/null and b/test/data/FujiTagsSTone-2HTone4.jpg differ diff --git a/test/data/FujiTagsSTone0HTone0Rating4.jpg b/test/data/FujiTagsSTone0HTone0Rating4.jpg new file mode 100644 index 00000000..92622027 Binary files /dev/null and b/test/data/FujiTagsSTone0HTone0Rating4.jpg differ diff --git a/test/data/FujiTagsSTone1HTone-1Rating5.jpg b/test/data/FujiTagsSTone1HTone-1Rating5.jpg new file mode 100644 index 00000000..84f31cae Binary files /dev/null and b/test/data/FujiTagsSTone1HTone-1Rating5.jpg differ diff --git a/test/data/FujiTagsSTone4HTone-2.jpg b/test/data/FujiTagsSTone4HTone-2.jpg new file mode 100644 index 00000000..aaf3deb3 Binary files /dev/null and b/test/data/FujiTagsSTone4HTone-2.jpg differ diff --git a/tests/bugfixes/github/test_fuji_tags.py b/tests/bugfixes/github/test_fuji_tags.py new file mode 100644 index 00000000..dd82fb2e --- /dev/null +++ b/tests/bugfixes/github/test_fuji_tags.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- + +import system_tests + +class FujiTags(metaclass=system_tests.CaseMeta): + + filesAndExpectedOutput = [ +("FujiTagsDRangeAutoRating1.jpg", +"""Exif.Fujifilm.ShadowTone SLong 1 0 +Exif.Fujifilm.HighlightTone SLong 1 0 +Exif.Fujifilm.Rating Long 1 1 +Exif.Fujifilm.DRangePriority Short 1 Auto +Exif.Fujifilm.DRangePriorityAuto Short 1 Weak +""") +, +("FujiTagsDRangeWeakRating2.jpg", +"""Exif.Fujifilm.ShadowTone SLong 1 0 +Exif.Fujifilm.HighlightTone SLong 1 0 +Exif.Fujifilm.Rating Long 1 2 +Exif.Fujifilm.DRangePriority Short 1 Fixed +Exif.Fujifilm.DRangePriorityFixed Short 1 Weak +""") +, +("FujiTagsDRangeStrongRating3.jpg", +"""Exif.Fujifilm.ShadowTone SLong 1 0 +Exif.Fujifilm.HighlightTone SLong 1 0 +Exif.Fujifilm.Rating Long 1 3 +Exif.Fujifilm.DRangePriority Short 1 Fixed +Exif.Fujifilm.DRangePriorityFixed Short 1 Strong +"""), +("FujiTagsSTone0HTone0Rating4.jpg", +"""Exif.Fujifilm.ShadowTone SLong 1 0 +Exif.Fujifilm.HighlightTone SLong 1 0 +Exif.Fujifilm.Rating Long 1 4 +"""), +("FujiTagsSTone1HTone-1Rating5.jpg", +"""Exif.Fujifilm.ShadowTone SLong 1 +1 +Exif.Fujifilm.HighlightTone SLong 1 -1 +Exif.Fujifilm.Rating Long 1 5 +"""), +("FujiTagsSTone4HTone-2.jpg", +"""Exif.Fujifilm.ShadowTone SLong 1 +4 +Exif.Fujifilm.HighlightTone SLong 1 -2 +Exif.Fujifilm.Rating Long 1 0 +"""), +("FujiTagsSTone-2HTone4.jpg", +"""Exif.Fujifilm.ShadowTone SLong 1 -2 +Exif.Fujifilm.HighlightTone SLong 1 +4 +Exif.Fujifilm.Rating Long 1 0 +""") +] + + tags = ["Exif.Fujifilm.ShadowTone", + "Exif.Fujifilm.HighlightTone", + "Exif.Fujifilm.Rating", + "Exif.Fujifilm.DRangePriority", + "Exif.Fujifilm.DRangePriorityAuto", + "Exif.Fujifilm.DRangePriorityFixed"] + + tagcmd = "$exiv2 -K " + " -K ".join(tags) + commands = ["$tagcmd $data_path/" + f for f, _ in filesAndExpectedOutput] + stdout = [e for _, e in filesAndExpectedOutput] + stderr = [""] * len(filesAndExpectedOutput) + retval = [0] * len(filesAndExpectedOutput) diff --git a/tests/bugfixes/redmine/test_issue_1179.py b/tests/bugfixes/redmine/test_issue_1179.py index a2d346b0..5efcdd35 100644 --- a/tests/bugfixes/redmine/test_issue_1179.py +++ b/tests/bugfixes/redmine/test_issue_1179.py @@ -35,6 +35,8 @@ Exif.Fujifilm.Macro Short 1 Off Exif.Fujifilm.FocusMode Short 1 Auto Exif.Fujifilm.SlowSync Short 1 Off Exif.Fujifilm.PictureMode Short 1 Program AE +Exif.Fujifilm.ShadowTone SLong 1 0 +Exif.Fujifilm.HighlightTone SLong 1 0 Exif.Fujifilm.Continuous Short 1 Off Exif.Fujifilm.SequenceNumber Short 1 0 Exif.Fujifilm.BlurWarning Short 1 Off @@ -43,6 +45,7 @@ Exif.Fujifilm.ExposureWarning Short 1 Off Exif.Fujifilm.DynamicRange Short 1 Standard Exif.Fujifilm.FilmMode Short 1 F0/Standard (Provia) Exif.Fujifilm.DynamicRangeSetting Short 1 Auto (100-400%) +Exif.Fujifilm.Rating Long 1 0 """, """Exif.Fujifilm.Version Undefined 4 48 49 51 48 Exif.Fujifilm.SerialNumber Ascii 48 FFDT22794526 593332303134151113535030217060 @@ -56,6 +59,8 @@ Exif.Fujifilm.Macro Short 1 Off Exif.Fujifilm.FocusMode Short 1 Auto Exif.Fujifilm.SlowSync Short 1 Off Exif.Fujifilm.PictureMode Short 1 Program AE +Exif.Fujifilm.ShadowTone SLong 1 0 +Exif.Fujifilm.HighlightTone SLong 1 0 Exif.Fujifilm.Continuous Short 1 Off Exif.Fujifilm.SequenceNumber Short 1 0 Exif.Fujifilm.BlurWarning Short 1 Off @@ -64,6 +69,7 @@ Exif.Fujifilm.ExposureWarning Short 1 Off Exif.Fujifilm.DynamicRange Short 1 Standard Exif.Fujifilm.FilmMode Short 1 F2/Fujichrome (Velvia) Exif.Fujifilm.DynamicRangeSetting Short 1 Auto (100-400%) +Exif.Fujifilm.Rating Long 1 0 """, #b """Exif.Fujifilm.Version Undefined 4 48 49 51 48 Exif.Fujifilm.SerialNumber Ascii 48 FFDT22794526 593332303134151113535030217060 @@ -77,6 +83,8 @@ Exif.Fujifilm.Macro Short 1 Off Exif.Fujifilm.FocusMode Short 1 Auto Exif.Fujifilm.SlowSync Short 1 Off Exif.Fujifilm.PictureMode Short 1 Program AE +Exif.Fujifilm.ShadowTone SLong 1 0 +Exif.Fujifilm.HighlightTone SLong 1 0 Exif.Fujifilm.Continuous Short 1 Off Exif.Fujifilm.SequenceNumber Short 1 0 Exif.Fujifilm.BlurWarning Short 1 Off @@ -85,6 +93,7 @@ Exif.Fujifilm.ExposureWarning Short 1 Off Exif.Fujifilm.DynamicRange Short 1 Standard Exif.Fujifilm.FilmMode Short 1 F1b/Studio Portrait Smooth Skin Tone (Astia) Exif.Fujifilm.DynamicRangeSetting Short 1 Auto (100-400%) +Exif.Fujifilm.Rating Long 1 0 """, """Exif.Fujifilm.Version Undefined 4 48 49 51 48 Exif.Fujifilm.SerialNumber Ascii 48 FFDT22794526 593332303134151113535030217060 @@ -98,6 +107,8 @@ Exif.Fujifilm.Macro Short 1 Off Exif.Fujifilm.FocusMode Short 1 Auto Exif.Fujifilm.SlowSync Short 1 Off Exif.Fujifilm.PictureMode Short 1 Program AE +Exif.Fujifilm.ShadowTone SLong 1 0 +Exif.Fujifilm.HighlightTone SLong 1 0 Exif.Fujifilm.Continuous Short 1 Off Exif.Fujifilm.SequenceNumber Short 1 0 Exif.Fujifilm.BlurWarning Short 1 Off @@ -106,6 +117,7 @@ Exif.Fujifilm.ExposureWarning Short 1 Off Exif.Fujifilm.DynamicRange Short 1 Standard Exif.Fujifilm.FilmMode Short 1 Classic Chrome Exif.Fujifilm.DynamicRangeSetting Short 1 Auto (100-400%) +Exif.Fujifilm.Rating Long 1 0 """, """Exif.Fujifilm.Version Undefined 4 48 49 51 48 Exif.Fujifilm.SerialNumber Ascii 48 FFDT22794526 593332303134151113535030217060 @@ -119,6 +131,8 @@ Exif.Fujifilm.Macro Short 1 Off Exif.Fujifilm.FocusMode Short 1 Auto Exif.Fujifilm.SlowSync Short 1 Off Exif.Fujifilm.PictureMode Short 1 Program AE +Exif.Fujifilm.ShadowTone SLong 1 0 +Exif.Fujifilm.HighlightTone SLong 1 0 Exif.Fujifilm.Continuous Short 1 Off Exif.Fujifilm.SequenceNumber Short 1 0 Exif.Fujifilm.BlurWarning Short 1 Off @@ -127,6 +141,7 @@ Exif.Fujifilm.ExposureWarning Short 1 Off Exif.Fujifilm.DynamicRange Short 1 Standard Exif.Fujifilm.FilmMode Short 1 Pro Neg. Hi Exif.Fujifilm.DynamicRangeSetting Short 1 Auto (100-400%) +Exif.Fujifilm.Rating Long 1 0 """, """Exif.Fujifilm.Version Undefined 4 48 49 51 48 Exif.Fujifilm.SerialNumber Ascii 48 FFDT22794526 593332303134151113535030217060 @@ -140,6 +155,8 @@ Exif.Fujifilm.Macro Short 1 Off Exif.Fujifilm.FocusMode Short 1 Manual Exif.Fujifilm.SlowSync Short 1 Off Exif.Fujifilm.PictureMode Short 1 Program AE +Exif.Fujifilm.ShadowTone SLong 1 0 +Exif.Fujifilm.HighlightTone SLong 1 0 Exif.Fujifilm.Continuous Short 1 Off Exif.Fujifilm.SequenceNumber Short 1 0 Exif.Fujifilm.BlurWarning Short 1 On @@ -147,6 +164,7 @@ Exif.Fujifilm.FocusWarning Short 1 Off Exif.Fujifilm.ExposureWarning Short 1 On Exif.Fujifilm.DynamicRange Short 1 Standard Exif.Fujifilm.DynamicRangeSetting Short 1 Auto (100-400%) +Exif.Fujifilm.Rating Long 1 0 """, """Exif.Fujifilm.Version Undefined 4 48 49 51 48 Exif.Fujifilm.SerialNumber Ascii 48 FFDT22794526 593332303134151113535030217060 @@ -160,6 +178,8 @@ Exif.Fujifilm.Macro Short 1 Off Exif.Fujifilm.FocusMode Short 1 Manual Exif.Fujifilm.SlowSync Short 1 Off Exif.Fujifilm.PictureMode Short 1 Program AE +Exif.Fujifilm.ShadowTone SLong 1 0 +Exif.Fujifilm.HighlightTone SLong 1 0 Exif.Fujifilm.Continuous Short 1 Off Exif.Fujifilm.SequenceNumber Short 1 0 Exif.Fujifilm.BlurWarning Short 1 On @@ -167,6 +187,7 @@ Exif.Fujifilm.FocusWarning Short 1 Off Exif.Fujifilm.ExposureWarning Short 1 On Exif.Fujifilm.DynamicRange Short 1 Standard Exif.Fujifilm.DynamicRangeSetting Short 1 Auto (100-400%) +Exif.Fujifilm.Rating Long 1 0 """, """Exif.Fujifilm.Version Undefined 4 48 49 51 48 Exif.Fujifilm.SerialNumber Ascii 48 FFDT22794526 593332303134151113535030217060 @@ -180,6 +201,8 @@ Exif.Fujifilm.Macro Short 1 Off Exif.Fujifilm.FocusMode Short 1 Manual Exif.Fujifilm.SlowSync Short 1 Off Exif.Fujifilm.PictureMode Short 1 Shutter speed priority AE +Exif.Fujifilm.ShadowTone SLong 1 0 +Exif.Fujifilm.HighlightTone SLong 1 0 Exif.Fujifilm.Continuous Short 1 Off Exif.Fujifilm.SequenceNumber Short 1 0 Exif.Fujifilm.BlurWarning Short 1 Off @@ -187,6 +210,7 @@ Exif.Fujifilm.FocusWarning Short 1 Off Exif.Fujifilm.ExposureWarning Short 1 On Exif.Fujifilm.DynamicRange Short 1 Standard Exif.Fujifilm.DynamicRangeSetting Short 1 Auto (100-400%) +Exif.Fujifilm.Rating Long 1 0 """, """Exif.Fujifilm.Version Undefined 4 48 49 51 48 Exif.Fujifilm.SerialNumber Ascii 48 FFDT22794526 593332303134151113535030217060 @@ -200,6 +224,8 @@ Exif.Fujifilm.Macro Short 1 Off Exif.Fujifilm.FocusMode Short 1 Manual Exif.Fujifilm.SlowSync Short 1 Off Exif.Fujifilm.PictureMode Short 1 Shutter speed priority AE +Exif.Fujifilm.ShadowTone SLong 1 0 +Exif.Fujifilm.HighlightTone SLong 1 0 Exif.Fujifilm.Continuous Short 1 Off Exif.Fujifilm.SequenceNumber Short 1 0 Exif.Fujifilm.BlurWarning Short 1 Off @@ -207,6 +233,7 @@ Exif.Fujifilm.FocusWarning Short 1 Off Exif.Fujifilm.ExposureWarning Short 1 On Exif.Fujifilm.DynamicRange Short 1 Standard Exif.Fujifilm.DynamicRangeSetting Short 1 Auto (100-400%) +Exif.Fujifilm.Rating Long 1 0 """, """Exif.Fujifilm.Version Undefined 4 48 49 51 48 Exif.Fujifilm.SerialNumber Ascii 48 FFDT22794526 593332303134151113535030217060 @@ -220,6 +247,8 @@ Exif.Fujifilm.Macro Short 1 Off Exif.Fujifilm.FocusMode Short 1 Manual Exif.Fujifilm.SlowSync Short 1 Off Exif.Fujifilm.PictureMode Short 1 Shutter speed priority AE +Exif.Fujifilm.ShadowTone SLong 1 0 +Exif.Fujifilm.HighlightTone SLong 1 0 Exif.Fujifilm.Continuous Short 1 Off Exif.Fujifilm.SequenceNumber Short 1 0 Exif.Fujifilm.BlurWarning Short 1 Off @@ -227,6 +256,7 @@ Exif.Fujifilm.FocusWarning Short 1 Off Exif.Fujifilm.ExposureWarning Short 1 On Exif.Fujifilm.DynamicRange Short 1 Standard Exif.Fujifilm.DynamicRangeSetting Short 1 Auto (100-400%) +Exif.Fujifilm.Rating Long 1 0 """ ] stderr = [""] * 10