Skip to content

Commit

Permalink
Merge pull request #205 from ftylitak/switch-from-ref-to-shared-pointer
Browse files Browse the repository at this point in the history
Refactor all code to use QSharePointer and std::vector
  • Loading branch information
ftylitak authored Aug 8, 2021
2 parents 8a36df7 + 96cbe18 commit 9f7a1ac
Show file tree
Hide file tree
Showing 233 changed files with 3,883 additions and 3,682 deletions.
44 changes: 22 additions & 22 deletions src/CameraImageWrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ CameraImageWrapper::CameraImageWrapper(const QImage &sourceImage) : LuminanceSou
{
updateImageAsGrayscale( sourceImage );

delegate = Ref<GreyscaleLuminanceSource>(
delegate = QSharedPointer<GreyscaleLuminanceSource>(
new GreyscaleLuminanceSource(getMatrixP(), sourceImage.width(), sourceImage.height(),0, 0, sourceImage.width(), sourceImage.height()));
}

Expand All @@ -85,7 +85,7 @@ CameraImageWrapper::~CameraImageWrapper()
{
}

CameraImageWrapper *CameraImageWrapper::Factory(const QImage &sourceImage, int maxWidth, int maxHeight, bool smoothTransformation)
QSharedPointer<CameraImageWrapper> CameraImageWrapper::Factory(const QImage &sourceImage, int maxWidth, int maxHeight, bool smoothTransformation)
{
if((maxWidth != -1 && sourceImage.width() > maxWidth) || (maxHeight != -1 && sourceImage.height() > maxHeight))
{
Expand All @@ -95,26 +95,26 @@ CameraImageWrapper *CameraImageWrapper::Factory(const QImage &sourceImage, int m
maxHeight != -1 ? maxHeight : sourceImage.height(),
Qt::KeepAspectRatio,
smoothTransformation ? Qt::SmoothTransformation : Qt::FastTransformation);
return new CameraImageWrapper(image);
return QSharedPointer<CameraImageWrapper>(new CameraImageWrapper(image));
}
else
return new CameraImageWrapper(sourceImage);
return QSharedPointer<CameraImageWrapper>(new CameraImageWrapper(sourceImage));
}

ArrayRef<ArrayRef<zxing::byte> > CameraImageWrapper::getOriginalImage()
QSharedPointer<std::vector<QSharedPointer<std::vector<zxing::byte>>>> CameraImageWrapper::getOriginalImage()
{
return imageBytesPerRow;
}

ArrayRef<zxing::byte> CameraImageWrapper::getRow(int y, ArrayRef<zxing::byte> row) const
QSharedPointer<std::vector<zxing::byte>> CameraImageWrapper::getRow(int y, QSharedPointer<std::vector<zxing::byte>> row) const
{
if(delegate)
return delegate->getRow(y, row);
else
return getRowP(y, row);
}

ArrayRef<zxing::byte> CameraImageWrapper::getMatrix() const
QSharedPointer<std::vector<zxing::byte>> CameraImageWrapper::getMatrix() const
{
if(delegate)
return delegate->getMatrix();
Expand All @@ -130,7 +130,7 @@ bool CameraImageWrapper::isCropSupported() const
return LuminanceSource::isCropSupported();
}

Ref<LuminanceSource> CameraImageWrapper::crop(int left, int top, int width, int height) const
QSharedPointer<LuminanceSource> CameraImageWrapper::crop(int left, int top, int width, int height) const
{
if(delegate)
return delegate->crop(left, top, width, height);
Expand All @@ -146,35 +146,35 @@ bool CameraImageWrapper::isRotateSupported() const
return LuminanceSource::isRotateSupported();
}

Ref<LuminanceSource> CameraImageWrapper::invert() const
QSharedPointer<LuminanceSource> CameraImageWrapper::invert() const
{
if(delegate)
return delegate->invert();
else
return LuminanceSource::invert();
}

Ref<LuminanceSource> CameraImageWrapper::rotateCounterClockwise() const
QSharedPointer<LuminanceSource> CameraImageWrapper::rotateCounterClockwise() const
{
if(delegate)
return delegate->rotateCounterClockwise();
else
return LuminanceSource::rotateCounterClockwise();
}

ArrayRef<zxing::byte> CameraImageWrapper::getRowP(int y, ArrayRef<zxing::byte> row) const
QSharedPointer<std::vector<zxing::byte>> CameraImageWrapper::getRowP(int y, QSharedPointer<std::vector<zxing::byte>> row) const
{
int width = getWidth();

if (row->size() != width)
row.reset(ArrayRef<zxing::byte>(width));
row.reset(new std::vector<zxing::byte>(width));

Q_ASSERT(y >= 0 && y < getHeight());

return imageBytesPerRow[y];
return (*imageBytesPerRow)[y];
}

ArrayRef<zxing::byte> CameraImageWrapper::getMatrixP() const
QSharedPointer<std::vector<zxing::byte>> CameraImageWrapper::getMatrixP() const
{
return imageBytes;
}
Expand All @@ -195,28 +195,28 @@ void CameraImageWrapper::updateImageAsGrayscale(const QImage &origin)
const int width = getWidth();
const int height = getHeight();

imageBytes = ArrayRef<zxing::byte>(height*width);
imageBytesPerRow = ArrayRef<ArrayRef<zxing::byte>>(height);
zxing::byte* m = &imageBytes[0];
imageBytes = QSharedPointer<std::vector<zxing::byte>>(new std::vector<zxing::byte>((size_t)height * (size_t)width));
imageBytesPerRow = QSharedPointer<std::vector<QSharedPointer<std::vector<zxing::byte>>>>(new std::vector<QSharedPointer<std::vector<zxing::byte>>>(height));
zxing::byte* m = &(*imageBytes)[0];

for(int j=0; j<height; j++)
{
ArrayRef<zxing::byte> line(width);
QSharedPointer<std::vector<zxing::byte>> line(new std::vector<zxing::byte>(width));
for(int i=0; i<width; i++)
{
pixel = origin.pixel(i,j);
if(needsConvesionToGrayscale)
pixelGrayscale = gray(qRed(pixel),qGreen(pixel),qBlue(pixel));
else
pixelGrayscale = pixel & 0xFF;
line[i] = pixelGrayscale;
(*line)[i] = pixelGrayscale;
}
imageBytesPerRow[j] = line;
(*imageBytesPerRow)[j] = line;

#if __cplusplus > 199711L
memcpy(m, line->values().data(), width);
memcpy(m, (*line).data(), width); ///the below line is also usable
#else
memcpy(m, &line[0], width);
memcpy(m, &(*line)[0], width);
#endif
m += width * sizeof(zxing::byte);
}
Expand Down
26 changes: 13 additions & 13 deletions src/CameraImageWrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,30 +31,30 @@ class CameraImageWrapper : public LuminanceSource
CameraImageWrapper(CameraImageWrapper& otherInstance);
~CameraImageWrapper();

static CameraImageWrapper* Factory(const QImage& image, int maxWidth=-1, int maxHeight=-1, bool smoothTransformation=false);
static QSharedPointer<CameraImageWrapper> Factory(const QImage& image, int maxWidth=-1, int maxHeight=-1, bool smoothTransformation=false);

ArrayRef<ArrayRef<zxing::byte> > getOriginalImage();
Ref<GreyscaleLuminanceSource> getDelegate() { return delegate; }
QSharedPointer<std::vector<QSharedPointer<std::vector<zxing::byte>> > > getOriginalImage();
QSharedPointer<GreyscaleLuminanceSource> getDelegate() { return delegate; }

ArrayRef<zxing::byte> getRow(int y, ArrayRef<zxing::byte> row) const;
ArrayRef<zxing::byte> getMatrix() const;
QSharedPointer<std::vector<zxing::byte>> getRow(int y, QSharedPointer<std::vector<zxing::byte>> row) const;
QSharedPointer<std::vector<zxing::byte>> getMatrix() const;

bool isCropSupported() const;
Ref<LuminanceSource> crop(int left, int top, int width, int height) const;
QSharedPointer<LuminanceSource> crop(int left, int top, int width, int height) const;
bool isRotateSupported() const;
Ref<LuminanceSource> invert() const;
Ref<LuminanceSource> rotateCounterClockwise() const;
QSharedPointer<LuminanceSource> invert() const;
QSharedPointer<LuminanceSource> rotateCounterClockwise() const;

inline zxing::byte gray(const unsigned int r, const unsigned int g, const unsigned int b);

private:
ArrayRef<zxing::byte> getRowP(int y, ArrayRef<zxing::byte> row) const;
ArrayRef<zxing::byte> getMatrixP() const;
QSharedPointer<std::vector<zxing::byte>> getRowP(int y, QSharedPointer<std::vector<zxing::byte>> row) const;
QSharedPointer<std::vector<zxing::byte>> getMatrixP() const;
void updateImageAsGrayscale(const QImage &origin);

Ref<GreyscaleLuminanceSource> delegate;
ArrayRef<ArrayRef<zxing::byte>> imageBytesPerRow;
ArrayRef<zxing::byte> imageBytes;
QSharedPointer<GreyscaleLuminanceSource> delegate;
QSharedPointer<std::vector<QSharedPointer<std::vector<zxing::byte>>>> imageBytesPerRow;
QSharedPointer<std::vector<zxing::byte>> imageBytes;

static const zxing::byte B_TO_GREYSCALE[256];
static const zxing::byte G_TO_GREYSCALE[256];
Expand Down
3 changes: 0 additions & 3 deletions src/QZXing-components.pri
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,10 @@ HEADERS += $$PWD/QZXing_global.h \
$$PWD/zxing/zxing/common/GlobalHistogramBinarizer.h \
$$PWD/zxing/zxing/common/DetectorResult.h \
$$PWD/zxing/zxing/common/DecoderResult.h \
$$PWD/zxing/zxing/common/Counted.h \
$$PWD/zxing/zxing/common/CharacterSetECI.h \
$$PWD/zxing/zxing/common/BitSource.h \
$$PWD/zxing/zxing/common/BitMatrix.h \
$$PWD/zxing/zxing/common/BitArray.h \
$$PWD/zxing/zxing/common/Array.h \
$$PWD/zxing/zxing/common/detector/MathUtils.h \
$$PWD/zxing/zxing/common/detector/JavaMath.h \
$$PWD/zxing/zxing/common/detector/WhiteRectangleDetector.h \
Expand Down Expand Up @@ -109,7 +107,6 @@ SOURCES += $$PWD/CameraImageWrapper.cpp \
$$PWD/zxing/zxing/IllegalStateException.cpp \
$$PWD/zxing/zxing/NotFoundException.cpp \
$$PWD/zxing/zxing/WriterException.cpp \
$$PWD/zxing/zxing/common/Counted.cpp \
$$PWD/zxing/zxing/common/StringUtils.cpp \
$$PWD/zxing/zxing/common/Str.cpp \
$$PWD/zxing/zxing/common/PerspectiveTransform.cpp \
Expand Down
43 changes: 21 additions & 22 deletions src/QZXing.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,7 @@ void QZXing::setDecoder(const uint &hint)
* \param bitMatrix
* \return
*/
QRectF getTagRect(const ArrayRef<Ref<ResultPoint> > &resultPoints, const Ref<BitMatrix> &bitMatrix)
QRectF getTagRect(const QSharedPointer<std::vector<QSharedPointer<ResultPoint>> > &resultPoints, const QSharedPointer<BitMatrix> &bitMatrix)
{
if (resultPoints->size() < 2)
return QRectF();
Expand All @@ -355,15 +355,15 @@ QRectF getTagRect(const ArrayRef<Ref<ResultPoint> > &resultPoints, const Ref<Bit
// 1D barcode
if (resultPoints->size() == 2) {
WhiteRectangleDetector detector(bitMatrix);
std::vector<Ref<ResultPoint> > resultRectPoints = detector.detect();
std::vector<QSharedPointer<ResultPoint> > resultRectPoints = detector.detect();

if (resultRectPoints.size() != 4)
return QRectF();

qreal xMin = qreal(resultPoints[0]->getX());
qreal xMin = qreal((*resultPoints)[0]->getX());
qreal xMax = xMin;
for (int i = 1; i < resultPoints->size(); ++i) {
qreal x = qreal(resultPoints[i]->getX());
qreal x = qreal((*resultPoints)[i]->getX());
if (x < xMin)
xMin = x;
if (x > xMax)
Expand All @@ -385,13 +385,13 @@ QRectF getTagRect(const ArrayRef<Ref<ResultPoint> > &resultPoints, const Ref<Bit

// 2D QR code
if (resultPoints->size() == 4) {
qreal xMin = qreal(resultPoints[0]->getX());
qreal xMin = qreal((*resultPoints)[0]->getX());
qreal xMax = xMin;
qreal yMin = qreal(resultPoints[0]->getY());
qreal yMin = qreal((*resultPoints)[0]->getY());
qreal yMax = yMin;
for (int i = 1; i < resultPoints->size(); ++i) {
qreal x = qreal(resultPoints[i]->getX());
qreal y = qreal(resultPoints[i]->getY());
qreal x = qreal((*resultPoints)[i]->getX());
qreal y = qreal((*resultPoints)[i]->getY());
if (x < xMin)
xMin = x;
if (x > xMax)
Expand All @@ -414,7 +414,7 @@ QString QZXing::decodeImage(const QImage &image, int maxWidth, int maxHeight, bo
QElapsedTimer t;
t.start();
processingTime = -1;
Ref<Result> res;
QSharedPointer<Result> res;
emit decodingStarted();

if(image.isNull())
Expand All @@ -425,7 +425,7 @@ QString QZXing::decodeImage(const QImage &image, int maxWidth, int maxHeight, bo
return "";
}

CameraImageWrapper *ciw = ZXING_NULLPTR;
QSharedPointer<CameraImageWrapper> ciw;

if ((maxWidth > 0) || (maxHeight > 0))
ciw = CameraImageWrapper::Factory(image, maxWidth, maxHeight, smoothTransformation);
Expand All @@ -434,10 +434,10 @@ QString QZXing::decodeImage(const QImage &image, int maxWidth, int maxHeight, bo

QString errorMessage = "Unknown";

Ref<LuminanceSource> imageRefOriginal = Ref<LuminanceSource>(ciw);
Ref<LuminanceSource> imageRef = imageRefOriginal;
Ref<GlobalHistogramBinarizer> binz;
Ref<BinaryBitmap> bb;
QSharedPointer<LuminanceSource> imageRefOriginal = ciw;
QSharedPointer<LuminanceSource> imageRef = imageRefOriginal;
QSharedPointer<GlobalHistogramBinarizer> binz;
QSharedPointer<BinaryBitmap> bb;

size_t numberOfIterations = 0;
if (imageSourceFilter & SourceFilter_ImageNormal)
Expand All @@ -451,10 +451,10 @@ QString QZXing::decodeImage(const QImage &image, int maxWidth, int maxHeight, bo
try {
if((numberOfIterations == 1 && (imageSourceFilter & SourceFilter_ImageInverted)) || i == 1) {
//qDebug() << "Selecting Inverted Luminance source";
imageRef = Ref<LuminanceSource>((LuminanceSource*)(new InvertedLuminanceSource(imageRefOriginal)));
imageRef = QSharedPointer<LuminanceSource>((LuminanceSource*)(new InvertedLuminanceSource(imageRefOriginal)));
}
binz = Ref<GlobalHistogramBinarizer>( new GlobalHistogramBinarizer(imageRef) );
bb = Ref<BinaryBitmap>( new BinaryBitmap(binz) );
binz = QSharedPointer<GlobalHistogramBinarizer>( new GlobalHistogramBinarizer(imageRef) );
bb = QSharedPointer<BinaryBitmap>( new BinaryBitmap(binz) );

DecodeHints hints(static_cast<DecodeHintType>(enabledDecoders));

Expand Down Expand Up @@ -493,13 +493,13 @@ QString QZXing::decodeImage(const QImage &image, int maxWidth, int maxHeight, bo
}

if (!lastDecodeOperationSucceded_&& tryHarder_ && (tryHarderType & TryHarderBehaviour_Rotate) && bb->isRotateSupported()) {
Ref<BinaryBitmap> bbTmp = bb;
QSharedPointer<BinaryBitmap> bbTmp = bb;

//qDebug() << "Decoding phase 2, rotate: starting";

hints.setTryHarder(true);
for (int i=0; (i<3 && !lastDecodeOperationSucceded_); i++) {
Ref<BinaryBitmap> rotatedImage(bbTmp->rotateCounterClockwise());
QSharedPointer<BinaryBitmap> rotatedImage(bbTmp->rotateCounterClockwise());
bbTmp = rotatedImage;

try {
Expand Down Expand Up @@ -527,7 +527,6 @@ QString QZXing::decodeImage(const QImage &image, int maxWidth, int maxHeight, bo
int fmt = res->getBarcodeFormat().value;
decodedFormat = decoderFormatToString(1<<fmt);
charSet_ = QString::fromStdString(res->getCharSet());
qDebug() << "charSet_: " << charSet_;
if (!charSet_.isEmpty()) {
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
QTextCodec *codec = QTextCodec::codecForName(res->getCharSet().c_str());
Expand Down Expand Up @@ -670,7 +669,7 @@ QImage QZXing::encodeData(const QString &data, const QZXingEncoderConfig &encode
#ifdef ENABLE_ENCODER_QR_CODE
case EncoderFormat_QR_CODE:
{
Ref<qrcode::QRCode> barcode = qrcode::Encoder::encode(
QSharedPointer<qrcode::QRCode> barcode = qrcode::Encoder::encode(
data.toStdWString(),
encoderConfig.errorCorrectionLevel == EncodeErrorCorrectionLevel_H ?
qrcode::ErrorCorrectionLevel::H :
Expand All @@ -680,7 +679,7 @@ QImage QZXing::encodeData(const QString &data, const QZXingEncoderConfig &encode
qrcode::ErrorCorrectionLevel::M :
qrcode::ErrorCorrectionLevel::L)));

Ref<qrcode::ByteMatrix> bytesRef = barcode->getMatrix();
QSharedPointer<qrcode::ByteMatrix> bytesRef = barcode->getMatrix();
const std::vector< std::vector <zxing::byte> >& bytes = bytesRef->getArray();
const int width = int(bytesRef->getWidth()) + (encoderConfig.border ? 2 : 0);
const int height = int(bytesRef->getHeight()) + (encoderConfig.border ? 2 : 0);
Expand Down
4 changes: 2 additions & 2 deletions src/zxing/zxing/Binarizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@

namespace zxing {

Binarizer::Binarizer(Ref<LuminanceSource> source) : source_(source) {
Binarizer::Binarizer(QSharedPointer<LuminanceSource> source) : source_(source) {
}

Binarizer::~Binarizer() {
}

Ref<LuminanceSource> Binarizer::getLuminanceSource() const {
QSharedPointer<LuminanceSource> Binarizer::getLuminanceSource() const {
return source_;
}

Expand Down
16 changes: 8 additions & 8 deletions src/zxing/zxing/Binarizer.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,23 +23,23 @@
#include <zxing/LuminanceSource.h>
#include <zxing/common/BitArray.h>
#include <zxing/common/BitMatrix.h>
#include <zxing/common/Counted.h>
#include <QSharedPointer>

namespace zxing {

class Binarizer : public Counted {
class Binarizer {
private:
Ref<LuminanceSource> source_;
QSharedPointer<LuminanceSource> source_;

public:
Binarizer(Ref<LuminanceSource> source);
Binarizer(QSharedPointer<LuminanceSource> source);
virtual ~Binarizer();

virtual Ref<BitArray> getBlackRow(int y, Ref<BitArray> row) = 0;
virtual Ref<BitMatrix> getBlackMatrix() = 0;
virtual QSharedPointer<BitArray> getBlackRow(int y, QSharedPointer<BitArray> row) = 0;
virtual QSharedPointer<BitMatrix> getBlackMatrix() = 0;

Ref<LuminanceSource> getLuminanceSource() const ;
virtual Ref<Binarizer> createBinarizer(Ref<LuminanceSource> source) = 0;
QSharedPointer<LuminanceSource> getLuminanceSource() const ;
virtual QSharedPointer<Binarizer> createBinarizer(QSharedPointer<LuminanceSource> source) = 0;

int getWidth() const;
int getHeight() const;
Expand Down
Loading

0 comments on commit 9f7a1ac

Please sign in to comment.