From 4915a6ba8c6c9c3d70c0e1c4e96d4ae27c33b398 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milo=C5=A1=20Komar=C4=8Devi=C4=87?= Date: Wed, 9 Nov 2022 16:17:38 +0100 Subject: [PATCH 1/5] CI: improved in-progress job canceling --- .github/workflows/cifuzz.yml | 2 +- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/nightly_Linux_distributions.yml | 2 +- .github/workflows/on_PR_linux_fuzz.yml | 2 +- .github/workflows/on_PR_linux_matrix.yml | 2 +- .github/workflows/on_PR_linux_special_builds.yml | 2 +- .github/workflows/on_PR_linux_staticAnalysis.yml | 2 +- .github/workflows/on_PR_mac_matrix.yml | 2 +- .github/workflows/on_PR_mac_special_builds.yml | 2 +- .github/workflows/on_PR_windows_matrix.yml | 2 +- .github/workflows/on_push_BasicWinLinMac.yml | 2 +- .github/workflows/on_push_ExtraJobsForMain.yml | 2 +- .github/workflows/on_push_clang_format.yml | 2 +- .github/workflows/release.yml | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/cifuzz.yml b/.github/workflows/cifuzz.yml index 2b4b08e5c9..19ca813180 100644 --- a/.github/workflows/cifuzz.yml +++ b/.github/workflows/cifuzz.yml @@ -3,7 +3,7 @@ name: CIFuzz concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true on: pull_request: diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index c68a85c200..57cca124be 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -6,7 +6,7 @@ name: "CodeQL" concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true on: diff --git a/.github/workflows/nightly_Linux_distributions.yml b/.github/workflows/nightly_Linux_distributions.yml index eabf655af2..da184f9f6b 100644 --- a/.github/workflows/nightly_Linux_distributions.yml +++ b/.github/workflows/nightly_Linux_distributions.yml @@ -7,7 +7,7 @@ on: - cron: 0 4 * * * concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true name: Nightly - Linux distributions diff --git a/.github/workflows/on_PR_linux_fuzz.yml b/.github/workflows/on_PR_linux_fuzz.yml index 32bf2988b4..1c19673a92 100644 --- a/.github/workflows/on_PR_linux_fuzz.yml +++ b/.github/workflows/on_PR_linux_fuzz.yml @@ -5,7 +5,7 @@ name: On PRs - Linux-Ubuntu Quick Fuzz concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true on: diff --git a/.github/workflows/on_PR_linux_matrix.yml b/.github/workflows/on_PR_linux_matrix.yml index b7b621c2fd..3800efa8eb 100644 --- a/.github/workflows/on_PR_linux_matrix.yml +++ b/.github/workflows/on_PR_linux_matrix.yml @@ -1,7 +1,7 @@ name: On PRs - Linux-Ubuntu Matrix concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true on: diff --git a/.github/workflows/on_PR_linux_special_builds.yml b/.github/workflows/on_PR_linux_special_builds.yml index 6d695418ae..1f7ac1d091 100644 --- a/.github/workflows/on_PR_linux_special_builds.yml +++ b/.github/workflows/on_PR_linux_special_builds.yml @@ -1,7 +1,7 @@ name: On PRs - Linux Special Builds concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true on: diff --git a/.github/workflows/on_PR_linux_staticAnalysis.yml b/.github/workflows/on_PR_linux_staticAnalysis.yml index 4d9f0e2a46..5d2dd8c896 100644 --- a/.github/workflows/on_PR_linux_staticAnalysis.yml +++ b/.github/workflows/on_PR_linux_staticAnalysis.yml @@ -1,7 +1,7 @@ name: On PRs - Linux - Static Analysis concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true on: diff --git a/.github/workflows/on_PR_mac_matrix.yml b/.github/workflows/on_PR_mac_matrix.yml index a8167d767f..89d57d2355 100644 --- a/.github/workflows/on_PR_mac_matrix.yml +++ b/.github/workflows/on_PR_mac_matrix.yml @@ -1,7 +1,7 @@ name: On PRs - Mac Matrix concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true on: diff --git a/.github/workflows/on_PR_mac_special_builds.yml b/.github/workflows/on_PR_mac_special_builds.yml index 705dbdaf7f..6ae213ec6a 100644 --- a/.github/workflows/on_PR_mac_special_builds.yml +++ b/.github/workflows/on_PR_mac_special_builds.yml @@ -1,7 +1,7 @@ name: On PRs - Mac Special Builds concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true on: diff --git a/.github/workflows/on_PR_windows_matrix.yml b/.github/workflows/on_PR_windows_matrix.yml index 491c26071b..79785ebb6f 100644 --- a/.github/workflows/on_PR_windows_matrix.yml +++ b/.github/workflows/on_PR_windows_matrix.yml @@ -1,7 +1,7 @@ name: On PRs - Windows Matrix concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true on: diff --git a/.github/workflows/on_push_BasicWinLinMac.yml b/.github/workflows/on_push_BasicWinLinMac.yml index 5eff0c1e6b..1b677000b1 100644 --- a/.github/workflows/on_push_BasicWinLinMac.yml +++ b/.github/workflows/on_push_BasicWinLinMac.yml @@ -9,7 +9,7 @@ on: - "*.md" concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true name: On PUSH - Basic CI for main platforms diff --git a/.github/workflows/on_push_ExtraJobsForMain.yml b/.github/workflows/on_push_ExtraJobsForMain.yml index c33b6911ba..64efd3e583 100644 --- a/.github/workflows/on_push_ExtraJobsForMain.yml +++ b/.github/workflows/on_push_ExtraJobsForMain.yml @@ -1,7 +1,7 @@ name: On PUSH - Linux Special Builds for main branch concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true on: diff --git a/.github/workflows/on_push_clang_format.yml b/.github/workflows/on_push_clang_format.yml index 2f7132e766..937e8efe19 100644 --- a/.github/workflows/on_push_clang_format.yml +++ b/.github/workflows/on_push_clang_format.yml @@ -1,6 +1,6 @@ name: Clang Format Checker concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true on: [push, pull_request] jobs: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 788c58ff6c..a70c188560 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,6 +1,6 @@ name: Release concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true on: push: From 66b009a57b29861457312c7c36b95c9a5f297447 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milo=C5=A1=20Komar=C4=8Devi=C4=87?= Date: Wed, 9 Nov 2022 16:23:57 +0100 Subject: [PATCH 2/5] CI: bump conan version --- .github/workflows/on_PR_linux_matrix.yml | 2 +- .github/workflows/on_PR_linux_special_builds.yml | 8 ++++---- .github/workflows/on_PR_linux_staticAnalysis.yml | 2 +- .github/workflows/on_PR_windows_matrix.yml | 2 +- .github/workflows/on_push_BasicWinLinMac.yml | 4 ++-- .github/workflows/on_push_ExtraJobsForMain.yml | 2 +- .github/workflows/release.yml | 4 ++-- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/on_PR_linux_matrix.yml b/.github/workflows/on_PR_linux_matrix.yml index 3800efa8eb..95fbc9f806 100644 --- a/.github/workflows/on_PR_linux_matrix.yml +++ b/.github/workflows/on_PR_linux_matrix.yml @@ -26,7 +26,7 @@ jobs: - name: install dependencies run: | sudo apt-get install ninja-build - pip3 install conan==1.52.0 + pip3 install conan==1.54.0 - name: Conan common config run: | diff --git a/.github/workflows/on_PR_linux_special_builds.yml b/.github/workflows/on_PR_linux_special_builds.yml index 1f7ac1d091..a3197edbe1 100644 --- a/.github/workflows/on_PR_linux_special_builds.yml +++ b/.github/workflows/on_PR_linux_special_builds.yml @@ -24,7 +24,7 @@ jobs: - name: install dependencies run: | sudo apt-get install ninja-build - pip3 install conan==1.52.0 + pip3 install conan==1.54.0 pip3 install gcovr - name: Conan common config @@ -70,7 +70,7 @@ jobs: - name: install dependencies run: | sudo apt-get install valgrind ninja-build - pip3 install conan==1.52.0 + pip3 install conan==1.54.0 - name: Conan common config run: | @@ -105,7 +105,7 @@ jobs: - name: install dependencies run: | sudo apt-get install ninja-build - pip3 install conan==1.52.0 + pip3 install conan==1.54.0 - name: Conan common config run: | @@ -139,7 +139,7 @@ jobs: - name: install dependencies run: | sudo apt-get install valgrind doxygen graphviz gettext ninja-build - pip3 install conan==1.52.0 + pip3 install conan==1.54.0 - name: Conan common config run: | diff --git a/.github/workflows/on_PR_linux_staticAnalysis.yml b/.github/workflows/on_PR_linux_staticAnalysis.yml index 5d2dd8c896..89cb75b0d9 100644 --- a/.github/workflows/on_PR_linux_staticAnalysis.yml +++ b/.github/workflows/on_PR_linux_staticAnalysis.yml @@ -23,7 +23,7 @@ jobs: - name: install dependencies run: | - pip3 install conan==1.52.0 + pip3 install conan==1.54.0 sudo add-apt-repository ppa:ubuntu-lxc/daily -y wget -q -O - https://files.pvs-studio.com/etc/pubkey.txt |sudo apt-key add - sudo wget -O /etc/apt/sources.list.d/viva64.list https://files.pvs-studio.com/etc/viva64.list diff --git a/.github/workflows/on_PR_windows_matrix.yml b/.github/workflows/on_PR_windows_matrix.yml index 79785ebb6f..88acf0d1b0 100644 --- a/.github/workflows/on_PR_windows_matrix.yml +++ b/.github/workflows/on_PR_windows_matrix.yml @@ -54,7 +54,7 @@ jobs: - name: Install Conan & Common config run: | - pip.exe install "conan==1.52.0" + pip.exe install "conan==1.54.0" conan config install https://github.com/conan-io/conanclientcert.git conan profile new --detect default conan profile update settings.build_type=${{matrix.build_type}} default diff --git a/.github/workflows/on_push_BasicWinLinMac.yml b/.github/workflows/on_push_BasicWinLinMac.yml index 1b677000b1..e7a20832c4 100644 --- a/.github/workflows/on_push_BasicWinLinMac.yml +++ b/.github/workflows/on_push_BasicWinLinMac.yml @@ -45,7 +45,7 @@ jobs: - name: Install Conan & Common config run: | - pip.exe install "conan==1.52.0" + pip.exe install "conan==1.54.0" conan profile new --detect default conan profile show default conan profile update settings.compiler="Visual Studio" default @@ -73,7 +73,7 @@ jobs: - name: install dependencies run: | sudo apt-get install ninja-build - pip3 install conan==1.52.0 + pip3 install conan==1.54.0 - name: Conan run: | diff --git a/.github/workflows/on_push_ExtraJobsForMain.yml b/.github/workflows/on_push_ExtraJobsForMain.yml index 64efd3e583..33572f8b2d 100644 --- a/.github/workflows/on_push_ExtraJobsForMain.yml +++ b/.github/workflows/on_push_ExtraJobsForMain.yml @@ -25,7 +25,7 @@ jobs: - name: install dependencies run: | sudo apt-get install ninja-build - pip3 install conan==1.52.0 + pip3 install conan==1.54.0 pip3 install gcovr - name: Conan common config diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a70c188560..b93cae25dc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,7 +25,7 @@ jobs: - name: Install dependencies run: | sudo apt-get install ninja-build gettext doxygen graphviz - pip3 install conan==1.52.0 + pip3 install conan==1.54.0 - name: Conan common config run: | @@ -123,7 +123,7 @@ jobs: - name: Install Conan & Common config run: | - pip.exe install "conan==1.52.0" + pip.exe install "conan==1.54.0" conan profile new --detect default conan profile show default conan profile update settings.build_type=Release default From 74e41d982de080562e6866367e159acc30733006 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milo=C5=A1=20Komar=C4=8Devi=C4=87?= Date: Wed, 9 Nov 2022 16:44:47 +0100 Subject: [PATCH 3/5] CI: bump clang-format actions --- .github/workflows/on_push_clang_format.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/on_push_clang_format.yml b/.github/workflows/on_push_clang_format.yml index 937e8efe19..b7846eae77 100644 --- a/.github/workflows/on_push_clang_format.yml +++ b/.github/workflows/on_push_clang_format.yml @@ -7,8 +7,8 @@ jobs: clang-format-checking: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: DoozyX/clang-format-lint-action@v0.13 + - uses: actions/checkout@v3 + - uses: DoozyX/clang-format-lint-action@v0.14 with: source: '.' exclude: './xmpsdk ./contrib' From 83d7915d00c377f145de2433219052979a6bf5d8 Mon Sep 17 00:00:00 2001 From: Peter Date: Sun, 13 Nov 2022 08:56:49 +0000 Subject: [PATCH 4/5] Update `Exif.SonyMisc3c.*` and `Exif.Sony(1|2).SonyModelID` (#2420) * Update `Exif.SonyMisc3c group` * Update `Exif.Sony(1|2).SonyModelID` --- src/makernote_int.cpp | 17 +++---- src/sonymn_int.cpp | 101 +++++++++++++++++++----------------------- 2 files changed, 55 insertions(+), 63 deletions(-) diff --git a/src/makernote_int.cpp b/src/makernote_int.cpp index e58ffc9d6e..79a99b0fd8 100644 --- a/src/makernote_int.cpp +++ b/src/makernote_int.cpp @@ -993,8 +993,8 @@ int sonyMisc2bSelector(uint16_t /*tag*/, const byte* /*pData*/, size_t /*size*/, return -1; } int sonyMisc3cSelector(uint16_t /*tag*/, const byte* /*pData*/, size_t /*size*/, TiffComponent* pRoot) { - // From Exiftool (Tag 9400c): https://github.com/exiftool/exiftool/blob/master/lib/Image/ExifTool/Sony.pm - // > first byte decoded: 62, 48, 215, 28, 106 respectively + // For condition, see Exiftool (Tag 9400c): + // https://github.com/exiftool/exiftool/blob/7368629751669ba170511419b3d1e05bf0076d0e/lib/Image/ExifTool/Sony.pm#L1681 // Get the value from the image format that is being used auto value = getExifValue(pRoot, 0x9400, Exiv2::IfdId::sony1Id); @@ -1007,12 +1007,13 @@ int sonyMisc3cSelector(uint16_t /*tag*/, const byte* /*pData*/, size_t /*size*/, if (value->count() < 1) return -1; - switch (value->toInt64()) { // Using encrypted values - case 35: // 35 == 62 - case 36: // 36 == 48 - case 38: // 38 == 215 - case 40: // 40 == 28 - case 49: // 112 == 106 + switch (value->toInt64()) { + case 35: + case 36: + case 38: + case 40: + case 49: + case 50: return 0; default: break; diff --git a/src/sonymn_int.cpp b/src/sonymn_int.cpp index ef90c78742..0b9cc01db0 100644 --- a/src/sonymn_int.cpp +++ b/src/sonymn_int.cpp @@ -430,6 +430,7 @@ constexpr TagDetails sonyModelId[] = {{0, N_("Multiple camera models")}, {387, "ILCE-7RM4A"}, {388, "ILCE-7M4"}, {389, "ZV-1F"}, + {390, "ILCE-7RM5"}, {391, "ILME-FX30"}}; //! Lookup table to translate Sony creative style (main group) values to readable labels @@ -2020,6 +2021,13 @@ constexpr TagDetails sonyMisc3cSequenceLength2[] = {{0, N_("Continuous")}, {1, N constexpr TagDetails sonyMisc3cCameraOrientation[] = { {1, N_("Horizontal (normal)")}, {3, N_("Rotate 180°")}, {6, N_("Rotate 90° CW")}, {8, N_("Rotate 270° CW")}}; +//! Lookup table to translate SonyMisc3c Quality2 (a) values to readable labels +constexpr TagDetails sonyMisc3cQuality2a[] = { + {1, "JPEG"}, {2, "Raw"}, {3, "Raw + JPEG"}, {4, "HEIF"}, {6, "Raw + HEIF"}}; + +//! Lookup table to translate SonyMisc3c Quality2 (b) values to readable labels +constexpr TagDetails sonyMisc3cQuality2b[] = {{0, "JPEG"}, {1, "Raw"}, {2, "Raw + JPEG"}, {3, "Raw + MPO"}}; + //! SonyMisc3c tags (Tag 9400c) constexpr TagInfo SonyMakerNote::tagInfoSonyMisc3c_[] = { {9, "ReleaseMode2", N_("Release mode 2"), N_("Release mode 2"), IfdId::sonyMisc3cId, SectionId::makerTags, @@ -2029,12 +2037,12 @@ constexpr TagInfo SonyMakerNote::tagInfoSonyMisc3c_[] = { unsignedLong, -1, printSonyMisc3cShotNumberSincePowerUp}, {18, "SequenceImageNumber", N_("Sequence image number"), N_("Number of images captured in burst sequence"), IfdId::sonyMisc3cId, SectionId::makerTags, unsignedLong, -1, printSonyMisc3cSequenceNumber}, - // In Exiftool, "SequenceLength1" is called "SequenceLength. Renamed due to clash of names." + // In Exiftool, "SequenceLength1" is called "SequenceLength (22). Renamed due to clash of names." {22, "SequenceLength1", N_("Sequence length 1"), N_("Length of the sequence of photos taken"), IfdId::sonyMisc3cId, SectionId::makerTags, unsignedByte, -1, EXV_PRINT_TAG(sonyMisc3cSequenceLength1)}, {26, "SequenceFileNumber", N_("Sequence file number"), N_("File number in burst sequence"), IfdId::sonyMisc3cId, SectionId::makerTags, unsignedLong, -1, printSonyMisc3cSequenceNumber}, - // In Exiftool, "SequenceLength2" is called "SequenceLength". Renamed due to clash of names." + // In Exiftool, "SequenceLength2" is called "SequenceLength" (30). Renamed due to clash of names." {30, "SequenceLength2", N_("Sequence length 2"), N_("Length of the sequence of photos taken"), IfdId::sonyMisc3cId, SectionId::makerTags, unsignedByte, -1, EXV_PRINT_TAG(sonyMisc3cSequenceLength2)}, {41, "CameraOrientation", N_("Camera orientation"), N_("Orientation of the camera when the photo was taken"), @@ -2056,7 +2064,7 @@ const TagInfo* SonyMakerNote::tagListSonyMisc3c() { std::ostream& SonyMakerNote::printSonyMisc3cShotNumberSincePowerUp(std::ostream& os, const Value& value, const ExifData* metadata) { - if (value.count() != 1) + if (value.count() != 1 || value.typeId() != unsignedLong) return os << "(" << value << ")"; std::string model; @@ -2065,27 +2073,29 @@ std::ostream& SonyMakerNote::printSonyMisc3cShotNumberSincePowerUp(std::ostream& return os; } - // Models that support this tag + // Tag only valid for certain camera models. See + // https://github.com/exiftool/exiftool/blob/7368629751669ba170511419b3d1e05bf0076d0e/lib/Image/ExifTool/Sony.pm#L8170 static constexpr auto models = std::array{ - "ILCA-68", "ILCA-77M2", "ILCA-99M2", "ILCE-5000", "ILCE-5100", "ILCE-6000", "ILCE-6300", - "ILCE-6500", "ILCE-7", "ILCE-7M2", "ILCE-7R", "ILCE-7RM2", "ILCE-7S", "ILCE-7SM2", - "ILCE-QX1", "DSC-HX350", "DSC-HX400V", "DSC-HX60V", "DSC-HX80", "DSC-HX90", "DSC-HX90V", - "DSC-QX30", "DSC-RX0", "DSC-RX1RM2", "DSC-RX10", "DSC-RX10M2", "DSC-RX10M3", "DSC-RX100M3", - "DSC-RX100M4", "DSC-RX100M5", "DSC-WX220", "DSC-WX350", "DSC-WX500", + "ILCA-68", "ILCA-77M2", "ILCA-99M2", "ILCE-5000", "ILCE-5100", "ILCE-6000", "ILCE-6300", + "ILCE-6500", "ILCE-7", "ILCE-7M2", "ILCE-7R", "ILCE-7RM2", "ILCE-7S", "ILCE-7SM2", + "ILCE-7SM5", "ILCE-QX1", "DSC-HX350", "DSC-HX400V", "DSC-HX60V", "DSC-HX80", "DSC-HX90", + "DSC-HX90V", "DSC-QX30", "DSC-RX0", "DSC-RX1RM2", "DSC-RX10", "DSC-RX10M2", "DSC-RX10M3", + "DSC-RX100M3", "DSC-RX100M4", "DSC-RX100M5", "DSC-WX220", "DSC-WX350", "DSC-WX500", }; - bool f = std::find(models.begin(), models.end(), model) != models.end(); - if (f) + if (std::any_of(models.begin(), models.end(), [&model](auto& m) { return (model == m); })) { return os << value.toInt64(); + } return os << N_("n/a"); } std::ostream& SonyMakerNote::printSonyMisc3cSequenceNumber(std::ostream& os, const Value& value, const ExifData*) { - return (value.count() != 1) ? os << "(" << value << ")" : os << (value.toInt64() + 1); + return (value.count() != 1 || value.typeId() != unsignedLong) ? os << "(" << value << ")" + : os << (value.toInt64() + 1); } std::ostream& SonyMakerNote::printSonyMisc3cQuality2(std::ostream& os, const Value& value, const ExifData* metadata) { - if (value.count() != 1) + if (value.count() != 1 || value.typeId() != unsignedByte) return os << "(" << value << ")"; std::string model; @@ -2096,44 +2106,21 @@ std::ostream& SonyMakerNote::printSonyMisc3cQuality2(std::ostream& os, const Val const auto val = value.toInt64(); - // Value is interpreted differently if model is in list or not - for (auto& m : {"ILCE-1", "ILCE-7SM3", "ILME-FX3"}) { - if (m == model) { - switch (val) { - case 1: - return os << N_("JPEG"); - case 2: - return os << N_("Raw"); - case 3: - return os << N_("Raw + JPEG"); - case 4: - return os << N_("HEIF"); - case 6: - return os << N_("Raw + HEIF"); - default: - return os << "(" << val << ")"; - } - } - } + // Tag only valid for certain camera models. See + // https://github.com/exiftool/exiftool/blob/7368629751669ba170511419b3d1e05bf0076d0e/lib/Image/ExifTool/Sony.pm#L8219 + constexpr std::array models{"ILCE-1", "ILCE-7M4", "ILCE-7RM5", "ILCE-7SM3", "ILME-FX3"}; - switch (val) { - case 0: - return os << N_("JPEG"); - case 1: - return os << N_("Raw"); - case 2: - return os << N_("Raw + JPEG"); - case 3: - return os << N_("Raw + MPO"); - default: - os << "(" << val << ")"; + if (std::any_of(models.begin(), models.end(), [&model](auto& m) { return (model == m); })) { + EXV_PRINT_TAG(sonyMisc3cQuality2a)(os, val, metadata); + return os; } - return os; + + return EXV_PRINT_TAG(sonyMisc3cQuality2b)(os, val, metadata); } std::ostream& SonyMakerNote::printSonyMisc3cSonyImageHeight(std::ostream& os, const Value& value, const ExifData* metadata) { - if (value.count() != 1) + if (value.count() != 1 || value.typeId() != unsignedShort) return os << "(" << value << ")"; std::string model; @@ -2142,19 +2129,21 @@ std::ostream& SonyMakerNote::printSonyMisc3cSonyImageHeight(std::ostream& os, co return os; } - // Models that do not support this tag - const auto models = std::array{"ILCE-1", "ILCE-7SM3", "ILME-FX3"}; - bool f = std::find(models.begin(), models.end(), model) != models.end(); - if (f) - return os << N_("n/a"); + // Tag only valid for certain camera models. See + // https://github.com/exiftool/exiftool/blob/7368629751669ba170511419b3d1e05bf0076d0e/lib/Image/ExifTool/Sony.pm#L8239 + constexpr std::array models{"ILCE-1", "ILCE-7M4", "ILCE-7RM5", "ILCE-7SM3", "ILME-FX3"}; + if (std::any_of(models.begin(), models.end(), [&model](auto& m) { return (model == m); })) { + return os << N_("n/a"); + } const auto val = value.toInt64(); + return val > 0 ? os << (8 * val) : os << N_("n/a"); } std::ostream& SonyMakerNote::printSonyMisc3cModelReleaseYear(std::ostream& os, const Value& value, const ExifData* metadata) { - if (value.count() != 1) + if (value.count() != 1 || value.typeId() != unsignedByte) return os << "(" << value << ")"; std::string model; @@ -2163,11 +2152,13 @@ std::ostream& SonyMakerNote::printSonyMisc3cModelReleaseYear(std::ostream& os, c return os; } - // Models that do not support this tag - const auto models = std::array{"ILCE-1", "ILCE-7SM3", "ILME-FX3"}; - bool f = std::find(models.begin(), models.end(), model) != models.end(); - if (f) + // Tag only valid for certain camera models. See + // https://github.com/exiftool/exiftool/blob/7368629751669ba170511419b3d1e05bf0076d0e/lib/Image/ExifTool/Sony.pm#L8245 + constexpr std::array models{"ILCE-1", "ILCE-7M4", "ILCE-7RM5", "ILCE-7SM3", "ILME-FX3"}; + + if (std::any_of(models.begin(), models.end(), [&model](auto& m) { return (model == m); })) { return os << N_("n/a"); + } const auto val = value.toInt64(); if (val > 99) From 74720d8044e90f64aeac8141fc07f2db1cae6798 Mon Sep 17 00:00:00 2001 From: norbertwg Date: Sun, 13 Nov 2022 20:26:57 +0100 Subject: [PATCH 5/5] Remove duplicate tag info entries fujifilm (#2412) * remove duplicate Fuijifilm TagInfo entries * test data added for some Fujifilm tags * remove unknown tag 0x1200 * fix typo: SzeneRecognition to SceneRecognition --- src/fujimn_int.cpp | 78 +-------------- test/data/FujiFilmA850.exv | Bin 0 -> 9269 bytes test/data/FujiFilmFinePixF550EXR.exv | Bin 0 -> 14969 bytes test/data/FujiSLP800.exv | Bin 0 -> 11017 bytes .../test_reference_files/FujiFilmA850.exv.out | 81 +++++++++++++++ .../FujiFilmFinePixF550EXR.exv.out | 94 ++++++++++++++++++ .../test_reference_files/FujiSLP800.exv.out | 37 +++++++ 7 files changed, 213 insertions(+), 77 deletions(-) create mode 100644 test/data/FujiFilmA850.exv create mode 100644 test/data/FujiFilmFinePixF550EXR.exv create mode 100644 test/data/FujiSLP800.exv create mode 100644 test/data/test_reference_files/FujiFilmA850.exv.out create mode 100644 test/data/test_reference_files/FujiFilmFinePixF550EXR.exv.out create mode 100644 test/data/test_reference_files/FujiSLP800.exv.out diff --git a/src/fujimn_int.cpp b/src/fujimn_int.cpp index 6b66df4dfb..7a8f916182 100644 --- a/src/fujimn_int.cpp +++ b/src/fujimn_int.cpp @@ -465,7 +465,6 @@ constexpr TagInfo FujiMakerNote::tagInfo_[] = { unsignedShort, -1, printValue}, {0x1154, "PanoramaDirection", N_("Panorama direction"), N_("Panorama direction"), IfdId::fujiId, SectionId::makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiPanoramaDirection)}, - {0x1200, "0x1200", "0x1200", N_("Unknown"), IfdId::fujiId, SectionId::makerTags, unsignedShort, -1, printValue}, {0x1201, "AdvancedFilter", N_("Advanced filter"), N_("Advanced filter setting"), IfdId::fujiId, SectionId::makerTags, unsignedLong, -1, EXV_PRINT_TAG(fujiAdvancedFilter)}, {0x1210, "FinePixColor", N_("FinePix Color"), N_("Fuji FinePix color setting"), IfdId::fujiId, SectionId::makerTags, @@ -496,7 +495,7 @@ constexpr TagInfo FujiMakerNote::tagInfo_[] = { SectionId::makerTags, unsignedShort, -1, printValue}, {0x1422, "ImageStabilization", N_("Image Stabilization"), N_("Image stabilization"), IfdId::fujiId, SectionId::makerTags, unsignedShort, -1, printValue}, - {0x1425, "SzeneRecognition", N_("Scene recognition"), N_("Scene recognition"), IfdId::fujiId, SectionId::makerTags, + {0x1425, "SceneRecognition", N_("Scene recognition"), N_("Scene recognition"), IfdId::fujiId, SectionId::makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiSceneRecognition)}, {0x1431, "Rating", N_("Rating"), N_("Rating"), IfdId::fujiId, SectionId::makerTags, unsignedLong, -1, printValue}, {0x1436, "ImageGeneration", N_("Image Generation"), N_("Image generation"), IfdId::fujiId, SectionId::makerTags, @@ -532,81 +531,6 @@ constexpr TagInfo FujiMakerNote::tagInfo_[] = { {0x8003, "FrameNumber", N_("Frame Number"), N_("Frame number"), IfdId::fujiId, SectionId::makerTags, unsignedShort, -1, printValue}, // #1402 - {0xf000, "FujiIFD", N_("FujiIFD"), N_("Fujifilm IFD"), IfdId::fujiId, SectionId::makerTags, undefined, -1, - printValue}, - {0xf001, "RawImageFullWidth", N_("Raw Image Full Width"), N_("Raw Image Full Width"), IfdId::fujiId, - SectionId::makerTags, undefined, -1, printValue}, - {0x1001, N_("Sharpness"), N_("Sharpness"), N_("Sharpness setting"), IfdId::fujiId, SectionId::makerTags, - unsignedShort, -1, EXV_PRINT_TAG(fujiSharpness)}, - {0x1002, "WhiteBalance", N_("White Balance"), N_("White balance setting"), IfdId::fujiId, SectionId::makerTags, - unsignedShort, -1, EXV_PRINT_TAG(fujiWhiteBalance)}, - {0x1003, "Color", N_("Color"), N_("Chroma saturation setting"), IfdId::fujiId, SectionId::makerTags, unsignedShort, - -1, EXV_PRINT_TAG(fujiColor)}, - {0x1004, "Tone", N_("Tone"), N_("Tone (contrast) setting"), IfdId::fujiId, SectionId::makerTags, unsignedShort, -1, - EXV_PRINT_TAG(fujiTone)}, - {0x1010, "FlashMode", N_("Flash Mode"), N_("Flash firing mode setting"), IfdId::fujiId, SectionId::makerTags, - unsignedShort, -1, EXV_PRINT_TAG(fujiFlashMode)}, - {0x1011, "FlashStrength", N_("Flash Strength"), N_("Flash firing strength compensation setting"), IfdId::fujiId, - SectionId::makerTags, signedRational, -1, printValue}, - {0x1020, "Macro", N_("Macro"), N_("Macro mode setting"), IfdId::fujiId, SectionId::makerTags, unsignedShort, -1, - EXV_PRINT_TAG(fujiOffOn)}, - {0x1021, "FocusMode", N_("Focus Mode"), N_("Focusing mode setting"), IfdId::fujiId, SectionId::makerTags, - unsignedShort, -1, EXV_PRINT_TAG(fujiFocusMode)}, - {0x1022, "0x1022", "0x1022", N_("Unknown"), IfdId::fujiId, SectionId::makerTags, unsignedShort, -1, printValue}, - {0x1030, "SlowSync", N_("Slow Sync"), N_("Slow synchro mode setting"), IfdId::fujiId, SectionId::makerTags, - unsignedShort, -1, EXV_PRINT_TAG(fujiOffOn)}, - {0x1031, "PictureMode", N_("Picture Mode"), N_("Picture mode setting"), IfdId::fujiId, SectionId::makerTags, - unsignedShort, -1, EXV_PRINT_TAG(fujiPictureMode)}, - {0x1032, "0x1032", "0x1032", N_("Unknown"), IfdId::fujiId, SectionId::makerTags, unsignedShort, -1, printValue}, - {0x1040, "ShadowTone", N_("Shadow Tone"), N_("Shadow tone"), IfdId::fujiId, SectionId::makerTags, signedLong, -1, - EXV_PRINT_TAG(fujiSHTone)}, - {0x1041, "HighlightTone", N_("Highlight Tone"), N_("Highlight tone"), IfdId::fujiId, SectionId::makerTags, - signedLong, -1, EXV_PRINT_TAG(fujiSHTone)}, - {0x104d, "CropMode", N_("Crop Mode"), N_("Crop mode"), IfdId::fujiId, SectionId::makerTags, unsignedShort, -1, - EXV_PRINT_TAG(fujiCropMode)}, - {0x1100, "Continuous", N_("Continuous"), N_("Continuous shooting or auto bracketing setting"), IfdId::fujiId, - SectionId::makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiContinuous)}, - {0x1101, "SequenceNumber", N_("Sequence Number"), N_("Sequence number"), IfdId::fujiId, SectionId::makerTags, - unsignedShort, -1, printValue}, - {0x1200, "0x1200", "0x1200", N_("Unknown"), IfdId::fujiId, SectionId::makerTags, unsignedShort, -1, printValue}, - {0x1210, "FinePixColor", N_("FinePix Color"), N_("Fuji FinePix color setting"), IfdId::fujiId, SectionId::makerTags, - unsignedShort, -1, EXV_PRINT_TAG(fujiFinePixColor)}, - {0x1300, "BlurWarning", N_("Blur Warning"), N_("Blur warning status"), IfdId::fujiId, SectionId::makerTags, - unsignedShort, -1, EXV_PRINT_TAG(fujiOffOn)}, - {0x1301, "FocusWarning", N_("Focus Warning"), N_("Auto Focus warning status"), IfdId::fujiId, SectionId::makerTags, - unsignedShort, -1, EXV_PRINT_TAG(fujiOffOn)}, - {0x1302, "ExposureWarning", N_("Exposure Warning"), N_("Auto exposure warning status"), IfdId::fujiId, - SectionId::makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiOffOn)}, - {0x1400, "DynamicRange", N_("Dynamic Range"), N_("Dynamic range"), IfdId::fujiId, SectionId::makerTags, - unsignedShort, -1, EXV_PRINT_TAG(fujiDynamicRange)}, - {0x1401, "FilmMode", N_("Film Mode"), N_("Film mode"), IfdId::fujiId, SectionId::makerTags, unsignedShort, -1, - EXV_PRINT_TAG(fujiFilmMode)}, - {0x1402, "DynamicRangeSetting", N_("Dynamic Range Setting"), N_("Dynamic range settings"), IfdId::fujiId, - SectionId::makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiDynamicRangeSetting)}, - {0x1403, "DevelopmentDynamicRange", N_("Development Dynamic Range"), N_("Development dynamic range"), IfdId::fujiId, - SectionId::makerTags, unsignedShort, -1, printValue}, - {0x1404, "MinFocalLength", N_("Minimum Focal Length"), N_("Minimum focal length"), IfdId::fujiId, - SectionId::makerTags, unsignedRational, -1, printValue}, - {0x1405, "MaxFocalLength", N_("Maximum Focal Length"), N_("Maximum focal length"), IfdId::fujiId, - SectionId::makerTags, unsignedRational, -1, printValue}, - {0x1406, "MaxApertureAtMinFocal", N_("Maximum Aperture at Minimum Focal"), N_("Maximum aperture at minimum focal"), - IfdId::fujiId, SectionId::makerTags, unsignedRational, -1, printValue}, - {0x1407, "MaxApertureAtMaxFocal", N_("Maximum Aperture at Maximum Focal"), N_("Maximum aperture at maximum focal"), - IfdId::fujiId, SectionId::makerTags, unsignedRational, -1, printValue}, - {0x1431, "Rating", N_("Rating"), N_("Rating"), IfdId::fujiId, SectionId::makerTags, unsignedLong, -1, printValue}, - {0x1443, "DRangePriority", N_("D Range Priority"), N_("Dynamic range priority"), IfdId::fujiId, - SectionId::makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiDRangePriority)}, - {0x1444, "DRangePriorityFixed", N_("D Range Priority Fixed"), N_("Dynamic range priority fixed"), IfdId::fujiId, - SectionId::makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiDRangePriorityFixed)}, - {0x1445, "DRangePriorityAuto", N_("D Range Priority Auto"), N_("Dynamic range priority auto"), IfdId::fujiId, - SectionId::makerTags, unsignedShort, -1, EXV_PRINT_TAG(fujiDRangePriorityAuto)}, - {0x8000, "FileSource", N_("File Source"), N_("File source"), IfdId::fujiId, SectionId::makerTags, asciiString, -1, - printValue}, - {0x8002, "OrderNumber", N_("Order Number"), N_("Order number"), IfdId::fujiId, SectionId::makerTags, unsignedLong, - -1, printValue}, - {0x8003, "FrameNumber", N_("Frame Number"), N_("Frame number"), IfdId::fujiId, SectionId::makerTags, unsignedShort, - -1, printValue}, - // #1402 {0xf000, "FujiIFD", N_("FujiIFD"), N_("Fujifilm IFD"), IfdId::fujiId, SectionId::makerTags, undefined, -1, printValue}, {0xf001, "RawImageFullWidth", N_("Raw Image Full Width"), N_("Raw Image Full Width"), IfdId::fujiId, diff --git a/test/data/FujiFilmA850.exv b/test/data/FujiFilmA850.exv new file mode 100644 index 0000000000000000000000000000000000000000..ed1819364d22d0b8c7dd304a7e57c74109aa0acb GIT binary patch literal 9269 zcmbW5c|4Tw*ZA)-!`QNweTZhVMl;qKOhT4Ph>*4HlE{o*sE8J0Ft(JXvL##gwX)8P zT@bc4XL80pe%+`R8v+~Q&a?YX8_l#u|yK>zIC0kr!CAb@)jf7btw zzKD!HUZV4%TmP<2a*thhUE-kteHrv<3P^DLpIWTZ?IC;21g6JM_+ta2*M}kDPkf0Qy${iuf&51=Luc@wUV+Y#JyxSL{$1~!KlZyO41Y2BFJ}6SS^r}8zj)W5l|Gcj0icB* z*oDsj>Dm7$oz$LhCq21czotF^FME=%`mNvX+ueC5`hs@lKW#@Z6Tn9w|5Q^E$wlub zF}g;G?g4Ny{N8tJbOv$#TOEcyrdt5uznJSU=H~j-8QOGTvA^`inN(8C$){@#Ri+ue@%%ulb)UvhUZGW_08W*9V`{;4dIzEkOa z4uJPgq22ZTr&9|_-wywrT4*}|eQJRi{&e?ox}IT=---UuQ)~Aw|C}}d$eod$G2jNk z%)|s`Vq}Iwp)4%Sto!&l_OY|?6W)J-i%$$DE`AUuDhiiWkcA&cN{EUc(Kv!sQbA+T zhh&avV^y^kRM9FR78aI$Z2JT`I0RJ?q6n4$^|jLmdPJ`lBk1?Fo9XUFKT{x#Oi*SP zRyGj5JpWw(&m_GwL0~Wg1kA_?fzaK;b`K*6HzSWYN{eZ~sU!3d{(!>ugon&4sJLJTqqL0T%7;*Td-(Hi*1wbf|I0bz|CIE9=ltI( z?=%72%s>$E01Ofb7`Q=TZqUvszz(K&H8+?W&;$lFs;+ zD4#G7WS9r2FDIx#+cH)0>8GUWB)cOThcyn%M(9MGiFk=0@v-r-IV&(-IbB(TYWC0` zsQrMJld_TL6RD1^EKz6s{VhO*FAAVHlr~O`;u6z+fF})4i%O(;kESp%z<92NoSr?* zO^az@9}&&Im!!|v5;~aK>SdU?U>31-1Si=0RrZTuA)81VaSjJ2-SpPVl{S26N(@Oj zV64IuMnIi}BivyjgLA7UM;%)#F+CVZ{BfD<`fj5E*jh899?x3WNRkOLS{-2#(MOK+D_?+Tz1lb zt@7AI!W=Tq(*!mfTQZbc#a$PDFke$TbEZdl^u6pVc0)DRFgWr;AHvdUYv|?8)kzO@ z?`$0AhuZ8D8Trxj{;e1VeNf5(gO%(3`O{%Z+}rD~!Y=A<#rnd+ z-8Yf(?1|L`^bYX+YU;zsR=o?Q&T}?ZTiKpf@E7IvRo>GE%p%y6+rwvaJ%?->&$(vw z+HPe#Rt+z4t_zB8$c2D_!CO_#Hh8wma9ajdzz4HxFcX=nF0|$uC$tr36M;VVS~Xdi>F3y` zBS91sK??fo{A78-86!cz#VO0P_pOI!FBrA|99vP37ktxeKrPJ+ZyZXliK*(*>`Iw3 zZ|Fm1VY|z?m!oOWeE1LFt`(8hw8Dsyd&BQcZfmhgdGDGbpL*_;+{KC z_tX*lQ0h2}1QK(9el^+Qz72n8DV}Pv|9DDSw;3vB?S>BLVtSTSi0GT1bJedN>XKz~ z86vm53Of*f)AIOXF&@k`E9@>hapIy`&&7oYg&4+~>L$#rN-*_Q;IG<`g*e!CSG`O4 z2m`PP6fSlJk5iQshB>9QZH^YX!JpgLHILqq#87;V~~mF~SC4}jYW7p6$N*Xw;tKQSebPfzZc{oEud`Cu-;!rov6+dWhsmH^YAn`gB0 z>%(f6$Vyw}RbD>7rSgN?**VTpKtM*+yO39g(~}_ zAkh~pDih+7K~(rB%v_%Tg9r2cH4Dl{4e+4F;q7iF^_bw|R7iF(xFjS>`0Dl>@G|V& zf!715+b>()WtL7)Z*wtY>ojRY`>6xAozssEl0zj6zA2n=oglD&yJW`&pbxUk{Yd^57Y?gg2jcV$k%V5MtzV#Qp8as)=?Cjyu%f{+4Sv4$L*#)7 ztKcFNw(DOB(2`({OqsPUf#AgJ$ZAoCHB&aOY!QyPnIZm*%Xix6c{~kvfU`Tm(eB}; zg?>@q!Bv;o$x+3p3|3Dt+*NfvR)icfBJS9t82FGgdZbnADTD|l;4!{IRexMfD%wT-*0kkp~FrnFHC z#{4-}k43Pf7yJC$_bOjjq_^A>$^WE@*~)P17^U{0bNwCkt@rN2G&EK0la}|dn=eid z)og|3AlTg$>KRIU?^{GqW*@s*f`&sstzUFoX(tpLIqP~~$d6WXy!3c;;rKz>8cAUO zBd0b&Yx(-vos!UfZ(B}08n`f~dGzDmm1enktz)gQ8Pbnop>7n*gh6;O_Vy0&mZksn z(|Z%S>l~_m;^>YgPRV}v;`8=UqncaoA{7WoMl(We|5w}EUafg-+|Z-EV^xNFCVFQp z?!1PCoVzP_%hpCan!$#-wQPj?(HZ)XYT~$f*2NGx>F310zm}2cLyZrA_FeP^$t+oK zBX9?ZES*>2PP|%RXbs$H^?;c%Sa_h{s7p|w+UlE zHWs8CW}LXK196>P3f*BKXeoSc(LzerexE|N{Yq`ngbO3n4=+h*rWWjL-`i7Ht}Rs* zQVRFaU<5EQ{Me5##W1-AeU(fXP48&iyjbnnm{j#huMIflbKIpc^>VfwwRM+Kw{NIW zM;?A%qwmH=>d6=GQqSty?)KN!y41-XN(w-WzlvA)*UUP9zWKxxi8T=$Rp%y4isIDu z2rPQ8?zK|3Ul+lad+d~8b1d^+Y9>GI3JITOw}vt~n`sc*rigeuOb%aMPTwEb9p|0w z%@?u**d+GkMI1?G4#=(PY`t=87*8;Pcx#A0i_=zr6>yd%Q1H+Rr#7j>W8ksDDb1n# z5wiiWjuv>VK8#Pl)mm!JvZ*n9om#VHzAxndYa3VpEOv!9F-nO0!i9X3$%z>FIOeVF_gcaKSm&cx?UioeqeHtxSz3X0+(94}VXSq1|@Q0@O}S2hZ#Je;Mk7Zb@Tvz3=>XT&~%M1O1+;3J2Qno6uZ;d>`2 zQIjGyL!=caGZ_OSm_F03fINo|HVwxiWR^<5;U|5uZD*!DS-rd4$@+==n-$|1-k6p1 zwFWfJ#A|ZssSjG^zi}r^>2&aTfk)j%U zv~G6)IBWwOXRMg4xTHWSx)o39{+5Dl=qDfv6YKq=!C&)@bUZ)s5Ef2X?Eoe(_S+d< zzRVoTb*oNbxz-zkf0b1_)QTiotU>1RN4r=lAlBoWS3ml1U-{Z+8?v^ET324>vvP8T zd0RbiuIgo8XqwM6SzKi?a#*T>N1-HXyK-$&{VNyUyY z>dq)P5;}{cBg{eL;Er+nyN66Q_Y(C{qDq!eLgnl!6A25-Tgq8M?2A6-oI2atJ9VgE zZn_?z@3!Xz_f=0faFwWpeEG?t$&nm9S5v(Mobsp%9+^1w$?9`+hiH1BdOg0^H+k;S zGpGo>fU!GZJ1;|^T-P)Ol$ONt{N`gZXMw(l8~N@)+WU1ggIrKj7BV9rE{Wzq{rm)`>n7x!h-elIxBg;3s(ck6diRGaM0m+--|p>?V#-Nm(NQf z3SN^mRg@XXY%E&UVLq~#Ghd+Tp7~1GI_!O&)7&xU3MmhLFd;i!nA#N7(TIBr1~B_GArFAww+FD`vNVwIGwRFj`-3avm!pq_0C|%$thM;q4qRJ z__iPwURr>??mu2;J%KHgY3-c2H3Isw*#Eij;Hja;YO>*WnX0i|qTT4Ib&gfN?PYa8 zm*!|GeGT_af_i4YXwP6#iKB%26^T)Xc;^hZadzTkENAsJ)MRx%-M#yMN_%CZrDUt! zxOQydHKI%F(U1IqKYE#Ba`ipV_wwQ5wlj@m564|BzySW5)(j-;@l3jpEE-*?D@Peh zl}xlqE1o5zbFD0XeUZV{LmjMzPN(6;Vv&B9Utc?!G7deT*EbH$?N0pq$Q-3 zd9Xy5Ifq?mJ4@-|r~@5BjJ{Q^B5j%J#98n#c57y+Whx$?BAXW4ewvx}00*aNqwo0V zEmIksq=Q*tg`_G^njydNd1w!SIuq9j97Ij~ttuuG2gYO2{`*oj-Q|}8Z>pQt_<&mC z?#7P5Hl{ZumF2BN9@TT5@526kOKx>r$Obth3IVOr@ok69{LGHuZJeL`RCGH(}$Mg7!#!Trg(x~Kbfq->M#O)`9U0!4aJ$DyAv;LI%2 zvE0jQO;IO$4T~J`m6b2PP{vNa>poGh z+wyF{NJ_xq#0{>Hu)$X@+YX@NOlh6)errAJX2;lN9R&8!tx$Xn4eG_b!a88>PS4uigJ>I)rc=YQipq@3E77|#2$M$tzhAnV)&1t*z4 zRBZG0(C}eHb>X<9Kan?_Sk=>`PpuCMU@Qd}`?p!2`Md7xxi>nZ%M!0A$Ze9+t2zVl zsIt$_V2`hQl5(vvx`w(xubzu8i%RtL#qKw&e4cPri}frE>j$^?GNE87yu)AlUg$@-d>f=zS0kE+ z`E@8v&9BF|W=;Hc{=EU$%ax8v+CQr2n(Y#3o0|enz?p2^Ao+#){#1p*hxs1iaeiHJ zeZE=sDTpelegy-S%=GQ^t}@L_2^RZqMjLYZz~C>20t?y&%s-I4JacDMX@+m`TQ~w! zapvS}qufG{r;k~|iIt*0Oq_!nB>b?z4YnXS7BNG!^674-3FjHG>r5sQh zB~s!XJ@M(ptvj>_nM963l4AcanET22XG+DhCsUu{YwFF11GSe1=7igW*$jnBQ_8ld zSLZQ6LdW#F^>$QoZemWEO$X%Ve1P54dGt3DDq+O=NkZl$sUa^)mPOr}=r!RY#1I+5 z8LZ^}=8SB#o`B;z_wYk>Ge+cQn3bGgL(otFIoR^;r@Kx;g2K#p({H1(D%YEqhAI

