From ccebe7936ee20086f407b5fda98a2af25296f825 Mon Sep 17 00:00:00 2001 From: Peter Date: Sun, 28 Aug 2022 10:02:18 +0100 Subject: [PATCH] Update Nikon flash tags (#2274) --- doc/templates/Makefile | 1 + doc/templates/tags-nikon.html.in | 7 +- exiv2.md | 27 - include/exiv2/tags.hpp | 1 + src/makernote_int.cpp | 3 +- src/nikonmn_int.cpp | 757 ++++++++++++++---- src/nikonmn_int.hpp | 46 +- src/tags_int.cpp | 1 + src/tiffimage_int.cpp | 79 +- test/data/exiv2-issue1941-2.exv | Bin 0 -> 11372 bytes test/data/exiv2-issue1941-3.exv | Bin 0 -> 11372 bytes test/data/exiv2-issue1941-4.exv | Bin 0 -> 53443 bytes test/data/exiv2-issue1941-5.exv | Bin 0 -> 5129 bytes test/data/exiv2-issue1941-6_coverage.exv | Bin 0 -> 5129 bytes .../test_reference_files/CH0_0174.exv.out | 26 +- .../Sigma_12-24mm_F4_DG_HSM_Art.exv.out | 26 +- ...Sigma_120-300_DG_OS_HSM_Sport_lens.exv.out | 26 +- .../Sigma_20mm_F1.4_DG_HSM_A.exv.out | 2 +- .../Sigma_50mm_F1.4_DG_HSM_A.exv.out | 2 +- ...Sigma_APO_MACRO_180_F3.5_EX_DG_HSM.exv.out | 25 +- .../test_reference_files/Stonehenge.exv.out | 371 +++++---- ...ron_SP70-300_F4-5.6_Di_VC_USD_A030.exv.out | 2 +- ...on_SP_24-70mm_F2.8_Di_VC_USD_G2_0E.exv.out | 2 +- .../Tamron_SP_35mm_f1.4_Di_USD_F045.exv.out | 26 +- .../Tokina_AT-X_14-20_F2_PRO_DX.exv.out | 25 +- .../Tokina_ATX-i_11-20mm_F2.8_CF.exv.out | 23 +- .../Tokina_atx-i_11-16mm_F2.8_CF.exv.out | 26 +- .../test_reference_files/_DSC8437.exv.out | 26 +- .../exiv2-bug1014.exv.out | 25 +- .../exiv2-bug1014_2.exv.out | 25 +- .../exiv2-bug1026.jpg.out | 2 +- .../exiv2-bug1062.jpg.out | 347 ++++---- .../exiv2-bug1108.exv.out | 371 +++++---- .../exiv2-bug1108.xmp.out | 371 +++++---- .../exiv2-bug1114.jpg.out | 2 +- .../exiv2-bug1199.webp.out | 23 +- .../exiv2-bug1348.exv.out | 25 +- .../exiv2-bug922a.jpg.out | 347 ++++---- .../exiv2-issue1208.exv.out | 26 +- .../exiv2-issue1941-1.exv.out | 26 +- .../exiv2-issue1941-2.exv.out | 198 +++++ .../exiv2-issue1941-3.exv.out | 198 +++++ .../exiv2-issue1941-4.exv.out | 194 +++++ .../exiv2-issue1941-5.exv.out | 196 +++++ .../exiv2-issue1941-6_coverage.exv.out | 196 +++++ .../exiv2-nikon-d70.jpg.out | 2 +- .../test_reference_files/exiv2-pr1105.exv.out | 25 +- test/data/test_reference_files/exiv2-test.out | 10 +- .../issue_1934_poc1.exv.out | 371 +++++---- .../test_reference_files/issue_743.exv.out | 25 +- .../issue_ghsa_5p8g_9xf3_gfrr_poc.exv.out | 23 +- .../issue_ghsa_5p8g_9xf3_gfrr_poc.webp.out | 23 +- .../test_reference_files/pr_1994_poc1.jpg.out | 2 +- .../test_reference_files/pr_1994_poc2.jpg.out | 2 +- .../test_issue_990.exv.out | 25 +- tests/bugfixes/github/test_issue_1941.py | 51 +- tests/bugfixes/github/test_pr_1994.py | 4 +- 57 files changed, 3292 insertions(+), 1373 deletions(-) create mode 100644 test/data/exiv2-issue1941-2.exv create mode 100644 test/data/exiv2-issue1941-3.exv create mode 100644 test/data/exiv2-issue1941-4.exv create mode 100644 test/data/exiv2-issue1941-5.exv create mode 100644 test/data/exiv2-issue1941-6_coverage.exv create mode 100644 test/data/test_reference_files/exiv2-issue1941-2.exv.out create mode 100644 test/data/test_reference_files/exiv2-issue1941-3.exv.out create mode 100644 test/data/test_reference_files/exiv2-issue1941-4.exv.out create mode 100644 test/data/test_reference_files/exiv2-issue1941-5.exv.out create mode 100644 test/data/test_reference_files/exiv2-issue1941-6_coverage.exv.out diff --git a/doc/templates/Makefile b/doc/templates/Makefile index f130f6cd..67101d00 100644 --- a/doc/templates/Makefile +++ b/doc/templates/Makefile @@ -87,6 +87,7 @@ TABLES = Exif \ NikonFl1 \ NikonFl2 \ NikonFl3 \ + NikonFl6 \ NikonFl7 \ NikonSiD80 \ NikonSiD40 \ diff --git a/doc/templates/tags-nikon.html.in b/doc/templates/tags-nikon.html.in index 1ab1945d..0b5d7139 100644 --- a/doc/templates/tags-nikon.html.in +++ b/doc/templates/tags-nikon.html.in @@ -96,7 +96,12 @@ __NikonFl2__ __NikonFl3__
-

Nikon Flash Info 7 Tags (for version 0107 and 0108)

+

Nikon Flash Info 6 Tags

+

Click on a column header to sort the table.

+__NikonFl6__ +
+ +

Nikon Flash Info 7 Tags

Click on a column header to sort the table.

__NikonFl7__
diff --git a/exiv2.md b/exiv2.md index 86dd7fd2..efeec38c 100644 --- a/exiv2.md +++ b/exiv2.md @@ -778,33 +778,6 @@ available from: https://www.adobe.com/content/dam/acom/en/devnet/xmp/pdfs/XMPSDK ### 7.2 Exiv2 tags For an explanation of Exiv2 keys, see [Exiv2 key syntax](#exiv2_key_syntax). -The following groups are defined for the Exif family: - -``` -GPSInfo Canon Nikon1 NikonMe OlympusFe8 SonyMisc2b -Image CanonCf Nikon2 NikonPc OlympusFe9 SonyMisc3c -Image2 CanonCs Nikon3 NikonPreview OlympusFi SonyMinolta -Image3 CanonFi NikonAFT NikonSi01xx OlympusIp SonySInfo1 -Iop CanonPa NikonAf NikonSi02xx OlympusRd -MakerNote CanonPi NikonAf2 NikonSiD300a OlympusRd2 Samsung2 -MpfInfo CanonPr NikonAf22 NikonSiD300b OlympusRi SamsungPictureWizard -Photo CanonSi NikonCb1 NikonSiD40 SamsungPreview -SubImage1 CanonTi NikonCb2 NikonSiD80 Sigma -SubImage2 NikonCb2a NikonVr -SubImage3 Casio NikonCb2b NikonWt Sony1 -SubImage4 Casio2 NikonCb3 Sony1Cs -SubImage5 NikonCb4 Olympus Sony1Cs2 -SubImage6 Minolta NikonFi Olympus2 Sony1MltCs7D -SubImage7 MinoltaCs5D NikonFl1 OlympusCs Sony1MltCsA100 -SubImage8 MinoltaCs7D NikonFl2 OlympusEq Sony1MltCsNew -SubImage9 MinoltaCsNew NikonFl3 OlympusFe1 Sony1MltCsOld -SubThumb1 MinoltaCsOld NikonFl7 OlympusFe2 Sony2 -Thumbnail NikonIi OlympusFe3 Sony2Cs - Panasonic NikonLd1 OlympusFe4 Sony2Cs2 -Pentax PanasonicRaw NikonLd2 OlympusFe5 Sony2010e -PentaxDng NikonLd3 OlympusFe6 Sony2Fp - Fujifilm NikonLd4 OlympusFe7 SonyMisc1 -``` A full list of built-in Exif, IPTC and XMP tags is available online at https://www.exiv2.org/metadata.html. To query Exiv2 Groups and Tagnames, diff --git a/include/exiv2/tags.hpp b/include/exiv2/tags.hpp index a2e960bb..0e8e896e 100644 --- a/include/exiv2/tags.hpp +++ b/include/exiv2/tags.hpp @@ -111,6 +111,7 @@ enum class IfdId : uint32_t { nikonFl1Id, nikonFl2Id, nikonFl3Id, + nikonFl6Id, nikonFl7Id, nikonSi1Id, nikonSi2Id, diff --git a/src/makernote_int.cpp b/src/makernote_int.cpp index dc94478a..6b83d338 100644 --- a/src/makernote_int.cpp +++ b/src/makernote_int.cpp @@ -877,7 +877,8 @@ constexpr auto nikonArrayIdx = std::array{ NikonArrayIdx{0x00a8, "0100", 0, 0, NA}, NikonArrayIdx{0x00a8, "0101", 0, 0, NA}, NikonArrayIdx{0x00a8, "0102", 0, 1, NA}, NikonArrayIdx{0x00a8, "0103", 0, 2, NA}, NikonArrayIdx{0x00a8, "0104", 0, 2, NA}, NikonArrayIdx{0x00a8, "0105", 0, 2, NA}, - NikonArrayIdx{0x00a8, "0107", 0, 3, NA}, NikonArrayIdx{0x00a8, "0108", 0, 3, NA}, + NikonArrayIdx{0x00a8, "0106", 0, 3, NA}, NikonArrayIdx{0x00a8, "0107", 0, 4, NA}, + NikonArrayIdx{0x00a8, "0108", 0, 4, NA}, // NikonAf NikonArrayIdx{0x00b7, "0100", 30, 0, NA}, // These sizes have been found in tiff headers of MN NikonArrayIdx{0x00b7, "0101", 84, 1, NA}, // tag 0xb7 in sample image metadata for each version diff --git a/src/nikonmn_int.cpp b/src/nikonmn_int.cpp index fd5e7206..0f17efde 100644 --- a/src/nikonmn_int.cpp +++ b/src/nikonmn_int.cpp @@ -66,11 +66,9 @@ constexpr TagDetails nikonFlashComp[] = { constexpr TagDetails nikonColorSpace[] = {{1, N_("sRGB")}, {2, N_("Adobe RGB")}}; //! FlashMode, tag 0x0087 -constexpr TagDetails nikonFlashMode[] = {{0, N_("Did not fire")}, - {1, N_("Fire, manual")}, - {7, N_("Fire, external")}, - {8, N_("Fire, commander mode")}, - {9, N_("Fire, TTL mode")}}; +constexpr TagDetails nikonFlashMode[] = { + {0, N_("Did not fire")}, {1, N_("Fire, manual")}, {3, N_("Not ready")}, {6, N_("Off")}, + {7, N_("Fire, external")}, {8, N_("Fire, commander mode")}, {9, N_("Fire, TTL mode")}, {18, N_("LED Light")}}; //! ShootingMode, tag 0x0089 constexpr TagDetailsBitmask nikonShootingMode[] = {{0x0001, N_("Continuous")}, @@ -855,32 +853,159 @@ constexpr TagDetails nikonFlashFirmware[] = {{0x0000, N_("n/a")}, {0x0501, "5.01 (SB-900)"}, {0x0502, "5.02 (SB-900)"}, {0x0601, "6.01 (SB-700)"}, - {0x0701, "7.01 (SB-910)"}}; + {0x0701, "7.01 (SB-910)"}, + {0x0800, "8.01 (SB-N5)"}, + {0x0a00, "10.00 (SB-N7)"}, + {0x0b00, "11.00 (SB-300)"}, + {0x0d00, "13.00 (SB-500)"}, + {0x0e00, "14.00 (SB-5000)"}}; //! FlashGNDistance constexpr TagDetails nikonFlashGNDistance[] = { - {0, N_("None")}, {1, "0.1 m"}, {2, "0.2 m"}, {3, "0.3 m"}, {4, "0.4 m"}, {5, "0.5 m"}, {6, "0.6 m"}, - {7, "0.7 m"}, {8, "0.8 m"}, {9, "0.9 m"}, {10, "1.0 m"}, {11, "1.1 m"}, {12, "1.3 m"}, {13, "1.4 m"}, - {14, "1.6 m"}, {15, "1.8 m"}, {16, "2.0 m"}, {17, "2.2 m"}, {18, "2.5 m"}, {19, "2.8 m"}, {20, "3.2 m"}, - {21, "3.6 m"}, {22, "4.0 m"}, {23, "4.5 m"}, {24, "5.0 m"}, {25, "5.6 m"}, {26, "6.3 m"}, {27, "7.1 m"}, - {28, "8.0 m"}, {29, "9.0 m"}, {30, "10.0 m"}, {31, "11.0 m"}, {32, "13.0 m"}, {33, "14.0 m"}, {34, "16.0 m"}, - {35, "18.0 m"}, {36, "20.0 m"}, {255, N_("n/a")}}; + {0, N_("n/a")}, {1, "0.1 m"}, {2, "0.2 m"}, {3, "0.3 m"}, {4, "0.4 m"}, {5, "0.5 m"}, + {6, "0.6 m"}, {7, "0.7 m"}, {8, "0.8 m"}, {9, "0.9 m"}, {10, "1.0 m"}, {11, "1.1 m"}, + {12, "1.3 m"}, {13, "1.4 m"}, {14, "1.6 m"}, {15, "1.8 m"}, {16, "2.0 m"}, {17, "2.2 m"}, + {18, "2.5 m"}, {19, "2.8 m"}, {20, "3.2 m"}, {21, "3.6 m"}, {22, "4.0 m"}, {23, "4.5 m"}, + {24, "5.0 m"}, {25, "5.6 m"}, {26, "6.3 m"}, {27, "7.1 m"}, {28, "8.0 m"}, {29, "9.0 m"}, + {30, "10.0 m"}, {31, "11.0 m"}, {32, "13.0 m"}, {33, "14.0 m"}, {34, "16.0 m"}, {35, "18.0 m"}, + {36, "20.0 m"}, {37, "23.0 m"}, {38, "25.0 m"}, {39, "29.0 m"}, {128, N_("n/a")}, {129, "0.3 ft"}, + {130, "0.7 ft"}, {131, "1.0 ft"}, {132, "1.3 ft"}, {133, "1.7 ft"}, {134, "2.0 ft"}, {135, "2.3 ft"}, + {136, "2.6 ft"}, {137, "2.9 ft"}, {138, "3.3 ft"}, {139, "3.7 ft"}, {140, "4.1 ft"}, {141, "4.6 ft"}, + {142, "5.2 ft"}, {143, "5.8 ft"}, {144, "6.6 ft"}, {145, "7.4 ft"}, {146, "8.3 ft"}, {147, "9.3 ft"}, + {148, "10.0 ft"}, {149, "12.0 ft"}, {150, "13.0 ft"}, {151, "15.0 ft"}, {152, "17.0 ft"}, {153, "19.0 ft"}, + {154, "21.0 ft"}, {155, "23.0 ft"}, {156, "26.0 ft"}, {157, "29.0 ft"}, {158, "33.0 ft"}, {159, "37.0 ft"}, + {160, "42.0 ft"}, {161, "47.0 ft"}, {162, "52.0 ft"}, {163, "59.0 ft"}, {164, "66.0 ft"}, {165, "74.0 ft"}, + {166, "83.0 ft"}, {167, "94.0 ft"}, {255, N_("n/a")}}; //! FlashControlMode constexpr TagDetails nikonFlashControlMode[] = { - {0, N_("Off")}, {1, N_("iTTL-BL")}, {2, N_("iTTL")}, - {3, N_("Auto Aperture")}, {4, N_("Automatic")}, {5, N_("GN (distance priority)")}, - {6, N_("Manual")}, {7, N_("Repeating Flash")}, + {0, N_("Off")}, {1, N_("TTL")}, + {2, N_("iTTL")}, {3, N_("Auto Aperture")}, + {4, N_("Automatic")}, {5, N_("GN (distance priority)")}, + {6, N_("Manual")}, {7, N_("Repeating Flash")}, + // 8: When used with Group A (and possibly Group B), may have an additional "Quick Wireless Flash Control [A:B]" + // mode that applies to Groups A and B. May only be available with Radio AWL modes? + // ?: Possibly includes "iTTL-BL", "i-AA" and "i-A" modes. }; +static constexpr bool flashModeUsesManualScale(const int64_t mode) { + return (mode == 6 || mode == 7); +} + //! ExternalFlashFlags constexpr TagDetails nikonExternalFlashFlags[] = { {0, N_("Fired")}, {2, N_("Bounce Flash")}, {4, N_("Wide Flash Adapter")}}; //! FlashColorFilter -constexpr TagDetails nikonFlashColorFilter[] = {{0, N_("None")}, {1, N_("FL-GL1")}, {2, N_("FL-GL2")}, - {9, N_("TN-A1")}, {10, N_("TN-A2")}, {65, N_("Red")}, - {66, N_("Blue")}, {67, N_("Yellow")}, {68, N_("Amber")}}; +constexpr TagDetails nikonFlashColorFilter[] = {{0, N_("None")}, + {1, N_("FL-GL1 (for fluorescent light)")}, + {2, N_("FL-GL2 (for fluorescent light)")}, + {9, N_("TN-A1 (for incandescent light)")}, + {10, N_("TN-A2 (for incandescent light)")}, + {65, N_("Red")}, + {66, N_("Blue")}, + {67, N_("Yellow")}, + {68, N_("Amber")}, + {79, N_("Other")}}; + +//! FlashWirelessOptions +constexpr TagDetails nikonFlashAWLMode[] = { + {0, N_("AWL Off")}, {1, N_("Optical AWL")}, {2, N_("Optical/Radio AWL")}, {3, N_("Radio AWL")}}; + +//! FlashExposureComp +constexpr TagDetails nikonFlashExposureComp[] = {{0, N_("Exposure Comp.: Entire frame")}, + {4, N_("Exposure Comp.: Background Only")}}; + +//! FlashIlluminationPattern +constexpr TagDetails nikonFlashIlluminationPat[] = {{0, N_("Illumination Pat.: Standard")}, + {1, N_("Illumination Pat.: Center-weighted")}, + {2, N_("Illumination Pat.: Even")}}; + +//! FlashAdaptors +constexpr TagDetailsBitmask nikonFlashAdaptors[] = { + {0x04, N_("Bounce Flash adaptor")}, {0x10, N_("Wide Flash adaptor")}, {0x20, N_("Nikon Diffusion Dome")}}; + +static void printFlashCompensationValue(std::ostream& os, const unsigned char value, const bool manualScale) { + std::ios::fmtflags f(os.flags()); + std::ostringstream oss; + oss.copyfmt(os); + + if (manualScale) { + /* + // Format: + 0 = "1/1" + 1 = "1/1 (-1/6EV)" + 2 = "1/1 (-1/3EV)" + 3 = "1/1 (-1/2EV)" + 4 = "1/1 (-2/3EV)" + 5 = "1/1 (-5/6EV)" + 6 = "1/2" + 7 = "1/2 (-1/6EV)" + ... + 48 = "1/256" + */ + if (value > 48) { + os << "(" << value << ")"; + os.flags(f); + return; + } + const auto mod = value % 6; + auto temp = (value < 6) ? 0 : (value - mod) / 6; + os << "1/" << std::pow(2, temp); + if (mod != 0) { + os << " (-"; + switch (mod) { + case 1: + os << "1/6 EV)"; + break; + case 2: + os << "1/3 EV)"; + break; + case 3: + os << "1/2 EV)"; + break; + case 4: + os << "2/3 EV)"; + break; + case 5: + os << "5/6 EV)"; + break; + } + } + } else { + /* + // Format uses 127 as boundary between +/- then values descend: + 0 = "0.0EV" + 1 = "-0.2EV" + 2 = "-0.3EV" + 3 = "-0.5EV" + 4 = "-0.7EV" + 5 = "-0.8EV" + 6 = "-1.0EV" + 7 = "-1.2EV" + ... + 127 = "-21.2EV" + 128 = "+21.3EV" + 129 = "+21.2EV" + 130 = "+21.0EV" + ... + 255 = "+0.2" + */ + float output = 0.0; + if (value < 128) { + if (value != 0) + output = float(value) * float(-1.0); + } else { + output = float(256.0) - float(value); + } + os.precision(1); + if (value != 0) + os << std::showpos; + os << std::fixed << (output / 6) << " EV"; + } + os.copyfmt(os); + os.flags(f); +} // Nikon3 Flash Info 1 Tag Info constexpr TagInfo Nikon3MakerNote::tagInfoFl1_[] = { @@ -971,44 +1096,168 @@ const TagInfo* Nikon3MakerNote::tagListFl3() { return tagInfoFl3_; } +// Nikon3 Flash Info 6 (0106) Tag Info +constexpr TagInfo Nikon3MakerNote::tagInfoFl6_[] = { + {0, "Version", N_("Version"), N_("Identifies the NikonFl version"), IfdId::nikonFl6Id, SectionId::makerTags, + undefined, 4, printExifVersion}, + {4, "FlashSource", N_("Flash source"), N_("The type of flash used"), IfdId::nikonFl6Id, SectionId::makerTags, + unsignedByte, 1, EXV_PRINT_TAG(nikonFlashSource)}, + // 5: May be connected to high-speed shutter setting? + {6, "ExternalFlashFirmware", N_("External flash firmware"), N_("External flash firmware version"), + IfdId::nikonFl6Id, SectionId::makerTags, unsignedShort, 1, EXV_PRINT_TAG(nikonFlashFirmware)}, + {8, "ExternalFlashData1", N_("External flash data 1"), + N_("The Speedlight flash status and any attached flash adapters"), IfdId::nikonFl6Id, SectionId::makerTags, + unsignedByte, 1, printExternalFlashData1Fl6}, + {9, "ExternalFlashData2", N_("External flash data 2"), + N_("The external flash status and the mode used for the Master flash (see FlashSource)"), IfdId::nikonFl6Id, + SectionId::makerTags, unsignedByte, 1, printExternalFlashData2Fl6}, + {10, "FlashCompensationMaster", N_("Flash compensation Master"), + N_("Flash compensation for the Master flash (see FlashSource)"), IfdId::nikonFl6Id, SectionId::makerTags, + unsignedByte, 1, printFlashMasterDataFl6}, + {12, "FlashFocalLength", N_("Flash focal length"), N_("Flash focal length"), IfdId::nikonFl6Id, + SectionId::makerTags, unsignedByte, 1, printFlashFocalLength}, + {13, "RepeatingFlashRate", N_("Repeating flash rate"), N_("For repeating flash mode, the rate (in Hz)"), + IfdId::nikonFl6Id, SectionId::makerTags, unsignedByte, 1, printRepeatingFlashRate}, + {14, "RepeatingFlashCount", N_("Repeating flash count"), + N_("For repeating flash mode, the number of flash firings"), IfdId::nikonFl6Id, SectionId::makerTags, unsignedByte, + 1, printRepeatingFlashCount}, + {15, "FlashGNDistance", N_("Flash GN distance"), + N_("For GN (distance priority) mode on the Master flash (see FlashSource), the distance to the subject"), + IfdId::nikonFl6Id, SectionId::makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonFlashGNDistance)}, + {16, "FlashColorFilter", N_("Flash color filter"), N_("The attached color filter"), IfdId::nikonFl6Id, + SectionId::makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonFlashColorFilter)}, + {17, "FlashGroupAControlData", N_("Flash Group A control data"), N_("The mode used for Group A flashes"), + IfdId::nikonFl6Id, SectionId::makerTags, unsignedByte, 1, printFlashGroupAControlData}, + {18, "FlashGroupBCControlData", N_("Flash Group B/C control data"), N_("The modes used for Group B and C flashes"), + IfdId::nikonFl6Id, SectionId::makerTags, unsignedByte, 1, printFlashGroupBCControlData}, + {19, "FlashCompensationGroupA", N_("Flash compensation Group A"), N_("Flash compensation for Group A flashes"), + IfdId::nikonFl6Id, SectionId::makerTags, unsignedByte, 1, printFlashGroupADataFl6}, + {20, "FlashCompensationGroupB", N_("Flash compensation Group B data"), N_("Flash compensation for Group B flashes"), + IfdId::nikonFl6Id, SectionId::makerTags, unsignedByte, 1, printFlashGroupBDataFl6}, + {21, "FlashCompensationGroupC", N_("Flash Compensation Group C data"), N_("Flash compensation for Group C flashes"), + IfdId::nikonFl6Id, SectionId::makerTags, unsignedByte, 1, printFlashGroupCDataFl6}, + // 22: Possibly includes nikonFlashExposureComp array? + {28, "CameraExposureCompensation", N_("Camera exposure compensation"), N_("The camera's exposure compensation"), + IfdId::nikonFl6Id, SectionId::makerTags, unsignedByte, 1, printCameraExposureCompensation}, + {29, "CameraFlashCompensation", N_("Camera flash compensation"), N_("The camera's flash compensation"), + IfdId::nikonFl6Id, SectionId::makerTags, unsignedByte, 1, printCameraExposureCompensation}, + {39, "FlashMasterOutput", N_("Flash Master output"), + N_("Total flash output for the Master (see FlashSource). FlashMasterOutput = CameraExposureCompensation " + "(if exposure uses \"Entire frame\" mode and Master uses a non-manual mode) + CameraFlashCompensation (if " + "Master uses a non-manual mode) + FlashCompensationMaster"), + IfdId::nikonFl6Id, SectionId::makerTags, unsignedByte, 1, printFlashMasterDataFl6}, + {40, "FlashGroupAOutput", N_("Flash Group A output"), + N_("Total flash output for Group A. FlashGroupAOutput = CameraExposureCompensation (if exposure uses \"Entire " + "frame\" mode and Group A uses a non-manual mode) + CameraFlashCompensation (if Group A uses a non-manual " + "mode) + " + "FlashCompensationGroupA"), + IfdId::nikonFl6Id, SectionId::makerTags, unsignedByte, 1, printFlashGroupADataFl6}, + {41, "FlashGroupBOutput", N_("Flash Group B output"), + N_("Total flash output for Group B. FlashGroupBOutput = CameraExposureCompensation (if exposure uses \"Entire " + "frame\" mode and Group B uses a non-manual mode) + CameraFlashCompensation (if Group B uses a non-manual " + "mode) + " + "FlashCompensationGroupB"), + IfdId::nikonFl6Id, SectionId::makerTags, unsignedByte, 1, printFlashGroupBDataFl6}, + {42, "FlashGroupCOutput", N_("Flash Group C output"), + N_("Total flash output for Group C. FlashGroupCOutput = CameraExposureCompensation (if exposure uses \"Entire " + "frame\" mode and Group C uses a non-manual mode) + CameraFlashCompensation (if Group C uses a non-manual " + "mode) + " + "FlashCompensationGroupC"), + IfdId::nikonFl6Id, SectionId::makerTags, unsignedByte, 1, printFlashGroupCDataFl6}, + // End of list marker + {0xffff, "(UnknownNikonFl6Tag)", "(UnknownNikonFl6Tag)", N_("Unknown Nikon Flash Info 6 Tag"), IfdId::nikonFl6Id, + SectionId::makerTags, unsignedByte, 1, printValue}, +}; + +const TagInfo* Nikon3MakerNote::tagListFl6() { + return tagInfoFl6_; +} + // Nikon3 Flash Info 7 (0107 and 0108) Tag Info constexpr TagInfo Nikon3MakerNote::tagInfoFl7_[] = { - {0, "Version", N_("Version"), N_("Flash info version"), IfdId::nikonFl7Id, SectionId::makerTags, undefined, 4, - printExifVersion}, - {4, "FlashSource", N_("Flash source"), N_("The type of flash used (if any)"), IfdId::nikonFl7Id, - SectionId::makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonFlashSource)}, - {6, "ExternalFlashFirmware", N_("External Flash Firmware"), N_("External flash firmware version"), + {0, "Version", N_("Version"), N_("Identifies the NikonFl version"), IfdId::nikonFl7Id, SectionId::makerTags, + undefined, 4, printExifVersion}, + {4, "FlashSource", N_("Flash source"), N_("The type of flash used"), IfdId::nikonFl7Id, SectionId::makerTags, + unsignedByte, 1, EXV_PRINT_TAG(nikonFlashSource)}, + // 5: Possibly connected to high-speed shutter setting? + {6, "ExternalFlashFirmware", N_("External flash firmware"), N_("The firmware version used by the external flash"), IfdId::nikonFl7Id, SectionId::makerTags, unsignedShort, 1, EXV_PRINT_TAG(nikonFlashFirmware)}, - {8, "ExternalFlashData1", N_("External flash data"), N_("External flash data"), IfdId::nikonFl7Id, - SectionId::makerTags, unsignedByte, 1, printExternalFlashData1}, - {9, "ExternalFlashData2", N_("External flash ready state"), N_("External flash ready state"), IfdId::nikonFl7Id, - SectionId::makerTags, unsignedByte, 1, printExternalFlashData2}, - {10, "FlashCompensation", N_("Flash compensation"), N_("Flash compensation"), IfdId::nikonFl7Id, - SectionId::makerTags, signedByte, 1, printFlashCompensation}, + {8, "ExternalFlashData1", N_("External flash data 1"), + N_("The external flash state, zoom status and attached flash adapters"), IfdId::nikonFl7Id, SectionId::makerTags, + unsignedByte, 1, printExternalFlashData1Fl7}, + {9, "ExternalFlashData2", N_("External flash data 2"), N_("The mode used for the Master flash (see FlashSource)"), + IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printExternalFlashData2}, + {10, "FlashCompensationMaster", N_("Flash compensation Master"), + N_("Flash compensation for the Master flash (see FlashSource)"), IfdId::nikonFl7Id, SectionId::makerTags, + unsignedByte, 1, printFlashMasterDataFl7}, + // 12: Purpose of tag is unclear as manual zoom value is found in tag 38. Possibly connected to automatic zoom? {12, "FlashFocalLength", N_("Flash focal length"), N_("Flash focal length"), IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printFlashFocalLength}, - {13, "RepeatingFlashRate", N_("Repeating flash rate"), N_("Repeating flash rate"), IfdId::nikonFl7Id, - SectionId::makerTags, unsignedByte, 1, printRepeatingFlashRate}, - {14, "RepeatingFlashCount", N_("Repeating flash count"), N_("Repeating flash count"), IfdId::nikonFl7Id, - SectionId::makerTags, unsignedByte, 1, printRepeatingFlashCount}, - {15, "FlashGNDistance", N_("Flash GN Distance"), N_("Flash GN distance"), IfdId::nikonFl7Id, SectionId::makerTags, - unsignedByte, 1, EXV_PRINT_TAG(nikonFlashGNDistance)}, - {17, "FlashGroupAControlData", N_("Flash group A control data"), N_("Flash group A control data"), - IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonFlashControlMode)}, - {18, "FlashGroupBCControlData", N_("Flash group B/C control data"), N_("Flash group B/C control data"), + {13, "RepeatingFlashRate", N_("Repeating flash rate"), N_("For repeating flash modes, the rate (in Hz)"), + IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printRepeatingFlashRate}, + {14, "RepeatingFlashCount", N_("Repeating flash count"), + N_("For repeating flash modes, the number of flash firings"), IfdId::nikonFl7Id, SectionId::makerTags, + unsignedByte, 1, printRepeatingFlashCount}, + {15, "FlashGNDistance", N_("Flash GN distance"), + N_("For GN (distance priority) mode on the Master flash (see FlashSource), the distance to the subject"), + IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonFlashGNDistance)}, + {16, "FlashColorFilter", N_("Flash color filter"), N_("The attached color filters"), IfdId::nikonFl7Id, + SectionId::makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonFlashColorFilter)}, + // 17: Possibly also contains control data for Group D in upper nibble? + {17, "FlashGroupAControlData", N_("Flash Group A control data"), N_("The mode used for Group A flashes"), + IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printFlashGroupAControlData}, + {18, "FlashGroupBCControlData", N_("Flash Groups B/C control data"), N_("The modes used for Group B and C flashes"), IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printFlashGroupBCControlData}, - {40, "FlashGroupAData", N_("Flash group A data"), - N_("Depending upon FlashGroupAControlData, either the FlashGroupACompensation value or the FlashGroupAOutput " - "value"), - IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printFlashGroupAData}, - {41, "FlashGroupBData", N_("Flash group B data"), - N_("Depending upon FlashGroupBCControlData, either the FlashGroupBCompensation value or the FlashGroupBOutput " - "value"), - IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printFlashGroupBData}, - {42, "FlashGroupCData", N_("Flash group C data"), - N_("Depending upon FlashGroupBCControlData, either the FlashGroupCCompensation value or the FlashGroupCOutput " - "value"), - IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printFlashGroupCData}, + {19, "FlashCompensationGroupA", N_("Flash compensation Group A"), N_("Flash compensation for Group A flashes"), + IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printFlashGroupADataFl7}, + {20, "FlashCompensationGroupB", N_("Flash compensation Group B data"), N_("Flash compensation for Group B flashes"), + IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printFlashGroupBDataFl7}, + {21, "FlashCompensationGroupC", N_("Flash Compensation Group C data"), N_("Flash compensation for Group C flashes"), + IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printFlashGroupCDataFl7}, + {22, "ExternalFlashData3", N_("External flash data 3"), + N_("For the camera's exposure compensation, defines how the flash level is adjusted"), IfdId::nikonFl7Id, + SectionId::makerTags, unsignedByte, 1, printExternalFlashData3}, + {27, "CameraFlashOutput", N_("Camera flash output"), + N_("Total flash output for the camera. CameraFlashOutput = CameraExposureCompensation (if ExternalFlashData3 " + "uses \"Entire frame\" mode) + CameraFlashCompensation"), + IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printCameraExposureCompensation}, + {28, "CameraExposureCompensation", N_("Camera exposure compensation"), N_("The camera's exposure compensation"), + IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printCameraExposureCompensation}, + {29, "CameraFlashCompensation", N_("Camera flash compensation"), N_("The camera's flash compensation"), + IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printCameraExposureCompensation}, + // 34: Possible that FV Lock sets '0100 0000'? + {37, "ExternalFlashData4", N_("External flash data 4"), N_("The flash illumination pattern"), IfdId::nikonFl7Id, + SectionId::makerTags, unsignedByte, 1, printExternalFlashData4}, + {38, "FlashZoomHeadPosition", N_("Flash zoom head position"), N_("Flash zoom head position (in mm)"), + IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printFlashZoomHeadPosition}, + {39, "FlashMasterOutput", N_("Flash Master output"), + N_("Total flash output for the Master (see FlashSource). FlashMasterOutput = CameraFlashOutput (if Master uses a " + "non-manual mode) + " + "FlashCompensationMaster"), + IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printFlashMasterDataFl7}, + {40, "FlashGroupAOutput", N_("Flash Group A output"), + N_("Total flash output for Group A. FlashGroupAOutput = CameraFlashOutput (if Group A uses a non-manual mode) + " + "FlashCompensationGroupA"), + IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printFlashGroupADataFl7}, + {41, "FlashGroupBOutput", N_("Flash Group B output"), + N_("Total flash output for Group B. FlashGroupBOutput = CameraFlashOutput (if Group B uses a non-manual mode) + " + "FlashCompensationGroupB"), + IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printFlashGroupBDataFl7}, + {42, "FlashGroupCOutput", N_("Flash Group C output"), + N_("Total flash output for Group C. FlashGroupCOutput = CameraFlashOutput (if Group C uses a non-manual mode) + " + "FlashCompensationGroupC"), + IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printFlashGroupCDataFl7}, + // 43-46: Each corresponds to M/A/B/C - set when using TTL modes, otherwise is zero. Could be connected to the + // monitor pre-flashes? + {67, "WirelessFlashData", N_("Wireless flash data"), N_("Advanced Wireless Lighting (AWL) communication mode"), + IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, EXV_PRINT_TAG(nikonFlashAWLMode)}, + // 68-72: Related to WirelessFlashData? Set if AWL is on, zero if AWL is off. 68-71 connected to M/A/B/C? + // ?: 1. Groups D/E/F will have equivalent tags to Groups A/B/C (see note in tag 17). This could also include + // equivalent tags in 43-46? + // 2. Compatible remote flashes using 'Radio AWL' could transmit settings/data back to the Speedflash? + // 3. Automatic flash mode (A) uses an aperture value. + // 4. The Speedlight can detect if the Master is not pointed straight ahead. The vertical and horizontal + // angles/positions of the flash could be recorded? // End of list marker {0xffff, "(UnknownNikonFl7Tag)", "(UnknownNikonFl7Tag)", N_("Unknown Nikon Flash Info 7 Tag"), IfdId::nikonFl7Id, SectionId::makerTags, unsignedByte, 1, printValue}, @@ -3047,7 +3296,8 @@ std::ostream& Nikon3MakerNote::printRepeatingFlashCount(std::ostream& os, const return os; } -std::ostream& Nikon3MakerNote::printExternalFlashData1(std::ostream& os, const Value& value, const ExifData*) { +std::ostream& Nikon3MakerNote::printExternalFlashData1Fl6(std::ostream& os, const Value& value, + const ExifData* metadata) { std::ios::fmtflags f(os.flags()); if (value.count() != 1 || value.typeId() != unsignedByte) { os << "(" << value << ")"; @@ -3056,70 +3306,156 @@ std::ostream& Nikon3MakerNote::printExternalFlashData1(std::ostream& os, const V } std::ostringstream oss; oss.copyfmt(os); - os << (value.toInt64() & 0x80 ? _("External flash zoom override") : _("No external flash zoom override")); - os << ", "; - os << (value.toInt64() & 0x01 ? _("external flash attached") : _("external flash not attached")); - + const auto v0 = value.toUint32(0); + os << (v0 & 0x01 ? _("Fired") : _("Did not fire")); + + if (v0 & 0x01) { + std::ostringstream ossTemp; + printTagBitmask(ossTemp, value, metadata); + std::string tempStr = ossTemp.str(); + if (!tempStr.empty()) { + os << ", " << tempStr; + } + } os.copyfmt(oss); os.flags(f); return os; } -std::ostream& Nikon3MakerNote::printExternalFlashData2(std::ostream& os, const Value& value, const ExifData*) { +std::ostream& Nikon3MakerNote::printExternalFlashData2Fl6(std::ostream& os, const Value& value, + const ExifData* metadata) { std::ios::fmtflags f(os.flags()); if (value.count() != 1 || value.typeId() != unsignedByte) { os << "(" << value << ")"; os.flags(f); return os; } - std::ostringstream oss; oss.copyfmt(os); - const auto temp = value.toInt64(); + const auto v0 = value.toUint32(0); + os << (v0 & 0x80 ? _("External flash on") : _("External flash off")); - switch (temp & 0x07) { - case 0: - os << _("n/a"); - break; - case 1: - os << _("Ready"); - break; - case 6: - os << _("Not ready"); - break; - default: - os << "(" << temp << ")"; - break; + if (v0 & 0x80) { + os << ", "; + printTag(os, (value.toUint32() & 0x0F), metadata); } - os.copyfmt(oss); os.flags(f); return os; } -std::ostream& Nikon3MakerNote::printFlashCompensation(std::ostream& os, const Value& value, const ExifData*) { +std::ostream& Nikon3MakerNote::printExternalFlashData1Fl7(std::ostream& os, const Value& value, + const ExifData* metadata) { std::ios::fmtflags f(os.flags()); - if (value.count() != 1 || value.typeId() != signedByte) { + if (value.count() != 1 || value.typeId() != unsignedByte) { os << "(" << value << ")"; os.flags(f); return os; } std::ostringstream oss; oss.copyfmt(os); - float temp = (value.toFloat() / static_cast(-6.0)); + const auto v0 = value.toUint32(); + os << (v0 & 0x01 ? _("External flash on") : _("External flash off")); + + if (v0 & 0x01) { + os << ", "; + os << (v0 & 0x80 ? _("External flash zoom override") : _("No external flash zoom override")); + + std::ostringstream ossTemp; + printTagBitmask(ossTemp, value, metadata); + std::string tempStr = ossTemp.str(); + if (!tempStr.empty()) { + os << ", " << tempStr; + } + } + os.copyfmt(oss); + os.flags(f); + return os; +} - if (temp == 0) - os << 0; - else if (!std::isfinite(temp)) +std::ostream& Nikon3MakerNote::printExternalFlashData2(std::ostream& os, const Value& value, const ExifData* metadata) { + std::ios::fmtflags f(os.flags()); + if (value.count() != 1 || value.typeId() != unsignedByte) { os << "(" << value << ")"; - else if (std::abs(std::remainderf(temp, 1)) < 0.001) - os << std::round(temp); - else if (std::abs(std::remainderf(temp * 2, 1)) < 0.001) - os << std::round(temp * 2) << "/2"; - else if (std::abs(std::remainderf(temp * 3, 1)) < 0.001) - os << std::round(temp * 3) << "/3"; - else - os << std::setprecision(3) << temp; + os.flags(f); + return os; + } + + printTag(os, (value.toUint32() & 0x0F), metadata); + + os.flags(f); + return os; +} + +std::ostream& Nikon3MakerNote::printFlashMasterDataFl6(std::ostream& os, const Value& value, const ExifData* metadata) { + std::ios::fmtflags f(os.flags()); + if (value.count() != 1 || value.typeId() != unsignedByte) { + os << "(" << value << ")"; + os.flags(f); + return os; + } + + // Check if using an automated or manual mode + auto pos = metadata->findKey(ExifKey("Exif.NikonFl6.ExternalFlashData1")); + if (pos == metadata->end() || pos->count() != 1 || pos->typeId() != unsignedByte) { + os << "(" << value << ")"; + os.flags(f); + return os; + } + + const auto mode = pos->toUint32(0) & 0x0F; + if (mode == 0) { + os << _("n/a"); + os.flags(f); + return os; + } + + printFlashCompensationValue(os, static_cast(value.toUint32(0)), flashModeUsesManualScale(mode)); + + os.flags(f); + return os; +} + +std::ostream& Nikon3MakerNote::printFlashMasterDataFl7(std::ostream& os, const Value& value, const ExifData* metadata) { + std::ios::fmtflags f(os.flags()); + if (value.count() != 1 || value.typeId() != unsignedByte) { + os << "(" << value << ")"; + os.flags(f); + return os; + } + + // Check if using an automated or manual mode + auto pos = metadata->findKey(ExifKey("Exif.NikonFl7.ExternalFlashData2")); + if (pos == metadata->end() || pos->count() != 1 || pos->typeId() != unsignedByte) { + os << "(" << value << ")"; + os.flags(f); + return os; + } + + const auto mode = pos->toUint32(0) & 0x0F; + if (mode == 0) { + os << _("n/a"); + os.flags(f); + return os; + } + + printFlashCompensationValue(os, static_cast(value.toUint32(0)), flashModeUsesManualScale(mode)); + + os.flags(f); + return os; +} + +std::ostream& Nikon3MakerNote::printFlashGroupAControlData(std::ostream& os, const Value& value, const ExifData* data) { + std::ios::fmtflags f(os.flags()); + if (value.count() != 1 || value.typeId() != unsignedByte) { + os << "(" << value << ")"; + os.flags(f); + return os; + } + std::ostringstream oss; + oss.copyfmt(os); + + printTag(os, (value.toUint32() & 0x0F), data); os.copyfmt(oss); os.flags(f); @@ -3147,7 +3483,7 @@ std::ostream& Nikon3MakerNote::printFlashGroupBCControlData(std::ostream& os, co return os; } -std::ostream& Nikon3MakerNote::printFlashGroupAData(std::ostream& os, const Value& value, const ExifData* metadata) { +std::ostream& Nikon3MakerNote::printFlashGroupADataFl6(std::ostream& os, const Value& value, const ExifData* metadata) { std::ios::fmtflags f(os.flags()); if (value.count() != 1 || value.typeId() != unsignedByte) { os << "(" << value << ")"; @@ -3155,35 +3491,57 @@ std::ostream& Nikon3MakerNote::printFlashGroupAData(std::ostream& os, const Valu return os; } - std::ostringstream oss; - oss.copyfmt(os); - double temp = value.toFloat() / (-6.0); + // Check if using an automated or manual mode + auto pos = metadata->findKey(ExifKey("Exif.NikonFl6.FlashGroupAControlData")); + if (pos == metadata->end() || pos->count() != 1 || pos->typeId() != unsignedByte) { + os << "(" << value << ")"; + os.flags(f); + return os; + } + + const auto mode = pos->toUint32(0) & 0x0F; + if (mode == 0) { + os << _("n/a"); + os.flags(f); + return os; + } + + printFlashCompensationValue(os, static_cast(value.toUint32(0)), flashModeUsesManualScale(mode)); + + os.flags(f); + return os; +} + +std::ostream& Nikon3MakerNote::printFlashGroupADataFl7(std::ostream& os, const Value& value, const ExifData* metadata) { + std::ios::fmtflags f(os.flags()); + if (value.count() != 1 || value.typeId() != unsignedByte) { + os << "(" << value << ")"; + os.flags(f); + return os; + } + // Check if using an automated or manual mode auto pos = metadata->findKey(ExifKey("Exif.NikonFl7.FlashGroupAControlData")); if (pos == metadata->end() || pos->count() != 1 || pos->typeId() != unsignedByte) { os << "(" << value << ")"; - } else { - if (pos->toInt64() < 0x06) { - // FlashGroupACompensation value - if (temp == 0) - os << 0; - else - os << std::fixed << std::setprecision(1) << temp; - } else { - // FlashGroupAOutput value - double flashGroupAOutput = std::exp2(temp); - if (flashGroupAOutput > 0.99) - os << _("Full"); - else - os << std::setprecision(2) << std::round(flashGroupAOutput * 100) << "%"; - } + os.flags(f); + return os; } - os.copyfmt(oss); + + const auto mode = pos->toUint32(0) & 0x0F; + if (mode == 0) { + os << _("n/a"); + os.flags(f); + return os; + } + + printFlashCompensationValue(os, static_cast(value.toUint32(0)), flashModeUsesManualScale(mode)); + os.flags(f); return os; } -std::ostream& Nikon3MakerNote::printFlashGroupBData(std::ostream& os, const Value& value, const ExifData* metadata) { +std::ostream& Nikon3MakerNote::printFlashGroupBDataFl6(std::ostream& os, const Value& value, const ExifData* metadata) { std::ios::fmtflags f(os.flags()); if (value.count() != 1 || value.typeId() != unsignedByte) { os << "(" << value << ")"; @@ -3191,35 +3549,57 @@ std::ostream& Nikon3MakerNote::printFlashGroupBData(std::ostream& os, const Valu return os; } - std::ostringstream oss; - oss.copyfmt(os); - double temp = value.toFloat() / (-6.0); + // Check if using an automated or manual mode + auto pos = metadata->findKey(ExifKey("Exif.NikonFl6.FlashGroupBCControlData")); + if (pos == metadata->end() || pos->count() != 1 || pos->typeId() != unsignedByte) { + os << "(" << value << ")"; + os.flags(f); + return os; + } + + const auto mode = pos->toUint32(0) >> 4; + if (mode == 0) { + os << _("n/a"); + os.flags(f); + return os; + } + + printFlashCompensationValue(os, static_cast(value.toUint32(0)), flashModeUsesManualScale(mode)); + + os.flags(f); + return os; +} + +std::ostream& Nikon3MakerNote::printFlashGroupBDataFl7(std::ostream& os, const Value& value, const ExifData* metadata) { + std::ios::fmtflags f(os.flags()); + if (value.count() != 1 || value.typeId() != unsignedByte) { + os << "(" << value << ")"; + os.flags(f); + return os; + } + // Check if using an automated or manual mode auto pos = metadata->findKey(ExifKey("Exif.NikonFl7.FlashGroupBCControlData")); if (pos == metadata->end() || pos->count() != 1 || pos->typeId() != unsignedByte) { os << "(" << value << ")"; - } else { - if (pos->toInt64() < 0x06) { - // FlashGroupBCompensation value - if (temp == 0) - os << 0; - else - os << std::fixed << std::setprecision(1) << temp; - } else { - // FlashGroupBOutput value - double flashGroupAOutput = std::exp2(temp); - if (flashGroupAOutput > 0.99) - os << _("Full"); - else - os << std::setprecision(2) << std::round(flashGroupAOutput * 100) << "%"; - } + os.flags(f); + return os; } - os.copyfmt(oss); + + const auto mode = pos->toUint32(0) >> 4; + if (mode == 0) { + os << _("n/a"); + os.flags(f); + return os; + } + + printFlashCompensationValue(os, static_cast(value.toUint32(0)), flashModeUsesManualScale(mode)); + os.flags(f); return os; } -std::ostream& Nikon3MakerNote::printFlashGroupCData(std::ostream& os, const Value& value, const ExifData* metadata) { +std::ostream& Nikon3MakerNote::printFlashGroupCDataFl6(std::ostream& os, const Value& value, const ExifData* metadata) { std::ios::fmtflags f(os.flags()); if (value.count() != 1 || value.typeId() != unsignedByte) { os << "(" << value << ")"; @@ -3227,31 +3607,118 @@ std::ostream& Nikon3MakerNote::printFlashGroupCData(std::ostream& os, const Valu return os; } - std::ostringstream oss; - oss.copyfmt(os); - double temp = value.toFloat() / (-6.0); + // Check if using an automated or manual mode + auto pos = metadata->findKey(ExifKey("Exif.NikonFl6.FlashGroupBCControlData")); + if (pos == metadata->end() || pos->count() != 1 || pos->typeId() != unsignedByte) { + os << "(" << value << ")"; + os.flags(f); + return os; + } + + const auto mode = pos->toUint32(0) & 0x000F; + if (mode == 0) { + os << _("n/a"); + os.flags(f); + return os; + } + + printFlashCompensationValue(os, static_cast(value.toUint32(0)), flashModeUsesManualScale(mode)); + os.flags(f); + return os; +} + +std::ostream& Nikon3MakerNote::printFlashGroupCDataFl7(std::ostream& os, const Value& value, const ExifData* metadata) { + std::ios::fmtflags f(os.flags()); + if (value.count() != 1 || value.typeId() != unsignedByte) { + os << "(" << value << ")"; + os.flags(f); + return os; + } + + // Check if using an automated or manual mode auto pos = metadata->findKey(ExifKey("Exif.NikonFl7.FlashGroupBCControlData")); if (pos == metadata->end() || pos->count() != 1 || pos->typeId() != unsignedByte) { os << "(" << value << ")"; - } else { - if (pos->toInt64() < 0x06) { - // FlashGroupCCompensation value - if (temp == 0) - os << 0; - else - os << std::fixed << std::setprecision(1) << temp; - } else { - // FlashGroupCOutput value - double flashGroupAOutput = std::exp2(temp); - if (flashGroupAOutput > 0.99) - os << _("Full"); - else - os << std::setprecision(2) << std::round(flashGroupAOutput * 100) << "%"; - } + os.flags(f); + return os; + } + + const auto mode = pos->toUint32(0) & 0x000F; + if (mode == 0) { + os << _("n/a"); + os.flags(f); + return os; + } + + printFlashCompensationValue(os, static_cast(value.toUint32(0)), flashModeUsesManualScale(mode)); + + os.flags(f); + return os; +} + +std::ostream& Nikon3MakerNote::printExternalFlashData3(std::ostream& os, const Value& value, const ExifData* data) { + std::ios::fmtflags f(os.flags()); + if (value.count() != 1 || value.typeId() != unsignedByte) { + os << "(" << value << ")"; + os.flags(f); + return os; } + + printTag(os, (value.toUint32(0) & 0x04), data); + + os.flags(f); + return os; +} + +std::ostream& Nikon3MakerNote::printCameraExposureCompensation(std::ostream& os, const Value& value, const ExifData*) { + std::ios::fmtflags f(os.flags()); + if (value.count() != 1 || value.typeId() != unsignedByte) { + os << "(" << value << ")"; + os.flags(f); + return os; + } + printFlashCompensationValue(os, static_cast(value.toUint32(0)), false); + os.flags(f); + return os; +} + +std::ostream& Nikon3MakerNote::printExternalFlashData4(std::ostream& os, const Value& value, const ExifData* metadata) { + std::ios::fmtflags f(os.flags()); + if (value.count() != 1 || value.typeId() != unsignedByte) { + os << "(" << value << ")"; + os.flags(f); + return os; + } + + printTag(os, value.toUint32(0), metadata); + + os.flags(f); + return os; +} + +std::ostream& Nikon3MakerNote::printFlashZoomHeadPosition(std::ostream& os, const Value& value, const ExifData*) { + std::ios::fmtflags f(os.flags()); + if (value.count() != 1 || value.typeId() != unsignedByte) { + os << "(" << value << ")"; + os.flags(f); + return os; + } + std::ostringstream oss; + oss.copyfmt(os); + const auto v0 = value.toUint32(0); + + if (v0 == 0) { + os << _("n/a"); + os.flags(f); + return os; + } + + os << v0 << " mm"; + os.copyfmt(oss); os.flags(f); + return os; } diff --git a/src/nikonmn_int.hpp b/src/nikonmn_int.hpp index baf3f75e..66d6a1a7 100644 --- a/src/nikonmn_int.hpp +++ b/src/nikonmn_int.hpp @@ -105,6 +105,8 @@ class Nikon3MakerNote { static const TagInfo* tagListFl2(); //! Return read-only list of built-in Flash Info 3 tags static const TagInfo* tagListFl3(); + //! Return read-only list of built-in Flash Info 6 (0106) tags + static const TagInfo* tagListFl6(); //! Return read-only list of built-in Flash Info 7 (0107 and 0108) tags static const TagInfo* tagListFl7(); //! Return read-only list of built-in Shot Info D80 tags @@ -195,20 +197,42 @@ class Nikon3MakerNote { static std::ostream& printRepeatingFlashRate(std::ostream& os, const Value& value, const ExifData*); //! Print repeating flash count static std::ostream& printRepeatingFlashCount(std::ostream& os, const Value& value, const ExifData*); - //! Print external flash data 1 value - static std::ostream& printExternalFlashData1(std::ostream& os, const Value& value, const ExifData*); + //! Print external flash data 1 value when using NikonFl6 + static std::ostream& printExternalFlashData1Fl6(std::ostream& os, const Value& value, const ExifData*); + //! Print external flash data 1 value when using NikonFl7 + static std::ostream& printExternalFlashData1Fl7(std::ostream& os, const Value& value, const ExifData*); + //! Print external flash data 1 value when using NikonFl6 + static std::ostream& printExternalFlashData2Fl6(std::ostream& os, const Value& value, const ExifData*); //! Print external flash data 2 value static std::ostream& printExternalFlashData2(std::ostream& os, const Value& value, const ExifData*); - //! Print flash compensation value - static std::ostream& printFlashCompensation(std::ostream& os, const Value& value, const ExifData*); + //! Print flash compensation value for the Master when using NikonFl6 + static std::ostream& printFlashMasterDataFl6(std::ostream& os, const Value& value, const ExifData*); + //! Print flash compensation value for the Master when using NikonFl7 + static std::ostream& printFlashMasterDataFl7(std::ostream& os, const Value& value, const ExifData*); + //! Print flash group A control data value + static std::ostream& printFlashGroupAControlData(std::ostream& os, const Value& value, const ExifData* data); //! Print flash group B/C control data value static std::ostream& printFlashGroupBCControlData(std::ostream& os, const Value& value, const ExifData* data); - //! Print flash group A data value - static std::ostream& printFlashGroupAData(std::ostream& os, const Value& value, const ExifData*); - //! Print flash group B data value - static std::ostream& printFlashGroupBData(std::ostream& os, const Value& value, const ExifData*); - //! Print flash group C data value - static std::ostream& printFlashGroupCData(std::ostream& os, const Value& value, const ExifData*); + //! Print flash compensation value for group A when using NikonFl6 + static std::ostream& printFlashGroupADataFl6(std::ostream& os, const Value& value, const ExifData*); + //! Print flash compensation value for group A when using NikonFl7 + static std::ostream& printFlashGroupADataFl7(std::ostream& os, const Value& value, const ExifData*); + //! Print flash compensation value for group B when using NikonFl6 + static std::ostream& printFlashGroupBDataFl6(std::ostream& os, const Value& value, const ExifData*); + //! Print flash compensation value for group B when using NikonFl7 + static std::ostream& printFlashGroupBDataFl7(std::ostream& os, const Value& value, const ExifData*); + //! Print flash compensation value for group C when using NikonFl6 + static std::ostream& printFlashGroupCDataFl6(std::ostream& os, const Value& value, const ExifData*); + //! Print flash compensation value for group C when using NikonFl7 + static std::ostream& printFlashGroupCDataFl7(std::ostream& os, const Value& value, const ExifData*); + //! Print external flash data 3 value + static std::ostream& printExternalFlashData3(std::ostream& os, const Value& value, const ExifData*); + //! Print flash camera exposure compensation values + static std::ostream& printCameraExposureCompensation(std::ostream& os, const Value& value, const ExifData*); + //! Print external flash data 4 value + static std::ostream& printExternalFlashData4(std::ostream& os, const Value& value, const ExifData*); + //! Print flash head zoom value + static std::ostream& printFlashZoomHeadPosition(std::ostream& os, const Value& value, const ExifData*); //! Print time zone static std::ostream& printTimeZone(std::ostream& os, const Value& value, const ExifData*); //! Print picture control value @@ -244,6 +268,8 @@ class Nikon3MakerNote { static const TagInfo tagInfoFl2_[]; //! Flash Info 3 tag information static const TagInfo tagInfoFl3_[]; + //! Flash Info 6 (0106) tag information + static const TagInfo tagInfoFl6_[]; //! Flash Info 7 (0107 and 0108) tag information static const TagInfo tagInfoFl7_[]; //! Shot Info D80 tag information diff --git a/src/tags_int.cpp b/src/tags_int.cpp index 146f8420..57d7594b 100644 --- a/src/tags_int.cpp +++ b/src/tags_int.cpp @@ -106,6 +106,7 @@ constexpr GroupInfo groupInfo[] = { {IfdId::nikonFl1Id, "Makernote", "NikonFl1", Nikon3MakerNote::tagListFl1}, {IfdId::nikonFl2Id, "Makernote", "NikonFl2", Nikon3MakerNote::tagListFl2}, {IfdId::nikonFl3Id, "Makernote", "NikonFl3", Nikon3MakerNote::tagListFl3}, + {IfdId::nikonFl6Id, "Makernote", "NikonFl6", Nikon3MakerNote::tagListFl6}, {IfdId::nikonFl7Id, "Makernote", "NikonFl7", Nikon3MakerNote::tagListFl7}, {IfdId::nikonSi1Id, "Makernote", "NikonSiD80", Nikon3MakerNote::tagListSi1}, {IfdId::nikonSi2Id, "Makernote", "NikonSiD40", Nikon3MakerNote::tagListSi2}, diff --git a/src/tiffimage_int.cpp b/src/tiffimage_int.cpp index 448f41c1..8590e908 100644 --- a/src/tiffimage_int.cpp +++ b/src/tiffimage_int.cpp @@ -519,17 +519,49 @@ constexpr ArrayDef nikonFl3Def[] = { {15, ttUnsignedByte, 1}, // FlashGNDistance {16, ttUnsignedByte, 1}, // FlashColorFilter }; -//! Nikon Flash Info 7 (0107 and 0108) binary array - configuration -constexpr ArrayCfg nikonFl7Cfg = { - IfdId::nikonFl7Id, // Group for the elements - bigEndian, // Use byte order from parent - ttUndefined, // Type for array entry - notEncrypted, // Not encrypted - false, // No size element - true, // Write all tags - true, // Concatenate gaps - {0, ttUnsignedByte, 1}, +//! Nikon Flash Info 6 (0106) binary array - configuration +constexpr ArrayCfg nikonFl6Cfg = {IfdId::nikonFl6Id, // Group for the elements + bigEndian, // Use byte order from parent + ttUndefined, // Type for array entry + notEncrypted, // Not encrypted + false, // No size element + true, // Write all tags + true, // Concatenate gaps + {0, ttUnsignedByte, 1}}; +//! Nikon Flash Info 6 (0106) binary array - definition +constexpr ArrayDef nikonFl6Def[] = { + {0, ttUndefined, 4}, // Version + {4, ttUnsignedByte, 1}, // FlashSource + {6, ttUnsignedShort, 1}, // ExternalFlashFirmware + {8, ttUnsignedByte, 1}, // ExternalFlashData1 + {9, ttUnsignedByte, 1}, // ExternalFlashData2 + {10, ttUnsignedByte, 1}, // FlashCompensationMaster + {12, ttUnsignedByte, 1}, // FlashFocalLength + {13, ttUnsignedByte, 1}, // RepeatingFlashRate + {14, ttUnsignedByte, 1}, // RepeatingFlashCount + {15, ttUnsignedByte, 1}, // FlashGNDistance + {16, ttUnsignedByte, 1}, // FlashColorFilter + {17, ttUnsignedByte, 1}, // FlashGroupAControlData + {18, ttUnsignedByte, 1}, // FlashGroupBCControlData + {19, ttUnsignedByte, 1}, // FlashCompensationGroupA + {20, ttUnsignedByte, 1}, // FlashCompensationGroupB + {21, ttUnsignedByte, 1}, // FlashCompensationGroupC + {28, ttUnsignedByte, 1}, // CameraExposureCompensation + {29, ttUnsignedByte, 1}, // CameraFlashCompensation + {39, ttUnsignedByte, 1}, // FlashMasterOutput + {40, ttUnsignedByte, 1}, // FlashGroupAOutput + {41, ttUnsignedByte, 1}, // FlashGroupBOutput + {42, ttUnsignedByte, 1}, // FlashGroupCOutput }; +//! Nikon Flash Info 7 (0107 and 0108) binary array - configuration +constexpr ArrayCfg nikonFl7Cfg = {IfdId::nikonFl7Id, // Group for the elements + bigEndian, // Use byte order from parent + ttUndefined, // Type for array entry + notEncrypted, // Not encrypted + false, // No size element + true, // Write all tags + true, // Concatenate gaps + {0, ttUnsignedByte, 1}}; //! Nikon Flash Info 7 (0107 and 0108) binary array - definition constexpr ArrayDef nikonFl7Def[] = { {0, ttUndefined, 4}, // Version @@ -537,23 +569,34 @@ constexpr ArrayDef nikonFl7Def[] = { {6, ttUnsignedShort, 1}, // ExternalFlashFirmware {8, ttUnsignedByte, 1}, // ExternalFlashData1 {9, ttUnsignedByte, 1}, // ExternalFlashData2 - {10, ttSignedByte, 1}, // FlashCompensation + {10, ttUnsignedByte, 1}, // FlashCompensationMaster {12, ttUnsignedByte, 1}, // FlashFocalLength {13, ttUnsignedByte, 1}, // RepeatingFlashRate {14, ttUnsignedByte, 1}, // RepeatingFlashCount {15, ttUnsignedByte, 1}, // FlashGNDistance + {16, ttUnsignedByte, 1}, // FlashColorFilter {17, ttUnsignedByte, 1}, // FlashGroupAControlData {18, ttUnsignedByte, 1}, // FlashGroupBCControlData - {40, ttUnsignedByte, 1}, // FlashGroupAData - {41, ttUnsignedByte, 1}, // FlashGroupBData - {42, ttUnsignedByte, 1} // FlashGroupCData + {19, ttUnsignedByte, 1}, // FlashCompensationGroupA + {20, ttUnsignedByte, 1}, // FlashCompensationGroupB + {21, ttUnsignedByte, 1}, // FlashCompensationGroupC + {22, ttUnsignedByte, 1}, // ExternalFlashData3 + {27, ttUnsignedByte, 1}, // CameraFlashOutput + {28, ttUnsignedByte, 1}, // CameraExposureCompensation + {29, ttUnsignedByte, 1}, // CameraFlashCompensation + {37, ttUnsignedByte, 1}, // ExternalFlashData4 + {38, ttUnsignedByte, 1}, // FlashZoomHeadPosition + {39, ttUnsignedByte, 1}, // FlashMasterOutput + {40, ttUnsignedByte, 1}, // FlashGroupAOutput + {41, ttUnsignedByte, 1}, // FlashGroupBOutput + {42, ttUnsignedByte, 1}, // FlashGroupCOutput + {67, ttUnsignedByte, 1}, // WirelessFlashData }; //! Nikon Flash Info Data configurations and definitions constexpr ArraySet nikonFlSet[] = { - {nikonFl1Cfg, nikonFl1Def, std::size(nikonFl1Def)}, - {nikonFl2Cfg, nikonFl2Def, std::size(nikonFl2Def)}, - {nikonFl3Cfg, nikonFl3Def, std::size(nikonFl3Def)}, + {nikonFl1Cfg, nikonFl1Def, std::size(nikonFl1Def)}, {nikonFl2Cfg, nikonFl2Def, std::size(nikonFl2Def)}, + {nikonFl3Cfg, nikonFl3Def, std::size(nikonFl3Def)}, {nikonFl6Cfg, nikonFl6Def, std::size(nikonFl6Def)}, {nikonFl7Cfg, nikonFl7Def, std::size(nikonFl7Def)}, }; @@ -1307,6 +1350,7 @@ const TiffTreeTable TiffCreator::tiffTreeTable_ = { {{Tag::root, IfdId::nikonFl1Id}, {IfdId::nikon3Id, 0x00a8}}, {{Tag::root, IfdId::nikonFl2Id}, {IfdId::nikon3Id, 0x00a8}}, {{Tag::root, IfdId::nikonFl3Id}, {IfdId::nikon3Id, 0x00a8}}, + {{Tag::root, IfdId::nikonFl6Id}, {IfdId::nikon3Id, 0x00a8}}, {{Tag::root, IfdId::nikonFl7Id}, {IfdId::nikon3Id, 0x00a8}}, {{Tag::root, IfdId::panasonicId}, {IfdId::exifId, 0x927c}}, {{Tag::root, IfdId::pentaxId}, {IfdId::exifId, 0x927c}}, @@ -1729,6 +1773,7 @@ const TiffGroupTable TiffCreator::tiffGroupTable_ = { {{Tag::all, IfdId::nikonFl1Id}, newTiffBinaryElement}, {{Tag::all, IfdId::nikonFl2Id}, newTiffBinaryElement}, {{Tag::all, IfdId::nikonFl3Id}, newTiffBinaryElement}, + {{Tag::all, IfdId::nikonFl6Id}, newTiffBinaryElement}, {{Tag::all, IfdId::nikonFl7Id}, newTiffBinaryElement}, // Nikon3 shot info diff --git a/test/data/exiv2-issue1941-2.exv b/test/data/exiv2-issue1941-2.exv new file mode 100644 index 0000000000000000000000000000000000000000..95dfc90ad7d3d7b0bf75d4360c312c7225dd0b01 GIT binary patch literal 11372 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 literal 0 HcmV?d00001 diff --git a/test/data/exiv2-issue1941-3.exv b/test/data/exiv2-issue1941-3.exv new file mode 100644 index 0000000000000000000000000000000000000000..953f54a0062350166678b16d0a5d69c689078039 GIT binary patch literal 11372 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 literal 0 HcmV?d00001 diff --git a/test/data/exiv2-issue1941-5.exv b/test/data/exiv2-issue1941-5.exv new file mode 100644 index 0000000000000000000000000000000000000000..1c0279f2686923564c2a00ca64d6c68352279eeb GIT binary patch literal 5129 zcmeI0c|4Wd8pqfB%HC$8q*56|N!ojJC_|DdonvpI;S>#$i$sTthI5WkI+3(1%~3Q< zlhUA~8>cjhMolU@a+R(|N0<9sd%yd%@8|Y8-Os)M+&@~|Ykl8mJ?mM|de-y4d#&Bc zcqK;86Lmf|=m3Nh;_GWo)CeJlq=R%J42WKYk#jCZjuXKwqe4_r8$wA1tkBnGSfUTP zF$8*GEwC+EpVOfubmy4%@5QLf`Z__UH^(Ev#!5B^aLhtq2%8$HM?*&h?gkD5JA*C2 z5#VmDD&c`M!RwP*;s`zij!cu!MFWN`mdUvT&Z=a|?Yx7Ip_IYwxw)fOlYPX#-%7+L z9+CimNq~EhuS87b5>H2=KtOEJ4}X8u<7UL!3T*}UCPX9<4s#ONIoSzJghD5wqm#&v zc*I4TzUp|+2&{yT;UeMtw>F||UO^MZ&SVM`ml$ef9Gd>BAQVhqRTeZ*0XkYpy^yT_p zhV#^xIC5re3}N*?J@rnQCtsHN0+CQiBPoj!34@H4#iIfORWMzTt6)Bu555mpV zbufJ@Tfv&L7Tlm{p*MZ9cnG*QHx^-dM2F)fMhkBaxeruspyWdjCApCj_rz@IdRW3{ zZ|GBhY{AALx~|ktANWJp(*=UQkWziPM*2aA$~_@Bq^B&#=(h(6I$KgV%vaLBE$K-ilyT z$V0K18_*YGQmI+X-wLMrkqUVp=NoQGKJ=*%0y}|V7l`^*VL-@k$c5nb(BB6uG$xhc zgOF3M1s~#kqy3LTPUF)Ac`=ygWh?kNxB#q&0G$9+UHa-f#p#zoewMRCn@TzPc^XiZ z0Qd3qwznH56xj)g0AB(uEYLbI$X)E|9^gsa73Fg>ItWQhNkZxD z>~z7}BFkj|<#v#xT^0RdS7^>Av3q5mdb06k1U?flK>mvtNQtrnND5uc&4vGbY5z2E$U?Qo7vHm%cDte*s%CgsSFFy`^c0TH z^K+Zic;K|osSW##TJEV!&1T$Q6tuMat%rmEnwu(mTw8c1HnlEg)>gxt_XhYEo-n)m znx8ReOnJDO&+CH&%2!1hUddTg71+ntF1JC_Z^MM_rk4HJ`kVmT`+iE)RX*+AewBQ1;|UXCvL5Q!FE{iceV)nOGM%yK7~!o72;f zik4E-<@SSy@HNygi{l(S(nHUjh5(mESPPYP&hH)w>GOYr^B{xb5O>f zLc`9yj8UfA2b&J`KFLe1{N`u9BA*}nb@Q*;Qpnqpe%$7_=c02Pij6OvdOL5pU*3rR zlClL0$|U_qFK|rP3VD#H2ZPskcGucSG(D7&R(~! zJoG3?59?on^>4=dC*Ms7UeZ5S9XYMDbICrV%fG5iL+9UK6tPLZ{^y50uH7?ba&BF6^udvb`%1bFZHfBLw(WoScG)b;1&4l&3R7JdSCf{zwQB1|*KL^# zEm9n}(QJLc?u2>uMLxVO4;L?*a`<}3s+osgJz7&Wri){;sjf@GU!o81?rFVQ>>U42 zk*zP?@8y@8Upez`uJfo&2WOAm2(SHanr2IF`vg|4$@%;8NNHzrdaJ8=dg;uN4F1Jx zvlA)12V5&-x6a@6AvK}9DCVNUrLDKRUcc4-aYFR%VezxnMqf4GdwQql>G`j{+(Pz- z3)kI_ZPtsK8umQGu-Nr!#sr54N22U36Sb?@FkQy!djlBTcdICivsdGNfZsPh~d~E9dV%+2c4-?M=(%p1$}8MbjxguQzuL(tHE959{Hw zd(znKJ};Q5ycW}q6Q>>UH1XI!W!&1{jUUIi)$1?w5w9PlYMD9AF8?lSZWS8=*_J@LUCwm3Kyc~{#qR$9y&$pzY@TKN=2YyR-2***ec`ks1b~cmD}pv23;g literal 0 HcmV?d00001 diff --git a/test/data/exiv2-issue1941-6_coverage.exv b/test/data/exiv2-issue1941-6_coverage.exv new file mode 100644 index 0000000000000000000000000000000000000000..fb2bc584ad7f079bb33796a6505bb178c1bf6212 GIT binary patch literal 5129 zcmeI0X;@T87KZCyq?<)HQA9;$3AhpLZU`ugh#-gw-3YiuF)AV>ieNwmmm~-%Mi8;1 zxC;u28{!fbcfkonaYNj3!!^jDIJgoWnD2Dojy=!t#Cc}^%nu8%_1^EEI#qS*+)EWL z+~B0>S+bV9=FNa8#sUL-Gd;$b1#4z)7zd(@aca&Z6gUaYb2>~1wFQiHz#4lKj%V$l zTR|`dw*@Qr)z%$0T?8Hkw$k$1Q(zwUQus7LJrp)FaC>kV*aK`2 zo(yi!>oO5I3%n|YXKvtQ;OKPqTnymIevz7+F<6~!wVzk8u~2fDy)bvwda56J;O7dt zwXY&1SP|kA7O0Rjwc_U{l}MN)+Tq_H^@vIFPEsd{i#3x;r2X9`&hE|gFzU zX1?*!3DzGdaE3xYTZH;U_y394fA17AY-NNtY)y)KRn}pN)(cz!wq5jorF#e*iJ?gZ zrWMjevk>-egvgc>)kO=u`2T=GO3gzsfrPcgvP7lQ4T>DOzUwDEC!3gH^F*>{s62G zrnj;YY^ZvI8dS60XGu*Vw{K>3!Kcg#g{`p2GY&7#?Vnqx76ZJm<_Fm1AKOY zJ&nf+Yz3lqB|lv;9$HUN2;HEPJ%+}*!-jM}=(d86TV@B{9rYK`KLOL2J#pECk#=k$ z^gdt&k1Yo~f(O7MmW;{3%gh#mHMUjX@YKmg-I858u#~FV^}OOwaI`_ z8p9C8Clfpfef37$W#BpB7fN6__2mWRI}WIk0g8*MnDrhrqtGA-;-W8|V>O z%++WMnN=88i#LENKhmJ*3uD7AD}X(XLEad`8m8 zjrj}@Q%Hr+9AiHIpZY>%az#jx&lhT$F~#&5(Q&a8VjO+rrbWg(soE7%05GXZG_lq$ z$n+jz#XIgbp^MnXxxZBAEMXG-65!#1>d-JBxt~vnA3fKU)->vbC8s8%w6wH%Vr`LS zs{hq~kfUar_V6pUhPy*p&`51x!Isy`z%w-dwD zp6}b=xMpIqW6u0Tmn}^q^_q;n?bUa#UhR`Fc?ajsF%K&z`B#?()jeu1?N*4;9^4kIJd*)UrWCFv6wkz(lKtzOK26`}V}%+ndq$vhih)(eo~edpYL&KRn`fBjT~Y za!E~kT$hL5-E4oE=~-rzW>_}aw^#VOvoGu2_6|E8E)8%sm|iv|IO}AXlXqOUGB?*d zC1q@|UO@gDhxqwp&-8oU_*U`!Vd=eZJSl$SBae4$&WJd6Fz!j;rlx-sbiOpwt#Ggeb+OgS!!KtI2+AM$iK2AQ zoKnRn1M`Ch%zAnFRM)+$PRQyXeR?3{N8RnuhLk9C4U>{**vJMyiS~<$^AHe#MyD_F-@C8D&@mUF&0Sztqcl`itWidROee z6K0C_FUR`VWBpUECx$P2yKjH(y8}4xkth) zO}0MuxlvGJclOw;nI1#3Ts?gACJ)}>ZD_mDscUHE^4z~Kj#jo5XEb`rCzebdn<+k3 zWqUAnOV9JA{D#?U-=rmWkj0)dKfU3K*@Y_|?k2`u?Vm7BZ|FI@ZAX7HJUaXNVDGWp zqNFRY#?_m~j*omi*`nC%eGTR%^6c1SX++)p8SB1XTemf_OUSr*$ zJDz_j$_W~?#j|7oO(B8GPS=`)pP#Fp(#s`EztJFCldb0uUaYn7qHN7PWH7sQ5M}Fv zxeLzi>OF?hHUEJ z(R0g~;W=HOaN|V{Hfu&t*y(5OyJOsl6_s3b!olek=5G3KHyR42dRj(G(qb!LrNn;ENb z_;z1$OXkGnnpVH3_^s{A$#ps1WNd_6uoV_XSz5N8@P{qOVH=MEQP6~KuclJ{-WMLJ zs(WG`9kU+l-6}Q$v=eBh&~Aa@)E9x>{r`JGWF-_E+Bc`+@(J|~48)){A^5YJr!x=7 z@tO@0MN|EkA0CG&4o~r%$#KzXiq2Jw5D_{lkxu9PHiDi9o&Ex#38+YQhcgXyv0zgI zrZY16k>J484outoYtZR@O1;;Csn9lyeD$!vd8!8~>U%mjkv{6I&cEoI=d@>|=j4~_ YcW4ladSpOoKNr;R%lp3+Ah)jn6T 20040329_224245.exv Exif.NikonFl1.FlashFocalLength Byte 1 n/a > 20040329_224245.exv Exif.NikonFl1.RepeatingFlashRate Byte 1 n/a > 20040329_224245.exv Exif.NikonFl1.RepeatingFlashCount Byte 1 n/a -> 20040329_224245.exv Exif.NikonFl1.FlashGNDistance Byte 1 None +> 20040329_224245.exv Exif.NikonFl1.FlashGNDistance Byte 1 n/a > 20040329_224245.exv Exif.NikonFl1.FlashGroupAControlMode Byte 1 Off > 20040329_224245.exv Exif.NikonFl1.FlashGroupBControlMode Byte 1 Off > 20040329_224245.exv Exif.NikonFl1.0x0011 Byte 3 0 0 0 @@ -5982,7 +5982,7 @@ Compare original and inserted image data --------------------------------- < 20040329_224245.jpg Exif.NikonFl1.FlashFocalLength Byte 1 n/a < 20040329_224245.jpg Exif.NikonFl1.RepeatingFlashRate Byte 1 n/a < 20040329_224245.jpg Exif.NikonFl1.RepeatingFlashCount Byte 1 n/a -< 20040329_224245.jpg Exif.NikonFl1.FlashGNDistance Byte 1 None +< 20040329_224245.jpg Exif.NikonFl1.FlashGNDistance Byte 1 n/a < 20040329_224245.jpg Exif.NikonFl1.FlashGroupAControlMode Byte 1 Off < 20040329_224245.jpg Exif.NikonFl1.FlashGroupBControlMode Byte 1 Off < 20040329_224245.jpg Exif.NikonFl1.0x0011 Byte 3 0 0 0 @@ -7545,7 +7545,7 @@ Compare original and inserted image data --------------------------------- > 20040329_224245.exv Exif.NikonFl1.FlashFocalLength Byte 1 n/a > 20040329_224245.exv Exif.NikonFl1.RepeatingFlashRate Byte 1 n/a > 20040329_224245.exv Exif.NikonFl1.RepeatingFlashCount Byte 1 n/a -> 20040329_224245.exv Exif.NikonFl1.FlashGNDistance Byte 1 None +> 20040329_224245.exv Exif.NikonFl1.FlashGNDistance Byte 1 n/a > 20040329_224245.exv Exif.NikonFl1.FlashGroupAControlMode Byte 1 Off > 20040329_224245.exv Exif.NikonFl1.FlashGroupBControlMode Byte 1 Off > 20040329_224245.exv Exif.NikonFl1.0x0011 Byte 3 0 0 0 diff --git a/test/data/test_reference_files/issue_1934_poc1.exv.out b/test/data/test_reference_files/issue_1934_poc1.exv.out index 669d566d..d0c1581b 100644 --- a/test/data/test_reference_files/issue_1934_poc1.exv.out +++ b/test/data/test_reference_files/issue_1934_poc1.exv.out @@ -1,175 +1,196 @@ -Exif.Image.Make Ascii 18 NIKON CORPORATION NIKON CORPORATION -Exif.Image.Model Ascii 12 NIKON D5300 NIKON D5300 -Exif.Image.Orientation Short 1 1 top, left -Exif.Image.XResolution Rational 1 300/1 300 -Exif.Image.YResolution Rational 1 300/1 300 -Exif.Image.ResolutionUnit Short 1 2 inch -Exif.Image.Software Ascii 10 Ver.1.00 Ver.1.00 -Exif.Image.DateTime Ascii 20 2015:07:16 20:25:28 2015:07:16 20:25:28 -Exif.Image.YCbCrPositioning Short 1 1 Centered -Exif.Image.ExifTag Long 1 222 222 -Exif.Photo.ExposureTime Rational 1 10/4000 1/400 s -Exif.Photo.FNumber Rational 1 100/10 F10 -Exif.Photo.ExposureProgram Short 1 0 Not defined -Exif.Photo.ISOSpeedRatings Short 1 200 200 -Exif.Photo.SensitivityType Short 1 2 2 -Exif.Photo.ExifVersion Undefined 4 48 50 51 48 2.30 -Exif.Photo.DateTimeOriginal Ascii 20 2015:07:16 15:38:54 2015:07:16 15:38:54 -Exif.Photo.DateTimeDigitized Ascii 20 2015:07:16 15:38:54 2015:07:16 15:38:54 -Exif.Photo.ComponentsConfiguration Undefined 4 1 2 3 0 YCbCr -Exif.Photo.CompressedBitsPerPixel Rational 1 2/1 2 -Exif.Photo.ExposureBiasValue SRational 1 0/6 0 EV -Exif.Photo.MaxApertureValue Rational 1 43/10 F4.4 -Exif.Photo.MeteringMode Short 1 5 Multi-segment -Exif.Photo.LightSource Short 1 0 Unknown -Exif.Photo.Flash Short 1 16 No, compulsory -Exif.Photo.FocalLength Rational 1 440/10 44.0 mm -Exif.Photo.MakerNote Undefined 3152 78 105 107 111 110 0 2 16 0 0 73 73 42 0 8 0 0 0 57 0 1 0 7 0 4 0 0 0 48 50 49 49 2 0 3 0 2 0 0 0 0 0 200 0 4 0 2 0 8 0 0 0 186 2 0 0 5 0 2 0 13 0 0 0 194 2 0 0 7 0 2 0 7 0 0 0 208 2 0 0 8 0 2 0 13 0 0 0 216 2 0 0 9 0 2 0 20 0 0 0 230 2 0 0 11 0 8 0 2 0 0 0 0 0 0 0 12 0 5 0 4 0 0 0 250 2 0 0 13 0 7 0 4 0 0 0 0 1 6 0 14 0 7 0 4 0 0 0 0 1 12 0 18 0 7 0 4 0 0 0 0 1 6 0 19 0 3 0 2 0 0 0 0 0 200 0 22 0 3 0 4 0 0 0 26 3 0 0 23 0 7 0 4 0 0 0 0 1 6 0 24 0 7 0 4 0 0 0 0 1 6 0 25 0 10 0 1 0 0 0 34 3 0 0 27 0 3 0 7 0 0 0 42 3 0 0 28 0 7 0 3 0 0 0 0 1 6 0 29 0 2 0 8 0 0 0 56 3 0 0 30 0 3 0 1 0 0 0 1 0 0 0 31 0 7 0 8 0 0 0 64 3 0 0 34 0 3 0 1 0 0 0 255 255 0 0 35 0 7 0 58 0 0 0 72 3 0 0 36 0 7 0 4 0 0 0 0 0 1 0 37 0 7 0 14 0 0 0 130 3 0 0 43 0 7 0 16 0 0 0 144 3 0 0 44 0 7 0 62 2 0 0 160 3 0 0 45 0 3 0 3 0 0 0 222 5 0 0 50 0 7 0 8 0 0 0 228 5 0 0 53 0 7 0 6 0 0 0 236 5 0 0 59 0 5 0 4 0 0 0 242 5 0 0 60 0 3 0 1 0 0 0 1 0 0 0 131 0 1 0 1 0 0 0 14 0 0 0 132 0 5 0 4 0 0 0 18 6 0 0 135 0 1 0 1 0 0 0 0 0 0 0 137 0 3 0 1 0 0 0 0 0 0 0 138 0 3 0 1 0 0 0 1 0 0 0 139 0 7 0 4 0 0 0 55 1 12 0 149 0 2 0 5 0 0 0 50 6 0 0 151 0 7 0 164 4 0 0 56 6 0 0 152 0 7 0 33 0 0 0 220 10 0 0 157 0 3 0 1 0 0 0 0 0 0 0 158 0 3 0 10 0 0 0 254 10 0 0 162 0 4 0 1 0 0 0 208 51 94 0 163 0 1 0 1 0 0 0 0 0 0 0 167 0 4 0 1 0 0 0 136 37 0 0 168 0 7 0 49 0 0 0 18 11 0 0 171 0 2 0 16 0 0 0 68 11 0 0 176 0 7 0 16 0 0 0 84 11 0 0 177 0 3 0 1 0 0 0 4 0 0 0 182 0 7 0 8 0 0 0 100 11 0 0 183 0 7 0 30 0 0 0 108 11 0 0 184 0 7 0 172 0 0 0 138 11 0 0 187 0 7 0 8 0 0 0 54 12 0 0 191 0 3 0 1 0 0 0 0 0 0 0 192 0 7 0 8 0 0 0 62 12 0 0 0 0 0 0 78 79 82 77 65 76 32 0 65 85 84 79 32 32 32 32 32 32 32 32 0 0 65 70 45 65 32 32 0 0 32 32 32 32 32 32 32 32 32 32 32 32 0 0 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 0 26 2 0 0 0 1 0 0 98 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 112 23 160 15 0 0 0 0 6 0 0 0 0 0 128 23 176 15 128 23 176 15 0 0 0 0 50 53 54 55 56 48 54 0 48 49 48 48 1 1 0 0 48 49 48 48 83 84 65 78 68 65 82 68 0 0 0 0 0 0 0 0 0 0 0 0 83 84 65 78 68 65 82 68 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 255 0 0 128 0 128 255 255 255 72 1 12 0 0 0 72 1 12 0 0 0 2 0 48 49 48 48 0 0 2 0 0 0 0 0 0 0 0 0 48 49 48 49 35 0 128 2 170 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 48 49 48 48 1 0 0 0 48 50 48 48 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 180 0 0 0 10 0 0 0 196 9 0 0 10 0 0 0 35 0 0 0 10 0 0 0 63 0 0 0 10 0 0 0 79 70 70 32 0 0 48 50 49 57 175 100 85 136 19 240 236 87 159 239 50 169 21 141 234 145 1 58 188 135 155 248 158 141 197 70 16 35 127 36 18 73 201 146 164 255 163 144 198 69 13 30 120 27 7 60 186 129 17 106 140 119 171 40 238 253 85 246 224 19 143 84 98 185 89 66 116 239 179 192 22 181 157 206 72 11 23 108 10 241 33 154 75 229 225 211 254 237 97 166 153 188 97 4 235 86 222 141 147 96 177 112 9 90 197 254 49 68 166 28 219 225 181 202 172 215 75 8 14 93 245 214 0 115 53 54 130 24 249 35 246 78 251 93 158 232 149 83 192 150 155 77 6 80 237 123 80 198 91 56 80 204 164 134 241 99 30 100 208 139 139 208 92 62 129 207 147 154 205 94 47 91 199 124 109 193 82 42 79 183 107 104 185 61 22 54 162 83 77 148 36 249 6 130 48 47 107 0 210 245 69 14 11 75 212 172 206 49 249 218 29 165 121 158 225 169 161 230 119 67 88 196 115 109 86 49 27 234 156 63 238 101 125 191 248 56 175 209 10 175 121 154 243 136 38 200 15 28 53 151 224 51 159 244 79 38 57 226 212 15 95 97 114 213 130 110 168 43 119 12 70 16 29 56 188 134 155 249 158 140 197 70 16 35 127 36 18 73 201 146 164 255 163 144 198 69 13 30 135 100 7 61 186 128 145 235 115 116 171 40 234 253 85 246 224 23 143 84 98 185 89 66 116 235 179 192 22 181 157 206 72 15 129 108 17 240 1 154 250 152 79 166 88 108 108 167 62 253 118 123 129 41 233 243 196 223 67 240 230 37 173 126 88 251 167 156 90 97 176 74 44 83 203 140 142 217 117 82 128 247 175 180 2 153 121 162 11 203 44 223 182 149 6 209 68 232 52 207 170 209 65 250 252 71 232 186 222 77 5 6 80 227 191 230 82 9 9 82 228 191 227 82 6 5 77 222 184 37 184 2 7 68 249 170 204 55 235 232 46 189 182 182 64 211 207 21 162 120 152 3 148 87 243 128 86 189 221 143 132 75 87 108 78 181 101 90 156 39 244 15 105 45 37 110 240 195 223 68 242 233 41 186 132 159 3 176 166 229 109 54 88 187 103 220 154 161 240 10 108 23 11 72 206 157 181 22 192 179 239 116 66 89 185 98 84 143 12 224 233 85 226 238 55 171 119 140 234 145 129 186 60 7 24 120 28 13 69 198 145 163 254 164 147 201 73 18 36 127 35 16 71 197 140 158 248 155 135 188 59 1 16 106 32 246 49 170 110 124 183 119 43 147 68 212 169 57 217 194 176 111 51 64 150 53 29 78 200 139 151 236 138 113 161 26 221 231 38 216 191 237 120 38 50 131 29 4 51 169 116 114 198 95 65 112 228 165 178 254 135 123 167 28 218 225 49 202 172 215 74 8 15 93 245 214 0 115 47 52 131 25 248 34 148 79 83 160 55 21 60 174 104 107 183 77 42 80 193 123 124 199 91 56 94 205 133 134 208 99 63 100 210 137 137 210 100 63 99 208 134 133 205 94 57 91 218 124 123 193 76 42 79 183 104 104 175 61 8 54 163 83 77 148 32 249 6 130 43 47 115 0 214 245 93 14 8 75 214 172 203 49 225 218 28 167 123 152 255 173 164 230 112 67 95 196 115 105 168 50 4 31 131 49 38 100 237 191 216 59 231 220 26 161 113 138 236 151 139 200 78 29 53 150 64 51 111 244 194 217 57 226 212 15 136 96 118 213 102 110 171 43 244 12 106 17 26 58 184 135 153 248 156 141 205 70 15 35 127 36 18 73 200 146 164 255 163 144 199 69 12 30 120 27 7 60 186 129 145 234 141 119 171 40 239 253 84 246 224 19 143 85 98 184 89 67 116 239 179 192 22 181 157 206 72 11 23 108 10 241 33 154 92 103 187 88 62 109 229 166 176 3 159 132 178 41 233 242 68 223 195 240 102 37 45 126 28 251 35 156 88 97 177 74 44 87 75 136 142 221 116 86 128 243 175 180 3 153 120 162 20 207 211 32 182 149 189 46 233 235 54 204 171 209 64 250 252 71 219 185 222 76 5 7 80 227 191 228 82 9 9 82 228 191 227 80 6 5 77 222 184 219 71 252 250 65 209 170 204 55 235 232 46 189 149 182 32 211 207 20 162 121 153 2 176 175 247 128 84 117 221 142 136 203 215 44 74 177 96 90 156 39 251 24 127 45 36 102 240 195 223 68 242 233 41 178 133 159 2 176 167 229 108 62 88 187 103 93 154 32 241 11 108 23 11 72 206 157 181 22 192 179 239 116 66 89 185 98 84 143 19 224 246 85 253 238 40 171 119 140 234 145 129 186 60 7 27 120 30 13 69 198 148 163 251 164 144 201 73 18 36 127 163 16 70 197 139 158 81 164 249 188 227 254 166 149 91 200 217 168 129 130 189 118 201 172 31 212 226 56 205 194 236 110 51 64 150 54 157 206 72 11 23 108 10 241 33 154 92 103 187 88 62 109 229 166 176 3 159 132 178 41 233 242 68 223 195 240 102 37 173 254 153 123 191 29 218 224 49 10 172 215 74 9 15 93 244 214 0 115 47 52 130 24 249 226 149 79 83 96 76 21 53 174 69 71 248 121 36 91 1 113 164 192 6 58 94 205 135 134 211 96 63 101 210 137 48 50 48 52 175 87 210 143 135 134 122 30 111 217 5 35 91 204 161 165 151 218 33 111 27 120 30 13 69 198 144 162 251 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 49 48 54 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 85 84 79 40 70 76 65 83 72 32 79 70 70 41 0 48 49 48 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 49 48 48 0 8 3 11 105 5 128 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 49 48 48 0 0 101 0 242 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 50 48 48 255 255 255 0 60 1 12 0 144 1 12 0 78 105 107 111 110 0 2 16 0 0 73 73 42 0 8 0 0 0 57 0 1 0 7 0 4 0 0 0 48 50 49 49 2 0 3 0 2 0 0 0 0 0 200 0 4 0 2 0 8 0 0 0 186 2 0 0 5 0 2 0 13 0 0 0 194 2 0 0 7 0 2 0 7 0 0 0 208 2 0 0 8 0 2 0 13 0 0 0 216 2 0 0 9 0 2 0 20 0 0 0 230 2 0 0 11 0 8 0 2 0 0 0 0 0 0 0 12 0 5 0 4 0 0 0 250 2 0 0 13 0 7 0 4 0 0 0 0 1 6 0 14 0 7 0 4 0 0 0 0 1 12 0 18 0 7 0 4 0 0 0 0 1 6 0 19 0 3 0 2 0 0 0 0 0 200 0 22 0 3 0 4 0 0 0 26 3 0 0 23 0 7 0 4 0 0 0 0 1 6 0 24 0 7 0 4 0 0 0 0 1 6 0 25 0 10 0 1 0 0 0 34 3 0 0 27 0 3 0 7 0 0 0 42 3 0 0 28 0 7 0 3 0 0 0 0 1 6 0 29 0 2 0 8 0 0 0 56 3 0 0 30 0 3 0 1 0 0 0 1 0 0 0 31 0 7 0 8 0 0 0 64 3 0 0 34 0 3 0 1 0 0 0 255 255 0 0 35 0 7 0 58 0 0 0 72 3 0 0 36 0 7 0 4 0 0 0 0 0 1 0 37 0 7 0 14 0 0 0 130 3 0 0 43 0 7 0 16 0 0 0 144 3 0 0 44 0 7 0 62 2 0 0 160 3 0 0 45 0 3 0 3 0 0 0 222 5 0 0 50 0 7 0 8 0 0 0 228 5 0 0 53 0 7 0 6 0 0 0 236 5 0 0 59 0 5 0 4 0 0 0 242 5 0 0 60 0 3 0 1 0 0 0 1 0 0 0 131 0 1 0 1 0 0 0 14 0 0 0 132 0 5 0 4 0 0 0 18 6 0 0 135 0 1 0 1 0 0 0 0 0 0 0 137 0 3 0 1 0 0 0 0 0 0 0 138 0 3 0 1 0 0 0 1 0 0 0 139 0 7 0 4 0 0 0 55 1 12 0 149 0 2 0 5 0 0 0 50 6 0 0 151 0 7 0 164 4 0 0 56 6 0 0 152 0 7 0 33 0 0 0 220 10 0 0 157 0 3 0 1 0 0 0 0 0 0 0 158 0 3 0 10 0 0 0 254 10 0 0 162 0 4 0 1 0 0 0 208 51 94 0 163 0 1 0 1 0 0 0 0 0 0 0 167 0 4 0 1 0 0 0 136 37 0 0 168 0 7 0 49 0 0 0 18 11 0 0 171 0 2 0 16 0 0 0 68 11 0 0 176 0 7 0 16 0 0 0 84 11 0 0 177 0 3 0 1 0 0 0 4 0 0 0 182 0 7 0 8 0 0 0 100 11 0 0 183 0 7 0 30 0 0 0 108 11 0 0 184 0 7 0 172 0 0 0 138 11 0 0 187 0 7 0 8 0 0 0 54 12 0 0 191 0 3 0 1 0 0 0 0 0 0 0 192 0 7 0 8 0 0 0 62 12 0 0 0 0 0 0 78 79 82 77 65 76 32 0 65 85 84 79 32 32 32 32 32 32 32 32 0 0 65 70 45 65 32 32 0 0 32 32 32 32 32 32 32 32 32 32 32 32 0 0 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 0 26 2 0 0 0 1 0 0 98 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 112 23 160 15 0 0 0 0 6 0 0 0 0 0 128 23 176 15 128 23 176 15 0 0 0 0 50 53 54 55 56 48 54 0 48 49 48 48 1 1 0 0 48 49 48 48 83 84 65 78 68 65 82 68 0 0 0 0 0 0 0 0 0 0 0 0 83 84 65 78 68 65 82 68 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 255 0 0 128 0 128 255 255 255 72 1 12 0 0 0 72 1 12 0 0 0 2 0 48 49 48 48 0 0 2 0 0 0 0 0 0 0 0 0 48 49 48 49 35 0 128 2 170 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 48 49 48 48 1 0 0 0 48 50 48 48 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 180 0 0 0 10 0 0 0 196 9 0 0 10 0 0 0 35 0 0 0 10 0 0 0 63 0 0 0 10 0 0 0 79 70 70 32 0 0 48 50 49 57 175 100 85 136 19 240 236 87 159 239 50 169 21 141 234 145 1 58 188 135 155 248 158 141 197 70 16 35 127 36 18 73 201 146 164 255 163 144 198 69 13 30 120 27 7 60 186 129 17 106 140 119 171 40 238 253 85 246 224 19 143 84 98 185 89 66 116 239 179 192 22 181 157 206 72 11 23 108 10 241 33 154 75 229 225 211 254 237 97 166 153 188 97 4 235 86 222 141 147 96 177 112 9 90 197 254 49 68 166 28 219 225 181 202 172 215 75 8 14 93 245 214 0 115 53 54 130 24 249 35 246 78 251 93 158 232 149 83 192 150 155 77 6 80 237 123 80 198 91 56 80 204 164 134 241 99 30 100 208 139 139 208 92 62 129 207 147 154 205 94 47 91 199 124 109 193 82 42 79 183 107 104 185 61 22 54 162 83 77 148 36 249 6 130 48 47 107 0 210 245 69 14 11 75 212 172 206 49 249 218 29 165 121 158 225 169 161 230 119 67 88 196 115 109 86 49 27 234 156 63 238 101 125 191 248 56 175 209 10 175 121 154 243 136 38 200 15 28 53 151 224 51 159 244 79 38 57 226 212 15 95 97 114 213 130 110 168 43 119 12 70 16 29 56 188 134 155 249 158 140 197 70 16 35 127 36 18 73 201 146 164 255 163 144 198 69 13 30 135 100 7 61 186 128 145 235 115 116 171 40 234 253 85 246 224 23 143 84 98 185 89 66 116 235 179 192 22 181 157 206 72 15 129 108 17 240 1 154 250 152 79 166 88 108 108 167 62 253 118 123 129 41 233 243 196 223 67 240 230 37 173 126 88 251 167 156 90 97 176 74 44 83 203 140 142 217 117 82 128 247 175 180 2 153 121 162 11 203 44 223 182 149 6 209 68 232 52 207 170 209 65 250 252 71 232 186 222 77 5 6 80 227 191 230 82 9 9 82 228 191 227 82 6 5 77 222 184 37 184 2 7 68 249 170 204 55 235 232 46 189 182 182 64 211 207 21 162 120 152 3 148 87 243 128 86 189 221 143 132 75 87 108 78 181 101 90 156 39 244 15 105 45 37 110 240 195 223 68 242 233 41 186 132 159 3 176 166 229 109 54 88 187 103 220 154 161 240 10 108 23 11 72 206 157 181 22 192 179 239 116 66 89 185 98 84 143 12 224 233 85 226 238 55 171 119 140 234 145 129 186 60 7 24 120 28 13 69 198 145 163 254 164 147 201 73 18 36 127 35 16 71 197 140 158 248 155 135 188 59 1 16 106 32 246 49 170 110 124 183 119 43 147 68 212 169 57 217 194 176 111 51 64 150 53 29 78 200 139 151 236 138 113 161 26 221 231 38 216 191 237 120 38 50 131 29 4 51 169 116 114 198 95 65 112 228 165 178 254 135 123 167 28 218 225 49 202 172 215 74 8 15 93 245 214 0 115 47 52 131 25 248 34 148 79 83 160 55 21 60 174 104 107 183 77 42 80 193 123 124 199 91 56 94 205 133 134 208 99 63 100 210 137 137 210 100 63 99 208 134 133 205 94 57 91 218 124 123 193 76 42 79 183 104 104 175 61 8 54 163 83 77 148 32 249 6 130 43 47 115 0 214 245 93 14 8 75 214 172 203 49 225 218 28 167 123 152 255 173 164 230 112 67 95 196 115 105 168 50 4 31 131 49 38 100 237 191 216 59 231 220 26 161 113 138 236 151 139 200 78 29 53 150 64 51 111 244 194 217 57 226 212 15 136 96 118 213 102 110 171 43 244 12 106 17 26 58 184 135 153 248 156 141 205 70 15 35 127 36 18 73 200 146 164 255 163 144 199 69 12 30 120 27 7 60 186 129 145 234 141 119 171 40 239 253 84 246 224 19 143 85 98 184 89 67 116 239 179 192 22 181 157 206 72 11 23 108 10 241 33 154 92 103 187 88 62 109 229 166 176 3 159 132 178 41 233 242 68 223 195 240 102 37 45 126 28 251 35 156 88 97 177 74 44 87 75 136 142 221 116 86 128 243 175 180 3 153 120 162 20 207 211 32 182 149 189 46 233 235 54 204 171 209 64 250 252 71 219 185 222 76 5 7 80 227 191 228 82 9 9 82 228 191 227 80 6 5 77 222 184 219 71 252 250 65 209 170 204 55 235 232 46 189 149 182 32 211 207 20 162 121 153 2 176 175 247 128 84 117 221 142 136 203 215 44 74 177 96 90 156 39 251 24 127 45 36 102 240 195 223 68 242 233 41 178 133 159 2 176 167 229 108 62 88 187 103 93 154 32 241 11 108 23 11 72 206 157 181 22 192 179 239 116 66 89 185 98 84 143 19 224 246 85 253 238 40 171 119 140 234 145 129 186 60 7 27 120 30 13 69 198 148 163 251 164 144 201 73 18 36 127 163 16 70 197 139 158 81 164 249 188 227 254 166 149 91 200 217 168 129 130 189 118 201 172 31 212 226 56 205 194 236 110 51 64 150 54 157 206 72 11 23 108 10 241 33 154 92 103 187 88 62 109 229 166 176 3 159 132 178 41 233 242 68 223 195 240 102 37 173 254 153 123 191 29 218 224 49 10 172 215 74 9 15 93 244 214 0 115 47 52 130 24 249 226 149 79 83 96 76 21 53 174 69 71 248 121 36 91 1 113 164 192 6 58 94 205 135 134 211 96 63 101 210 137 48 50 48 52 175 87 210 143 135 134 122 30 111 217 5 35 91 204 161 165 151 218 33 111 27 120 30 13 69 198 144 162 251 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 49 48 54 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 85 84 79 40 70 76 65 83 72 32 79 70 70 41 0 48 49 48 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 49 48 48 0 8 3 11 105 5 128 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 49 48 48 0 0 101 0 242 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 50 48 48 255 255 255 0 60 1 12 0 144 1 12 0 -Exif.MakerNote.Offset Long 1 820 820 -Exif.MakerNote.ByteOrder Ascii 3 II II -Exif.Nikon3.Version Undefined 4 48 50 49 49 2.11 -Exif.Nikon3.ISOSpeed Short 2 0 200 200 -Exif.Nikon3.Quality Ascii 8 NORMAL NORMAL -Exif.Nikon3.WhiteBalance Ascii 13 AUTO AUTO -Exif.Nikon3.Focus Ascii 7 AF-A Automatic -Exif.Nikon3.FlashSetting Ascii 13 -Exif.Nikon3.FlashDevice Ascii 20 -Exif.Nikon3.WhiteBalanceBias SShort 2 0 0 0 0 -Exif.Nikon3.WB_RBLevels Rational 4 538/256 354/256 256/256 256/256 538/256 354/256 256/256 256/256 -Exif.Nikon3.ProgramShift Undefined 4 0 1 6 0 0.0 EV -Exif.Nikon3.ExposureDiff Undefined 4 0 1 12 0 0.0 EV -Exif.Nikon3.FlashComp Undefined 4 0 1 6 0 0.0 EV -Exif.Nikon3.ISOSettings Short 2 0 200 200 -Exif.Nikon3.ImageBoundary Short 4 0 0 6000 4000 0 0 6000 4000 -Exif.Nikon3.FlashExposureComp Undefined 4 0 1 6 0 0.0 EV -Exif.Nikon3.FlashBracketComp Undefined 4 0 1 6 0 0.0 EV -Exif.Nikon3.ExposureBracketComp SRational 1 0/6 0/6 -Exif.Nikon3.CropHiSpeed Short 7 0 6016 4016 6016 4016 0 0 0 6016 4016 6016 4016 0 0 -Exif.Nikon3.ExposureTuning Undefined 3 0 1 6 0 1 6 -Exif.Nikon3.SerialNumber Ascii 8 2567806 2567806 -Exif.Nikon3.ColorSpace Short 1 1 sRGB -Exif.NikonVr.Version Undefined 4 48 49 48 48 1.00 -Exif.NikonVr.VibrationReduction Byte 3 1 1 0 On -Exif.Nikon3.ActiveDLighting Short 1 65535 Auto -Exif.NikonPc.Version Undefined 4 48 49 48 48 1.00 -Exif.NikonPc.Name Ascii 20 STANDARD STANDARD -Exif.NikonPc.Base Ascii 20 STANDARD STANDARD -Exif.NikonPc.Adjust Byte 1 0 Default Settings -Exif.NikonPc.QuickAdjust Byte 1 255 n/a -Exif.NikonPc.Sharpness Byte 1 0 Auto -Exif.NikonPc.Contrast Byte 1 0 Auto -Exif.NikonPc.Brightness Byte 1 128 Normal -Exif.NikonPc.Saturation Byte 1 0 Auto -Exif.NikonPc.HueAdjustment Byte 1 128 Normal -Exif.NikonPc.FilterEffect Byte 1 255 n/a -Exif.NikonPc.ToningEffect Byte 1 255 n/a -Exif.NikonPc.ToningSaturation Byte 1 255 n/a -Exif.NikonWt.Timezone SShort 1 0 UTC +00:00 -Exif.NikonWt.DaylightSavings Byte 1 1 Yes -Exif.NikonWt.DateDisplayFormat Byte 1 0 Y/M/D -Exif.NikonIi.ISO Byte 1 72 200 -Exif.NikonIi.ISOExpansion Short 1 0 Off -Exif.NikonIi.ISO2 Byte 1 72 200 -Exif.NikonIi.ISOExpansion2 Short 1 0 Off -Exif.Nikon3.LensType Byte 1 14 D G VR -Exif.Nikon3.Lens Rational 4 180/10 2500/10 35/10 63/10 18-250mm F3.5-6.3 -Exif.Nikon3.FlashMode Byte 1 0 Did not fire -Exif.Nikon3.ShootingMode Short 1 0 Single-frame -Exif.Nikon3.AutoBracketRelease Short 1 1 Auto release -Exif.Nikon3.LensFStops Undefined 4 55 1 12 0 4.58333 -Exif.Nikon3.NoiseReduction Ascii 5 OFF OFF -Exif.NikonCb2b.Version Undefined 4 48 50 49 57 2.19 -Exif.NikonCb2b.WB_RGGBLevels Short 4 7396 31796 21644 7380 7396 31796 21644 7380 -Exif.NikonLd3.Version Undefined 4 48 50 48 52 2.04 -Exif.NikonLd3.ExitPupilPosition Byte 1 22 93.1 mm -Exif.NikonLd3.AFAperture Byte 1 53 F4.6 -Exif.NikonLd3.FocusPosition Byte 1 148 148 -Exif.NikonLd3.FocusDistance Byte 1 140 31.62 m -Exif.NikonLd3.FocalLength Byte 1 75 43.6 mm -Exif.NikonLd3.LensIDNumber Byte 1 146 Sigma 18-250mm F3.5-6.3 DC OS Macro HSM -Exif.NikonLd3.LensFStops Byte 1 55 F4.6 -Exif.NikonLd3.MinFocalLength Byte 1 45 18.3 mm -Exif.NikonLd3.MaxFocalLength Byte 1 136 254.0 mm -Exif.NikonLd3.MaxApertureAtMinFocal Byte 1 44 F3.6 -Exif.NikonLd3.MaxApertureAtMaxFocal Byte 1 64 F6.3 -Exif.NikonLd3.MCUVersion Byte 1 75 75 -Exif.NikonLd3.EffectiveMaxAperture Byte 1 52 F4.5 -Exif.Nikon3.RetouchHistory Short 10 0 0 0 0 0 0 0 0 0 0 None -Exif.Nikon3.ImageDataSize Long 1 6173648 6173648 -Exif.Nikon3.ShutterCount Long 1 9608 9608 -Exif.Nikon3.FlashInfo Undefined 49 48 49 48 54 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 49 48 54 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -Exif.Nikon3.VariProgram Ascii 16 AUTO(FLASH OFF) AUTO(FLASH OFF) -Exif.NikonMe.Version Undefined 4 48 49 48 48 1.00 -Exif.NikonMe.MultiExposureMode Long 1 0 Off -Exif.NikonMe.MultiExposureShots Long 1 0 0 -Exif.NikonMe.MultiExposureAutoGain Long 1 0 Off -Exif.Nikon3.HighISONoiseReduction Short 1 4 Normal -Exif.NikonAf2.Version Undefined 4 48 49 48 48 1.00 -Exif.NikonAf2.ContrastDetectAF Byte 1 0 Off -Exif.NikonAf2.AFAreaMode Byte 1 8 8 -Exif.NikonAf2.PhaseDetectAF Byte 1 3 On (39-point) -Exif.NikonAf2.PrimaryAFPoint Byte 1 11 11 -Exif.NikonAf2.AFPointsUsed Byte 7 105 5 128 0 16 0 0 105 5 128 0 16 0 0 -Exif.NikonAf2.AFImageWidth Short 1 0 0 -Exif.NikonAf2.AFImageHeight Short 1 0 0 -Exif.NikonAf2.AFAreaXPosition Short 1 0 0 -Exif.NikonAf2.AFAreaYPosition Short 1 0 0 -Exif.NikonAf2.AFAreaWidth Short 1 0 0 -Exif.NikonAf2.AFAreaHeight Short 1 0 0 -Exif.NikonAf2.ContrastDetectAFInFocus Byte 1 0 No -Exif.NikonFi.Version Undefined 4 48 49 48 48 1.00 -Exif.NikonFi.DirectoryNumber Short 1 101 101 -Exif.NikonFi.FileNumber Short 1 7154 7154 -Exif.Photo.UserComment Undefined 44 charset=Ascii charset=Ascii -Exif.Photo.SubSecTime Ascii 3 00 00 -Exif.Photo.SubSecTimeOriginal Ascii 3 00 00 -Exif.Photo.SubSecTimeDigitized Ascii 3 00 00 -Exif.Photo.FlashpixVersion Undefined 4 48 49 48 48 1.00 -Exif.Photo.ColorSpace Short 1 1 sRGB -Exif.Photo.PixelXDimension Short 1 6000 6000 -Exif.Photo.PixelYDimension Short 1 4000 4000 -Exif.Photo.InteroperabilityTag Long 1 4066 4066 -Exif.Iop.InteroperabilityIndex Ascii 4 R98 R98 -Exif.Iop.InteroperabilityVersion Undefined 4 48 49 48 48 1.00 -Exif.Photo.SensingMethod Short 1 2 One-chip color area -Exif.Photo.FileSource Undefined 1 3 Digital still camera -Exif.Photo.SceneType Undefined 1 1 Directly photographed -Exif.Photo.CFAPattern Undefined 8 2 0 2 0 0 1 1 2 2 0 2 0 0 1 1 2 -Exif.Photo.CustomRendered Short 1 0 Normal process -Exif.Photo.ExposureMode Short 1 0 Auto -Exif.Photo.WhiteBalance Short 1 0 Auto -Exif.Photo.DigitalZoomRatio Rational 1 1/1 1.0 -Exif.Photo.FocalLengthIn35mmFilm Short 1 66 66.0 mm -Exif.Photo.SceneCaptureType Short 1 0 Standard -Exif.Photo.GainControl Short 1 0 None -Exif.Photo.Contrast Short 1 0 Normal -Exif.Photo.Saturation Short 1 0 Normal -Exif.Photo.Sharpness Short 1 0 Normal -Exif.Photo.SubjectDistanceRange Short 1 0 Unknown -Exif.Photo.ImageUniqueID Ascii 33 090caaf2c085f3e102513b24750041aa 090caaf2c085f3e102513b24750041aa -Exif.Image.GPSTag Long 1 4096 4096 -Exif.GPSInfo.GPSVersionID Byte 4 2 3 0 0 2.3.0.0 -Exif.GPSInfo.GPSLatitudeRef Ascii 2 N North -Exif.GPSInfo.GPSLatitude Rational 3 51/1 106969/10000 0/1 51 deg 10' 41.81" -Exif.GPSInfo.GPSLongitudeRef Ascii 2 W West -Exif.GPSInfo.GPSLongitude Rational 3 1/1 495984/10000 0/1 1 deg 49' 35.90" -Exif.GPSInfo.GPSAltitudeRef Byte 1 0 Above sea level -Exif.GPSInfo.GPSAltitude Rational 1 97/1 97 m -Exif.GPSInfo.GPSTimeStamp Rational 3 14/1 38/1 5588/100 14:38:55.9 -Exif.GPSInfo.GPSSatellites Ascii 3 09 09 -Exif.GPSInfo.GPSMapDatum Ascii 17 WGS-84 WGS-84 -Exif.GPSInfo.GPSDateStamp Ascii 11 2015:07:16 2015:07:16 -Exif.Thumbnail.Compression Short 1 6 JPEG (old-style) -Exif.Thumbnail.XResolution Rational 1 300/1 300 -Exif.Thumbnail.YResolution Rational 1 300/1 300 -Exif.Thumbnail.ResolutionUnit Short 1 2 inch -Exif.Thumbnail.JPEGInterchangeFormat Long 1 4450 4450 -Exif.Thumbnail.JPEGInterchangeFormatLength Long 1 10837 10837 -Exif.Thumbnail.YCbCrPositioning Short 1 1 Centered -Iptc.Envelope.ModelVersion Short 1 4 4 -Iptc.Envelope.CharacterSet String 3 %G %G -Iptc.Application2.RecordVersion Short 1 4 4 -Iptc.Application2.Caption String 12 Classic View Classic View -Xmp.xmp.Rating XmpText 1 0 0 -Xmp.xmp.ModifyDate XmpText 25 2015-07-16T20:25:28+01:00 2015-07-16T20:25:28+01:00 -Xmp.dc.description LangAlt 1 lang="x-default" Classic View lang="x-default" Classic View +Exif.Image.Make Ascii 18 NIKON CORPORATION NIKON CORPORATION +Exif.Image.Model Ascii 12 NIKON D5300 NIKON D5300 +Exif.Image.Orientation Short 1 1 top, left +Exif.Image.XResolution Rational 1 300/1 300 +Exif.Image.YResolution Rational 1 300/1 300 +Exif.Image.ResolutionUnit Short 1 2 inch +Exif.Image.Software Ascii 10 Ver.1.00 Ver.1.00 +Exif.Image.DateTime Ascii 20 2015:07:16 20:25:28 2015:07:16 20:25:28 +Exif.Image.YCbCrPositioning Short 1 1 Centered +Exif.Image.ExifTag Long 1 222 222 +Exif.Photo.ExposureTime Rational 1 10/4000 1/400 s +Exif.Photo.FNumber Rational 1 100/10 F10 +Exif.Photo.ExposureProgram Short 1 0 Not defined +Exif.Photo.ISOSpeedRatings Short 1 200 200 +Exif.Photo.SensitivityType Short 1 2 2 +Exif.Photo.ExifVersion Undefined 4 48 50 51 48 2.30 +Exif.Photo.DateTimeOriginal Ascii 20 2015:07:16 15:38:54 2015:07:16 15:38:54 +Exif.Photo.DateTimeDigitized Ascii 20 2015:07:16 15:38:54 2015:07:16 15:38:54 +Exif.Photo.ComponentsConfiguration Undefined 4 1 2 3 0 YCbCr +Exif.Photo.CompressedBitsPerPixel Rational 1 2/1 2 +Exif.Photo.ExposureBiasValue SRational 1 0/6 0 EV +Exif.Photo.MaxApertureValue Rational 1 43/10 F4.4 +Exif.Photo.MeteringMode Short 1 5 Multi-segment +Exif.Photo.LightSource Short 1 0 Unknown +Exif.Photo.Flash Short 1 16 No, compulsory +Exif.Photo.FocalLength Rational 1 440/10 44.0 mm +Exif.Photo.MakerNote Undefined 3152 78 105 107 111 110 0 2 16 0 0 73 73 42 0 8 0 0 0 57 0 1 0 7 0 4 0 0 0 48 50 49 49 2 0 3 0 2 0 0 0 0 0 200 0 4 0 2 0 8 0 0 0 186 2 0 0 5 0 2 0 13 0 0 0 194 2 0 0 7 0 2 0 7 0 0 0 208 2 0 0 8 0 2 0 13 0 0 0 216 2 0 0 9 0 2 0 20 0 0 0 230 2 0 0 11 0 8 0 2 0 0 0 0 0 0 0 12 0 5 0 4 0 0 0 250 2 0 0 13 0 7 0 4 0 0 0 0 1 6 0 14 0 7 0 4 0 0 0 0 1 12 0 18 0 7 0 4 0 0 0 0 1 6 0 19 0 3 0 2 0 0 0 0 0 200 0 22 0 3 0 4 0 0 0 26 3 0 0 23 0 7 0 4 0 0 0 0 1 6 0 24 0 7 0 4 0 0 0 0 1 6 0 25 0 10 0 1 0 0 0 34 3 0 0 27 0 3 0 7 0 0 0 42 3 0 0 28 0 7 0 3 0 0 0 0 1 6 0 29 0 2 0 8 0 0 0 56 3 0 0 30 0 3 0 1 0 0 0 1 0 0 0 31 0 7 0 8 0 0 0 64 3 0 0 34 0 3 0 1 0 0 0 255 255 0 0 35 0 7 0 58 0 0 0 72 3 0 0 36 0 7 0 4 0 0 0 0 0 1 0 37 0 7 0 14 0 0 0 130 3 0 0 43 0 7 0 16 0 0 0 144 3 0 0 44 0 7 0 62 2 0 0 160 3 0 0 45 0 3 0 3 0 0 0 222 5 0 0 50 0 7 0 8 0 0 0 228 5 0 0 53 0 7 0 6 0 0 0 236 5 0 0 59 0 5 0 4 0 0 0 242 5 0 0 60 0 3 0 1 0 0 0 1 0 0 0 131 0 1 0 1 0 0 0 14 0 0 0 132 0 5 0 4 0 0 0 18 6 0 0 135 0 1 0 1 0 0 0 0 0 0 0 137 0 3 0 1 0 0 0 0 0 0 0 138 0 3 0 1 0 0 0 1 0 0 0 139 0 7 0 4 0 0 0 55 1 12 0 149 0 2 0 5 0 0 0 50 6 0 0 151 0 7 0 164 4 0 0 56 6 0 0 152 0 7 0 33 0 0 0 220 10 0 0 157 0 3 0 1 0 0 0 0 0 0 0 158 0 3 0 10 0 0 0 254 10 0 0 162 0 4 0 1 0 0 0 208 51 94 0 163 0 1 0 1 0 0 0 0 0 0 0 167 0 4 0 1 0 0 0 136 37 0 0 168 0 7 0 49 0 0 0 18 11 0 0 171 0 2 0 16 0 0 0 68 11 0 0 176 0 7 0 16 0 0 0 84 11 0 0 177 0 3 0 1 0 0 0 4 0 0 0 182 0 7 0 8 0 0 0 100 11 0 0 183 0 7 0 30 0 0 0 108 11 0 0 184 0 7 0 172 0 0 0 138 11 0 0 187 0 7 0 8 0 0 0 54 12 0 0 191 0 3 0 1 0 0 0 0 0 0 0 192 0 7 0 8 0 0 0 62 12 0 0 0 0 0 0 78 79 82 77 65 76 32 0 65 85 84 79 32 32 32 32 32 32 32 32 0 0 65 70 45 65 32 32 0 0 32 32 32 32 32 32 32 32 32 32 32 32 0 0 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 0 26 2 0 0 0 1 0 0 98 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 112 23 160 15 0 0 0 0 6 0 0 0 0 0 128 23 176 15 128 23 176 15 0 0 0 0 50 53 54 55 56 48 54 0 48 49 48 48 1 1 0 0 48 49 48 48 83 84 65 78 68 65 82 68 0 0 0 0 0 0 0 0 0 0 0 0 83 84 65 78 68 65 82 68 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 255 0 0 128 0 128 255 255 255 72 1 12 0 0 0 72 1 12 0 0 0 2 0 48 49 48 48 0 0 2 0 0 0 0 0 0 0 0 0 48 49 48 49 35 0 128 2 170 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 48 49 48 48 1 0 0 0 48 50 48 48 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 180 0 0 0 10 0 0 0 196 9 0 0 10 0 0 0 35 0 0 0 10 0 0 0 63 0 0 0 10 0 0 0 79 70 70 32 0 0 48 50 49 57 175 100 85 136 19 240 236 87 159 239 50 169 21 141 234 145 1 58 188 135 155 248 158 141 197 70 16 35 127 36 18 73 201 146 164 255 163 144 198 69 13 30 120 27 7 60 186 129 17 106 140 119 171 40 238 253 85 246 224 19 143 84 98 185 89 66 116 239 179 192 22 181 157 206 72 11 23 108 10 241 33 154 75 229 225 211 254 237 97 166 153 188 97 4 235 86 222 141 147 96 177 112 9 90 197 254 49 68 166 28 219 225 181 202 172 215 75 8 14 93 245 214 0 115 53 54 130 24 249 35 246 78 251 93 158 232 149 83 192 150 155 77 6 80 237 123 80 198 91 56 80 204 164 134 241 99 30 100 208 139 139 208 92 62 129 207 147 154 205 94 47 91 199 124 109 193 82 42 79 183 107 104 185 61 22 54 162 83 77 148 36 249 6 130 48 47 107 0 210 245 69 14 11 75 212 172 206 49 249 218 29 165 121 158 225 169 161 230 119 67 88 196 115 109 86 49 27 234 156 63 238 101 125 191 248 56 175 209 10 175 121 154 243 136 38 200 15 28 53 151 224 51 159 244 79 38 57 226 212 15 95 97 114 213 130 110 168 43 119 12 70 16 29 56 188 134 155 249 158 140 197 70 16 35 127 36 18 73 201 146 164 255 163 144 198 69 13 30 135 100 7 61 186 128 145 235 115 116 171 40 234 253 85 246 224 23 143 84 98 185 89 66 116 235 179 192 22 181 157 206 72 15 129 108 17 240 1 154 250 152 79 166 88 108 108 167 62 253 118 123 129 41 233 243 196 223 67 240 230 37 173 126 88 251 167 156 90 97 176 74 44 83 203 140 142 217 117 82 128 247 175 180 2 153 121 162 11 203 44 223 182 149 6 209 68 232 52 207 170 209 65 250 252 71 232 186 222 77 5 6 80 227 191 230 82 9 9 82 228 191 227 82 6 5 77 222 184 37 184 2 7 68 249 170 204 55 235 232 46 189 182 182 64 211 207 21 162 120 152 3 148 87 243 128 86 189 221 143 132 75 87 108 78 181 101 90 156 39 244 15 105 45 37 110 240 195 223 68 242 233 41 186 132 159 3 176 166 229 109 54 88 187 103 220 154 161 240 10 108 23 11 72 206 157 181 22 192 179 239 116 66 89 185 98 84 143 12 224 233 85 226 238 55 171 119 140 234 145 129 186 60 7 24 120 28 13 69 198 145 163 254 164 147 201 73 18 36 127 35 16 71 197 140 158 248 155 135 188 59 1 16 106 32 246 49 170 110 124 183 119 43 147 68 212 169 57 217 194 176 111 51 64 150 53 29 78 200 139 151 236 138 113 161 26 221 231 38 216 191 237 120 38 50 131 29 4 51 169 116 114 198 95 65 112 228 165 178 254 135 123 167 28 218 225 49 202 172 215 74 8 15 93 245 214 0 115 47 52 131 25 248 34 148 79 83 160 55 21 60 174 104 107 183 77 42 80 193 123 124 199 91 56 94 205 133 134 208 99 63 100 210 137 137 210 100 63 99 208 134 133 205 94 57 91 218 124 123 193 76 42 79 183 104 104 175 61 8 54 163 83 77 148 32 249 6 130 43 47 115 0 214 245 93 14 8 75 214 172 203 49 225 218 28 167 123 152 255 173 164 230 112 67 95 196 115 105 168 50 4 31 131 49 38 100 237 191 216 59 231 220 26 161 113 138 236 151 139 200 78 29 53 150 64 51 111 244 194 217 57 226 212 15 136 96 118 213 102 110 171 43 244 12 106 17 26 58 184 135 153 248 156 141 205 70 15 35 127 36 18 73 200 146 164 255 163 144 199 69 12 30 120 27 7 60 186 129 145 234 141 119 171 40 239 253 84 246 224 19 143 85 98 184 89 67 116 239 179 192 22 181 157 206 72 11 23 108 10 241 33 154 92 103 187 88 62 109 229 166 176 3 159 132 178 41 233 242 68 223 195 240 102 37 45 126 28 251 35 156 88 97 177 74 44 87 75 136 142 221 116 86 128 243 175 180 3 153 120 162 20 207 211 32 182 149 189 46 233 235 54 204 171 209 64 250 252 71 219 185 222 76 5 7 80 227 191 228 82 9 9 82 228 191 227 80 6 5 77 222 184 219 71 252 250 65 209 170 204 55 235 232 46 189 149 182 32 211 207 20 162 121 153 2 176 175 247 128 84 117 221 142 136 203 215 44 74 177 96 90 156 39 251 24 127 45 36 102 240 195 223 68 242 233 41 178 133 159 2 176 167 229 108 62 88 187 103 93 154 32 241 11 108 23 11 72 206 157 181 22 192 179 239 116 66 89 185 98 84 143 19 224 246 85 253 238 40 171 119 140 234 145 129 186 60 7 27 120 30 13 69 198 148 163 251 164 144 201 73 18 36 127 163 16 70 197 139 158 81 164 249 188 227 254 166 149 91 200 217 168 129 130 189 118 201 172 31 212 226 56 205 194 236 110 51 64 150 54 157 206 72 11 23 108 10 241 33 154 92 103 187 88 62 109 229 166 176 3 159 132 178 41 233 242 68 223 195 240 102 37 173 254 153 123 191 29 218 224 49 10 172 215 74 9 15 93 244 214 0 115 47 52 130 24 249 226 149 79 83 96 76 21 53 174 69 71 248 121 36 91 1 113 164 192 6 58 94 205 135 134 211 96 63 101 210 137 48 50 48 52 175 87 210 143 135 134 122 30 111 217 5 35 91 204 161 165 151 218 33 111 27 120 30 13 69 198 144 162 251 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 49 48 54 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 85 84 79 40 70 76 65 83 72 32 79 70 70 41 0 48 49 48 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 49 48 48 0 8 3 11 105 5 128 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 49 48 48 0 0 101 0 242 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 50 48 48 255 255 255 0 60 1 12 0 144 1 12 0 78 105 107 111 110 0 2 16 0 0 73 73 42 0 8 0 0 0 57 0 1 0 7 0 4 0 0 0 48 50 49 49 2 0 3 0 2 0 0 0 0 0 200 0 4 0 2 0 8 0 0 0 186 2 0 0 5 0 2 0 13 0 0 0 194 2 0 0 7 0 2 0 7 0 0 0 208 2 0 0 8 0 2 0 13 0 0 0 216 2 0 0 9 0 2 0 20 0 0 0 230 2 0 0 11 0 8 0 2 0 0 0 0 0 0 0 12 0 5 0 4 0 0 0 250 2 0 0 13 0 7 0 4 0 0 0 0 1 6 0 14 0 7 0 4 0 0 0 0 1 12 0 18 0 7 0 4 0 0 0 0 1 6 0 19 0 3 0 2 0 0 0 0 0 200 0 22 0 3 0 4 0 0 0 26 3 0 0 23 0 7 0 4 0 0 0 0 1 6 0 24 0 7 0 4 0 0 0 0 1 6 0 25 0 10 0 1 0 0 0 34 3 0 0 27 0 3 0 7 0 0 0 42 3 0 0 28 0 7 0 3 0 0 0 0 1 6 0 29 0 2 0 8 0 0 0 56 3 0 0 30 0 3 0 1 0 0 0 1 0 0 0 31 0 7 0 8 0 0 0 64 3 0 0 34 0 3 0 1 0 0 0 255 255 0 0 35 0 7 0 58 0 0 0 72 3 0 0 36 0 7 0 4 0 0 0 0 0 1 0 37 0 7 0 14 0 0 0 130 3 0 0 43 0 7 0 16 0 0 0 144 3 0 0 44 0 7 0 62 2 0 0 160 3 0 0 45 0 3 0 3 0 0 0 222 5 0 0 50 0 7 0 8 0 0 0 228 5 0 0 53 0 7 0 6 0 0 0 236 5 0 0 59 0 5 0 4 0 0 0 242 5 0 0 60 0 3 0 1 0 0 0 1 0 0 0 131 0 1 0 1 0 0 0 14 0 0 0 132 0 5 0 4 0 0 0 18 6 0 0 135 0 1 0 1 0 0 0 0 0 0 0 137 0 3 0 1 0 0 0 0 0 0 0 138 0 3 0 1 0 0 0 1 0 0 0 139 0 7 0 4 0 0 0 55 1 12 0 149 0 2 0 5 0 0 0 50 6 0 0 151 0 7 0 164 4 0 0 56 6 0 0 152 0 7 0 33 0 0 0 220 10 0 0 157 0 3 0 1 0 0 0 0 0 0 0 158 0 3 0 10 0 0 0 254 10 0 0 162 0 4 0 1 0 0 0 208 51 94 0 163 0 1 0 1 0 0 0 0 0 0 0 167 0 4 0 1 0 0 0 136 37 0 0 168 0 7 0 49 0 0 0 18 11 0 0 171 0 2 0 16 0 0 0 68 11 0 0 176 0 7 0 16 0 0 0 84 11 0 0 177 0 3 0 1 0 0 0 4 0 0 0 182 0 7 0 8 0 0 0 100 11 0 0 183 0 7 0 30 0 0 0 108 11 0 0 184 0 7 0 172 0 0 0 138 11 0 0 187 0 7 0 8 0 0 0 54 12 0 0 191 0 3 0 1 0 0 0 0 0 0 0 192 0 7 0 8 0 0 0 62 12 0 0 0 0 0 0 78 79 82 77 65 76 32 0 65 85 84 79 32 32 32 32 32 32 32 32 0 0 65 70 45 65 32 32 0 0 32 32 32 32 32 32 32 32 32 32 32 32 0 0 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 0 26 2 0 0 0 1 0 0 98 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 112 23 160 15 0 0 0 0 6 0 0 0 0 0 128 23 176 15 128 23 176 15 0 0 0 0 50 53 54 55 56 48 54 0 48 49 48 48 1 1 0 0 48 49 48 48 83 84 65 78 68 65 82 68 0 0 0 0 0 0 0 0 0 0 0 0 83 84 65 78 68 65 82 68 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 255 0 0 128 0 128 255 255 255 72 1 12 0 0 0 72 1 12 0 0 0 2 0 48 49 48 48 0 0 2 0 0 0 0 0 0 0 0 0 48 49 48 49 35 0 128 2 170 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 48 49 48 48 1 0 0 0 48 50 48 48 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 180 0 0 0 10 0 0 0 196 9 0 0 10 0 0 0 35 0 0 0 10 0 0 0 63 0 0 0 10 0 0 0 79 70 70 32 0 0 48 50 49 57 175 100 85 136 19 240 236 87 159 239 50 169 21 141 234 145 1 58 188 135 155 248 158 141 197 70 16 35 127 36 18 73 201 146 164 255 163 144 198 69 13 30 120 27 7 60 186 129 17 106 140 119 171 40 238 253 85 246 224 19 143 84 98 185 89 66 116 239 179 192 22 181 157 206 72 11 23 108 10 241 33 154 75 229 225 211 254 237 97 166 153 188 97 4 235 86 222 141 147 96 177 112 9 90 197 254 49 68 166 28 219 225 181 202 172 215 75 8 14 93 245 214 0 115 53 54 130 24 249 35 246 78 251 93 158 232 149 83 192 150 155 77 6 80 237 123 80 198 91 56 80 204 164 134 241 99 30 100 208 139 139 208 92 62 129 207 147 154 205 94 47 91 199 124 109 193 82 42 79 183 107 104 185 61 22 54 162 83 77 148 36 249 6 130 48 47 107 0 210 245 69 14 11 75 212 172 206 49 249 218 29 165 121 158 225 169 161 230 119 67 88 196 115 109 86 49 27 234 156 63 238 101 125 191 248 56 175 209 10 175 121 154 243 136 38 200 15 28 53 151 224 51 159 244 79 38 57 226 212 15 95 97 114 213 130 110 168 43 119 12 70 16 29 56 188 134 155 249 158 140 197 70 16 35 127 36 18 73 201 146 164 255 163 144 198 69 13 30 135 100 7 61 186 128 145 235 115 116 171 40 234 253 85 246 224 23 143 84 98 185 89 66 116 235 179 192 22 181 157 206 72 15 129 108 17 240 1 154 250 152 79 166 88 108 108 167 62 253 118 123 129 41 233 243 196 223 67 240 230 37 173 126 88 251 167 156 90 97 176 74 44 83 203 140 142 217 117 82 128 247 175 180 2 153 121 162 11 203 44 223 182 149 6 209 68 232 52 207 170 209 65 250 252 71 232 186 222 77 5 6 80 227 191 230 82 9 9 82 228 191 227 82 6 5 77 222 184 37 184 2 7 68 249 170 204 55 235 232 46 189 182 182 64 211 207 21 162 120 152 3 148 87 243 128 86 189 221 143 132 75 87 108 78 181 101 90 156 39 244 15 105 45 37 110 240 195 223 68 242 233 41 186 132 159 3 176 166 229 109 54 88 187 103 220 154 161 240 10 108 23 11 72 206 157 181 22 192 179 239 116 66 89 185 98 84 143 12 224 233 85 226 238 55 171 119 140 234 145 129 186 60 7 24 120 28 13 69 198 145 163 254 164 147 201 73 18 36 127 35 16 71 197 140 158 248 155 135 188 59 1 16 106 32 246 49 170 110 124 183 119 43 147 68 212 169 57 217 194 176 111 51 64 150 53 29 78 200 139 151 236 138 113 161 26 221 231 38 216 191 237 120 38 50 131 29 4 51 169 116 114 198 95 65 112 228 165 178 254 135 123 167 28 218 225 49 202 172 215 74 8 15 93 245 214 0 115 47 52 131 25 248 34 148 79 83 160 55 21 60 174 104 107 183 77 42 80 193 123 124 199 91 56 94 205 133 134 208 99 63 100 210 137 137 210 100 63 99 208 134 133 205 94 57 91 218 124 123 193 76 42 79 183 104 104 175 61 8 54 163 83 77 148 32 249 6 130 43 47 115 0 214 245 93 14 8 75 214 172 203 49 225 218 28 167 123 152 255 173 164 230 112 67 95 196 115 105 168 50 4 31 131 49 38 100 237 191 216 59 231 220 26 161 113 138 236 151 139 200 78 29 53 150 64 51 111 244 194 217 57 226 212 15 136 96 118 213 102 110 171 43 244 12 106 17 26 58 184 135 153 248 156 141 205 70 15 35 127 36 18 73 200 146 164 255 163 144 199 69 12 30 120 27 7 60 186 129 145 234 141 119 171 40 239 253 84 246 224 19 143 85 98 184 89 67 116 239 179 192 22 181 157 206 72 11 23 108 10 241 33 154 92 103 187 88 62 109 229 166 176 3 159 132 178 41 233 242 68 223 195 240 102 37 45 126 28 251 35 156 88 97 177 74 44 87 75 136 142 221 116 86 128 243 175 180 3 153 120 162 20 207 211 32 182 149 189 46 233 235 54 204 171 209 64 250 252 71 219 185 222 76 5 7 80 227 191 228 82 9 9 82 228 191 227 80 6 5 77 222 184 219 71 252 250 65 209 170 204 55 235 232 46 189 149 182 32 211 207 20 162 121 153 2 176 175 247 128 84 117 221 142 136 203 215 44 74 177 96 90 156 39 251 24 127 45 36 102 240 195 223 68 242 233 41 178 133 159 2 176 167 229 108 62 88 187 103 93 154 32 241 11 108 23 11 72 206 157 181 22 192 179 239 116 66 89 185 98 84 143 19 224 246 85 253 238 40 171 119 140 234 145 129 186 60 7 27 120 30 13 69 198 148 163 251 164 144 201 73 18 36 127 163 16 70 197 139 158 81 164 249 188 227 254 166 149 91 200 217 168 129 130 189 118 201 172 31 212 226 56 205 194 236 110 51 64 150 54 157 206 72 11 23 108 10 241 33 154 92 103 187 88 62 109 229 166 176 3 159 132 178 41 233 242 68 223 195 240 102 37 173 254 153 123 191 29 218 224 49 10 172 215 74 9 15 93 244 214 0 115 47 52 130 24 249 226 149 79 83 96 76 21 53 174 69 71 248 121 36 91 1 113 164 192 6 58 94 205 135 134 211 96 63 101 210 137 48 50 48 52 175 87 210 143 135 134 122 30 111 217 5 35 91 204 161 165 151 218 33 111 27 120 30 13 69 198 144 162 251 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 49 48 54 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 85 84 79 40 70 76 65 83 72 32 79 70 70 41 0 48 49 48 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 49 48 48 0 8 3 11 105 5 128 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 49 48 48 0 0 101 0 242 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 50 48 48 255 255 255 0 60 1 12 0 144 1 12 0 +Exif.MakerNote.Offset Long 1 820 820 +Exif.MakerNote.ByteOrder Ascii 3 II II +Exif.Nikon3.Version Undefined 4 48 50 49 49 2.11 +Exif.Nikon3.ISOSpeed Short 2 0 200 200 +Exif.Nikon3.Quality Ascii 8 NORMAL NORMAL +Exif.Nikon3.WhiteBalance Ascii 13 AUTO AUTO +Exif.Nikon3.Focus Ascii 7 AF-A Automatic +Exif.Nikon3.FlashSetting Ascii 13 +Exif.Nikon3.FlashDevice Ascii 20 +Exif.Nikon3.WhiteBalanceBias SShort 2 0 0 0 0 +Exif.Nikon3.WB_RBLevels Rational 4 538/256 354/256 256/256 256/256 538/256 354/256 256/256 256/256 +Exif.Nikon3.ProgramShift Undefined 4 0 1 6 0 0.0 EV +Exif.Nikon3.ExposureDiff Undefined 4 0 1 12 0 0.0 EV +Exif.Nikon3.FlashComp Undefined 4 0 1 6 0 0.0 EV +Exif.Nikon3.ISOSettings Short 2 0 200 200 +Exif.Nikon3.ImageBoundary Short 4 0 0 6000 4000 0 0 6000 4000 +Exif.Nikon3.FlashExposureComp Undefined 4 0 1 6 0 0.0 EV +Exif.Nikon3.FlashBracketComp Undefined 4 0 1 6 0 0.0 EV +Exif.Nikon3.ExposureBracketComp SRational 1 0/6 0/6 +Exif.Nikon3.CropHiSpeed Short 7 0 6016 4016 6016 4016 0 0 0 6016 4016 6016 4016 0 0 +Exif.Nikon3.ExposureTuning Undefined 3 0 1 6 0 1 6 +Exif.Nikon3.SerialNumber Ascii 8 2567806 2567806 +Exif.Nikon3.ColorSpace Short 1 1 sRGB +Exif.NikonVr.Version Undefined 4 48 49 48 48 1.00 +Exif.NikonVr.VibrationReduction Byte 3 1 1 0 On +Exif.Nikon3.ActiveDLighting Short 1 65535 Auto +Exif.NikonPc.Version Undefined 4 48 49 48 48 1.00 +Exif.NikonPc.Name Ascii 20 STANDARD STANDARD +Exif.NikonPc.Base Ascii 20 STANDARD STANDARD +Exif.NikonPc.Adjust Byte 1 0 Default Settings +Exif.NikonPc.QuickAdjust Byte 1 255 n/a +Exif.NikonPc.Sharpness Byte 1 0 Auto +Exif.NikonPc.Contrast Byte 1 0 Auto +Exif.NikonPc.Brightness Byte 1 128 Normal +Exif.NikonPc.Saturation Byte 1 0 Auto +Exif.NikonPc.HueAdjustment Byte 1 128 Normal +Exif.NikonPc.FilterEffect Byte 1 255 n/a +Exif.NikonPc.ToningEffect Byte 1 255 n/a +Exif.NikonPc.ToningSaturation Byte 1 255 n/a +Exif.NikonWt.Timezone SShort 1 0 UTC +00:00 +Exif.NikonWt.DaylightSavings Byte 1 1 Yes +Exif.NikonWt.DateDisplayFormat Byte 1 0 Y/M/D +Exif.NikonIi.ISO Byte 1 72 200 +Exif.NikonIi.ISOExpansion Short 1 0 Off +Exif.NikonIi.ISO2 Byte 1 72 200 +Exif.NikonIi.ISOExpansion2 Short 1 0 Off +Exif.Nikon3.LensType Byte 1 14 D G VR +Exif.Nikon3.Lens Rational 4 180/10 2500/10 35/10 63/10 18-250mm F3.5-6.3 +Exif.Nikon3.FlashMode Byte 1 0 Did not fire +Exif.Nikon3.ShootingMode Short 1 0 Single-frame +Exif.Nikon3.AutoBracketRelease Short 1 1 Auto release +Exif.Nikon3.LensFStops Undefined 4 55 1 12 0 4.58333 +Exif.Nikon3.NoiseReduction Ascii 5 OFF OFF +Exif.NikonCb2b.Version Undefined 4 48 50 49 57 2.19 +Exif.NikonCb2b.WB_RGGBLevels Short 4 7396 31796 21644 7380 7396 31796 21644 7380 +Exif.NikonLd3.Version Undefined 4 48 50 48 52 2.04 +Exif.NikonLd3.ExitPupilPosition Byte 1 22 93.1 mm +Exif.NikonLd3.AFAperture Byte 1 53 F4.6 +Exif.NikonLd3.FocusPosition Byte 1 148 148 +Exif.NikonLd3.FocusDistance Byte 1 140 31.62 m +Exif.NikonLd3.FocalLength Byte 1 75 43.6 mm +Exif.NikonLd3.LensIDNumber Byte 1 146 Sigma 18-250mm F3.5-6.3 DC OS Macro HSM +Exif.NikonLd3.LensFStops Byte 1 55 F4.6 +Exif.NikonLd3.MinFocalLength Byte 1 45 18.3 mm +Exif.NikonLd3.MaxFocalLength Byte 1 136 254.0 mm +Exif.NikonLd3.MaxApertureAtMinFocal Byte 1 44 F3.6 +Exif.NikonLd3.MaxApertureAtMaxFocal Byte 1 64 F6.3 +Exif.NikonLd3.MCUVersion Byte 1 75 75 +Exif.NikonLd3.EffectiveMaxAperture Byte 1 52 F4.5 +Exif.Nikon3.RetouchHistory Short 10 0 0 0 0 0 0 0 0 0 0 None +Exif.Nikon3.ImageDataSize Long 1 6173648 6173648 +Exif.Nikon3.ShutterCount Long 1 9608 9608 +Exif.NikonFl6.Version Undefined 4 48 49 48 54 1.06 +Exif.NikonFl6.FlashSource Byte 1 0 None +Exif.NikonFl6.ExternalFlashFirmware Short 1 0 n/a +Exif.NikonFl6.ExternalFlashData1 Byte 1 0 Did not fire +Exif.NikonFl6.ExternalFlashData2 Byte 1 0 External flash off +Exif.NikonFl6.FlashCompensationMaster Byte 1 0 n/a +Exif.NikonFl6.FlashFocalLength Byte 1 0 n/a +Exif.NikonFl6.RepeatingFlashRate Byte 1 0 n/a +Exif.NikonFl6.RepeatingFlashCount Byte 1 0 n/a +Exif.NikonFl6.FlashGNDistance Byte 1 0 n/a +Exif.NikonFl6.FlashColorFilter Byte 1 0 None +Exif.NikonFl6.FlashGroupAControlData Byte 1 0 Off +Exif.NikonFl6.FlashGroupBCControlData Byte 1 0 Off, Off +Exif.NikonFl6.FlashCompensationGroupA Byte 1 0 n/a +Exif.NikonFl6.FlashCompensationGroupB Byte 1 0 n/a +Exif.NikonFl6.FlashCompensationGroupC Byte 1 0 n/a +Exif.NikonFl6.CameraExposureCompensation Byte 1 0 0.0 EV +Exif.NikonFl6.CameraFlashCompensation Byte 1 0 0.0 EV +Exif.NikonFl6.FlashMasterOutput Byte 1 0 n/a +Exif.NikonFl6.FlashGroupAOutput Byte 1 0 n/a +Exif.NikonFl6.FlashGroupBOutput Byte 1 0 n/a +Exif.NikonFl6.FlashGroupCOutput Byte 1 0 n/a +Exif.Nikon3.VariProgram Ascii 16 AUTO(FLASH OFF) AUTO(FLASH OFF) +Exif.NikonMe.Version Undefined 4 48 49 48 48 1.00 +Exif.NikonMe.MultiExposureMode Long 1 0 Off +Exif.NikonMe.MultiExposureShots Long 1 0 0 +Exif.NikonMe.MultiExposureAutoGain Long 1 0 Off +Exif.Nikon3.HighISONoiseReduction Short 1 4 Normal +Exif.NikonAf2.Version Undefined 4 48 49 48 48 1.00 +Exif.NikonAf2.ContrastDetectAF Byte 1 0 Off +Exif.NikonAf2.AFAreaMode Byte 1 8 8 +Exif.NikonAf2.PhaseDetectAF Byte 1 3 On (39-point) +Exif.NikonAf2.PrimaryAFPoint Byte 1 11 11 +Exif.NikonAf2.AFPointsUsed Byte 7 105 5 128 0 16 0 0 105 5 128 0 16 0 0 +Exif.NikonAf2.AFImageWidth Short 1 0 0 +Exif.NikonAf2.AFImageHeight Short 1 0 0 +Exif.NikonAf2.AFAreaXPosition Short 1 0 0 +Exif.NikonAf2.AFAreaYPosition Short 1 0 0 +Exif.NikonAf2.AFAreaWidth Short 1 0 0 +Exif.NikonAf2.AFAreaHeight Short 1 0 0 +Exif.NikonAf2.ContrastDetectAFInFocus Byte 1 0 No +Exif.NikonFi.Version Undefined 4 48 49 48 48 1.00 +Exif.NikonFi.DirectoryNumber Short 1 101 101 +Exif.NikonFi.FileNumber Short 1 7154 7154 +Exif.Photo.UserComment Undefined 44 charset=Ascii charset=Ascii +Exif.Photo.SubSecTime Ascii 3 00 00 +Exif.Photo.SubSecTimeOriginal Ascii 3 00 00 +Exif.Photo.SubSecTimeDigitized Ascii 3 00 00 +Exif.Photo.FlashpixVersion Undefined 4 48 49 48 48 1.00 +Exif.Photo.ColorSpace Short 1 1 sRGB +Exif.Photo.PixelXDimension Short 1 6000 6000 +Exif.Photo.PixelYDimension Short 1 4000 4000 +Exif.Photo.InteroperabilityTag Long 1 4066 4066 +Exif.Iop.InteroperabilityIndex Ascii 4 R98 R98 +Exif.Iop.InteroperabilityVersion Undefined 4 48 49 48 48 1.00 +Exif.Photo.SensingMethod Short 1 2 One-chip color area +Exif.Photo.FileSource Undefined 1 3 Digital still camera +Exif.Photo.SceneType Undefined 1 1 Directly photographed +Exif.Photo.CFAPattern Undefined 8 2 0 2 0 0 1 1 2 2 0 2 0 0 1 1 2 +Exif.Photo.CustomRendered Short 1 0 Normal process +Exif.Photo.ExposureMode Short 1 0 Auto +Exif.Photo.WhiteBalance Short 1 0 Auto +Exif.Photo.DigitalZoomRatio Rational 1 1/1 1.0 +Exif.Photo.FocalLengthIn35mmFilm Short 1 66 66.0 mm +Exif.Photo.SceneCaptureType Short 1 0 Standard +Exif.Photo.GainControl Short 1 0 None +Exif.Photo.Contrast Short 1 0 Normal +Exif.Photo.Saturation Short 1 0 Normal +Exif.Photo.Sharpness Short 1 0 Normal +Exif.Photo.SubjectDistanceRange Short 1 0 Unknown +Exif.Photo.ImageUniqueID Ascii 33 090caaf2c085f3e102513b24750041aa 090caaf2c085f3e102513b24750041aa +Exif.Image.GPSTag Long 1 4096 4096 +Exif.GPSInfo.GPSVersionID Byte 4 2 3 0 0 2.3.0.0 +Exif.GPSInfo.GPSLatitudeRef Ascii 2 N North +Exif.GPSInfo.GPSLatitude Rational 3 51/1 106969/10000 0/1 51 deg 10' 41.81" +Exif.GPSInfo.GPSLongitudeRef Ascii 2 W West +Exif.GPSInfo.GPSLongitude Rational 3 1/1 495984/10000 0/1 1 deg 49' 35.90" +Exif.GPSInfo.GPSAltitudeRef Byte 1 0 Above sea level +Exif.GPSInfo.GPSAltitude Rational 1 97/1 97 m +Exif.GPSInfo.GPSTimeStamp Rational 3 14/1 38/1 5588/100 14:38:55.9 +Exif.GPSInfo.GPSSatellites Ascii 3 09 09 +Exif.GPSInfo.GPSMapDatum Ascii 17 WGS-84 WGS-84 +Exif.GPSInfo.GPSDateStamp Ascii 11 2015:07:16 2015:07:16 +Exif.Thumbnail.Compression Short 1 6 JPEG (old-style) +Exif.Thumbnail.XResolution Rational 1 300/1 300 +Exif.Thumbnail.YResolution Rational 1 300/1 300 +Exif.Thumbnail.ResolutionUnit Short 1 2 inch +Exif.Thumbnail.JPEGInterchangeFormat Long 1 4450 4450 +Exif.Thumbnail.JPEGInterchangeFormatLength Long 1 10837 10837 +Exif.Thumbnail.YCbCrPositioning Short 1 1 Centered +Iptc.Envelope.ModelVersion Short 1 4 4 +Iptc.Envelope.CharacterSet String 3 %G %G +Iptc.Application2.RecordVersion Short 1 4 4 +Iptc.Application2.Caption String 12 Classic View Classic View +Xmp.xmp.Rating XmpText 1 0 0 +Xmp.xmp.ModifyDate XmpText 25 2015-07-16T20:25:28+01:00 2015-07-16T20:25:28+01:00 +Xmp.dc.description LangAlt 1 lang="x-default" Classic View lang="x-default" Classic View diff --git a/test/data/test_reference_files/issue_743.exv.out b/test/data/test_reference_files/issue_743.exv.out index 0467cb5f..ed72a0ac 100644 --- a/test/data/test_reference_files/issue_743.exv.out +++ b/test/data/test_reference_files/issue_743.exv.out @@ -111,18 +111,29 @@ Exif.Nikon3.ShutterCount Long 1 19903 19903 Exif.NikonFl7.Version Undefined 4 48 49 48 55 1.07 Exif.NikonFl7.FlashSource Byte 1 0 None Exif.NikonFl7.ExternalFlashFirmware Short 1 0 n/a -Exif.NikonFl7.ExternalFlashData1 Byte 1 0 No external flash zoom override, external flash not attached -Exif.NikonFl7.ExternalFlashData2 Byte 1 0 n/a -Exif.NikonFl7.FlashCompensation SByte 1 0 0 +Exif.NikonFl7.ExternalFlashData1 Byte 1 0 External flash off +Exif.NikonFl7.ExternalFlashData2 Byte 1 0 Off +Exif.NikonFl7.FlashCompensationMaster Byte 1 0 n/a Exif.NikonFl7.FlashFocalLength Byte 1 0 n/a Exif.NikonFl7.RepeatingFlashRate Byte 1 0 n/a Exif.NikonFl7.RepeatingFlashCount Byte 1 0 n/a -Exif.NikonFl7.FlashGNDistance Byte 1 0 None +Exif.NikonFl7.FlashGNDistance Byte 1 0 n/a +Exif.NikonFl7.FlashColorFilter Byte 1 0 None Exif.NikonFl7.FlashGroupAControlData Byte 1 0 Off Exif.NikonFl7.FlashGroupBCControlData Byte 1 0 Off, Off -Exif.NikonFl7.FlashGroupAData Byte 1 0 0 -Exif.NikonFl7.FlashGroupBData Byte 1 0 0 -Exif.NikonFl7.FlashGroupCData Byte 1 0 0 +Exif.NikonFl7.FlashCompensationGroupA Byte 1 0 n/a +Exif.NikonFl7.FlashCompensationGroupB Byte 1 0 n/a +Exif.NikonFl7.FlashCompensationGroupC Byte 1 0 n/a +Exif.NikonFl7.ExternalFlashData3 Byte 1 0 Exposure Comp.: Entire frame +Exif.NikonFl7.CameraFlashOutput Byte 1 0 0.0 EV +Exif.NikonFl7.CameraExposureCompensation Byte 1 0 0.0 EV +Exif.NikonFl7.CameraFlashCompensation Byte 1 0 0.0 EV +Exif.NikonFl7.ExternalFlashData4 Byte 1 0 Illumination Pat.: Standard +Exif.NikonFl7.FlashZoomHeadPosition Byte 1 0 n/a +Exif.NikonFl7.FlashMasterOutput Byte 1 0 n/a +Exif.NikonFl7.FlashGroupAOutput Byte 1 0 n/a +Exif.NikonFl7.FlashGroupBOutput Byte 1 0 n/a +Exif.NikonFl7.FlashGroupCOutput Byte 1 0 n/a Exif.Nikon3.VariProgram Ascii 16 Exif.NikonMe.Version Undefined 4 48 49 48 48 1.00 Exif.NikonMe.MultiExposureMode Long 1 0 Off diff --git a/test/data/test_reference_files/issue_ghsa_5p8g_9xf3_gfrr_poc.exv.out b/test/data/test_reference_files/issue_ghsa_5p8g_9xf3_gfrr_poc.exv.out index 1cce7fe9..07857c59 100644 --- a/test/data/test_reference_files/issue_ghsa_5p8g_9xf3_gfrr_poc.exv.out +++ b/test/data/test_reference_files/issue_ghsa_5p8g_9xf3_gfrr_poc.exv.out @@ -43,7 +43,28 @@ Exif.Nikon3.FlashBracketComp Undefined 4 0 1 6 0 0.0 EV Exif.Nikon3.FlashComp Undefined 4 0 1 6 0 0.0 EV Exif.Nikon3.FlashDevice Ascii 20 Exif.Nikon3.FlashExposureComp Undefined 4 0 1 6 0 0.0 EV -Exif.Nikon3.FlashInfo Undefined 49 48 49 48 54 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 49 48 54 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Exif.NikonFl6.Version Undefined 4 48 49 48 54 1.06 +Exif.NikonFl6.FlashSource Byte 1 0 None +Exif.NikonFl6.ExternalFlashFirmware Short 1 0 n/a +Exif.NikonFl6.ExternalFlashData1 Byte 1 0 Did not fire +Exif.NikonFl6.ExternalFlashData2 Byte 1 0 External flash off +Exif.NikonFl6.FlashCompensationMaster Byte 1 0 n/a +Exif.NikonFl6.FlashFocalLength Byte 1 0 n/a +Exif.NikonFl6.RepeatingFlashRate Byte 1 0 n/a +Exif.NikonFl6.RepeatingFlashCount Byte 1 0 n/a +Exif.NikonFl6.FlashGNDistance Byte 1 0 n/a +Exif.NikonFl6.FlashColorFilter Byte 1 0 None +Exif.NikonFl6.FlashGroupAControlData Byte 1 0 Off +Exif.NikonFl6.FlashGroupBCControlData Byte 1 0 Off, Off +Exif.NikonFl6.FlashCompensationGroupA Byte 1 0 n/a +Exif.NikonFl6.FlashCompensationGroupB Byte 1 0 n/a +Exif.NikonFl6.FlashCompensationGroupC Byte 1 0 n/a +Exif.NikonFl6.CameraExposureCompensation Byte 1 0 0.0 EV +Exif.NikonFl6.CameraFlashCompensation Byte 1 0 0.0 EV +Exif.NikonFl6.FlashMasterOutput Byte 1 0 n/a +Exif.NikonFl6.FlashGroupAOutput Byte 1 0 n/a +Exif.NikonFl6.FlashGroupBOutput Byte 1 0 n/a +Exif.NikonFl6.FlashGroupCOutput Byte 1 0 n/a Exif.Nikon3.FlashMode Byte 1 0 Did not fire Exif.Nikon3.FlashSetting Ascii 13 Exif.Nikon3.Focus Ascii 7 AF-A Automatic diff --git a/test/data/test_reference_files/issue_ghsa_5p8g_9xf3_gfrr_poc.webp.out b/test/data/test_reference_files/issue_ghsa_5p8g_9xf3_gfrr_poc.webp.out index 1cce7fe9..07857c59 100644 --- a/test/data/test_reference_files/issue_ghsa_5p8g_9xf3_gfrr_poc.webp.out +++ b/test/data/test_reference_files/issue_ghsa_5p8g_9xf3_gfrr_poc.webp.out @@ -43,7 +43,28 @@ Exif.Nikon3.FlashBracketComp Undefined 4 0 1 6 0 0.0 EV Exif.Nikon3.FlashComp Undefined 4 0 1 6 0 0.0 EV Exif.Nikon3.FlashDevice Ascii 20 Exif.Nikon3.FlashExposureComp Undefined 4 0 1 6 0 0.0 EV -Exif.Nikon3.FlashInfo Undefined 49 48 49 48 54 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 49 48 54 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Exif.NikonFl6.Version Undefined 4 48 49 48 54 1.06 +Exif.NikonFl6.FlashSource Byte 1 0 None +Exif.NikonFl6.ExternalFlashFirmware Short 1 0 n/a +Exif.NikonFl6.ExternalFlashData1 Byte 1 0 Did not fire +Exif.NikonFl6.ExternalFlashData2 Byte 1 0 External flash off +Exif.NikonFl6.FlashCompensationMaster Byte 1 0 n/a +Exif.NikonFl6.FlashFocalLength Byte 1 0 n/a +Exif.NikonFl6.RepeatingFlashRate Byte 1 0 n/a +Exif.NikonFl6.RepeatingFlashCount Byte 1 0 n/a +Exif.NikonFl6.FlashGNDistance Byte 1 0 n/a +Exif.NikonFl6.FlashColorFilter Byte 1 0 None +Exif.NikonFl6.FlashGroupAControlData Byte 1 0 Off +Exif.NikonFl6.FlashGroupBCControlData Byte 1 0 Off, Off +Exif.NikonFl6.FlashCompensationGroupA Byte 1 0 n/a +Exif.NikonFl6.FlashCompensationGroupB Byte 1 0 n/a +Exif.NikonFl6.FlashCompensationGroupC Byte 1 0 n/a +Exif.NikonFl6.CameraExposureCompensation Byte 1 0 0.0 EV +Exif.NikonFl6.CameraFlashCompensation Byte 1 0 0.0 EV +Exif.NikonFl6.FlashMasterOutput Byte 1 0 n/a +Exif.NikonFl6.FlashGroupAOutput Byte 1 0 n/a +Exif.NikonFl6.FlashGroupBOutput Byte 1 0 n/a +Exif.NikonFl6.FlashGroupCOutput Byte 1 0 n/a Exif.Nikon3.FlashMode Byte 1 0 Did not fire Exif.Nikon3.FlashSetting Ascii 13 Exif.Nikon3.Focus Ascii 7 AF-A Automatic diff --git a/test/data/test_reference_files/pr_1994_poc1.jpg.out b/test/data/test_reference_files/pr_1994_poc1.jpg.out index 09bee54b..cf2eec20 100644 --- a/test/data/test_reference_files/pr_1994_poc1.jpg.out +++ b/test/data/test_reference_files/pr_1994_poc1.jpg.out @@ -123,7 +123,7 @@ Exif.NikonFl3.ExternalFlashFlags Byte 1 0 Fired Exif.NikonFl3.FlashFocalLength Byte 1 0 n/a Exif.NikonFl3.RepeatingFlashRate Byte 1 0 n/a Exif.NikonFl3.RepeatingFlashCount Byte 1 0 n/a -Exif.NikonFl3.FlashGNDistance Byte 1 0 None +Exif.NikonFl3.FlashGNDistance Byte 1 0 n/a Exif.NikonFl3.FlashColorFilter Byte 1 0 None Exif.Nikon3.VariProgram Ascii 16 Exif.NikonMe.Version Undefined 4 48 49 48 48 1.00 diff --git a/test/data/test_reference_files/pr_1994_poc2.jpg.out b/test/data/test_reference_files/pr_1994_poc2.jpg.out index 8ac2eb53..e5c01cb1 100644 --- a/test/data/test_reference_files/pr_1994_poc2.jpg.out +++ b/test/data/test_reference_files/pr_1994_poc2.jpg.out @@ -124,7 +124,7 @@ Exif.NikonFl3.ExternalFlashFlags Byte 1 0 Fired Exif.NikonFl3.FlashFocalLength Byte 1 0 n/a Exif.NikonFl3.RepeatingFlashRate Byte 1 0 n/a Exif.NikonFl3.RepeatingFlashCount Byte 1 0 n/a -Exif.NikonFl3.FlashGNDistance Byte 1 0 None +Exif.NikonFl3.FlashGNDistance Byte 1 0 n/a Exif.NikonFl3.FlashColorFilter Byte 1 0 None Exif.NikonMe.Version Undefined 4 48 49 48 48 1.00 Exif.NikonMe.MultiExposureMode Long 1 0 Off diff --git a/test/data/test_reference_files/test_issue_990.exv.out b/test/data/test_reference_files/test_issue_990.exv.out index b14b1197..7062d823 100644 --- a/test/data/test_reference_files/test_issue_990.exv.out +++ b/test/data/test_reference_files/test_issue_990.exv.out @@ -117,18 +117,29 @@ Exif.Nikon3.ShutterCount Long 1 34651 34651 Exif.NikonFl7.Version Undefined 4 48 49 48 55 1.07 Exif.NikonFl7.FlashSource Byte 1 0 None Exif.NikonFl7.ExternalFlashFirmware Short 1 0 n/a -Exif.NikonFl7.ExternalFlashData1 Byte 1 0 No external flash zoom override, external flash not attached -Exif.NikonFl7.ExternalFlashData2 Byte 1 0 n/a -Exif.NikonFl7.FlashCompensation SByte 1 0 0 +Exif.NikonFl7.ExternalFlashData1 Byte 1 0 External flash off +Exif.NikonFl7.ExternalFlashData2 Byte 1 0 Off +Exif.NikonFl7.FlashCompensationMaster Byte 1 0 n/a Exif.NikonFl7.FlashFocalLength Byte 1 0 n/a Exif.NikonFl7.RepeatingFlashRate Byte 1 0 n/a Exif.NikonFl7.RepeatingFlashCount Byte 1 0 n/a -Exif.NikonFl7.FlashGNDistance Byte 1 0 None +Exif.NikonFl7.FlashGNDistance Byte 1 0 n/a +Exif.NikonFl7.FlashColorFilter Byte 1 0 None Exif.NikonFl7.FlashGroupAControlData Byte 1 0 Off Exif.NikonFl7.FlashGroupBCControlData Byte 1 0 Off, Off -Exif.NikonFl7.FlashGroupAData Byte 1 0 0 -Exif.NikonFl7.FlashGroupBData Byte 1 0 0 -Exif.NikonFl7.FlashGroupCData Byte 1 0 0 +Exif.NikonFl7.FlashCompensationGroupA Byte 1 0 n/a +Exif.NikonFl7.FlashCompensationGroupB Byte 1 0 n/a +Exif.NikonFl7.FlashCompensationGroupC Byte 1 0 n/a +Exif.NikonFl7.ExternalFlashData3 Byte 1 0 Exposure Comp.: Entire frame +Exif.NikonFl7.CameraFlashOutput Byte 1 0 0.0 EV +Exif.NikonFl7.CameraExposureCompensation Byte 1 0 0.0 EV +Exif.NikonFl7.CameraFlashCompensation Byte 1 0 0.0 EV +Exif.NikonFl7.ExternalFlashData4 Byte 1 0 Illumination Pat.: Standard +Exif.NikonFl7.FlashZoomHeadPosition Byte 1 0 n/a +Exif.NikonFl7.FlashMasterOutput Byte 1 0 n/a +Exif.NikonFl7.FlashGroupAOutput Byte 1 0 n/a +Exif.NikonFl7.FlashGroupBOutput Byte 1 0 n/a +Exif.NikonFl7.FlashGroupCOutput Byte 1 0 n/a Exif.Nikon3.VariProgram Ascii 16 Exif.NikonMe.Version Undefined 4 48 49 48 48 1.00 Exif.NikonMe.MultiExposureMode Long 1 0 Off diff --git a/tests/bugfixes/github/test_issue_1941.py b/tests/bugfixes/github/test_issue_1941.py index d951bdf0..f4da62da 100644 --- a/tests/bugfixes/github/test_issue_1941.py +++ b/tests/bugfixes/github/test_issue_1941.py @@ -16,18 +16,30 @@ class TestNikonFl7GroupWithFlash(metaclass=CaseMeta): stdout = ["""Exif.NikonFl7.Version Undefined 4 1.08 Exif.NikonFl7.FlashSource Byte 1 External Exif.NikonFl7.ExternalFlashFirmware Short 1 5.01 (SB-900) -Exif.NikonFl7.ExternalFlashData1 Byte 1 No external flash zoom override, external flash attached -Exif.NikonFl7.ExternalFlashData2 Byte 1 n/a -Exif.NikonFl7.FlashCompensation SByte 1 0 +Exif.NikonFl7.ExternalFlashData1 Byte 1 External flash on, No external flash zoom override +Exif.NikonFl7.ExternalFlashData2 Byte 1 Off +Exif.NikonFl7.FlashCompensationMaster Byte 1 n/a Exif.NikonFl7.FlashFocalLength Byte 1 n/a Exif.NikonFl7.RepeatingFlashRate Byte 1 n/a Exif.NikonFl7.RepeatingFlashCount Byte 1 n/a -Exif.NikonFl7.FlashGNDistance Byte 1 None +Exif.NikonFl7.FlashGNDistance Byte 1 n/a +Exif.NikonFl7.FlashColorFilter Byte 1 None Exif.NikonFl7.FlashGroupAControlData Byte 1 Manual Exif.NikonFl7.FlashGroupBCControlData Byte 1 Off, Off -Exif.NikonFl7.FlashGroupAData Byte 1 4% -Exif.NikonFl7.FlashGroupBData Byte 1 0 -Exif.NikonFl7.FlashGroupCData Byte 1 0 +Exif.NikonFl7.FlashCompensationGroupA Byte 1 1/16 (-2/3 EV) +Exif.NikonFl7.FlashCompensationGroupB Byte 1 n/a +Exif.NikonFl7.FlashCompensationGroupC Byte 1 n/a +Exif.NikonFl7.ExternalFlashData3 Byte 1 Exposure Comp.: Entire frame +Exif.NikonFl7.CameraFlashOutput Byte 1 0.0 EV +Exif.NikonFl7.CameraExposureCompensation Byte 1 0.0 EV +Exif.NikonFl7.CameraFlashCompensation Byte 1 0.0 EV +Exif.NikonFl7.ExternalFlashData4 Byte 1 Illumination Pat.: Standard +Exif.NikonFl7.FlashZoomHeadPosition Byte 1 n/a +Exif.NikonFl7.FlashMasterOutput Byte 1 n/a +Exif.NikonFl7.FlashGroupAOutput Byte 1 1/16 (-2/3 EV) +Exif.NikonFl7.FlashGroupBOutput Byte 1 n/a +Exif.NikonFl7.FlashGroupCOutput Byte 1 n/a +Exif.NikonFl7.WirelessFlashData Byte 1 Optical AWL """] class TestNikonFl7GroupWithoutFlash(metaclass=CaseMeta): @@ -43,16 +55,27 @@ class TestNikonFl7GroupWithoutFlash(metaclass=CaseMeta): stdout = ["""Exif.NikonFl7.Version Undefined 4 1.07 Exif.NikonFl7.FlashSource Byte 1 None Exif.NikonFl7.ExternalFlashFirmware Short 1 n/a -Exif.NikonFl7.ExternalFlashData1 Byte 1 No external flash zoom override, external flash not attached -Exif.NikonFl7.ExternalFlashData2 Byte 1 n/a -Exif.NikonFl7.FlashCompensation SByte 1 0 +Exif.NikonFl7.ExternalFlashData1 Byte 1 External flash off +Exif.NikonFl7.ExternalFlashData2 Byte 1 Off +Exif.NikonFl7.FlashCompensationMaster Byte 1 n/a Exif.NikonFl7.FlashFocalLength Byte 1 n/a Exif.NikonFl7.RepeatingFlashRate Byte 1 n/a Exif.NikonFl7.RepeatingFlashCount Byte 1 n/a -Exif.NikonFl7.FlashGNDistance Byte 1 None +Exif.NikonFl7.FlashGNDistance Byte 1 n/a +Exif.NikonFl7.FlashColorFilter Byte 1 None Exif.NikonFl7.FlashGroupAControlData Byte 1 Off Exif.NikonFl7.FlashGroupBCControlData Byte 1 Off, Off -Exif.NikonFl7.FlashGroupAData Byte 1 0 -Exif.NikonFl7.FlashGroupBData Byte 1 0 -Exif.NikonFl7.FlashGroupCData Byte 1 0 +Exif.NikonFl7.FlashCompensationGroupA Byte 1 n/a +Exif.NikonFl7.FlashCompensationGroupB Byte 1 n/a +Exif.NikonFl7.FlashCompensationGroupC Byte 1 n/a +Exif.NikonFl7.ExternalFlashData3 Byte 1 Exposure Comp.: Entire frame +Exif.NikonFl7.CameraFlashOutput Byte 1 0.0 EV +Exif.NikonFl7.CameraExposureCompensation Byte 1 0.0 EV +Exif.NikonFl7.CameraFlashCompensation Byte 1 0.0 EV +Exif.NikonFl7.ExternalFlashData4 Byte 1 Illumination Pat.: Standard +Exif.NikonFl7.FlashZoomHeadPosition Byte 1 n/a +Exif.NikonFl7.FlashMasterOutput Byte 1 n/a +Exif.NikonFl7.FlashGroupAOutput Byte 1 n/a +Exif.NikonFl7.FlashGroupBOutput Byte 1 n/a +Exif.NikonFl7.FlashGroupCOutput Byte 1 n/a """] diff --git a/tests/bugfixes/github/test_pr_1994.py b/tests/bugfixes/github/test_pr_1994.py index b24df704..4a6c7ff1 100644 --- a/tests/bugfixes/github/test_pr_1994.py +++ b/tests/bugfixes/github/test_pr_1994.py @@ -20,7 +20,7 @@ Exif.NikonFl3.ExternalFlashFlags Byte 1 Fired Exif.NikonFl3.FlashFocalLength Byte 1 n/a Exif.NikonFl3.RepeatingFlashRate Byte 1 n/a Exif.NikonFl3.RepeatingFlashCount Byte 1 n/a -Exif.NikonFl3.FlashGNDistance Byte 1 None +Exif.NikonFl3.FlashGNDistance Byte 1 n/a Exif.NikonFl3.FlashColorFilter Byte 1 None """, """Exif.NikonFl3.Version Undefined 4 1.05 @@ -30,7 +30,7 @@ Exif.NikonFl3.ExternalFlashFlags Byte 1 Fired Exif.NikonFl3.FlashFocalLength Byte 1 n/a Exif.NikonFl3.RepeatingFlashRate Byte 1 n/a Exif.NikonFl3.RepeatingFlashCount Byte 1 n/a -Exif.NikonFl3.FlashGNDistance Byte 1 None +Exif.NikonFl3.FlashGNDistance Byte 1 n/a Exif.NikonFl3.FlashColorFilter Byte 1 None """] stderr = [""]*2