aboutsummaryrefslogtreecommitdiff
path: root/src/QR-Code-scanner/QrScanThread.cpp
diff options
context:
space:
mode:
authorxiphon <xiphon@protonmail.com>2020-12-21 19:58:27 +0000
committerxiphon <xiphon@protonmail.com>2020-12-23 15:08:42 +0000
commit8d4cda030e445d2b64cc327af125b538e014ecb0 (patch)
tree846a62bdd48dde1e5eb636b7e127ab1bfe3153ef /src/QR-Code-scanner/QrScanThread.cpp
parentdf771470c28c1efbb5402a755da0ab0dffaecd5f (diff)
downloadmonzero-gui-8d4cda030e445d2b64cc327af125b538e014ecb0.tar.gz
monzero-gui-8d4cda030e445d2b64cc327af125b538e014ecb0.tar.xz
monzero-gui-8d4cda030e445d2b64cc327af125b538e014ecb0.zip
QR-Code-scanner: integrate QUIRC library, implement QrDecoder, drop ZBar
Diffstat (limited to 'src/QR-Code-scanner/QrScanThread.cpp')
-rw-r--r--src/QR-Code-scanner/QrScanThread.cpp55
1 files changed, 4 insertions, 51 deletions
diff --git a/src/QR-Code-scanner/QrScanThread.cpp b/src/QR-Code-scanner/QrScanThread.cpp
index 15f4c030..6421321e 100644
--- a/src/QR-Code-scanner/QrScanThread.cpp
+++ b/src/QR-Code-scanner/QrScanThread.cpp
@@ -38,62 +38,15 @@ QrScanThread::QrScanThread(QObject *parent)
: QThread(parent)
,m_running(true)
{
- m_scanner.set_handler(*this);
}
-void QrScanThread::image_callback(zbar::Image &image)
-{
- qDebug() << "image_callback : Found Code ! " ;
- for(zbar::Image::SymbolIterator sym = image.symbol_begin();
- sym != image.symbol_end();
- ++sym)
- if(!sym->get_count()) {
- QString data = QString::fromStdString(sym->get_data());
- emit decoded(sym->get_type(), data);
- }
-}
-
-void QrScanThread::processZImage(zbar::Image &image)
-{
- m_scanner.recycle_image(image);
- zbar::Image tmp = image.convert(*(long*)"Y800");
- m_scanner.scan(tmp);
- image.set_symbols(tmp.get_symbols());
-}
-
-bool QrScanThread::zimageFromQImage(const QImage &qimg, zbar::Image &dst)
-{
- switch( qimg.format() ){
- case QImage::Format_RGB32 :
- case QImage::Format_ARGB32 :
- case QImage::Format_ARGB32_Premultiplied :
- break;
- default :
- emit notifyError(QString("Invalid QImage Format !"));
- return false;
- }
- unsigned int bpl( qimg.bytesPerLine() ), width( bpl / 4), height( qimg.height());
- dst.set_size(width, height);
- dst.set_format("BGR4");
-#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
- unsigned long datalen = qimg.sizeInBytes();
-#else
- unsigned long datalen = qimg.byteCount();
-#endif
- dst.set_data(qimg.bits(), datalen);
- if((width * 4 != bpl) || (width * height * 4 > datalen)){
- emit notifyError(QString("QImage to Zbar::Image failed !"));
- return false;
- }
- return true;
-}
void QrScanThread::processQImage(const QImage &qimg)
{
try {
- m_image = QSharedPointer<zbar::Image>(new zbar::Image());
- if( ! zimageFromQImage(qimg, *m_image) )
- return;
- processZImage(*m_image);
+ for (const std::string &code : m_decoder.decode(qimg))
+ {
+ emit decoded(QString::fromStdString(code));
+ }
}
catch(std::exception &e) {
qDebug() << "ERROR: " << e.what();