From 74e34fa35a59098db7c4358b788ad3ac0a5745f7 Mon Sep 17 00:00:00 2001 From: Volker Krause Date: Fri, 8 Jul 2022 16:18:47 +0200 Subject: [PATCH] Support ZXing 1.4.0 The previous code doesn't build (and when made to build, crashes) with ZXing 1.4.0. --- src/scanner/CMakeLists.txt | 2 ++ src/scanner/config-prison-scanner.h.in | 14 ++++++++++++++ src/scanner/videoscannerworker.cpp | 17 +++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 src/scanner/config-prison-scanner.h.in diff --git a/src/scanner/CMakeLists.txt b/src/scanner/CMakeLists.txt index d5b9cf5..ef690c5 100644 --- a/src/scanner/CMakeLists.txt +++ b/src/scanner/CMakeLists.txt @@ -1,6 +1,8 @@ # SPDX-FileCopyrightText: 2022 Volker Krause # SPDX-License-Identifier: BSD-3-Clause +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config-prison-scanner.h.in ${CMAKE_CURRENT_BINARY_DIR}/config-prison-scanner.h) + add_library(KF5PrisonScanner) add_library(KF5::PrisonScanner ALIAS KF5PrisonScanner) diff --git a/src/scanner/config-prison-scanner.h.in b/src/scanner/config-prison-scanner.h.in new file mode 100644 index 0000000..d80ceaf --- /dev/null +++ b/src/scanner/config-prison-scanner.h.in @@ -0,0 +1,14 @@ +/* + SPDX-FileCopyrightText: 2022 Volker Krause + SPDX-License-Identifier: LGPL-2.0-or-later +*/ + +#ifndef CONFIG_PRISON_SCANNER_H +#define CONFIG_PRISON_SCANNER_H + +#define ZXING_VERSION_MAJOR @ZXing_VERSION_MAJOR@ +#define ZXING_VERSION_MINOR @ZXing_VERSION_MINOR@ +#define ZXING_VERSION_PATCH @ZXing_VERSION_PATCH@ +#define ZXING_VERSION ((@ZXing_VERSION_MAJOR@<<16)|(@ZXing_VERSION_MINOR@<<8)|(@ZXing_VERSION_PATCH@)) + +#endif // CONFIG_PRISON_SCANNER_H diff --git a/src/scanner/videoscannerworker.cpp b/src/scanner/videoscannerworker.cpp index 45792dc..947367c 100644 --- a/src/scanner/videoscannerworker.cpp +++ b/src/scanner/videoscannerworker.cpp @@ -3,6 +3,7 @@ SPDX-License-Identifier: MIT */ +#include "config-prison-scanner.h" #include "format_p.h" #include "scanresult_p.h" #include "videoscannerframe_p.h" @@ -12,6 +13,7 @@ #include #include +#define ZX_USE_UTF8 1 #include #include @@ -25,7 +27,11 @@ VideoScannerWorker::VideoScannerWorker(QObject *parent) void VideoScannerWorker::slotScanFrame(VideoScannerFrame frame) { +#if ZXING_VERSION < QT_VERSION_CHECK(1, 4, 0) ZXing::Result zxRes(ZXing::DecodeStatus::FormatError); +#else + ZXing::Result zxRes; +#endif ZXing::DecodeHints hints; hints.setFormats(frame.formats() == Format::NoFormat ? ZXing::BarcodeFormats::all() : Format::toZXing(frame.formats())); @@ -173,6 +179,7 @@ void VideoScannerWorker::slotScanFrame(VideoScannerFrame frame) if (zxRes.isValid()) { auto res = ScanResultPrivate::get(scanResult); +#if ZXING_VERSION < QT_VERSION_CHECK(1, 4, 0) // distinguish between binary and text content const auto hasWideChars = std::any_of(zxRes.text().begin(), zxRes.text().end(), [](auto c) { return c > 255; @@ -188,6 +195,16 @@ void VideoScannerWorker::slotScanFrame(VideoScannerFrame frame) std::copy(zxRes.text().begin(), zxRes.text().end(), b.begin()); res->content = b; } +#else + if (zxRes.contentType() == ZXing::ContentType::Text) { + res->content = QString::fromStdString(zxRes.text()); + } else { + QByteArray b; + b.resize(zxRes.bytes().size()); + std::copy(zxRes.bytes().begin(), zxRes.bytes().end(), b.begin()); + res->content = b; + } +#endif // determine the bounding rect // the cooridinates we get from ZXing are a polygon, we need to determine the -- GitLab