GdtE5*hoZJ}!nJN+bfD8TX2X=tcJ#$=~biwg%=VB5t_fEIjxn8FW9MQGT0oCwrZr4JPb8q+r zv%h?rqU$6)2NvvA2-O`P;^_tvY(ra9hu&z^eL0_1K}R zM$cO=PUT4u$_qUqkWe{<0ovJg~oAnF8WFE zhXPOx#pK+yXxruPq;D>|rNWPFujFubu;G5i3F<5QsEAQvgnWVKX2F>VJ+CF9v}cth z57*#BHQ-B5#t2uz?=v3Ij5px2jUJapo6sK5?R$D>EfwF_)nw$qnKLNogXq?)893cgDC)w{$trJQKC_eKQQ?0rE=9L z(mVCw!)x3kpG2I-r8C+Q}3)rY-A|}T$xzQV4j)Q{Bcx7 zX`WB{sDCzU!|FlWVeS(pV1){)anv;odV&aZ$7;%^hQyR4$~B%nMZ&p|EXP@iiR<7l zZVJISq89V6P#0(K^`M}$#rFJ!l4XDM#iYDSfo$zd|gw49Qo4{&j{s7 zc?-7hdH^mt6uRfFX#W)lflY5Zk8D=lLs~6wv*XtlJg*LimV!))dRW)Dh zNyYG&eloqXsdbi2S9oet;&@I)C0|ENlhByv-bn&#D)XhC(X6dCi*pq-ZPM;KM+*T* z3CX$}Fe775Tp#rECYB6H8}v5^`nw-4N_p92h0s2&O+MZ#8cWRl$vjtB;9)hg+NAI5g=*=nEi%NGisUO~FbM?8g#M9K;H~P&(fgvfSc>LjIU5*+4 zEEcmK@%baqOx};1k9K7CnQ~$q+Xp3PC02^+Saarql0f=f4B!4U>0vJpEkwC@1Xz;v zUd>qqpHeBO8J=S4k`LC1P$N2g8As+zJhqFfxHr~mon4j8^iBIm8`8n#@|pOnn)V)V zlo@|2sy>->cbKkD-IR(L8xx==2+Z$`*RJr5T$;G9@ulSIsoL{ZRnK~I7?jWcoO#jN zL^hsVA`rqiCma2Fqok^HCV%b#I@S%=aCggBv#&!{VWedh+iq8d$6>7r2?=W}N03nH zL9N@)7hfu&Zg}K$9Md^CvC`4G(nLkXvuMoZ8TldRO(v%bi!m z7n#$lS2AjS4=4II^$Ci!`;BJCI5Rf%WrsbR>7cnCvn#9cLY44qA`$M`IB!pOU5_(` z%!l)r%suj%Cg+vDrq$OY+uq*nITTyOB0z-@P?f$PEibpfPR-(T#+{5P+>Gjs0DDc4 z1soD6EE?N)7Ch|jsI;=29wFu8XRmLV9v{o)(Fh`&1L@I{QPA`&v+UEaOL^?Zbsz5l zIkxw+DkEV$M*BI0=Q^`yT-_Wyrk}!L*E>E8lwNJv{#C7#7~b9GaQosrYs=5?V}gUN zu9>s{sD+R@jB(&=%uBL1pMvX8WnE~9woD_Ec~8Gt?ED;0^+ta%_VLN5x8{;NZ%}zu z?8>ao#jz=x>y*Us9m6P@laEKgGb7fC{$FN_?P|z+FCp)OdYbIJo3lbAeQ0nz#AQ8U ztPEXHh)Arc&c5@5SggIdV(8_eqJKji$;}T0%)n-jP2+7%b$=$K4ZOr64DQP>#Uh^M z!!JgX)xti^_kS&xm>}D0V>|iX1dnQba{$IE-(co4X-d$5K(SkmjEICk_lG_mQEs0g zlX@+6Et&?4QU(*7ms%%Q$LRWMr)<{&(txVjfp~#=;c=K06$*c_cF{N&T{%&*1N6?H zB%aHYdr!&A4UTB>SY>OTx9xNsT~Ih?W*{bI(R*cf1H+pY{7yFJmX+;_xeUJ(rHw(Y zY=Oh-dOS`*!%wn47Skzn#`5a$4@^>C_9F?kFJ7LPg{q3Pv%&kd)0mljJNi0}Ign5R zNs`ljlN7_a%Abw)_9w!(-yOb#G&v!fk44cWp=A9Kl>z#z<@4dWhr3;^?9Lxsj#YyM zIg2{$G_T!j`SWxzSpq##lZ>JN+K`B9;DmI`&|z8EC%5H> zW_oK_%hLo6r4P!2u5suYzyf-q%Av!Lr(edzK1y@jkSmoxrsx-XhgYVay*bBL$wny(Sc@`Yl4@nvR@GjVO zd5!kmi5NQaYdH``^f8f$$>;xMtn=s;aZT}<4()(@e%&|{8(vq#=trA#BgGsro3d?s zA9##vtxcpf5jfuWGS3rt0M77~k|T~}jJSbCUQ}cJhY01Q2(1%#d;;SHst7>~P4TT! zJD01crg(_W!N0v?J^R?j={9Dr!uTmTn92^C4urTfRC+7>@g-PksGPy^9GP@J&h}9} zgfoe+4~l{Ca0KU@WogR5>=SO{CDXXZi367{Pj`c;noVlX7q*=zOWH$w_}|z}3gFo5 zg3up)r_y;?PIGVsOVr?3-LgzmR4)!SnJQ@4BWEBJkyb@-F%8vz^--_Xiuhh$l)LPy zAtzR2KzR#)t5RYsO%5Rwg1ukU>@FtufU5bjdu!a|{PbnaMPsV&#QWgHIGu;`G9-E3 Q2RFuFHWYL2yxDp4U!vJiW&i*H literal 0 HcmV?d00001 diff --git a/test/data/FujiFilmFinePixF550EXR.exv b/test/data/FujiFilmFinePixF550EXR.exv new file mode 100644 index 0000000000000000000000000000000000000000..efb4b8364b1648eb53571cd0f85aba97b6372643 GIT binary patch literal 14969 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 literal 0 HcmV?d00001 diff --git a/test/data/FujiSLP800.exv b/test/data/FujiSLP800.exv new file mode 100644 index 0000000000000000000000000000000000000000..7d9957337e6b06fbf3659c6998d2b41d49a5379e GIT binary patch literal 11017 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 PBt`TyzB)Y2Kg|ChM9_i< literal 0 HcmV?d00001 diff --git a/test/data/test_reference_files/FujiFilmA850.exv.out b/test/data/test_reference_files/FujiFilmA850.exv.out new file mode 100644 index 0000000000..e49a7023dc --- /dev/null +++ b/test/data/test_reference_files/FujiFilmA850.exv.out @@ -0,0 +1,81 @@ +Exif.Image.Make Ascii 9 FUJIFILM FUJIFILM +Exif.Image.Model Ascii 19 A850 A850 +Exif.Image.Orientation Short 1 1 top, left +Exif.Image.XResolution Rational 1 72/1 72 +Exif.Image.YResolution Rational 1 72/1 72 +Exif.Image.ResolutionUnit Short 1 2 inch +Exif.Image.Software Ascii 42 Digital Camera FUJIFILM A850 Ver1.01 Digital Camera FUJIFILM A850 Ver1.01 +Exif.Image.DateTime Ascii 20 2008:06:25 13:55:33 2008:06:25 13:55:33 +Exif.Image.YCbCrPositioning Short 1 2 Co-sited +Exif.Image.Copyright Ascii 5 +Exif.Image.ExifTag Long 1 300 300 +Exif.Photo.ExposureTime Rational 1 10/8500 1/850 s +Exif.Photo.FNumber Rational 1 450/100 F4.5 +Exif.Photo.ExposureProgram Short 1 2 Auto +Exif.Photo.ISOSpeedRatings Short 1 100 100 +Exif.Photo.ExifVersion Undefined 4 48 50 50 48 2.20 +Exif.Photo.DateTimeOriginal Ascii 20 2008:06:25 13:55:33 2008:06:25 13:55:33 +Exif.Photo.DateTimeDigitized Ascii 20 2008:06:25 13:55:33 2008:06:25 13:55:33 +Exif.Photo.ComponentsConfiguration Undefined 4 1 2 3 0 YCbCr +Exif.Photo.CompressedBitsPerPixel Rational 1 40/10 4 +Exif.Photo.ShutterSpeedValue SRational 1 970/100 1/832 s +Exif.Photo.ApertureValue Rational 1 448/100 F4.7 +Exif.Photo.BrightnessValue SRational 1 500/100 5 +Exif.Photo.ExposureBiasValue SRational 1 0/100 0 EV +Exif.Photo.MaxApertureValue Rational 1 300/100 F2.8 +Exif.Photo.MeteringMode Short 1 5 Multi-segment +Exif.Photo.LightSource Short 1 0 Unknown +Exif.Photo.Flash Short 1 24 No, auto +Exif.Photo.FocalLength Rational 1 610/100 6.1 mm +Exif.Photo.MakerNote Undefined 330 70 85 74 73 70 73 76 77 12 0 0 0 22 0 0 0 7 0 4 0 0 0 48 49 51 48 16 0 2 0 32 0 0 0 26 1 0 0 0 16 2 0 8 0 0 0 58 1 0 0 1 16 3 0 1 0 0 0 3 0 0 0 2 16 3 0 1 0 0 0 0 0 0 0 3 16 3 0 1 0 0 0 0 0 0 0 16 16 3 0 1 0 0 0 0 0 0 0 17 16 10 0 1 0 0 0 66 1 0 0 32 16 3 0 1 0 0 0 0 0 0 0 33 16 3 0 1 0 0 0 0 0 0 0 34 16 3 0 1 0 0 0 0 0 0 0 35 16 3 0 2 0 0 0 96 6 200 4 48 16 3 0 1 0 0 0 0 0 0 0 49 16 3 0 1 0 0 0 6 0 0 0 50 16 3 0 1 0 0 0 1 0 0 0 0 17 3 0 1 0 0 0 0 0 0 0 1 17 3 0 1 0 0 0 0 0 0 0 0 18 3 0 1 0 0 0 0 0 0 0 16 18 3 0 1 0 0 0 0 0 0 0 0 19 3 0 1 0 0 0 0 0 0 0 1 19 3 0 1 0 0 0 0 0 0 0 2 19 3 0 1 0 0 0 0 0 0 0 0 0 0 0 52 49 52 49 50 68 51 56 52 68 50 48 48 56 48 54 48 52 65 57 55 53 56 84 76 48 48 52 48 51 32 0 70 73 78 69 32 32 32 0 0 0 0 0 3 0 0 0 70 85 74 73 70 73 76 77 12 0 0 0 22 0 0 0 7 0 4 0 0 0 48 49 51 48 16 0 2 0 32 0 0 0 26 1 0 0 0 16 2 0 8 0 0 0 58 1 0 0 1 16 3 0 1 0 0 0 3 0 0 0 2 16 3 0 1 0 0 0 0 0 0 0 3 16 3 0 1 0 0 0 0 0 0 0 16 16 3 0 1 0 0 0 0 0 0 0 17 16 10 0 1 0 0 0 66 1 0 0 32 16 3 0 1 0 0 0 0 0 0 0 33 16 3 0 1 0 0 0 0 0 0 0 34 16 3 0 1 0 0 0 0 0 0 0 35 16 3 0 2 0 0 0 96 6 200 4 48 16 3 0 1 0 0 0 0 0 0 0 49 16 3 0 1 0 0 0 6 0 0 0 50 16 3 0 1 0 0 0 1 0 0 0 0 17 3 0 1 0 0 0 0 0 0 0 1 17 3 0 1 0 0 0 0 0 0 0 0 18 3 0 1 0 0 0 0 0 0 0 16 18 3 0 1 0 0 0 0 0 0 0 0 19 3 0 1 0 0 0 0 0 0 0 1 19 3 0 1 0 0 0 0 0 0 0 2 19 3 0 1 0 0 0 0 0 0 0 0 0 0 0 52 49 52 49 50 68 51 56 52 68 50 48 48 56 48 54 48 52 65 57 55 53 56 84 76 48 48 52 48 51 32 0 70 73 78 69 32 32 32 0 0 0 0 0 3 0 0 0 +Exif.MakerNote.Offset Long 1 850 850 +Exif.MakerNote.ByteOrder Ascii 3 II II +Exif.Fujifilm.Version Undefined 4 48 49 51 48 48 49 51 48 +Exif.Fujifilm.SerialNumber Ascii 32 41412D384D20080604A9758TL00403 41412D384D20080604A9758TL00403 +Exif.Fujifilm.Quality Ascii 8 FINE FINE +Exif.Fujifilm.Sharpness Short 1 3 0 (normal) +Exif.Fujifilm.WhiteBalance Short 1 0 Auto +Exif.Fujifilm.Color Short 1 0 0 (normal) +Exif.Fujifilm.FlashMode Short 1 0 Auto +Exif.Fujifilm.FlashStrength SRational 1 0/3 0/3 +Exif.Fujifilm.Macro Short 1 0 Off +Exif.Fujifilm.FocusMode Short 1 0 Auto +Exif.Fujifilm.FocusArea Short 1 0 Wide +Exif.Fujifilm.FocusPoint Short 2 1632 1224 1632 1224 +Exif.Fujifilm.SlowSync Short 1 0 Off +Exif.Fujifilm.PictureMode Short 1 6 Program AE +Exif.Fujifilm.ExposureCount Short 1 1 1 +Exif.Fujifilm.Continuous Short 1 0 Off +Exif.Fujifilm.SequenceNumber Short 1 0 0 +Exif.Fujifilm.FinePixColor Short 1 0 Standard +Exif.Fujifilm.BlurWarning Short 1 0 Off +Exif.Fujifilm.FocusWarning Short 1 0 Off +Exif.Fujifilm.ExposureWarning Short 1 0 Off +Exif.Photo.FlashpixVersion Undefined 4 48 49 48 48 1.00 +Exif.Photo.ColorSpace Short 1 1 sRGB +Exif.Photo.PixelXDimension Long 1 3264 3264 +Exif.Photo.PixelYDimension Long 1 2448 2448 +Exif.Photo.InteroperabilityTag Long 1 1196 1196 +Exif.Iop.InteroperabilityIndex Ascii 4 R98 R98 +Exif.Iop.InteroperabilityVersion Undefined 4 48 49 48 48 1.00 +Exif.Photo.FocalPlaneXResolution Rational 1 6129/1 6129 +Exif.Photo.FocalPlaneYResolution Rational 1 6129/1 6129 +Exif.Photo.FocalPlaneResolutionUnit Short 1 3 cm +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.CustomRendered Short 1 0 Normal process +Exif.Photo.ExposureMode Short 1 0 Auto +Exif.Photo.WhiteBalance Short 1 0 Auto +Exif.Photo.SceneCaptureType Short 1 0 Standard +Exif.Photo.Sharpness Short 1 0 Normal +Exif.Photo.SubjectDistanceRange Short 1 0 Unknown +Exif.Image.PrintImageMatching Undefined 28 80 114 105 110 116 73 77 0 48 50 53 48 0 0 2 0 2 0 1 0 0 0 1 1 0 0 0 0 80 114 105 110 116 73 77 0 48 50 53 48 0 0 2 0 2 0 1 0 0 0 1 1 0 0 0 0 +Exif.Thumbnail.Compression Short 1 6 JPEG (old-style) +Exif.Thumbnail.Orientation Short 1 1 top, left +Exif.Thumbnail.XResolution Rational 1 72/1 72 +Exif.Thumbnail.YResolution Rational 1 72/1 72 +Exif.Thumbnail.ResolutionUnit Short 1 2 inch +Exif.Thumbnail.JPEGInterchangeFormat Long 1 1344 1344 +Exif.Thumbnail.JPEGInterchangeFormatLength Long 1 7906 7906 +Exif.Thumbnail.YCbCrPositioning Short 1 2 Co-sited diff --git a/test/data/test_reference_files/FujiFilmFinePixF550EXR.exv.out b/test/data/test_reference_files/FujiFilmFinePixF550EXR.exv.out new file mode 100644 index 0000000000..78bb7e3dae --- /dev/null +++ b/test/data/test_reference_files/FujiFilmFinePixF550EXR.exv.out @@ -0,0 +1,94 @@ +Exif.Image.Make Ascii 9 FUJIFILM FUJIFILM +Exif.Image.Model Ascii 16 FinePix F550EXR FinePix F550EXR +Exif.Image.Orientation Short 1 1 top, left +Exif.Image.XResolution Rational 1 72/1 72 +Exif.Image.YResolution Rational 1 72/1 72 +Exif.Image.ResolutionUnit Short 1 2 inch +Exif.Image.Software Ascii 39 Digital Camera FinePix F550EXR Ver1.00 Digital Camera FinePix F550EXR Ver1.00 +Exif.Image.DateTime Ascii 20 2011:01:01 04:47:23 2011:01:01 04:47:23 +Exif.Image.YCbCrPositioning Short 1 2 Co-sited +Exif.Image.Copyright Ascii 5 +Exif.Image.ExifTag Long 1 294 294 +Exif.Photo.ExposureTime Rational 1 10/420 1/42 s +Exif.Photo.FNumber Rational 1 350/100 F3.5 +Exif.Photo.ExposureProgram Short 1 7 Portrait mode +Exif.Photo.ISOSpeedRatings Short 1 100 100 +Exif.Photo.SensitivityType Short 1 1 1 +Exif.Photo.ExifVersion Undefined 4 48 50 51 48 2.30 +Exif.Photo.DateTimeOriginal Ascii 20 2011:01:01 04:47:23 2011:01:01 04:47:23 +Exif.Photo.DateTimeDigitized Ascii 20 2011:01:01 04:47:23 2011:01:01 04:47:23 +Exif.Photo.ComponentsConfiguration Undefined 4 1 2 3 0 YCbCr +Exif.Photo.CompressedBitsPerPixel Rational 1 40/10 4 +Exif.Photo.ShutterSpeedValue SRational 1 540/100 1/42 s +Exif.Photo.ApertureValue Rational 1 360/100 F3.5 +Exif.Photo.BrightnessValue SRational 1 410/100 4.1 +Exif.Photo.ExposureBiasValue SRational 1 0/100 0 EV +Exif.Photo.MaxApertureValue Rational 1 360/100 F3.5 +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/100 4.4 mm +Exif.Photo.MakerNote Undefined 3350 70 85 74 73 70 73 76 77 12 0 0 0 87 0 0 0 7 0 4 0 0 0 48 49 51 48 16 0 2 0 48 0 0 0 38 4 0 0 0 16 2 0 8 0 0 0 86 4 0 0 1 16 3 0 1 0 0 0 3 0 0 0 2 16 3 0 1 0 0 0 0 0 0 0 16 16 3 0 1 0 0 0 2 0 0 0 17 16 10 0 1 0 0 0 94 4 0 0 32 16 3 0 1 0 0 0 0 0 0 0 33 16 3 0 1 0 0 0 0 0 0 0 34 16 3 0 1 0 0 0 1 0 0 0 35 16 3 0 2 0 0 0 128 4 96 3 38 16 3 0 1 0 0 0 16 0 0 0 40 16 3 0 1 0 0 0 0 0 0 0 48 16 3 0 1 0 0 0 0 0 0 0 49 16 3 0 1 0 0 0 0 0 0 0 50 16 3 0 1 0 0 0 1 0 0 0 51 16 3 0 1 0 0 0 0 0 0 0 52 16 3 0 1 0 0 0 0 3 0 0 66 16 3 0 1 0 0 0 14 0 0 0 67 16 3 0 1 0 0 0 19 0 0 0 0 17 3 0 1 0 0 0 0 0 0 0 1 17 3 0 1 0 0 0 0 0 0 0 0 18 3 0 1 0 0 0 0 0 0 0 0 19 3 0 1 0 0 0 0 0 0 0 1 19 3 0 1 0 0 0 0 0 0 0 2 19 3 0 1 0 0 0 0 0 0 0 3 19 3 0 1 0 0 0 0 0 0 0 4 19 3 0 1 0 0 0 0 0 0 0 5 19 3 0 1 0 0 0 0 0 0 0 0 20 3 0 1 0 0 0 1 0 0 0 2 20 3 0 1 0 0 0 0 0 0 0 8 20 7 0 4 0 0 0 48 50 48 48 9 20 7 0 4 0 0 0 48 49 48 48 10 20 3 0 1 0 0 0 7 0 0 0 11 20 3 0 1 0 0 0 200 0 0 0 12 20 7 0 4 0 0 0 48 49 48 48 34 20 3 0 3 0 0 0 102 4 0 0 37 20 3 0 1 0 0 0 0 1 0 0 39 20 3 0 1 0 0 0 1 0 0 0 40 20 7 0 2 0 0 0 16 0 0 0 48 20 7 0 129 0 0 0 108 4 0 0 49 20 4 0 1 0 0 0 0 0 0 0 0 64 1 0 1 0 0 0 0 0 0 0 1 64 1 0 1 0 0 0 0 0 0 0 2 64 3 0 1 0 0 0 208 3 0 0 3 64 3 0 1 0 0 0 65 4 0 0 4 64 1 0 1 0 0 0 41 0 0 0 5 64 3 0 4 0 0 0 238 4 0 0 6 64 3 0 1 0 0 0 21 0 0 0 7 64 1 0 1 0 0 0 0 0 0 0 0 65 3 0 1 0 0 0 1 0 0 0 1 65 1 0 1 0 0 0 1 0 0 0 2 65 1 0 1 0 0 0 4 0 0 0 3 65 3 0 4 0 0 0 246 4 0 0 4 65 3 0 4 0 0 0 254 4 0 0 5 65 3 0 1 0 0 0 0 0 0 0 128 65 3 0 1 0 0 0 20 0 0 0 129 65 1 0 1 0 0 0 0 0 0 0 0 66 3 0 1 0 0 0 1 0 0 0 1 66 3 0 1 0 0 0 1 0 0 0 2 66 1 0 1 0 0 0 4 0 0 0 3 66 3 0 4 0 0 0 6 5 0 0 4 66 3 0 4 0 0 0 14 5 0 0 5 66 3 0 1 0 0 0 0 0 0 0 8 66 4 0 1 0 0 0 23 0 0 0 128 66 3 0 1 0 0 0 20 0 0 0 129 66 3 0 1 0 0 0 0 0 0 0 0 69 7 0 4 0 0 0 48 49 48 48 16 69 3 0 1 0 0 0 0 0 0 0 32 69 1 0 1 0 0 0 1 0 0 0 33 69 4 0 1 0 0 0 0 0 0 0 34 69 1 0 1 0 0 0 0 0 0 0 35 69 1 0 1 0 0 0 0 0 0 0 36 69 4 0 1 0 0 0 0 0 0 0 37 69 7 0 1 0 0 0 0 0 0 0 38 69 5 0 3 0 0 0 22 5 0 0 39 69 7 0 1 0 0 0 0 0 0 0 40 69 5 0 3 0 0 0 46 5 0 0 41 69 4 0 1 0 0 0 0 0 0 0 42 69 7 0 144 1 0 0 70 5 0 0 43 69 7 0 200 0 0 0 214 6 0 0 44 69 7 0 200 0 0 0 158 7 0 0 45 69 7 0 200 0 0 0 102 8 0 0 46 69 7 0 144 1 0 0 46 9 0 0 47 69 7 0 200 0 0 0 190 10 0 0 48 69 7 0 200 0 0 0 134 11 0 0 49 69 7 0 200 0 0 0 78 12 0 0 0 0 0 0 70 67 32 32 65 56 50 48 50 51 48 56 32 32 32 32 32 53 57 50 68 51 54 51 50 51 56 51 49 49 49 48 49 50 57 69 54 48 51 49 48 50 52 48 51 51 65 0 70 73 78 69 32 32 32 0 0 0 0 0 100 0 0 0 2 0 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 214 5 59 1 142 6 243 1 243 5 60 1 167 6 243 1 56 169 208 46 56 189 237 73 243 5 60 1 167 6 243 1 56 169 208 46 56 189 237 73 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 70 85 74 73 70 73 76 77 12 0 0 0 87 0 0 0 7 0 4 0 0 0 48 49 51 48 16 0 2 0 48 0 0 0 38 4 0 0 0 16 2 0 8 0 0 0 86 4 0 0 1 16 3 0 1 0 0 0 3 0 0 0 2 16 3 0 1 0 0 0 0 0 0 0 16 16 3 0 1 0 0 0 2 0 0 0 17 16 10 0 1 0 0 0 94 4 0 0 32 16 3 0 1 0 0 0 0 0 0 0 33 16 3 0 1 0 0 0 0 0 0 0 34 16 3 0 1 0 0 0 1 0 0 0 35 16 3 0 2 0 0 0 128 4 96 3 38 16 3 0 1 0 0 0 16 0 0 0 40 16 3 0 1 0 0 0 0 0 0 0 48 16 3 0 1 0 0 0 0 0 0 0 49 16 3 0 1 0 0 0 0 0 0 0 50 16 3 0 1 0 0 0 1 0 0 0 51 16 3 0 1 0 0 0 0 0 0 0 52 16 3 0 1 0 0 0 0 3 0 0 66 16 3 0 1 0 0 0 14 0 0 0 67 16 3 0 1 0 0 0 19 0 0 0 0 17 3 0 1 0 0 0 0 0 0 0 1 17 3 0 1 0 0 0 0 0 0 0 0 18 3 0 1 0 0 0 0 0 0 0 0 19 3 0 1 0 0 0 0 0 0 0 1 19 3 0 1 0 0 0 0 0 0 0 2 19 3 0 1 0 0 0 0 0 0 0 3 19 3 0 1 0 0 0 0 0 0 0 4 19 3 0 1 0 0 0 0 0 0 0 5 19 3 0 1 0 0 0 0 0 0 0 0 20 3 0 1 0 0 0 1 0 0 0 2 20 3 0 1 0 0 0 0 0 0 0 8 20 7 0 4 0 0 0 48 50 48 48 9 20 7 0 4 0 0 0 48 49 48 48 10 20 3 0 1 0 0 0 7 0 0 0 11 20 3 0 1 0 0 0 200 0 0 0 12 20 7 0 4 0 0 0 48 49 48 48 34 20 3 0 3 0 0 0 102 4 0 0 37 20 3 0 1 0 0 0 0 1 0 0 39 20 3 0 1 0 0 0 1 0 0 0 40 20 7 0 2 0 0 0 16 0 0 0 48 20 7 0 129 0 0 0 108 4 0 0 49 20 4 0 1 0 0 0 0 0 0 0 0 64 1 0 1 0 0 0 0 0 0 0 1 64 1 0 1 0 0 0 0 0 0 0 2 64 3 0 1 0 0 0 208 3 0 0 3 64 3 0 1 0 0 0 65 4 0 0 4 64 1 0 1 0 0 0 41 0 0 0 5 64 3 0 4 0 0 0 238 4 0 0 6 64 3 0 1 0 0 0 21 0 0 0 7 64 1 0 1 0 0 0 0 0 0 0 0 65 3 0 1 0 0 0 1 0 0 0 1 65 1 0 1 0 0 0 1 0 0 0 2 65 1 0 1 0 0 0 4 0 0 0 3 65 3 0 4 0 0 0 246 4 0 0 4 65 3 0 4 0 0 0 254 4 0 0 5 65 3 0 1 0 0 0 0 0 0 0 128 65 3 0 1 0 0 0 20 0 0 0 129 65 1 0 1 0 0 0 0 0 0 0 0 66 3 0 1 0 0 0 1 0 0 0 1 66 3 0 1 0 0 0 1 0 0 0 2 66 1 0 1 0 0 0 4 0 0 0 3 66 3 0 4 0 0 0 6 5 0 0 4 66 3 0 4 0 0 0 14 5 0 0 5 66 3 0 1 0 0 0 0 0 0 0 8 66 4 0 1 0 0 0 23 0 0 0 128 66 3 0 1 0 0 0 20 0 0 0 129 66 3 0 1 0 0 0 0 0 0 0 0 69 7 0 4 0 0 0 48 49 48 48 16 69 3 0 1 0 0 0 0 0 0 0 32 69 1 0 1 0 0 0 1 0 0 0 33 69 4 0 1 0 0 0 0 0 0 0 34 69 1 0 1 0 0 0 0 0 0 0 35 69 1 0 1 0 0 0 0 0 0 0 36 69 4 0 1 0 0 0 0 0 0 0 37 69 7 0 1 0 0 0 0 0 0 0 38 69 5 0 3 0 0 0 22 5 0 0 39 69 7 0 1 0 0 0 0 0 0 0 40 69 5 0 3 0 0 0 46 5 0 0 41 69 4 0 1 0 0 0 0 0 0 0 42 69 7 0 144 1 0 0 70 5 0 0 43 69 7 0 200 0 0 0 214 6 0 0 44 69 7 0 200 0 0 0 158 7 0 0 45 69 7 0 200 0 0 0 102 8 0 0 46 69 7 0 144 1 0 0 46 9 0 0 47 69 7 0 200 0 0 0 190 10 0 0 48 69 7 0 200 0 0 0 134 11 0 0 49 69 7 0 200 0 0 0 78 12 0 0 0 0 0 0 70 67 32 32 65 56 50 48 50 51 48 56 32 32 32 32 32 53 57 50 68 51 54 51 50 51 56 51 49 49 49 48 49 50 57 69 54 48 51 49 48 50 52 48 51 51 65 0 70 73 78 69 32 32 32 0 0 0 0 0 100 0 0 0 2 0 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 214 5 59 1 142 6 243 1 243 5 60 1 167 6 243 1 56 169 208 46 56 189 237 73 243 5 60 1 167 6 243 1 56 169 208 46 56 189 237 73 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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.MakerNote.Offset Long 1 856 856 +Exif.MakerNote.ByteOrder Ascii 3 II II +Exif.Fujifilm.Version Undefined 4 48 49 51 48 48 49 51 48 +Exif.Fujifilm.SerialNumber Ascii 48 FC A8202308 592D36323831110129E6031024033A FC A8202308 592D36323831110129E6031024033A +Exif.Fujifilm.Quality Ascii 8 FINE FINE +Exif.Fujifilm.Sharpness Short 1 3 0 (normal) +Exif.Fujifilm.WhiteBalance Short 1 0 Auto +Exif.Fujifilm.FlashMode Short 1 2 Off +Exif.Fujifilm.FlashStrength SRational 1 0/100 0/100 +Exif.Fujifilm.Macro Short 1 0 Off +Exif.Fujifilm.FocusMode Short 1 0 Auto +Exif.Fujifilm.FocusArea Short 1 1 Single Point +Exif.Fujifilm.FocusPoint Short 2 1152 864 1152 864 +Exif.Fujifilm.SlowSync Short 1 0 Off +Exif.Fujifilm.PictureMode Short 1 0 Auto +Exif.Fujifilm.ExposureCount Short 1 1 1 +Exif.Fujifilm.EXRAuto Short 1 0 Off +Exif.Fujifilm.EXRMode Short 1 768 DR (Dynamic Range priority) +Exif.Fujifilm.Continuous Short 1 0 Off +Exif.Fujifilm.SequenceNumber Short 1 0 0 +Exif.Fujifilm.BlurWarning Short 1 0 Off +Exif.Fujifilm.FocusWarning Short 1 0 Off +Exif.Fujifilm.ExposureWarning Short 1 0 Off +Exif.Fujifilm.DynamicRange Short 1 1 Standard +Exif.Fujifilm.DynamicRangeSetting Short 1 0 Auto +Exif.Fujifilm.AutoDynamicRange Short 1 200 200 +Exif.Fujifilm.ImageStabilization Short 3 2 1 0 2 1 0 +Exif.Fujifilm.SceneRecognition Short 1 256 Portrait Image +Exif.Fujifilm.Rating Long 1 0 0 +Exif.Fujifilm.FaceElementSelected Short 4 1494 315 1678 499 1494 315 1678 499 +Exif.Fujifilm.FacesDetected Short 1 1 1 +Exif.Fujifilm.FacePositions Short 4 1523 316 1703 499 1523 316 1703 499 +Exif.Fujifilm.NumberFaceElements Short 1 1 1 +Exif.Fujifilm.FaceElementTypes Short 1 1 Face +Exif.Fujifilm.FaceElementPositions Short 4 1523 316 1703 499 1523 316 1703 499 +Exif.Photo.FlashpixVersion Undefined 4 48 49 48 48 1.00 +Exif.Photo.ColorSpace Short 1 1 sRGB +Exif.Photo.PixelXDimension Long 1 2304 2304 +Exif.Photo.PixelYDimension Long 1 1728 1728 +Exif.Photo.InteroperabilityTag Long 1 4222 4222 +Exif.Iop.InteroperabilityIndex Ascii 4 R98 R98 +Exif.Iop.InteroperabilityVersion Undefined 4 48 49 48 48 1.00 +Exif.Photo.FocalPlaneXResolution Rational 1 3584/1 3584 +Exif.Photo.FocalPlaneYResolution Rational 1 3584/1 3584 +Exif.Photo.FocalPlaneResolutionUnit Short 1 3 cm +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.CustomRendered Short 1 0 Normal process +Exif.Photo.ExposureMode Short 1 0 Auto +Exif.Photo.WhiteBalance Short 1 0 Auto +Exif.Photo.SceneCaptureType Short 1 2 Portrait +Exif.Photo.Sharpness Short 1 0 Normal +Exif.Photo.SubjectDistanceRange Short 1 0 Unknown +Exif.Image.PrintImageMatching Undefined 28 80 114 105 110 116 73 77 0 48 50 53 48 0 0 2 0 2 0 1 0 0 0 1 1 0 0 0 0 80 114 105 110 116 73 77 0 48 50 53 48 0 0 2 0 2 0 1 0 0 0 1 1 0 0 0 0 +Exif.Thumbnail.Compression Short 1 6 JPEG (old-style) +Exif.Thumbnail.Orientation Short 1 1 top, left +Exif.Thumbnail.XResolution Rational 1 72/1 72 +Exif.Thumbnail.YResolution Rational 1 72/1 72 +Exif.Thumbnail.ResolutionUnit Short 1 2 inch +Exif.Thumbnail.JPEGInterchangeFormat Long 1 4370 4370 +Exif.Thumbnail.JPEGInterchangeFormatLength Long 1 10580 10580 +Exif.Thumbnail.YCbCrPositioning Short 1 2 Co-sited diff --git a/test/data/test_reference_files/FujiSLP800.exv.out b/test/data/test_reference_files/FujiSLP800.exv.out new file mode 100644 index 0000000000..61a234892b --- /dev/null +++ b/test/data/test_reference_files/FujiSLP800.exv.out @@ -0,0 +1,37 @@ +Exif.Image.Make Ascii 26 FUJI PHOTO FILM CO., LTD. FUJI PHOTO FILM CO., LTD. +Exif.Image.Model Ascii 7 SLP800 SLP800 +Exif.Image.Orientation Short 1 1 top, left +Exif.Image.XResolution Rational 1 720000/10000 72 +Exif.Image.YResolution Rational 1 720000/10000 72 +Exif.Image.ResolutionUnit Short 1 2 inch +Exif.Image.Software Ascii 34 FDi V4.5 / FRONTIER330-2.0-0E-213 FDi V4.5 / FRONTIER330-2.0-0E-213 +Exif.Image.DateTime Ascii 20 2004:05:04 11:03:34 2004:05:04 11:03:34 +Exif.Image.YCbCrPositioning Short 1 1 Centered +Exif.Image.ExifTag Long 1 238 238 +Exif.Photo.ExifVersion Undefined 4 48 50 49 48 2.10 +Exif.Photo.DateTimeOriginal Ascii 20 : : : : : : : : +Exif.Photo.DateTimeDigitized Ascii 20 2004:05:04 11:03:34 2004:05:04 11:03:34 +Exif.Photo.ComponentsConfiguration Undefined 4 1 2 3 0 YCbCr +Exif.Photo.MakerNote Undefined 96 70 85 74 73 70 73 76 77 12 0 0 0 6 0 0 0 7 0 4 0 0 0 48 49 51 48 0 128 2 0 6 0 0 0 90 0 0 0 2 128 4 0 1 0 0 0 157 151 8 0 3 128 3 0 1 0 0 0 21 0 0 0 32 128 3 0 1 0 0 0 1 0 0 0 33 128 3 0 1 0 0 0 3 0 0 0 0 0 0 0 49 51 53 95 67 0 70 85 74 73 70 73 76 77 12 0 0 0 6 0 0 0 7 0 4 0 0 0 48 49 51 48 0 128 2 0 6 0 0 0 90 0 0 0 2 128 4 0 1 0 0 0 157 151 8 0 3 128 3 0 1 0 0 0 21 0 0 0 32 128 3 0 1 0 0 0 1 0 0 0 33 128 3 0 1 0 0 0 3 0 0 0 0 0 0 0 49 51 53 95 67 0 +Exif.MakerNote.Offset Long 1 452 452 +Exif.MakerNote.ByteOrder Ascii 3 II II +Exif.Fujifilm.Version Undefined 4 48 49 51 48 48 49 51 48 +Exif.Fujifilm.FileSource Ascii 6 135_C 135_C +Exif.Fujifilm.OrderNumber Long 1 563101 563101 +Exif.Fujifilm.FrameNumber Short 1 21 21 +Exif.Photo.FlashpixVersion Undefined 4 48 49 48 48 1.00 +Exif.Photo.ColorSpace Short 1 1 sRGB +Exif.Photo.PixelXDimension Long 1 1840 1840 +Exif.Photo.PixelYDimension Long 1 1232 1232 +Exif.Photo.InteroperabilityTag Long 1 548 548 +Exif.Iop.InteroperabilityIndex Ascii 4 R98 R98 +Exif.Iop.InteroperabilityVersion Undefined 4 48 49 48 48 1.00 +Exif.Photo.FileSource Undefined 1 3 Digital still camera +Exif.Photo.SceneType Undefined 1 1 Directly photographed +Exif.Thumbnail.Compression Short 1 6 JPEG (old-style) +Exif.Thumbnail.Orientation Short 1 1 top, left +Exif.Thumbnail.XResolution Rational 1 720000/10000 72 +Exif.Thumbnail.YResolution Rational 1 720000/10000 72 +Exif.Thumbnail.ResolutionUnit Short 1 2 inch +Exif.Thumbnail.JPEGInterchangeFormat Long 1 684 684 +Exif.Thumbnail.JPEGInterchangeFormatLength Long 1 10314 10314