Skip to content

Commit 2001618

Browse files
committed
Update zxing-cpp qml integration
1 parent 50b1f3a commit 2001618

6 files changed

Lines changed: 82 additions & 78 deletions

File tree

src/BarcodeManager.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ bool BarcodeManager::loadImage(const QUrl &fileUrl)
120120
qDeleteAll(m_barcodes_onscreen);
121121
m_barcodes_onscreen.clear();
122122

123-
QList<Result> results = ZXingQt::loadImage(fileUrl);
123+
QList<BarcodeQml> results = ZXingQt::loadImage(fileUrl);
124124
for (const auto &r: results)
125125
{
126126
QPointF tl = r.position().topLeft();

thirdparty/zxing-cpp/wrappers/qt/ZXingQt.cpp

Lines changed: 38 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -99,21 +99,21 @@ int ZXingQt::qimageFormatToXZingFormat(const QImage &img)
9999
{
100100
case QImage::Format_RGB32:
101101
#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
102-
format = ZXing::ImageFormat::BGRX; break;
102+
format = ZXing::ImageFormat::BGRA; break;
103103
#else
104-
format = ZXing::ImageFormat::XRGB; break;
104+
format = ZXing::ImageFormat::ARGB; break;
105105
#endif
106106
case QImage::Format_ARGB32:
107107
case QImage::Format_ARGB32_Premultiplied:
108-
format = ZXing::ImageFormat::XRGB; break;
108+
format = ZXing::ImageFormat::ARGB; break;
109109
case QImage::Format_RGB888:
110110
format = ZXing::ImageFormat::RGB; break;
111111
case QImage::Format_BGR888:
112112
format = ZXing::ImageFormat::BGR; break;
113113
case QImage::Format_RGBX8888:
114114
case QImage::Format_RGBA8888:
115115
case QImage::Format_RGBA8888_Premultiplied:
116-
format = ZXing::ImageFormat::RGBX; break;
116+
format = ZXing::ImageFormat::RGBA; break;
117117
case QImage::Format_Grayscale8:
118118
format = ZXing::ImageFormat::Lum; break;
119119

@@ -132,17 +132,17 @@ int ZXingQt::qvideoframeFormatToXZingFormat(const QVideoFrame &frame)
132132
case QVideoFrameFormat::Format_ARGB8888:
133133
case QVideoFrameFormat::Format_ARGB8888_Premultiplied:
134134
case QVideoFrameFormat::Format_XRGB8888:
135-
format = ZXing::ImageFormat::XRGB; break;
135+
format = ZXing::ImageFormat::ARGB; break;
136136
case QVideoFrameFormat::Format_BGRA8888:
137137
case QVideoFrameFormat::Format_BGRA8888_Premultiplied:
138138
case QVideoFrameFormat::Format_BGRX8888:
139-
format = ZXing::ImageFormat::BGRX; break;
139+
format = ZXing::ImageFormat::BGRA; break;
140140
case QVideoFrameFormat::Format_ABGR8888:
141141
case QVideoFrameFormat::Format_XBGR8888:
142-
format = ZXing::ImageFormat::XBGR; break;
142+
format = ZXing::ImageFormat::ABGR; break;
143143
case QVideoFrameFormat::Format_RGBA8888:
144144
case QVideoFrameFormat::Format_RGBX8888:
145-
format = ZXing::ImageFormat::RGBX; break;
145+
format = ZXing::ImageFormat::RGBA; break;
146146
/*
147147
case QVideoFrameFormat::Format_AYUV:
148148
case QVideoFrameFormat::Format_AYUV_Premultiplied:
@@ -175,60 +175,63 @@ int ZXingQt::qvideoframeFormatToXZingFormat(const QVideoFrame &frame)
175175
return (int)format;
176176
}
177177

178-
inline QList<Result> QListResults(ZXing::Results && zxres)
178+
inline QList<BarcodeQml> QListBarcodes(ZXing::Barcodes && zxres)
179179
{
180-
QList<Result> res;
180+
QList<BarcodeQml> res;
181181
for (auto &&r : zxres)
182182
{
183-
res.push_back(Result(std::move(r)));
183+
res.push_back(BarcodeQml(std::move(r)));
184184
}
185185

186186
return res;
187187
}
188188

189189
/* ************************************************************************** */
190190

191-
Result ZXingQt::ReadBarcode(const QImage &img, const ZXing::ReaderOptions &opts)
191+
BarcodeQml ZXingQt::ReadBarcode(const QImage &img,
192+
const ZXing::ReaderOptions &opts)
192193
{
193194
auto res = ReadBarcodes(img, ZXing::ReaderOptions(opts).setMaxNumberOfSymbols(1));
194-
return !res.isEmpty() ? res.takeFirst() : Result();
195+
return !res.isEmpty() ? res.takeFirst() : BarcodeQml();
195196
}
196197

197-
Result ZXingQt::ReadBarcode(const QVideoFrame &frame, const ZXing::ReaderOptions &opts, const QRect captureRect)
198+
BarcodeQml ZXingQt::ReadBarcode(const QVideoFrame &frame,
199+
const ZXing::ReaderOptions &opts,
200+
const QRect captureRect)
198201
{
199202
auto res = ReadBarcodes(frame, ZXing::ReaderOptions(opts).setMaxNumberOfSymbols(1), captureRect);
200-
return !res.isEmpty() ? res.takeFirst() : Result();
203+
return !res.isEmpty() ? res.takeFirst() : BarcodeQml();
201204
}
202205

203206
/* ************************************************************************** */
204207

205208
//! Read barcode from QImage
206-
QList<Result> ZXingQt::ReadBarcodes(const QImage &img,
207-
const ZXing::ReaderOptions &opts,
208-
const QRect captureRect)
209+
QList<BarcodeQml> ZXingQt::ReadBarcodes(const QImage &img,
210+
const ZXing::ReaderOptions &opts,
211+
const QRect captureRect)
209212
{
210213
ZXing::ImageFormat format = (ZXing::ImageFormat)qimageFormatToXZingFormat(img);
211214

212215
if (format != ZXing::ImageFormat::None)
213216
{
214-
return QListResults(ZXing::ReadBarcodes(ZXing::ImageView { img.constBits(), img.width(), img.height(),
217+
return QListBarcodes(ZXing::ReadBarcodes(ZXing::ImageView { img.constBits(), img.width(), img.height(),
215218
format, static_cast<int>(img.bytesPerLine()) },
216-
opts));
219+
opts));
217220
}
218221
else
219222
{
220223
QImage converted = img.convertToFormat(QImage::Format_Grayscale8);
221224

222-
return QListResults(ZXing::ReadBarcodes(ZXing::ImageView { converted.constBits(), converted.width(), converted.height(),
225+
return QListBarcodes(ZXing::ReadBarcodes(ZXing::ImageView { converted.constBits(), converted.width(), converted.height(),
223226
ZXing::ImageFormat::Lum, static_cast<int>(converted.bytesPerLine()) },
224-
opts));
227+
opts));
225228
}
226229
}
227230

228231
//! Read barcode DIRECTLY from QVideoFrame
229-
QList<Result> ZXingQt::ReadBarcodes(const QVideoFrame &frame,
230-
const ZXing::ReaderOptions &opts,
231-
const QRect captureRect)
232+
QList<BarcodeQml> ZXingQt::ReadBarcodes(const QVideoFrame &frame,
233+
const ZXing::ReaderOptions &opts,
234+
const QRect captureRect)
232235
{
233236
if (!frame.isValid()) return {};
234237

@@ -251,7 +254,7 @@ QList<Result> ZXingQt::ReadBarcodes(const QVideoFrame &frame,
251254

252255
if (fmt != ZXing::ImageFormat::None)
253256
{
254-
return QListResults(
257+
return QListBarcodes(
255258
ZXing::ReadBarcodes(
256259
ZXing::ImageView(frame_ro.bits(0), frame_ro.width(), frame_ro.height(),
257260
fmt, frame_ro.bytesPerLine(0)),//.cropped(captureRect.left(), captureRect.top(),
@@ -268,9 +271,9 @@ QList<Result> ZXingQt::ReadBarcodes(const QVideoFrame &frame,
268271
}
269272

270273
//! Read barcode from QVideoFrame, converting it to QImage
271-
QList<Result> ZXingQt::ReadBarcodes2(const QVideoFrame &frame,
272-
const ZXing::ReaderOptions &opts,
273-
const QRect captureRect)
274+
QList<BarcodeQml> ZXingQt::ReadBarcodes2(const QVideoFrame &frame,
275+
const ZXing::ReaderOptions &opts,
276+
const QRect captureRect)
274277
{
275278
if (!frame.isValid()) return {};
276279

@@ -281,7 +284,7 @@ QList<Result> ZXingQt::ReadBarcodes2(const QVideoFrame &frame,
281284
return {};
282285
}
283286

284-
return QListResults(ZXing::ReadBarcodes(
287+
return QListBarcodes(ZXing::ReadBarcodes(
285288
ZXing::ImageView(image.constBits(), image.width(), image.height(), (ZXing::ImageFormat)qimageFormatToXZingFormat(image))
286289
.cropped(captureRect.left(), captureRect.top(), captureRect.width(), captureRect.height()), opts) );
287290
/*
@@ -292,17 +295,17 @@ QList<Result> ZXingQt::ReadBarcodes2(const QVideoFrame &frame,
292295
img = image.convertToFormat(QImage::Format_Grayscale8);
293296
}
294297
295-
return QListResults(ZXing::ReadBarcodes(
298+
return QListBarcodes(ZXing::ReadBarcodes(
296299
ZXing::ImageView(img.constBits(), img.width(), img.height(), ZXing::ImageFormat::Lum)
297300
.cropped(captureRect.left(), captureRect.top(), captureRect.width(), captureRect.height()), opts) );
298301
299-
return QListResults(ZXing::ReadBarcodes(ZXing::ImageView {image.constBits(), image.width(), image.height(),
302+
return QListBarcodes(ZXing::ReadBarcodes(ZXing::ImageView {image.constBits(), image.width(), image.height(),
300303
(ZXing::ImageFormat)qimageFormatToXZingFormat(image)}.cropped(captureRect.left(), captureRect.top(),
301304
captureRect.width(), captureRect.height()),
302305
opts)
303306
);
304307
305-
return QListResults(ZXing::ReadBarcodes(ZXing::ImageView { img.constBits(), img.width(), img.height(),
308+
return QListBarcodes(ZXing::ReadBarcodes(ZXing::ImageView { img.constBits(), img.width(), img.height(),
306309
ZXing::ImageFormat::Lum, static_cast<int>(img.bytesPerLine()) },
307310
opts));
308311
*/
@@ -311,15 +314,15 @@ QList<Result> ZXingQt::ReadBarcodes2(const QVideoFrame &frame,
311314

312315
/* ************************************************************************** */
313316

314-
QList<Result> ZXingQt::loadImage(const QUrl &fileUrl)
317+
QList<BarcodeQml> ZXingQt::loadImage(const QUrl &fileUrl)
315318
{
316319
QString filepath = fileUrl.toLocalFile();
317320
QImage img(filepath);
318321

319322
return ReadBarcodes(img);
320323
}
321324

322-
QList<Result> ZXingQt::loadImage(const QImage &img)
325+
QList<BarcodeQml> ZXingQt::loadImage(const QImage &img)
323326
{
324327
return ReadBarcodes(img);
325328
}

thirdparty/zxing-cpp/wrappers/qt/ZXingQt.h

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
#include <QImage>
1919
#include <QVideoFrame>
2020

21-
#include "Result.h"
21+
#include "Result.h" // Cannot use "Barcode.h" ???
2222
#include "Quadrilateral.h"
2323
#include "ReaderOptions.h"
2424

@@ -37,7 +37,7 @@ class Position : public ZXing::Quadrilateral<QPoint>
3737
using Base::Base;
3838
};
3939

40-
class Result : private ZXing::Result
40+
class BarcodeQml : private ZXing::Barcode
4141
{
4242
Q_GADGET
4343

@@ -59,24 +59,24 @@ class Result : private ZXing::Result
5959
Position m_position;
6060

6161
public:
62-
Result() = default; // required for qmetatype machinery
62+
BarcodeQml() = default; // required for qmetatype machinery
6363

64-
explicit Result(ZXing::Result &&r) : ZXing::Result(std::move(r)) {
65-
m_text = QString::fromStdString(ZXing::Result::text());
66-
m_bytes = QByteArray(reinterpret_cast<const char*>(ZXing::Result::bytes().data()), Size(ZXing::Result::bytes()));
67-
auto &pos = ZXing::Result::position();
64+
explicit BarcodeQml(ZXing::Barcode &&r) : ZXing::Barcode(std::move(r)) {
65+
m_text = QString::fromStdString(ZXing::Barcode::text());
66+
m_bytes = QByteArray(reinterpret_cast<const char*>(ZXing::Barcode::bytes().data()), Size(ZXing::Barcode::bytes()));
67+
auto &pos = ZXing::Barcode::position();
6868
auto qp = [&pos](int i) { return QPoint(pos[i].x, pos[i].y); };
6969
m_position = {qp(0), qp(1), qp(2), qp(3)};
7070
}
7171

7272
int runTime = 0; // for debugging/development
73-
using ZXing::Result::isValid;
73+
using ZXing::Barcode::isValid;
7474

75-
bool hasText() const { return (ZXing::Result::contentType() == ZXing::ContentType::Text); }
76-
bool hasBinaryData() const { return (ZXing::Result::contentType() == ZXing::ContentType::Binary); }
77-
ZXing::BarcodeFormat format() const { return static_cast<ZXing::BarcodeFormat>(ZXing::Result::format()); }
78-
ZXing::ContentType contentType() const { return static_cast<ZXing::ContentType>(ZXing::Result::contentType()); }
79-
QString formatName() const { return QString::fromStdString(ZXing::ToString(ZXing::Result::format())); }
75+
bool hasText() const { return (ZXing::Barcode::contentType() == ZXing::ContentType::Text); }
76+
bool hasBinaryData() const { return (ZXing::Barcode::contentType() == ZXing::ContentType::Binary); }
77+
ZXing::BarcodeFormat format() const { return static_cast<ZXing::BarcodeFormat>(ZXing::Barcode::format()); }
78+
ZXing::ContentType contentType() const { return static_cast<ZXing::ContentType>(ZXing::Barcode::contentType()); }
79+
QString formatName() const { return QString::fromStdString(ZXing::ToString(ZXing::Barcode::format())); }
8080
const QString &text() const { return m_text; }
8181
const QByteArray &bytes() const { return m_bytes; }
8282
const Position &position() const { return m_position; }
@@ -206,32 +206,32 @@ class ZXingQt : public QObject
206206

207207
///
208208

209-
static Result ReadBarcode(const QImage &img,
210-
const ZXing::ReaderOptions &opts = {});
209+
static BarcodeQml ReadBarcode(const QImage &img,
210+
const ZXing::ReaderOptions &opts = {});
211211

212-
static Result ReadBarcode(const QVideoFrame &frame,
213-
const ZXing::ReaderOptions &opts = {},
214-
const QRect captureRect = QRect());
212+
static BarcodeQml ReadBarcode(const QVideoFrame &frame,
213+
const ZXing::ReaderOptions &opts = {},
214+
const QRect captureRect = QRect());
215215

216216
///
217217

218-
static QList<Result> ReadBarcodes(const QImage &img,
219-
const ZXing::ReaderOptions &opts = {},
220-
const QRect captureRect = QRect());
218+
static QList<BarcodeQml> ReadBarcodes(const QImage &img,
219+
const ZXing::ReaderOptions &opts = {},
220+
const QRect captureRect = QRect());
221221

222-
static QList<Result> ReadBarcodes(const QVideoFrame &frame,
223-
const ZXing::ReaderOptions &opts = {},
224-
const QRect captureRect = QRect());
222+
static QList<BarcodeQml> ReadBarcodes(const QVideoFrame &frame,
223+
const ZXing::ReaderOptions &opts = {},
224+
const QRect captureRect = QRect());
225225

226-
static QList<Result> ReadBarcodes2(const QVideoFrame &frame,
227-
const ZXing::ReaderOptions &opts = {},
228-
const QRect captureRect = QRect());
226+
static QList<BarcodeQml> ReadBarcodes2(const QVideoFrame &frame,
227+
const ZXing::ReaderOptions &opts = {},
228+
const QRect captureRect = QRect());
229229

230230
///
231231

232-
Q_INVOKABLE static QList<Result> loadImage(const QUrl &fileUrl);
232+
Q_INVOKABLE static QList<BarcodeQml> loadImage(const QUrl &fileUrl);
233233

234-
Q_INVOKABLE static QList<Result> loadImage(const QImage &img);
234+
Q_INVOKABLE static QList<BarcodeQml> loadImage(const QImage &img);
235235

236236
Q_INVOKABLE static QImage generateImage(const QString &data, const int width, const int height, const int margins,
237237
const int format, const int encoding, const int eccLevel,

thirdparty/zxing-cpp/wrappers/qt/ZXingQtVideoFilter.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ void ZXingQtVideoFilter::setCaptureRect(const QRect &captureRect)
109109
emit captureRectChanged();
110110
}
111111

112-
Result ZXingQtVideoFilter::process(const QVideoFrame &frame)
112+
BarcodeQml ZXingQtVideoFilter::process(const QVideoFrame &frame)
113113
{
114114
if (m_active && m_videoSink && m_processThread.isFinished())
115115
{
@@ -140,13 +140,13 @@ Result ZXingQtVideoFilter::process(const QVideoFrame &frame)
140140
}
141141
else
142142
{
143-
Result r;
143+
BarcodeQml r;
144144
r.runTime = t.elapsed();
145145
emit decodingFinished(r);
146146
return r;
147147
}
148148
});
149149
}
150150

151-
return Result();
151+
return BarcodeQml();
152152
}

thirdparty/zxing-cpp/wrappers/qt/ZXingQtVideoFilter.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,11 @@ class ZXingQtVideoFilter : public QObject
4949
void captureRectChanged();
5050

5151
void decodingStarted();
52-
void decodingFinished(Result result);
53-
void tagFound(Result result);
52+
void decodingFinished(BarcodeQml result);
53+
void tagFound(BarcodeQml result);
5454

5555
public slots:
56-
Result process(const QVideoFrame &frame);
56+
BarcodeQml process(const QVideoFrame &frame);
5757

5858
public:
5959
ZXingQtVideoFilter(QObject *parent = nullptr);

thirdparty/zxing-cpp/zxing-cpp.pri

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,17 @@ win32-msvc* {
2626

2727
################# WRAPPER
2828

29-
SOURCES += $${PWD}/wrappers/qt/ZXingCpp.cpp
30-
HEADERS += $${PWD}/wrappers/qt/ZXingCpp.h
29+
SOURCES += $${PWD}/wrappers/qt/ZXingQt.cpp
30+
HEADERS += $${PWD}/wrappers/qt/ZXingQt.h
3131
INCLUDEPATH += $${PWD}/wrappers/qt/
3232

3333
build_readers {
34-
SOURCES += $${PWD}/wrappers/qt/ZXingCppVideoFilter.cpp
35-
HEADERS += $${PWD}/wrappers/qt/ZXingCppVideoFilter.h
34+
SOURCES += $${PWD}/wrappers/qt/ZXingQtVideoFilter.cpp
35+
HEADERS += $${PWD}/wrappers/qt/ZXingQtVideoFilter.h
3636
}
3737
build_writers {
38-
SOURCES += $${PWD}/wrappers/qt/ZXingCppImageProvider.cpp
39-
HEADERS += $${PWD}/wrappers/qt/ZXingCppImageProvider.h
38+
SOURCES += $${PWD}/wrappers/qt/ZXingQtImageProvider.cpp
39+
HEADERS += $${PWD}/wrappers/qt/ZXingQtImageProvider.h
4040
}
4141

4242
################# COMMON_FILES
@@ -92,7 +92,8 @@ HEADERS += $${PWD}/core/src/Barcode.h \
9292
$${PWD}/core/src/ZXTestSupport.h \
9393
$${PWD}/core/src/ZXVersion.h \
9494
$${PWD}/core/src/ZXingC.h \
95-
$${PWD}/core/src/ZXingCpp.h
95+
$${PWD}/core/src/ZXingCpp.h \
96+
$${PWD}/core/Version.h
9697

9798
build_readers {
9899
SOURCES += $${PWD}/core/src/BinaryBitmap.cpp \

0 commit comments

Comments
 (0)