From 31b5627feecb13332d9bd9774cd6f36493b2067c Mon Sep 17 00:00:00 2001 From: ftylitak Date: Wed, 14 Jul 2010 09:32:32 +0000 Subject: [PATCH] Updated with the latest version of the library. Uses MultiFormatReader instead of QRCodeReader. DataMatrixReader is still not supported. git-svn-id: https://zxing.googlecode.com/svn/trunk@1481 59b500cc-1b3d-0410-9834-0bbf25fbcc57 --- symbian/QQrDecoder/QQrDecoder.cpp | 7 +- symbian/QQrDecoder/QQrDecoder.pro | 3 - symbian/QQrDecoder/QQrDecoder_template.sisx | Bin 182448 -> 185712 bytes symbian/QQrDecoder/zxing/Binarizer.cpp | 6 +- symbian/QQrDecoder/zxing/Binarizer.h | 39 +- symbian/QQrDecoder/zxing/BinaryBitmap.cpp | 5 +- symbian/QQrDecoder/zxing/BinaryBitmap.h | 1 + symbian/QQrDecoder/zxing/LuminanceSource.cpp | 2 +- symbian/QQrDecoder/zxing/LuminanceSource.h | 2 +- .../QQrDecoder/zxing/MultiFormatReader.cpp | 24 +- symbian/QQrDecoder/zxing/MultiFormatReader.h | 4 +- symbian/QQrDecoder/zxing/common/BitArray.cpp | 10 +- .../zxing/common/GlobalHistogramBinarizer.cpp | 306 +++++---- .../zxing/common/PerspectiveTransform.cpp | 4 +- .../zxing/common/reedsolomon/GF256.cpp | 11 +- .../zxing/datamatrix/DataMatrixReader.cpp | 82 +++ .../zxing/datamatrix/DataMatrixReader.h | 44 ++ .../QQrDecoder/zxing/datamatrix/Version.cpp | 199 ++++++ symbian/QQrDecoder/zxing/datamatrix/Version.h | 87 +++ .../datamatrix/decoder/BitMatrixParser.cpp | 364 ++++++++++ .../datamatrix/decoder/BitMatrixParser.h | 59 ++ .../zxing/datamatrix/decoder/DataBlock.cpp | 113 +++ .../zxing/datamatrix/decoder/DataBlock.h | 49 ++ .../decoder/DecodedBitStreamParser.cpp | 404 +++++++++++ .../decoder/DecodedBitStreamParser.h | 103 +++ .../zxing/datamatrix/decoder/Decoder.cpp | 96 +++ .../zxing/datamatrix/decoder/Decoder.h | 50 ++ .../zxing/datamatrix/detector/CornerPoint.cpp | 54 ++ .../zxing/datamatrix/detector/CornerPoint.h | 47 ++ .../zxing/datamatrix/detector/Detector.cpp | 315 +++++++++ .../zxing/datamatrix/detector/Detector.h | 79 +++ .../detector/MonochromeRectangleDetector.cpp | 172 +++++ .../detector/MonochromeRectangleDetector.h | 61 ++ .../QQrDecoder/zxing/oned/Code128Reader.cpp | 22 +- symbian/QQrDecoder/zxing/oned/Code128Reader.h | 2 +- .../QQrDecoder/zxing/oned/Code39Reader.cpp | 646 +++++++++--------- symbian/QQrDecoder/zxing/oned/ITFReader.cpp | 6 +- symbian/QQrDecoder/zxing/oned/ITFReader.h | 2 +- symbian/QQrDecoder/zxing/oned/OneDReader.cpp | 29 +- symbian/QQrDecoder/zxing/oned/OneDReader.h | 2 +- .../QQrDecoder/zxing/oned/UPCEANReader.cpp | 6 +- symbian/QQrDecoder/zxing/oned/UPCEANReader.h | 2 +- symbian/ZXingBarcodeReader/.cproject | 66 +- symbian/ZXingBarcodeReader/group/ABLD.BAT | 2 +- .../group/ZXingBarcodeReader.mmp | 16 + .../group/zxing/Binarizer.cpp | 6 +- .../group/zxing/Binarizer.h | 39 +- .../group/zxing/BinaryBitmap.cpp | 5 +- .../group/zxing/BinaryBitmap.h | 1 + .../group/zxing/Exception.cpp | 2 +- .../group/zxing/Exception.h | 2 +- .../group/zxing/LuminanceSource.h | 6 +- .../group/zxing/MultiFormatReader.cpp | 25 +- .../group/zxing/MultiFormatReader.h | 7 +- .../ZXingBarcodeReader/group/zxing/Reader.h | 11 +- .../ZXingBarcodeReader/group/zxing/Result.cpp | 4 +- .../ZXingBarcodeReader/group/zxing/Result.h | 4 +- .../group/zxing/ResultPoint.h | 6 +- .../group/zxing/common/Array.h | 19 +- .../group/zxing/common/BitArray.cpp | 18 +- .../group/zxing/common/BitArray.h | 7 +- .../group/zxing/common/BitMatrix.cpp | 13 +- .../group/zxing/common/BitMatrix.h | 9 +- .../group/zxing/common/Counted.h | 4 +- .../group/zxing/common/EdgeDetector.cpp | 1 + .../zxing/common/GlobalHistogramBinarizer.cpp | 306 +++++---- .../zxing/common/GlobalHistogramBinarizer.h | 4 +- .../group/zxing/common/GridSampler.cpp | 4 +- .../group/zxing/common/GridSampler.h | 2 +- .../zxing/common/PerspectiveTransform.cpp | 32 +- .../group/zxing/common/PerspectiveTransform.h | 6 +- .../group/zxing/common/Point.h | 13 +- .../group/zxing/common/Str.cpp | 2 +- .../group/zxing/common/Str.h | 2 +- .../group/zxing/common/reedsolomon/GF256.cpp | 14 +- .../group/zxing/common/reedsolomon/GF256.h | 6 +- .../zxing/datamatrix/DataMatrixReader.cpp | 82 +++ .../group/zxing/datamatrix/DataMatrixReader.h | 44 ++ .../group/zxing/datamatrix/Version.cpp | 199 ++++++ .../group/zxing/datamatrix/Version.h | 87 +++ .../datamatrix/decoder/BitMatrixParser.cpp | 364 ++++++++++ .../datamatrix/decoder/BitMatrixParser.h | 59 ++ .../zxing/datamatrix/decoder/DataBlock.cpp | 113 +++ .../zxing/datamatrix/decoder/DataBlock.h | 49 ++ .../decoder/DecodedBitStreamParser.cpp | 404 +++++++++++ .../decoder/DecodedBitStreamParser.h | 103 +++ .../zxing/datamatrix/decoder/Decoder.cpp | 96 +++ .../group/zxing/datamatrix/decoder/Decoder.h | 50 ++ .../zxing/datamatrix/detector/CornerPoint.cpp | 54 ++ .../zxing/datamatrix/detector/CornerPoint.h | 47 ++ .../zxing/datamatrix/detector/Detector.cpp | 315 +++++++++ .../zxing/datamatrix/detector/Detector.h | 79 +++ .../detector/MonochromeRectangleDetector.cpp | 172 +++++ .../detector/MonochromeRectangleDetector.h | 61 ++ .../group/zxing/oned/Code128Reader.cpp | 54 +- .../group/zxing/oned/Code128Reader.h | 2 +- .../group/zxing/oned/Code39Reader.cpp | 636 ++++++++--------- .../group/zxing/oned/Code39Reader.h | 6 +- .../group/zxing/oned/EAN13Reader.cpp | 18 +- .../group/zxing/oned/EAN13Reader.h | 4 +- .../group/zxing/oned/EAN8Reader.cpp | 21 +- .../group/zxing/oned/EAN8Reader.h | 6 +- .../group/zxing/oned/ITFReader.cpp | 38 +- .../group/zxing/oned/ITFReader.h | 2 +- .../zxing/oned/MultiFormatOneDReader.cpp | 20 +- .../group/zxing/oned/MultiFormatOneDReader.h | 8 +- .../zxing/oned/MultiFormatUPCEANReader.cpp | 21 +- .../zxing/oned/MultiFormatUPCEANReader.h | 8 +- .../group/zxing/oned/OneDReader.cpp | 31 +- .../group/zxing/oned/OneDReader.h | 4 +- .../group/zxing/oned/OneDResultPoint.cpp | 8 +- .../group/zxing/oned/OneDResultPoint.h | 4 +- .../group/zxing/oned/UPCAReader.cpp | 19 +- .../group/zxing/oned/UPCAReader.h | 8 +- .../group/zxing/oned/UPCEANReader.cpp | 32 +- .../group/zxing/oned/UPCEANReader.h | 7 +- .../group/zxing/oned/UPCEReader.cpp | 19 +- .../group/zxing/oned/UPCEReader.h | 4 +- .../zxing/qrcode/ErrorCorrectionLevel.cpp | 4 +- .../group/zxing/qrcode/ErrorCorrectionLevel.h | 2 +- .../group/zxing/qrcode/Version.cpp | 20 +- .../group/zxing/qrcode/Version.h | 7 +- .../zxing/qrcode/decoder/BitMatrixParser.cpp | 4 +- .../zxing/qrcode/decoder/BitMatrixParser.h | 5 + .../group/zxing/qrcode/decoder/DataBlock.h | 1 - .../qrcode/decoder/DecodedBitStreamParser.cpp | 23 +- .../qrcode/decoder/DecodedBitStreamParser.h | 10 +- .../group/zxing/qrcode/decoder/Decoder.h | 1 - .../qrcode/detector/AlignmentPattern.cpp | 6 +- .../zxing/qrcode/detector/AlignmentPattern.h | 6 +- .../detector/AlignmentPatternFinder.cpp | 11 +- .../qrcode/detector/AlignmentPatternFinder.h | 11 +- .../group/zxing/qrcode/detector/Detector.cpp | 5 +- .../zxing/qrcode/detector/FinderPattern.cpp | 10 +- .../zxing/qrcode/detector/FinderPattern.h | 10 +- .../qrcode/detector/FinderPatternFinder.cpp | 6 +- .../zxing/qrcode/detector/QREdgeDetector.cpp | 1 + symbian/ZXingBarcodeReader/inc/CameraImage.h | 6 +- .../sis/ZXingBarcodeReader_S60.sisx | Bin 162324 -> 182956 bytes .../ZXingBarcodeReader/src/CameraImage.cpp | 6 +- .../src/DecodingOperations.cpp | 3 +- 141 files changed, 6266 insertions(+), 1433 deletions(-) create mode 100644 symbian/QQrDecoder/zxing/datamatrix/DataMatrixReader.cpp create mode 100644 symbian/QQrDecoder/zxing/datamatrix/DataMatrixReader.h create mode 100644 symbian/QQrDecoder/zxing/datamatrix/Version.cpp create mode 100644 symbian/QQrDecoder/zxing/datamatrix/Version.h create mode 100644 symbian/QQrDecoder/zxing/datamatrix/decoder/BitMatrixParser.cpp create mode 100644 symbian/QQrDecoder/zxing/datamatrix/decoder/BitMatrixParser.h create mode 100644 symbian/QQrDecoder/zxing/datamatrix/decoder/DataBlock.cpp create mode 100644 symbian/QQrDecoder/zxing/datamatrix/decoder/DataBlock.h create mode 100644 symbian/QQrDecoder/zxing/datamatrix/decoder/DecodedBitStreamParser.cpp create mode 100644 symbian/QQrDecoder/zxing/datamatrix/decoder/DecodedBitStreamParser.h create mode 100644 symbian/QQrDecoder/zxing/datamatrix/decoder/Decoder.cpp create mode 100644 symbian/QQrDecoder/zxing/datamatrix/decoder/Decoder.h create mode 100644 symbian/QQrDecoder/zxing/datamatrix/detector/CornerPoint.cpp create mode 100644 symbian/QQrDecoder/zxing/datamatrix/detector/CornerPoint.h create mode 100644 symbian/QQrDecoder/zxing/datamatrix/detector/Detector.cpp create mode 100644 symbian/QQrDecoder/zxing/datamatrix/detector/Detector.h create mode 100644 symbian/QQrDecoder/zxing/datamatrix/detector/MonochromeRectangleDetector.cpp create mode 100644 symbian/QQrDecoder/zxing/datamatrix/detector/MonochromeRectangleDetector.h create mode 100644 symbian/ZXingBarcodeReader/group/zxing/datamatrix/DataMatrixReader.cpp create mode 100644 symbian/ZXingBarcodeReader/group/zxing/datamatrix/DataMatrixReader.h create mode 100644 symbian/ZXingBarcodeReader/group/zxing/datamatrix/Version.cpp create mode 100644 symbian/ZXingBarcodeReader/group/zxing/datamatrix/Version.h create mode 100644 symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/BitMatrixParser.cpp create mode 100644 symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/BitMatrixParser.h create mode 100644 symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/DataBlock.cpp create mode 100644 symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/DataBlock.h create mode 100644 symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/DecodedBitStreamParser.cpp create mode 100644 symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/DecodedBitStreamParser.h create mode 100644 symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/Decoder.cpp create mode 100644 symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/Decoder.h create mode 100644 symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/CornerPoint.cpp create mode 100644 symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/CornerPoint.h create mode 100644 symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/Detector.cpp create mode 100644 symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/Detector.h create mode 100644 symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/MonochromeRectangleDetector.cpp create mode 100644 symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/MonochromeRectangleDetector.h diff --git a/symbian/QQrDecoder/QQrDecoder.cpp b/symbian/QQrDecoder/QQrDecoder.cpp index a20ad1fa4..7732394e6 100644 --- a/symbian/QQrDecoder/QQrDecoder.cpp +++ b/symbian/QQrDecoder/QQrDecoder.cpp @@ -29,7 +29,8 @@ ****************************************************************************/ #include "QQrDecoder.h" -#include +//#include +#include #include #include @@ -41,7 +42,7 @@ #include using namespace zxing; -using namespace zxing::qrcode; +//using namespace zxing::qrcode; QQrDecoder::QQrDecoder(QWidget *parent): QMainWindow(parent) { @@ -67,7 +68,7 @@ void QQrDecoder::findAndDecode() void QQrDecoder::decodeImage(QImage originalImage) { - QRCodeReader decoder; + MultiFormatReader decoder; image.setImage(originalImage); diff --git a/symbian/QQrDecoder/QQrDecoder.pro b/symbian/QQrDecoder/QQrDecoder.pro index 6ebb452c5..3da4ea73d 100644 --- a/symbian/QQrDecoder/QQrDecoder.pro +++ b/symbian/QQrDecoder/QQrDecoder.pro @@ -61,7 +61,6 @@ HEADERS += CameraImageWrapper.h \ zxing/qrcode/detector/FinderPatternFinder.h \ zxing/qrcode/detector/FinderPatternInfo.h \ zxing/qrcode/detector/QREdgeDetector.h \ - QQrDecoder.loc \ QQrDecoder.h SOURCES += CameraImageWrapper.cpp \ zxing/BarcodeFormat.cpp \ @@ -121,8 +120,6 @@ SOURCES += CameraImageWrapper.cpp \ zxing/qrcode/detector/FinderPatternFinder.cpp \ zxing/qrcode/detector/FinderPatternInfo.cpp \ zxing/qrcode/detector/QREdgeDetector.cpp \ - QQrDecoder.rss \ - QQrDecoder_reg.rss \ main.cpp \ QQrDecoder.cpp FORMS += QQrDecoder.ui diff --git a/symbian/QQrDecoder/QQrDecoder_template.sisx b/symbian/QQrDecoder/QQrDecoder_template.sisx index 55046912c09099e7e13870e5e0f1f7657fa0b000..b60f46ffecafb6a06e1b7d84166b58ee3573c76b 100644 GIT binary patch delta 176058 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

NNAuuW$LfI4w9WCT(5XmNZ5v>tcTrF%N-i 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

><^Z^ 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

N+8PC*(DMp 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 delta 172768 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≀_qJdNs&vnR0mL|Tw$j5ahRZn)TM)qXt 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

ik3E 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 diff --git a/symbian/QQrDecoder/zxing/Binarizer.cpp b/symbian/QQrDecoder/zxing/Binarizer.cpp index adaab0556..190138291 100644 --- a/symbian/QQrDecoder/zxing/Binarizer.cpp +++ b/symbian/QQrDecoder/zxing/Binarizer.cpp @@ -23,15 +23,17 @@ namespace zxing { - Binarizer::Binarizer(Ref source) : source_(source), array_(NULL), matrix_(NULL) { + Binarizer::Binarizer(Ref source) : source_(source), array_(NULL), matrix_(NULL), cached_y_(-1) { } Binarizer::~Binarizer() { } Ref Binarizer::getBlackRow(int y, Ref row){ - if (array_ == NULL) + if (array_ == NULL && cached_y_ != y) { array_ = estimateBlackRow(y, row); + cached_y_ = y; + } return array_; } diff --git a/symbian/QQrDecoder/zxing/Binarizer.h b/symbian/QQrDecoder/zxing/Binarizer.h index ea1240c0b..694018d72 100644 --- a/symbian/QQrDecoder/zxing/Binarizer.h +++ b/symbian/QQrDecoder/zxing/Binarizer.h @@ -28,24 +28,25 @@ #include namespace zxing { - - class Binarizer : public Counted { - private: - Ref source_; - Ref matrix_; - Ref array_; - - public: - Binarizer(Ref source); - virtual ~Binarizer(); - - virtual Ref estimateBlackRow(int y, Ref row)=0; - Ref getBlackRow(int y, Ref row); - - virtual Ref estimateBlackMatrix() = 0; - Ref getBlackMatrix(); - Ref getSource(); - }; - + +class Binarizer : public Counted { + private: + Ref source_; + Ref array_; + Ref matrix_; + int cached_y_; + + public: + Binarizer(Ref source); + virtual ~Binarizer(); + + virtual Ref estimateBlackRow(int y, Ref row)=0; + Ref getBlackRow(int y, Ref row); + + virtual Ref estimateBlackMatrix() = 0; + Ref getBlackMatrix(); + Ref getSource(); +}; + } #endif /* BINARIZER_H_ */ diff --git a/symbian/QQrDecoder/zxing/BinaryBitmap.cpp b/symbian/QQrDecoder/zxing/BinaryBitmap.cpp index c8fea36e4..ff79b55d5 100644 --- a/symbian/QQrDecoder/zxing/BinaryBitmap.cpp +++ b/symbian/QQrDecoder/zxing/BinaryBitmap.cpp @@ -23,7 +23,7 @@ namespace zxing { - BinaryBitmap::BinaryBitmap(Ref binarizer) : bits_(NULL), array_bits_(NULL), binarizer_(binarizer) { + BinaryBitmap::BinaryBitmap(Ref binarizer) : bits_(NULL), array_bits_(NULL), binarizer_(binarizer), cached_y_(-1) { } @@ -31,8 +31,9 @@ namespace zxing { } Ref BinaryBitmap::getBlackRow(int y, Ref row) { - if (array_bits_ == NULL) { + if (array_bits_ == NULL && cached_y_ != y) { array_bits_ = binarizer_->getBlackRow(y, row); + cached_y_ = y; } return array_bits_; } diff --git a/symbian/QQrDecoder/zxing/BinaryBitmap.h b/symbian/QQrDecoder/zxing/BinaryBitmap.h index ecd9a8549..ddea910c1 100644 --- a/symbian/QQrDecoder/zxing/BinaryBitmap.h +++ b/symbian/QQrDecoder/zxing/BinaryBitmap.h @@ -33,6 +33,7 @@ namespace zxing { Ref bits_; Ref array_bits_; Ref binarizer_; + int cached_y_; public: BinaryBitmap(Ref binarizer); diff --git a/symbian/QQrDecoder/zxing/LuminanceSource.cpp b/symbian/QQrDecoder/zxing/LuminanceSource.cpp index d7af3756b..6c8ef1e6e 100644 --- a/symbian/QQrDecoder/zxing/LuminanceSource.cpp +++ b/symbian/QQrDecoder/zxing/LuminanceSource.cpp @@ -28,7 +28,7 @@ LuminanceSource::LuminanceSource() { LuminanceSource::~LuminanceSource() { } -unsigned char* LuminanceSource::copyMatrix() const { +unsigned char* LuminanceSource::copyMatrix() { int width = getWidth(); int height = getHeight(); unsigned char* matrix = new unsigned char[width*height]; diff --git a/symbian/QQrDecoder/zxing/LuminanceSource.h b/symbian/QQrDecoder/zxing/LuminanceSource.h index fcc65883f..d39f06f38 100644 --- a/symbian/QQrDecoder/zxing/LuminanceSource.h +++ b/symbian/QQrDecoder/zxing/LuminanceSource.h @@ -34,7 +34,7 @@ public: virtual int getHeight() const = 0; virtual unsigned char getPixel(int x, int y) const = 0; - virtual unsigned char* copyMatrix() const; + virtual unsigned char* copyMatrix(); }; } diff --git a/symbian/QQrDecoder/zxing/MultiFormatReader.cpp b/symbian/QQrDecoder/zxing/MultiFormatReader.cpp index 169283ff2..bacb3cd89 100644 --- a/symbian/QQrDecoder/zxing/MultiFormatReader.cpp +++ b/symbian/QQrDecoder/zxing/MultiFormatReader.cpp @@ -19,7 +19,7 @@ * limitations under the License. */ -#include "MultiFormatReader.h" +#include #include //#include #include @@ -27,23 +27,27 @@ #include namespace zxing { - MultiFormatReader::MultiFormatReader() : readers() { - readers.push_back(Ref(new zxing::qrcode::QRCodeReader())); - //readers.push_back(Ref(new zxing::datamatrix::DataMatrixReader())); - readers.push_back(Ref(new zxing::oned::MultiFormatUPCEANReader())); - readers.push_back(Ref(new zxing::oned::MultiFormatOneDReader())); + MultiFormatReader::MultiFormatReader() { + readers.push_back(new zxing::qrcode::QRCodeReader()); + //readers.push_back(new zxing::datamatrix::DataMatrixReader()); + readers.push_back(new zxing::oned::MultiFormatUPCEANReader()); + readers.push_back(new zxing::oned::MultiFormatOneDReader()); } Ref MultiFormatReader::decode(Ref image){ - int size = readers.size(); - for (int i = 0; i < size; i++) { - Ref reader = readers[i]; + for (unsigned int i = 0; i < readers.size(); i++) { try { - return reader->decode(image); + return readers[i]->decode(image); } catch (ReaderException re) { // continue } } throw ReaderException("No code detected"); } + + MultiFormatReader::~MultiFormatReader(){ + for (unsigned int i = 0; i < readers.size(); i++) { + delete readers[i]; + } + } } diff --git a/symbian/QQrDecoder/zxing/MultiFormatReader.h b/symbian/QQrDecoder/zxing/MultiFormatReader.h index 4cbe61bb6..f88ebc979 100644 --- a/symbian/QQrDecoder/zxing/MultiFormatReader.h +++ b/symbian/QQrDecoder/zxing/MultiFormatReader.h @@ -3,6 +3,7 @@ * ZXing * * Created by Lukasz Warchol on 10-01-26. + * Modified by Luiz Silva on 09/02/2010. * Copyright 2010 ZXing authors All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -27,11 +28,12 @@ namespace zxing { class MultiFormatReader : public Reader { private: - std::vector >readers; + std::vectorreaders; public: MultiFormatReader(); Ref decode(Ref image); + ~MultiFormatReader(); }; } diff --git a/symbian/QQrDecoder/zxing/common/BitArray.cpp b/symbian/QQrDecoder/zxing/common/BitArray.cpp index 9355d0153..6ba7fd22f 100644 --- a/symbian/QQrDecoder/zxing/common/BitArray.cpp +++ b/symbian/QQrDecoder/zxing/common/BitArray.cpp @@ -107,10 +107,12 @@ vector& BitArray::getBitArray() { return bits_; } void BitArray::reverse() { - unsigned int allBits = numeric_limits::max(); - size_t max = bits_.size(); - for (size_t i = 0; i < max; i++) { - bits_[i] = bits_[i] ^ allBits; + std::vector newBits(bits_.size(),(const unsigned int) 0); + for (size_t i = 0; i < size_; i++) { + if (get(size_ - i - 1)) { + newBits[i >> logBits_] |= 1<< (i & bitsMask_); + } } + bits_ = newBits; } } diff --git a/symbian/QQrDecoder/zxing/common/GlobalHistogramBinarizer.cpp b/symbian/QQrDecoder/zxing/common/GlobalHistogramBinarizer.cpp index 61615d326..8b99611eb 100644 --- a/symbian/QQrDecoder/zxing/common/GlobalHistogramBinarizer.cpp +++ b/symbian/QQrDecoder/zxing/common/GlobalHistogramBinarizer.cpp @@ -24,154 +24,160 @@ #include namespace zxing { - using namespace std; - - const int LUMINANCE_BITS = 5; - const int LUMINANCE_SHIFT = 8 - LUMINANCE_BITS; - const int LUMINANCE_BUCKETS = 1 << LUMINANCE_BITS; - - GlobalHistogramBinarizer::GlobalHistogramBinarizer(Ref source) : - Binarizer(source) { - - } - - GlobalHistogramBinarizer::~GlobalHistogramBinarizer() { - } - - - Ref GlobalHistogramBinarizer::estimateBlackRow(int y, Ref row){ - vector histogram(LUMINANCE_BUCKETS, 0); - LuminanceSource& source = *getSource(); - int width = source.getWidth(); - if (row == NULL || row->getSize() < width) { - row = new BitArray(width); - } else { - row->clear(); - } - - for (int x = 0; x < width; x++) { - unsigned char pixel = source.getPixel(x, y); - histogram[pixel >> LUMINANCE_SHIFT]++; - } - int blackPoint = estimate(histogram) << LUMINANCE_SHIFT; - - - Ref array_ref(new BitArray(width)); - BitArray& array = *array_ref; - - int left = source.getPixel(0, y); - int center = source.getPixel(1, y); - for (int x = 1; x < width - 1; x++) { - int right = source.getPixel(x+1, y); - // A simple -1 4 -1 box filter with a weight of 2. - int luminance = ((center << 2) - left - right) >> 1; - if (luminance < blackPoint) { - array.set(x); - } - left = center; - center = right; - } - - return array_ref; - } - - Ref GlobalHistogramBinarizer::estimateBlackMatrix() { - // Faster than working with the reference - LuminanceSource& source = *getSource(); - int width = source.getWidth(); - int height = source.getHeight(); - vector histogram(LUMINANCE_BUCKETS, 0); - - - // Quickly calculates the histogram by sampling four rows from the image. This proved to be - // more robust on the blackbox tests than sampling a diagonal as we used to do. - for (int y = 1; y < 5; y++) { - int row = height * y / 5; - int right = (width << 2) / 5; - int sdf; - for (int x = width / 5; x < right; x++) { - unsigned char pixel = source.getPixel(x, row); - histogram[pixel >> LUMINANCE_SHIFT]++; - sdf = histogram[pixel >> LUMINANCE_SHIFT]; - } - } - - int blackPoint = estimate(histogram) << LUMINANCE_SHIFT; - - Ref matrix_ref(new BitMatrix(width, height)); - BitMatrix& matrix = *matrix_ref; - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - if (source.getPixel(x, y) <= blackPoint) - matrix.set(x, y); - } - } - return matrix_ref; - } - - int GlobalHistogramBinarizer::estimate(vector &histogram) { - int numBuckets = histogram.size(); - int maxBucketCount = 0; - - - // Find tallest peak in histogram - int firstPeak = 0; - int firstPeakSize = 0; - for (int i = 0; i < numBuckets; i++) { - if (histogram[i] > firstPeakSize) { - firstPeak = i; - firstPeakSize = histogram[i]; - } - if (histogram[i] > maxBucketCount) { - maxBucketCount = histogram[i]; - } - } - - // Find second-tallest peak -- well, another peak that is tall and not - // so close to the first one - int secondPeak = 0; - int secondPeakScore = 0; - for (int i = 0; i < numBuckets; i++) { - int distanceToBiggest = i - firstPeak; - // Encourage more distant second peaks by multiplying by square of distance - int score = histogram[i] * distanceToBiggest * distanceToBiggest; - if (score > secondPeakScore) { - secondPeak = i; - secondPeakScore = score; - } - } - - // Put firstPeak first - if (firstPeak > secondPeak) { - int temp = firstPeak; - firstPeak = secondPeak; - secondPeak = temp; - } - - // Kind of arbitrary; if the two peaks are very close, then we figure there is so little - // dynamic range in the image, that discriminating black and white is too error-prone. - // Decoding the image/line is either pointless, or may in some cases lead to a false positive - // for 1D formats, which are relatively lenient. - // We arbitrarily say "close" is "<= 1/16 of the total histogram buckets apart" - if (secondPeak - firstPeak <= numBuckets >> 4) { - throw IllegalArgumentException("Too little dynamic range in luminance"); - } - - // Find a valley between them that is low and closer to the white peak - int bestValley = secondPeak - 1; - int bestValleyScore = -1; - for (int i = secondPeak - 1; i > firstPeak; i--) { - int fromFirst = i - firstPeak; - // Favor a "valley" that is not too close to either peak -- especially not the black peak -- - // and that has a low value of course - int score = fromFirst * fromFirst * (secondPeak - i) * (maxBucketCount - histogram[i]); - if (score > bestValleyScore) { - bestValley = i; - bestValleyScore = score; - } - } - - return bestValley; - } - +using namespace std; + +const int LUMINANCE_BITS = 5; +const int LUMINANCE_SHIFT = 8 - LUMINANCE_BITS; +const int LUMINANCE_BUCKETS = 1 << LUMINANCE_BITS; + +GlobalHistogramBinarizer::GlobalHistogramBinarizer(Ref source) : + Binarizer(source) { + } + +GlobalHistogramBinarizer::~GlobalHistogramBinarizer() { +} + + +Ref GlobalHistogramBinarizer::estimateBlackRow(int y, + Ref row){ + vector histogram(LUMINANCE_BUCKETS, 0); + LuminanceSource& source = *getSource(); + int width = source.getWidth(); + if (row == NULL || static_cast(row->getSize()) < width) { + row = new BitArray(width); + } else { + row->clear(); + } + + for (int x = 0; x < width; x++) { + unsigned char pixel = source.getPixel(x, y); + histogram[pixel >> LUMINANCE_SHIFT]++; + } + int blackPoint = estimate(histogram) << LUMINANCE_SHIFT; + + + Ref array_ref(new BitArray(width)); + BitArray& array = *array_ref; + + int left = source.getPixel(0, y); + int center = source.getPixel(1, y); + for (int x = 1; x < width - 1; x++) { + int right = source.getPixel(x+1, y); + // A simple -1 4 -1 box filter with a weight of 2. + int luminance = ((center << 2) - left - right) >> 1; + if (luminance < blackPoint) { + array.set(x); + } + left = center; + center = right; + } + + return array_ref; +} + +Ref GlobalHistogramBinarizer::estimateBlackMatrix() { + // Faster than working with the reference + LuminanceSource& source = *getSource(); + int width = source.getWidth(); + int height = source.getHeight(); + vector histogram(LUMINANCE_BUCKETS, 0); + + + // Quickly calculates the histogram by sampling four rows from the image. + // This proved to be more robust on the blackbox tests than sampling a + // diagonal as we used to do. + for (int y = 1; y < 5; y++) { + int row = height * y / 5; + int right = (width << 2) / 5; + int sdf; + for (int x = width / 5; x < right; x++) { + unsigned char pixel = source.getPixel(x, row); + histogram[pixel >> LUMINANCE_SHIFT]++; + sdf = histogram[pixel >> LUMINANCE_SHIFT]; + } + } + + int blackPoint = estimate(histogram) << LUMINANCE_SHIFT; + + Ref matrix_ref(new BitMatrix(width, height)); + BitMatrix& matrix = *matrix_ref; + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + if (source.getPixel(x, y) <= blackPoint) + matrix.set(x, y); + } + } + return matrix_ref; +} + +int GlobalHistogramBinarizer::estimate(vector &histogram) { + int numBuckets = histogram.size(); + int maxBucketCount = 0; + + + // Find tallest peak in histogram + int firstPeak = 0; + int firstPeakSize = 0; + for (int i = 0; i < numBuckets; i++) { + if (histogram[i] > firstPeakSize) { + firstPeak = i; + firstPeakSize = histogram[i]; + } + if (histogram[i] > maxBucketCount) { + maxBucketCount = histogram[i]; + } + } + + // Find second-tallest peak -- well, another peak that is tall and not + // so close to the first one + int secondPeak = 0; + int secondPeakScore = 0; + for (int i = 0; i < numBuckets; i++) { + int distanceToBiggest = i - firstPeak; + // Encourage more distant second peaks by multiplying by square of distance + int score = histogram[i] * distanceToBiggest * distanceToBiggest; + if (score > secondPeakScore) { + secondPeak = i; + secondPeakScore = score; + } + } + + // Put firstPeak first + if (firstPeak > secondPeak) { + int temp = firstPeak; + firstPeak = secondPeak; + secondPeak = temp; + } + + // Kind of arbitrary; if the two peaks are very close, then we figure there is + // so little dynamic range in the image, that discriminating black and white + // is too error-prone. + // Decoding the image/line is either pointless, or may in some cases lead to + // a false positive for 1D formats, which are relatively lenient. + // We arbitrarily say "close" is + // "<= 1/16 of the total histogram buckets apart" + if (secondPeak - firstPeak <= numBuckets >> 4) { + throw IllegalArgumentException("Too little dynamic range in luminance"); + } + + // Find a valley between them that is low and closer to the white peak + int bestValley = secondPeak - 1; + int bestValleyScore = -1; + for (int i = secondPeak - 1; i > firstPeak; i--) { + int fromFirst = i - firstPeak; + // Favor a "valley" that is not too close to either peak -- especially not + // the black peak -- and that has a low value of course + int score = fromFirst * fromFirst * (secondPeak - i) * + (maxBucketCount - histogram[i]); + if (score > bestValleyScore) { + bestValley = i; + bestValleyScore = score; + } + } + + return bestValley; +} + +} // namespace zxing + diff --git a/symbian/QQrDecoder/zxing/common/PerspectiveTransform.cpp b/symbian/QQrDecoder/zxing/common/PerspectiveTransform.cpp index 16d132774..5b4ae2e8b 100644 --- a/symbian/QQrDecoder/zxing/common/PerspectiveTransform.cpp +++ b/symbian/QQrDecoder/zxing/common/PerspectiveTransform.cpp @@ -28,8 +28,8 @@ PerspectiveTransform::PerspectiveTransform(float inA11, float inA21, float inA22, float inA32, float inA13, float inA23, float inA33) : - a11(inA11), a21(inA21), a31(inA31), a12(inA12), a22(inA22), a32(inA32), - a13(inA13), a23(inA23), a33(inA33) {} + a11(inA11), a12(inA12), a13(inA13), a21(inA21), a22(inA22), a23(inA23), + a31(inA31), a32(inA32), a33(inA33) {} Ref PerspectiveTransform::quadrilateralToQuadrilateral(float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3, float x0p, float y0p, float x1p, float y1p, float x2p, float y2p, diff --git a/symbian/QQrDecoder/zxing/common/reedsolomon/GF256.cpp b/symbian/QQrDecoder/zxing/common/reedsolomon/GF256.cpp index 35fc69232..51b621e8e 100644 --- a/symbian/QQrDecoder/zxing/common/reedsolomon/GF256.cpp +++ b/symbian/QQrDecoder/zxing/common/reedsolomon/GF256.cpp @@ -109,13 +109,10 @@ int GF256::multiply(int a, int b) { if (a == 0 || b == 0) { return 0; } - if (a == 1) { - return b; - } - if (b == 1) { - return a; - } - return exp_[(log_[a] + log_[b]) % 255]; + int logSum = log_[a] + log_[b]; + // index is a sped-up alternative to logSum % 255 since sum + // is in [0,510]. Thanks to jmsachs for the idea + return exp_[(logSum & 0xFF) + (logSum >> 8)]; } GF256 GF256::QR_CODE_FIELD(0x011D); // x^8 + x^4 + x^3 + x^2 + 1 diff --git a/symbian/QQrDecoder/zxing/datamatrix/DataMatrixReader.cpp b/symbian/QQrDecoder/zxing/datamatrix/DataMatrixReader.cpp new file mode 100644 index 000000000..8b00161ef --- /dev/null +++ b/symbian/QQrDecoder/zxing/datamatrix/DataMatrixReader.cpp @@ -0,0 +1,82 @@ +/* + * DataMatrixReader.cpp + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +namespace zxing { +namespace datamatrix { + +using namespace std; + +DataMatrixReader::DataMatrixReader() : + decoder_() { +} + +Ref DataMatrixReader::decode(Ref image) { +#ifdef DEBUG + cout << "decoding image " << image.object_ << ":\n" << flush; +#endif + + Detector detector(image->getBlackMatrix()); + + +#ifdef DEBUG + cout << "(1) created detector " << &detector << "\n" << flush; +#endif + + Ref detectorResult(detector.detect()); +#ifdef DEBUG + cout << "(2) detected, have detectorResult " << detectorResult.object_ << "\n" << flush; +#endif + + std::vector > points(detectorResult->getPoints()); + + +#ifdef DEBUG + cout << "(3) extracted points " << &points << "\n" << flush; + cout << "found " << points.size() << " points:\n"; + for (size_t i = 0; i < points.size(); i++) { + cout << " " << points[i]->getX() << "," << points[i]->getY() << "\n"; + } + cout << "bits:\n"; + cout << *(detectorResult->getBits()) << "\n"; +#endif + + Ref decoderResult(decoder_.decode(detectorResult->getBits())); +#ifdef DEBUG + cout << "(4) decoded, have decoderResult " << decoderResult.object_ << "\n" << flush; +#endif + + Ref result( + new Result(decoderResult->getText(), decoderResult->getRawBytes(), points, BarcodeFormat_DATA_MATRIX)); +#ifdef DEBUG + cout << "(5) created result " << result.object_ << ", returning\n" << flush; +#endif + + return result; +} + +DataMatrixReader::~DataMatrixReader() { +} + +} +} diff --git a/symbian/QQrDecoder/zxing/datamatrix/DataMatrixReader.h b/symbian/QQrDecoder/zxing/datamatrix/DataMatrixReader.h new file mode 100644 index 000000000..4d621c8d9 --- /dev/null +++ b/symbian/QQrDecoder/zxing/datamatrix/DataMatrixReader.h @@ -0,0 +1,44 @@ +#ifndef __DATA_MATRIX_READER_H__ +#define __DATA_MATRIX_READER_H__ + +/* + * DataMatrixReader.h + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +namespace zxing { +namespace datamatrix { + +class DataMatrixReader : public Reader { +private: + Decoder decoder_; + +public: + DataMatrixReader(); + virtual Ref decode(Ref image); + virtual ~DataMatrixReader(); + +}; + +} +} + +#endif // __DATA_MATRIX_READER_H__ diff --git a/symbian/QQrDecoder/zxing/datamatrix/Version.cpp b/symbian/QQrDecoder/zxing/datamatrix/Version.cpp new file mode 100644 index 000000000..e48d88ef9 --- /dev/null +++ b/symbian/QQrDecoder/zxing/datamatrix/Version.cpp @@ -0,0 +1,199 @@ +/* + * Version.cpp + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +namespace zxing { +namespace datamatrix { +using namespace std; + +ECB::ECB(int count, int dataCodewords) : + count_(count), dataCodewords_(dataCodewords) { +} + +int ECB::getCount() { + return count_; +} + +int ECB::getDataCodewords() { + return dataCodewords_; +} + +ECBlocks::ECBlocks(int ecCodewords, ECB *ecBlocks) : + ecCodewords_(ecCodewords), ecBlocks_(1, ecBlocks) { +} + +ECBlocks::ECBlocks(int ecCodewords, ECB *ecBlocks1, ECB *ecBlocks2) : + ecCodewords_(ecCodewords), ecBlocks_(1, ecBlocks1) { + ecBlocks_.push_back(ecBlocks2); +} + +int ECBlocks::getECCodewords() { + return ecCodewords_; +} + +std::vector& ECBlocks::getECBlocks() { + return ecBlocks_; +} + +ECBlocks::~ECBlocks() { + for (size_t i = 0; i < ecBlocks_.size(); i++) { + delete ecBlocks_[i]; + } +} + +vector > Version::VERSIONS; +static int N_VERSIONS = Version::buildVersions(); + +Version::Version(int versionNumber, int symbolSizeRows, int symbolSizeColumns, int dataRegionSizeRows, + int dataRegionSizeColumns, ECBlocks* ecBlocks) : versionNumber_(versionNumber), + symbolSizeRows_(symbolSizeRows), symbolSizeColumns_(symbolSizeColumns), + dataRegionSizeRows_(dataRegionSizeRows), dataRegionSizeColumns_(dataRegionSizeColumns), + ecBlocks_(ecBlocks), totalCodewords_(0) { + // Calculate the total number of codewords + int total = 0; + int ecCodewords = ecBlocks_->getECCodewords(); + vector &ecbArray = ecBlocks_->getECBlocks(); + for (unsigned int i = 0; i < ecbArray.size(); i++) { + ECB *ecBlock = ecbArray[i]; + total += ecBlock->getCount() * (ecBlock->getDataCodewords() + ecCodewords); + } + totalCodewords_ = total; +} + +Version::~Version() { + delete ecBlocks_; +} + +int Version::getVersionNumber() { + return versionNumber_; +} + +int Version::getSymbolSizeRows() { + return symbolSizeRows_; +} + +int Version::getSymbolSizeColumns() { + return symbolSizeColumns_; +} + +int Version::getDataRegionSizeRows() { + return dataRegionSizeRows_; +} + +int Version::getDataRegionSizeColumns() { + return dataRegionSizeColumns_; +} + +int Version::getTotalCodewords() { + return totalCodewords_; +} + +ECBlocks* Version::getECBlocks() { + return ecBlocks_; +} + +Ref Version::getVersionForDimensions(int numRows, int numColumns) { + if ((numRows & 0x01) != 0 || (numColumns & 0x01) != 0) { + throw ReaderException("Number of rows and columns must be even"); + } + + // TODO(bbrown): This is doing a linear search through the array of versions. + // If we interleave the rectangular versions with the square versions we could + // do a binary search. + for (int i = 0; i < N_VERSIONS; ++i){ + Ref version(VERSIONS[i]); + if (version->getSymbolSizeRows() == numRows && version->getSymbolSizeColumns() == numColumns) { + return version; + } + } + throw ReaderException("Error version not found"); + } + +/** + * See ISO 16022:2006 5.5.1 Table 7 + */ +int Version::buildVersions() { + VERSIONS.push_back(Ref(new Version(1, 10, 10, 8, 8, + new ECBlocks(5, new ECB(1, 3))))); + VERSIONS.push_back(Ref(new Version(2, 12, 12, 10, 10, + new ECBlocks(7, new ECB(1, 5))))); + VERSIONS.push_back(Ref(new Version(3, 14, 14, 12, 12, + new ECBlocks(10, new ECB(1, 8))))); + VERSIONS.push_back(Ref(new Version(4, 16, 16, 14, 14, + new ECBlocks(12, new ECB(1, 12))))); + VERSIONS.push_back(Ref(new Version(5, 18, 18, 16, 16, + new ECBlocks(14, new ECB(1, 18))))); + VERSIONS.push_back(Ref(new Version(6, 20, 20, 18, 18, + new ECBlocks(18, new ECB(1, 22))))); + VERSIONS.push_back(Ref(new Version(7, 22, 22, 20, 20, + new ECBlocks(20, new ECB(1, 30))))); + VERSIONS.push_back(Ref(new Version(8, 24, 24, 22, 22, + new ECBlocks(24, new ECB(1, 36))))); + VERSIONS.push_back(Ref(new Version(9, 26, 26, 24, 24, + new ECBlocks(28, new ECB(1, 44))))); + VERSIONS.push_back(Ref(new Version(10, 32, 32, 14, 14, + new ECBlocks(36, new ECB(1, 62))))); + VERSIONS.push_back(Ref(new Version(11, 36, 36, 16, 16, + new ECBlocks(42, new ECB(1, 86))))); + VERSIONS.push_back(Ref(new Version(12, 40, 40, 18, 18, + new ECBlocks(48, new ECB(1, 114))))); + VERSIONS.push_back(Ref(new Version(13, 44, 44, 20, 20, + new ECBlocks(56, new ECB(1, 144))))); + VERSIONS.push_back(Ref(new Version(14, 48, 48, 22, 22, + new ECBlocks(68, new ECB(1, 174))))); + VERSIONS.push_back(Ref(new Version(15, 52, 52, 24, 24, + new ECBlocks(42, new ECB(2, 102))))); + VERSIONS.push_back(Ref(new Version(16, 64, 64, 14, 14, + new ECBlocks(56, new ECB(2, 140))))); + VERSIONS.push_back(Ref(new Version(17, 72, 72, 16, 16, + new ECBlocks(36, new ECB(4, 92))))); + VERSIONS.push_back(Ref(new Version(18, 80, 80, 18, 18, + new ECBlocks(48, new ECB(4, 114))))); + VERSIONS.push_back(Ref(new Version(19, 88, 88, 20, 20, + new ECBlocks(56, new ECB(4, 144))))); + VERSIONS.push_back(Ref(new Version(20, 96, 96, 22, 22, + new ECBlocks(68, new ECB(4, 174))))); + VERSIONS.push_back(Ref(new Version(21, 104, 104, 24, 24, + new ECBlocks(56, new ECB(6, 136))))); + VERSIONS.push_back(Ref(new Version(22, 120, 120, 18, 18, + new ECBlocks(68, new ECB(6, 175))))); + VERSIONS.push_back(Ref(new Version(23, 132, 132, 20, 20, + new ECBlocks(62, new ECB(8, 163))))); + VERSIONS.push_back(Ref(new Version(24, 144, 144, 22, 22, + new ECBlocks(62, new ECB(8, 156), new ECB(2, 155))))); + VERSIONS.push_back(Ref(new Version(25, 8, 18, 6, 16, + new ECBlocks(7, new ECB(1, 5))))); + VERSIONS.push_back(Ref(new Version(26, 8, 32, 6, 14, + new ECBlocks(11, new ECB(1, 10))))); + VERSIONS.push_back(Ref(new Version(27, 12, 26, 10, 24, + new ECBlocks(14, new ECB(1, 16))))); + VERSIONS.push_back(Ref(new Version(28, 12, 36, 10, 16, + new ECBlocks(18, new ECB(1, 22))))); + VERSIONS.push_back(Ref(new Version(29, 16, 36, 10, 16, + new ECBlocks(24, new ECB(1, 32))))); + VERSIONS.push_back(Ref(new Version(30, 16, 48, 14, 22, + new ECBlocks(28, new ECB(1, 49))))); + return VERSIONS.size(); +} +} +} diff --git a/symbian/QQrDecoder/zxing/datamatrix/Version.h b/symbian/QQrDecoder/zxing/datamatrix/Version.h new file mode 100644 index 000000000..d8523fe23 --- /dev/null +++ b/symbian/QQrDecoder/zxing/datamatrix/Version.h @@ -0,0 +1,87 @@ +#ifndef __VERSION_H__ +#define __VERSION_H__ + +/* + * Version.h + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +namespace zxing { +namespace datamatrix { + +class ECB { +private: + int count_; + int dataCodewords_; +public: + ECB(int count, int dataCodewords); + int getCount(); + int getDataCodewords(); +}; + +class ECBlocks { +private: + int ecCodewords_; + std::vector ecBlocks_; +public: + ECBlocks(int ecCodewords, ECB *ecBlocks); + ECBlocks(int ecCodewords, ECB *ecBlocks1, ECB *ecBlocks2); + int getECCodewords(); + std::vector& getECBlocks(); + ~ECBlocks(); +}; + +class Version : public Counted { +private: + int versionNumber_; + int symbolSizeRows_; + int symbolSizeColumns_; + int dataRegionSizeRows_; + int dataRegionSizeColumns_; + ECBlocks* ecBlocks_; + int totalCodewords_; + Version(int versionNumber, int symbolSizeRows, int symbolSizeColumns, int dataRegionSizeRows, + int dataRegionSizeColumns, ECBlocks *ecBlocks); + +public: + static std::vector > VERSIONS; + + ~Version(); + int getVersionNumber(); + int getSymbolSizeRows(); + int getSymbolSizeColumns(); + int getDataRegionSizeRows(); + int getDataRegionSizeColumns(); + int getTotalCodewords(); + ECBlocks* getECBlocks(); + static int buildVersions(); + Ref getVersionForDimensions(int numRows, int numColumns); + +private: + Version(const Version&); + Version & operator=(const Version&); +}; +} +} + +#endif // __VERSION_H__ diff --git a/symbian/QQrDecoder/zxing/datamatrix/decoder/BitMatrixParser.cpp b/symbian/QQrDecoder/zxing/datamatrix/decoder/BitMatrixParser.cpp new file mode 100644 index 000000000..eb5c06f48 --- /dev/null +++ b/symbian/QQrDecoder/zxing/datamatrix/decoder/BitMatrixParser.cpp @@ -0,0 +1,364 @@ +/* + * BitMatrixParser.cpp + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +namespace zxing { +namespace datamatrix { + +int BitMatrixParser::copyBit(size_t x, size_t y, int versionBits) { + return bitMatrix_->get(x, y) ? (versionBits << 1) | 0x1 : versionBits << 1; +} + +BitMatrixParser::BitMatrixParser(Ref bitMatrix) : bitMatrix_(NULL), + parsedVersion_(NULL), + readBitMatrix_(NULL) { + size_t dimension = bitMatrix->getDimension(); + if (dimension < 10 || dimension > 144 || (dimension & 0x01) != 0) + throw ReaderException("Dimension must be even, > 10 < 144"); + + parsedVersion_ = readVersion(bitMatrix); + bitMatrix_ = extractDataRegion(bitMatrix); + // TODO(bbrown): Make this work for rectangular symbols + readBitMatrix_ = new BitMatrix(bitMatrix_->getDimension()); +} + +Ref BitMatrixParser::readVersion(Ref bitMatrix) { + if (parsedVersion_ != 0) { + return parsedVersion_; + } + + // TODO(bbrown): make this work for rectangular dimensions as well. + int numRows = bitMatrix->getDimension(); + int numColumns = numRows; + + Ref version = parsedVersion_->getVersionForDimensions(numRows, numColumns); + if (version != 0) { + return version; + } + throw ReaderException("Couldn't decode version"); +} + +ArrayRef BitMatrixParser::readCodewords() { + ArrayRef result(parsedVersion_->getTotalCodewords()); + int resultOffset = 0; + int row = 4; + int column = 0; + + // TODO(bbrown): Data Matrix can be rectangular, assuming square for now + int numRows = bitMatrix_->getDimension(); + int numColumns = numRows; + + bool corner1Read = false; + bool corner2Read = false; + bool corner3Read = false; + bool corner4Read = false; + + // Read all of the codewords + do { + // Check the four corner cases + if ((row == numRows) && (column == 0) && !corner1Read) { + result[resultOffset++] = (unsigned char) readCorner1(numRows, numColumns); + row -= 2; + column +=2; + corner1Read = true; + } else if ((row == numRows-2) && (column == 0) && ((numColumns & 0x03) != 0) && !corner2Read) { + result[resultOffset++] = (unsigned char) readCorner2(numRows, numColumns); + row -= 2; + column +=2; + corner2Read = true; + } else if ((row == numRows+4) && (column == 2) && ((numColumns & 0x07) == 0) && !corner3Read) { + result[resultOffset++] = (unsigned char) readCorner3(numRows, numColumns); + row -= 2; + column +=2; + corner3Read = true; + } else if ((row == numRows-2) && (column == 0) && ((numColumns & 0x07) == 4) && !corner4Read) { + result[resultOffset++] = (unsigned char) readCorner4(numRows, numColumns); + row -= 2; + column +=2; + corner4Read = true; + } else { + // Sweep upward diagonally to the right + do { + if ((row < numRows) && (column >= 0) && !readBitMatrix_->get(column, row)) { + result[resultOffset++] = (unsigned char) readUtah(row, column, numRows, numColumns); + } + row -= 2; + column +=2; + } while ((row >= 0) && (column < numColumns)); + row += 1; + column +=3; + + // Sweep downward diagonally to the left + do { + if ((row >= 0) && (column < numColumns) && !readBitMatrix_->get(column, row)) { + result[resultOffset++] = (unsigned char) readUtah(row, column, numRows, numColumns); + } + row += 2; + column -=2; + } while ((row < numRows) && (column >= 0)); + row += 3; + column +=1; + } + } while ((row < numRows) || (column < numColumns)); + + if (resultOffset != parsedVersion_->getTotalCodewords()) { + throw ReaderException("Did not read all codewords"); + } + return result; +} + +bool BitMatrixParser::readModule(int row, int column, int numRows, int numColumns) { + // Adjust the row and column indices based on boundary wrapping + if (row < 0) { + row += numRows; + column += 4 - ((numRows + 4) & 0x07); + } + if (column < 0) { + column += numColumns; + row += 4 - ((numColumns + 4) & 0x07); + } + readBitMatrix_->set(column, row); + return bitMatrix_->get(column, row); + } + +int BitMatrixParser::readUtah(int row, int column, int numRows, int numColumns) { + int currentByte = 0; + if (readModule(row - 2, column - 2, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(row - 2, column - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(row - 1, column - 2, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(row - 1, column - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(row - 1, column, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(row, column - 2, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(row, column - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(row, column, numRows, numColumns)) { + currentByte |= 1; + } + return currentByte; + } + +int BitMatrixParser::readCorner1(int numRows, int numColumns) { + int currentByte = 0; + if (readModule(numRows - 1, 0, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(numRows - 1, 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(numRows - 1, 2, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 2, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(1, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(2, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(3, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + return currentByte; + } + +int BitMatrixParser::readCorner2(int numRows, int numColumns) { + int currentByte = 0; + if (readModule(numRows - 3, 0, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(numRows - 2, 0, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(numRows - 1, 0, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 4, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 3, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 2, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(1, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + return currentByte; + } + +int BitMatrixParser::readCorner3(int numRows, int numColumns) { + int currentByte = 0; + if (readModule(numRows - 1, 0, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(numRows - 1, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 3, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 2, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(1, numColumns - 3, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(1, numColumns - 2, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(1, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + return currentByte; + } + +int BitMatrixParser::readCorner4(int numRows, int numColumns) { + int currentByte = 0; + if (readModule(numRows - 3, 0, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(numRows - 2, 0, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(numRows - 1, 0, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 2, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(1, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(2, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(3, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + return currentByte; + } + +Ref BitMatrixParser::extractDataRegion(Ref bitMatrix) { + int symbolSizeRows = parsedVersion_->getSymbolSizeRows(); + int symbolSizeColumns = parsedVersion_->getSymbolSizeColumns(); + + // TODO(bbrown): Make this work with rectangular codes + if ((int)bitMatrix->getDimension() != symbolSizeRows) { + throw IllegalArgumentException("Dimension of bitMarix must match the version size"); + } + + int dataRegionSizeRows = parsedVersion_->getDataRegionSizeRows(); + int dataRegionSizeColumns = parsedVersion_->getDataRegionSizeColumns(); + + int numDataRegionsRow = symbolSizeRows / dataRegionSizeRows; + int numDataRegionsColumn = symbolSizeColumns / dataRegionSizeColumns; + + int sizeDataRegionRow = numDataRegionsRow * dataRegionSizeRows; + //int sizeDataRegionColumn = numDataRegionsColumn * dataRegionSizeColumns; + + // TODO(bbrown): Make this work with rectangular codes + Ref bitMatrixWithoutAlignment(new BitMatrix(sizeDataRegionRow)); + for (int dataRegionRow = 0; dataRegionRow < numDataRegionsRow; ++dataRegionRow) { + int dataRegionRowOffset = dataRegionRow * dataRegionSizeRows; + for (int dataRegionColumn = 0; dataRegionColumn < numDataRegionsColumn; ++dataRegionColumn) { + int dataRegionColumnOffset = dataRegionColumn * dataRegionSizeColumns; + for (int i = 0; i < dataRegionSizeRows; ++i) { + int readRowOffset = dataRegionRow * (dataRegionSizeRows + 2) + 1 + i; + int writeRowOffset = dataRegionRowOffset + i; + for (int j = 0; j < dataRegionSizeColumns; ++j) { + int readColumnOffset = dataRegionColumn * (dataRegionSizeColumns + 2) + 1 + j; + if (bitMatrix->get(readColumnOffset, readRowOffset)) { + int writeColumnOffset = dataRegionColumnOffset + j; + bitMatrixWithoutAlignment->set(writeColumnOffset, writeRowOffset); + } + } + } + } + } + return bitMatrixWithoutAlignment; +} + +} +} diff --git a/symbian/QQrDecoder/zxing/datamatrix/decoder/BitMatrixParser.h b/symbian/QQrDecoder/zxing/datamatrix/decoder/BitMatrixParser.h new file mode 100644 index 000000000..30123d59c --- /dev/null +++ b/symbian/QQrDecoder/zxing/datamatrix/decoder/BitMatrixParser.h @@ -0,0 +1,59 @@ +#ifndef __BIT_MATRIX_PARSER_DM_H__ +#define __BIT_MATRIX_PARSER_DM_H__ + +/* + * BitMatrixParser.h + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +namespace zxing { +namespace datamatrix { + +class BitMatrixParser : public Counted { +private: + Ref bitMatrix_; + Ref parsedVersion_; + Ref readBitMatrix_; + + int copyBit(size_t x, size_t y, int versionBits); + +public: + BitMatrixParser(Ref bitMatrix); + Ref readVersion(Ref bitMatrix); + ArrayRef readCodewords(); + bool readModule(int row, int column, int numRows, int numColumns); + +private: + int readUtah(int row, int column, int numRows, int numColumns); + int readCorner1(int numRows, int numColumns); + int readCorner2(int numRows, int numColumns); + int readCorner3(int numRows, int numColumns); + int readCorner4(int numRows, int numColumns); + Ref extractDataRegion(Ref bitMatrix); +}; + +} +} + +#endif // __BIT_MATRIX_PARSER_DM_H__ diff --git a/symbian/QQrDecoder/zxing/datamatrix/decoder/DataBlock.cpp b/symbian/QQrDecoder/zxing/datamatrix/decoder/DataBlock.cpp new file mode 100644 index 000000000..c87d5f309 --- /dev/null +++ b/symbian/QQrDecoder/zxing/datamatrix/decoder/DataBlock.cpp @@ -0,0 +1,113 @@ +/* + * DataBlock.cpp + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +namespace zxing { +namespace datamatrix { + +using namespace std; + +DataBlock::DataBlock(int numDataCodewords, ArrayRef codewords) : + numDataCodewords_(numDataCodewords), codewords_(codewords) { +} + +int DataBlock::getNumDataCodewords() { + return numDataCodewords_; +} + +ArrayRef DataBlock::getCodewords() { + return codewords_; +} + +std::vector > DataBlock::getDataBlocks(ArrayRef rawCodewords, Version *version) { + // Figure out the number and size of data blocks used by this version and + // error correction level + ECBlocks* ecBlocks = version->getECBlocks(); + + // First count the total number of data blocks + int totalBlocks = 0; + vector ecBlockArray = ecBlocks->getECBlocks(); + for (size_t i = 0; i < ecBlockArray.size(); i++) { + totalBlocks += ecBlockArray[i]->getCount(); + } + + // Now establish DataBlocks of the appropriate size and number of data codewords + std::vector > result(totalBlocks); + int numResultBlocks = 0; + for (size_t j = 0; j < ecBlockArray.size(); j++) { + ECB *ecBlock = ecBlockArray[j]; + for (int i = 0; i < ecBlock->getCount(); i++) { + int numDataCodewords = ecBlock->getDataCodewords(); + int numBlockCodewords = ecBlocks->getECCodewords() + numDataCodewords; + ArrayRef buffer(numBlockCodewords); + Ref blockRef(new DataBlock(numDataCodewords, buffer)); + result[numResultBlocks++] = blockRef; + } + } + + // All blocks have the same amount of data, except that the last n + // (where n may be 0) have 1 more byte. Figure out where these start. + int shorterBlocksTotalCodewords = result[0]->codewords_.size(); + int longerBlocksStartAt = result.size() - 1; + while (longerBlocksStartAt >= 0) { + int numCodewords = result[longerBlocksStartAt]->codewords_.size(); + if (numCodewords == shorterBlocksTotalCodewords) { + break; + } + if (numCodewords != shorterBlocksTotalCodewords + 1) { + throw IllegalArgumentException("Data block sizes differ by more than 1"); + } + longerBlocksStartAt--; + } + longerBlocksStartAt++; + + int shorterBlocksNumDataCodewords = shorterBlocksTotalCodewords - ecBlocks->getECCodewords(); + // The last elements of result may be 1 element longer; + // first fill out as many elements as all of them have + int rawCodewordsOffset = 0; + for (int i = 0; i < shorterBlocksNumDataCodewords; i++) { + for (int j = 0; j < numResultBlocks; j++) { + result[j]->codewords_[i] = rawCodewords[rawCodewordsOffset++]; + } + } + // Fill out the last data block in the longer ones + for (int j = longerBlocksStartAt; j < numResultBlocks; j++) { + result[j]->codewords_[shorterBlocksNumDataCodewords] = rawCodewords[rawCodewordsOffset++]; + } + // Now add in error correction blocks + int max = result[0]->codewords_.size(); + for (int i = shorterBlocksNumDataCodewords; i < max; i++) { + for (int j = 0; j < numResultBlocks; j++) { + int iOffset = j < longerBlocksStartAt ? i : i + 1; + result[j]->codewords_[iOffset] = rawCodewords[rawCodewordsOffset++]; + } + } + + if ((size_t)rawCodewordsOffset != rawCodewords.size()) { + throw IllegalArgumentException("rawCodewordsOffset != rawCodewords.length"); + } + + return result; +} + +} +} diff --git a/symbian/QQrDecoder/zxing/datamatrix/decoder/DataBlock.h b/symbian/QQrDecoder/zxing/datamatrix/decoder/DataBlock.h new file mode 100644 index 000000000..7fc72f655 --- /dev/null +++ b/symbian/QQrDecoder/zxing/datamatrix/decoder/DataBlock.h @@ -0,0 +1,49 @@ +#ifndef __DATA_BLOCK_DM_H__ +#define __DATA_BLOCK_DM_H__ + +/* + * DataBlock.h + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +namespace zxing { +namespace datamatrix { + +class DataBlock : public Counted { +private: + int numDataCodewords_; + ArrayRef codewords_; + + DataBlock(int numDataCodewords, ArrayRef codewords); + +public: + static std::vector > getDataBlocks(ArrayRef rawCodewords, Version *version); + + int getNumDataCodewords(); + ArrayRef getCodewords(); +}; + +} +} + +#endif // __DATA_BLOCK_DM_H__ diff --git a/symbian/QQrDecoder/zxing/datamatrix/decoder/DecodedBitStreamParser.cpp b/symbian/QQrDecoder/zxing/datamatrix/decoder/DecodedBitStreamParser.cpp new file mode 100644 index 000000000..9aa2f684c --- /dev/null +++ b/symbian/QQrDecoder/zxing/datamatrix/decoder/DecodedBitStreamParser.cpp @@ -0,0 +1,404 @@ +/* + * DecodedBitStreamParser.cpp + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +namespace zxing { +namespace datamatrix { + +using namespace std; + +const char DecodedBitStreamParser::C40_BASIC_SET_CHARS[] = { + '*', '*', '*', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', + 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' + }; + +const char DecodedBitStreamParser::C40_SHIFT2_SET_CHARS[] = { + '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', + '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_' +}; + +const char DecodedBitStreamParser::TEXT_BASIC_SET_CHARS[] = { + '*', '*', '*', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', + 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' + }; + +const char DecodedBitStreamParser::TEXT_SHIFT3_SET_CHARS[] = { + '\'', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', + 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '{', '|', '}', '~', (char) 127 +}; + +std::string DecodedBitStreamParser::decode(ArrayRef bytes) { + Ref bits(new BitSource(bytes)); + ostringstream result; + ostringstream resultTrailer; +// bool trailer = false; + int mode = ASCII_ENCODE; + do { + if (mode == ASCII_ENCODE) { + mode = decodeAsciiSegment(bits, result, resultTrailer); + } else { + switch (mode) { + case C40_ENCODE: + decodeC40Segment(bits, result); + break; + case TEXT_ENCODE: + decodeTextSegment(bits, result); + break; + case ANSIX12_ENCODE: + decodeAnsiX12Segment(bits, result); + break; + case EDIFACT_ENCODE: + decodeEdifactSegment(bits, result); + break; + case BASE256_ENCODE: + decodeBase256Segment(bits, result); + break; + default: + throw ReaderException("Unsupported mode indicator"); + } + mode = ASCII_ENCODE; + } + } while (mode != PAD_ENCODE && bits->available() > 0); +/* if (trailer) { + result << resultTrailer; + } +*/ + return result.str(); +} + +int DecodedBitStreamParser::decodeAsciiSegment(Ref bits, ostringstream & result, + ostringstream & resultTrailer) { + bool upperShift = false; + do { + int oneByte = bits->readBits(8); + if (oneByte == 0) { + throw ReaderException("Not enough bits to decode"); + } else if (oneByte <= 128) { // ASCII data (ASCII value + 1) + oneByte = upperShift ? (oneByte + 128) : oneByte; + upperShift = false; + result << (char) (oneByte - 1); + return ASCII_ENCODE; + } else if (oneByte == 129) { // Pad + return PAD_ENCODE; + } else if (oneByte <= 229) { // 2-digit data 00-99 (Numeric Value + 130) + int value = oneByte - 130; + if (value < 10) { // padd with '0' for single digit values + result << '0'; + } + result << value; + } else if (oneByte == 230) { // Latch to C40 encodation + return C40_ENCODE; + } else if (oneByte == 231) { // Latch to Base 256 encodation + return BASE256_ENCODE; + } else if (oneByte == 232) { // FNC1 + //throw ReaderException.getInstance(); + // Ignore this symbol for now + } else if (oneByte == 233) { // Structured Append + //throw ReaderException.getInstance(); + // Ignore this symbol for now + } else if (oneByte == 234) { // Reader Programming + //throw ReaderException.getInstance(); + // Ignore this symbol for now + } else if (oneByte == 235) { // Upper Shift (shift to Extended ASCII) + upperShift = true; + } else if (oneByte == 236) { // 05 Macro + /* trailer = false; + result << "[)>\u001E05\u001D"; + resultTrailer << "\u001E\u0004"; + // Ignore this symbol for now + */ } else if (oneByte == 237) { // 06 Macro + /* trailer = false; + result << "[)>\u001E06\u001D"; + resultTrailer << "\u001E\u0004"; + // Ignore this symbol for now + */ } else if (oneByte == 238) { // Latch to ANSI X12 encodation + return ANSIX12_ENCODE; + } else if (oneByte == 239) { // Latch to Text encodation + return TEXT_ENCODE; + } else if (oneByte == 240) { // Latch to EDIFACT encodation + return EDIFACT_ENCODE; + } else if (oneByte == 241) { // ECI Character + // TODO(bbrown): I think we need to support ECI + //throw ReaderException.getInstance(); + // Ignore this symbol for now + } else if (oneByte >= 242) { // Not to be used in ASCII encodation + throw ReaderException("Not to be used in ASCII encodation"); + } + } while (bits->available() > 0); + return ASCII_ENCODE; +} + +void DecodedBitStreamParser::decodeC40Segment(Ref bits, ostringstream & result) { + // Three C40 values are encoded in a 16-bit value as + // (1600 * C1) + (40 * C2) + C3 + 1 + // TODO(bbrown): The Upper Shift with C40 doesn't work in the 4 value scenario all the time + bool upperShift = false; + + int* cValues = new int[3]; + do { + // If there is only one byte left then it will be encoded as ASCII + if (bits->available() == 8) { + return; + } + int firstByte = bits->readBits(8); + if (firstByte == 254) { // Unlatch codeword + return; + } + + parseTwoBytes(firstByte, bits->readBits(8), cValues); + + int shift = 0; + for (int i = 0; i < 3; i++) { + int cValue = cValues[i]; + switch (shift) { + case 0: + if (cValue < 3) { + shift = cValue + 1; + } else { + if (upperShift) { + result << (char) (C40_BASIC_SET_CHARS[cValue] + 128); + upperShift = false; + } else { + result << C40_BASIC_SET_CHARS[cValue]; + } + } + break; + case 1: + if (upperShift) { + result << cValue + 128; + upperShift = false; + } else { + result << cValue; + } + shift = 0; + break; + case 2: + if (cValue < 27) { + if (upperShift) { + result << (char) (C40_SHIFT2_SET_CHARS[cValue] + 128); + upperShift = false; + } else { + result << C40_SHIFT2_SET_CHARS[cValue]; + } + } else if (cValue == 27) { // FNC1 + throw ReaderException("FNC1"); + } else if (cValue == 30) { // Upper Shift + upperShift = true; + } else { + throw ReaderException("Upper Shift"); + } + shift = 0; + break; + case 3: + if (upperShift) { + result << (char) (cValue + 224); + upperShift = false; + } else { + result << (char) (cValue + 96); + } + shift = 0; + break; + default: + throw ReaderException(""); + } + } + } while (bits->available() > 0); +} + +void DecodedBitStreamParser::decodeTextSegment(Ref bits, ostringstream & result) { + // Three Text values are encoded in a 16-bit value as + // (1600 * C1) + (40 * C2) + C3 + 1 + // TODO(bbrown): The Upper Shift with Text doesn't work in the 4 value scenario all the time + bool upperShift = false; + + int* cValues = new int[3]; + do { + // If there is only one byte left then it will be encoded as ASCII + if (bits->available() == 8) { + return; + } + int firstByte = bits->readBits(8); + if (firstByte == 254) { // Unlatch codeword + return; + } + + parseTwoBytes(firstByte, bits->readBits(8), cValues); + + int shift = 0; + for (int i = 0; i < 3; i++) { + int cValue = cValues[i]; + switch (shift) { + case 0: + if (cValue < 3) { + shift = cValue + 1; + } else { + if (upperShift) { + result << (char) (TEXT_BASIC_SET_CHARS[cValue] + 128); + upperShift = false; + } else { + result << (TEXT_BASIC_SET_CHARS[cValue]); + } + } + break; + case 1: + if (upperShift) { + result << (char) (cValue + 128); + upperShift = false; + } else { + result << (cValue); + } + shift = 0; + break; + case 2: + // Shift 2 for Text is the same encoding as C40 + if (cValue < 27) { + if (upperShift) { + result << (char) (C40_SHIFT2_SET_CHARS[cValue] + 128); + upperShift = false; + } else { + result << (C40_SHIFT2_SET_CHARS[cValue]); + } + } else if (cValue == 27) { // FNC1 + throw ReaderException("FNC1"); + } else if (cValue == 30) { // Upper Shift + upperShift = true; + } else { + throw ReaderException("Upper Shift"); + } + shift = 0; + break; + case 3: + if (upperShift) { + result << (char) (TEXT_SHIFT3_SET_CHARS[cValue] + 128); + upperShift = false; + } else { + result << (TEXT_SHIFT3_SET_CHARS[cValue]); + } + shift = 0; + break; + default: + throw ReaderException(""); + } + } + } while (bits->available() > 0); +} + +void DecodedBitStreamParser::decodeAnsiX12Segment(Ref bits, ostringstream & result) { + // Three ANSI X12 values are encoded in a 16-bit value as + // (1600 * C1) + (40 * C2) + C3 + 1 + + int* cValues = new int[3]; + do { + // If there is only one byte left then it will be encoded as ASCII + if (bits->available() == 8) { + return; + } + int firstByte = bits->readBits(8); + if (firstByte == 254) { // Unlatch codeword + return; + } + + parseTwoBytes(firstByte, bits->readBits(8), cValues); + + for (int i = 0; i < 3; i++) { + int cValue = cValues[i]; + if (cValue == 0) { // X12 segment terminator + result << '\r'; + } else if (cValue == 1) { // X12 segment separator * + result << '*'; + } else if (cValue == 2) { // X12 sub-element separator > + result << '>'; + } else if (cValue == 3) { // space + result << ' '; + } else if (cValue < 14) { // 0 - 9 + result << (char) (cValue + 44); + } else if (cValue < 40) { // A - Z + result << (char) (cValue + 51); + } else { + throw ReaderException(""); + } + } + } while (bits->available() > 0); +} + +void DecodedBitStreamParser::parseTwoBytes(int firstByte, int secondByte, int*& result) { + int fullBitValue = (firstByte << 8) + secondByte - 1; + int temp = fullBitValue / 1600; + result[0] = temp; + fullBitValue -= temp * 1600; + temp = fullBitValue / 40; + result[1] = temp; + result[2] = fullBitValue - temp * 40; +} + +void DecodedBitStreamParser::decodeEdifactSegment(Ref bits, ostringstream & result) { + bool unlatch = false; + do { + // If there is only two or less bytes left then it will be encoded as ASCII + if (bits->available() <= 16) { + return; + } + + for (int i = 0; i < 4; i++) { + int edifactValue = bits->readBits(6); + + // Check for the unlatch character + if (edifactValue == 0x2B67) { // 011111 + unlatch = true; + // If we encounter the unlatch code then continue reading because the Codeword triple + // is padded with 0's + } + + if (!unlatch) { + if ((edifactValue & 32) == 0) { // no 1 in the leading (6th) bit + edifactValue |= 64; // Add a leading 01 to the 6 bit binary value + } + result << (edifactValue); + } + } + } while (!unlatch && bits->available() > 0); +} + +void DecodedBitStreamParser::decodeBase256Segment(Ref bits, ostringstream & result){//, vector byteSegments) + // Figure out how long the Base 256 Segment is. + int d1 = bits->readBits(8); + int count; + if (d1 == 0) { // Read the remainder of the symbol + count = bits->available() / 8; + } else if (d1 < 250) { + count = d1; + } else { + count = 250 * (d1 - 249) + bits->readBits(8); + } + unsigned char* bytes = new unsigned char[count]; + for (int i = 0; i < count; i++) { + bytes[i] = unrandomize255State(bits->readBits(8), i); + } + //byteSegments.push_back(bytes); + result << bytes; +} +} +} + diff --git a/symbian/QQrDecoder/zxing/datamatrix/decoder/DecodedBitStreamParser.h b/symbian/QQrDecoder/zxing/datamatrix/decoder/DecodedBitStreamParser.h new file mode 100644 index 000000000..6a0b26030 --- /dev/null +++ b/symbian/QQrDecoder/zxing/datamatrix/decoder/DecodedBitStreamParser.h @@ -0,0 +1,103 @@ +#ifndef __DECODED_BIT_STREAM_PARSER_DM_H__ +#define __DECODED_BIT_STREAM_PARSER_DM_H__ + +/* + * DecodedBitStreamParser.h + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + + +namespace zxing { +namespace datamatrix { + +class DecodedBitStreamParser { +private: + static const int PAD_ENCODE = 0; // Not really an encoding + static const int ASCII_ENCODE = 1; + static const int C40_ENCODE = 2; + static const int TEXT_ENCODE = 3; + static const int ANSIX12_ENCODE = 4; + static const int EDIFACT_ENCODE = 5; + static const int BASE256_ENCODE = 6; + + /** + * See ISO 16022:2006, Annex C Table C.1 + * The C40 Basic Character Set (*'s used for placeholders for the shift values) + */ + static const char C40_BASIC_SET_CHARS[]; + + static const char C40_SHIFT2_SET_CHARS[]; + /** + * See ISO 16022:2006, Annex C Table C.2 + * The Text Basic Character Set (*'s used for placeholders for the shift values) + */ + static const char TEXT_BASIC_SET_CHARS[]; + + static const char TEXT_SHIFT3_SET_CHARS[]; + /** + * See ISO 16022:2006, 5.2.3 and Annex C, Table C.2 + */ + int decodeAsciiSegment(Ref bits, std::ostringstream &result, std::ostringstream &resultTrailer); + /** + * See ISO 16022:2006, 5.2.5 and Annex C, Table C.1 + */ + void decodeC40Segment(Ref bits, std::ostringstream &result); + /** + * See ISO 16022:2006, 5.2.6 and Annex C, Table C.2 + */ + void decodeTextSegment(Ref bits, std::ostringstream &result); + /** + * See ISO 16022:2006, 5.2.7 + */ + void decodeAnsiX12Segment(Ref bits, std::ostringstream &result); + /** + * See ISO 16022:2006, 5.2.8 and Annex C Table C.3 + */ + void decodeEdifactSegment(Ref bits, std::ostringstream &result); + /** + * See ISO 16022:2006, 5.2.9 and Annex B, B.2 + */ + void decodeBase256Segment(Ref bits, std::ostringstream &result);//,std::vector byteSegments); + + void parseTwoBytes(int firstByte, int secondByte, int*& result); + /** + * See ISO 16022:2006, Annex B, B.2 + */ + unsigned char unrandomize255State(int randomizedBase256Codeword, + int base256CodewordPosition) { + int pseudoRandomNumber = ((149 * base256CodewordPosition) % 255) + 1; + int tempVariable = randomizedBase256Codeword - pseudoRandomNumber; + return (unsigned char) (tempVariable >= 0 ? tempVariable : (tempVariable + 256)); + }; + void append(std::ostream &ost, const unsigned char *bufIn, size_t nIn, const char *src); + +public: + DecodedBitStreamParser() { }; + std::string decode(ArrayRef bytes); +}; + +} +} + +#endif // __DECODED_BIT_STREAM_PARSER_DM_H__ diff --git a/symbian/QQrDecoder/zxing/datamatrix/decoder/Decoder.cpp b/symbian/QQrDecoder/zxing/datamatrix/decoder/Decoder.cpp new file mode 100644 index 000000000..72172dc41 --- /dev/null +++ b/symbian/QQrDecoder/zxing/datamatrix/decoder/Decoder.cpp @@ -0,0 +1,96 @@ +/* + * Decoder.cpp + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +namespace zxing { +namespace datamatrix { + +using namespace std; + +Decoder::Decoder() : + rsDecoder_(GF256::DATA_MATRIX_FIELD) { +} + + +void Decoder::correctErrors(ArrayRef codewordBytes, int numDataCodewords) { + int numCodewords = codewordBytes->size(); + ArrayRef codewordInts(numCodewords); + for (int i = 0; i < numCodewords; i++) { + codewordInts[i] = codewordBytes[i] & 0xff; + } + int numECCodewords = numCodewords - numDataCodewords; + + try { + rsDecoder_.decode(codewordInts, numECCodewords); + } catch (ReedSolomonException ex) { + ReaderException rex(ex.what()); + throw rex; + } + + for (int i = 0; i < numDataCodewords; i++) { + codewordBytes[i] = (unsigned char)codewordInts[i]; + } +} + +Ref Decoder::decode(Ref bits) { + // Construct a parser and read version, error-correction level + BitMatrixParser parser(bits); + Version *version = parser.readVersion(bits); + + // Read codewords + ArrayRef codewords(parser.readCodewords()); + // Separate into data blocks + std::vector > dataBlocks = DataBlock::getDataBlocks(codewords, version); + + // Count total number of data bytes + int totalBytes = 0; + for (unsigned int i = 0; i < dataBlocks.size(); i++) { + totalBytes += dataBlocks[i]->getNumDataCodewords(); + } + ArrayRef resultBytes(totalBytes); + int resultOffset = 0; + + // Error-correct and copy data blocks together into a stream of bytes + for (unsigned int j = 0; j < dataBlocks.size(); j++) { + Ref dataBlock(dataBlocks[j]); + ArrayRef codewordBytes = dataBlock->getCodewords(); + int numDataCodewords = dataBlock->getNumDataCodewords(); + correctErrors(codewordBytes, numDataCodewords); + for (int i = 0; i < numDataCodewords; i++) { + resultBytes[resultOffset++] = codewordBytes[i]; + } + } + + // Decode the contents of that stream of bytes + DecodedBitStreamParser decodedBSParser; + Ref text(new String(decodedBSParser.decode(resultBytes))); + + Ref result(new DecoderResult(resultBytes, text)); + return result; +} +} +} diff --git a/symbian/QQrDecoder/zxing/datamatrix/decoder/Decoder.h b/symbian/QQrDecoder/zxing/datamatrix/decoder/Decoder.h new file mode 100644 index 000000000..65fdf740c --- /dev/null +++ b/symbian/QQrDecoder/zxing/datamatrix/decoder/Decoder.h @@ -0,0 +1,50 @@ +#ifndef __DECODER_DM_H__ +#define __DECODER_DM_H__ + +/* + * Decoder.h + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + + +namespace zxing { +namespace datamatrix { + +class Decoder { +private: + ReedSolomonDecoder rsDecoder_; + + void correctErrors(ArrayRef bytes, int numDataCodewords); + +public: + Decoder(); + + Ref decode(Ref bits); +}; + +} +} + +#endif // __DECODER_DM_H__ diff --git a/symbian/QQrDecoder/zxing/datamatrix/detector/CornerPoint.cpp b/symbian/QQrDecoder/zxing/datamatrix/detector/CornerPoint.cpp new file mode 100644 index 000000000..8222f6b27 --- /dev/null +++ b/symbian/QQrDecoder/zxing/datamatrix/detector/CornerPoint.cpp @@ -0,0 +1,54 @@ +/* + * CornerPoint.cpp + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + + +namespace zxing { + namespace datamatrix { + + using namespace std; + + CornerPoint::CornerPoint(float posX, float posY) : + posX_(posX), posY_(posY), counter_(0) { + } + + float CornerPoint::getX() const { + return posX_; + } + + float CornerPoint::getY() const { + return posY_; + } + + int CornerPoint::getCount() const { + return counter_; + } + + void CornerPoint::incrementCount() { + counter_++; + } + + bool CornerPoint::equals(Ref other) const { + return posX_ == other->getX() && posY_ == other->getY(); + } + + } +} diff --git a/symbian/QQrDecoder/zxing/datamatrix/detector/CornerPoint.h b/symbian/QQrDecoder/zxing/datamatrix/detector/CornerPoint.h new file mode 100644 index 000000000..a44d72b38 --- /dev/null +++ b/symbian/QQrDecoder/zxing/datamatrix/detector/CornerPoint.h @@ -0,0 +1,47 @@ +#ifndef __CORNER_FINDER_H__ +#define __CORNER_FINDER_H__ + +/* + * CornerPoint.h + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +namespace zxing { + namespace datamatrix { + + class CornerPoint : public ResultPoint { + private: + float posX_; + float posY_; + int counter_; + + public: + CornerPoint(float posX, float posY); + float getX() const; + float getY() const; + int getCount() const; + void incrementCount(); + bool equals(Ref other) const; + }; + } +} + +#endif // __CORNER_FINDER_H__ diff --git a/symbian/QQrDecoder/zxing/datamatrix/detector/Detector.cpp b/symbian/QQrDecoder/zxing/datamatrix/detector/Detector.cpp new file mode 100644 index 000000000..54b1a1165 --- /dev/null +++ b/symbian/QQrDecoder/zxing/datamatrix/detector/Detector.cpp @@ -0,0 +1,315 @@ +/* + * Detector.cpp + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +namespace zxing { +namespace datamatrix { + +using namespace std; + +ResultPointsAndTransitions::ResultPointsAndTransitions() : to_(), from_(), transitions_(0) { + Ref ref(new CornerPoint(0,0)); + from_ = ref; + to_ = ref; +} + +ResultPointsAndTransitions::ResultPointsAndTransitions(Ref from, Ref to, int transitions) : + to_(to), from_(from), transitions_(transitions) { +} + +Ref ResultPointsAndTransitions::getFrom() { + return from_; +} + +Ref ResultPointsAndTransitions::getTo() { + return to_; +} + +int ResultPointsAndTransitions::getTransitions() { + return transitions_; +} + +Detector::Detector(Ref image) : image_(image) { } + +Ref Detector::getImage() { + return image_; +} + +Ref Detector::detect() { + Ref rectangleDetector_(new MonochromeRectangleDetector(image_)); + std::vector > cornerPoints = rectangleDetector_->detect(); + Ref pointA = cornerPoints[0]; + Ref pointB = cornerPoints[1]; + Ref pointC = cornerPoints[2]; + Ref pointD = cornerPoints[3]; + + // Point A and D are across the diagonal from one another, + // as are B and C. Figure out which are the solid black lines + // by counting transitions + std::vector > transitions(4); + transitions[0].reset(transitionsBetween(pointA, pointB)); + transitions[1].reset(transitionsBetween(pointA, pointC)); + transitions[2].reset(transitionsBetween(pointB, pointD)); + transitions[3].reset(transitionsBetween(pointC, pointD)); + insertionSort(transitions); + + // Sort by number of transitions. First two will be the two solid sides; last two + // will be the two alternating black/white sides + Ref lSideOne(transitions[0]); + Ref lSideTwo(transitions[1]); + + // Figure out which point is their intersection by tallying up the number of times we see the + // endpoints in the four endpoints. One will show up twice. + Ref maybeTopLeft; + Ref bottomLeft; + Ref maybeBottomRight; + if (lSideOne->getFrom()->equals(lSideOne->getTo())) { + bottomLeft = lSideOne->getFrom(); + maybeTopLeft = lSideTwo->getFrom(); + maybeBottomRight = lSideTwo->getTo(); + } + else if (lSideOne->getFrom()->equals(lSideTwo->getFrom())) { + bottomLeft = lSideOne->getFrom(); + maybeTopLeft = lSideOne->getTo(); + maybeBottomRight = lSideTwo->getTo(); + } + else if (lSideOne->getFrom()->equals(lSideTwo->getTo())) { + bottomLeft = lSideOne->getFrom(); + maybeTopLeft = lSideOne->getTo(); + maybeBottomRight = lSideTwo->getFrom(); + } + else if (lSideOne->getTo()->equals(lSideTwo->getFrom())) { + bottomLeft = lSideOne->getTo(); + maybeTopLeft = lSideOne->getFrom(); + maybeBottomRight = lSideTwo->getTo(); + } + else if (lSideOne->getTo()->equals(lSideTwo->getTo())) { + bottomLeft = lSideOne->getTo(); + maybeTopLeft = lSideOne->getFrom(); + maybeBottomRight = lSideTwo->getFrom(); + } + else { + bottomLeft = lSideTwo->getFrom(); + maybeTopLeft = lSideOne->getTo(); + maybeBottomRight = lSideOne->getFrom(); + } + + // Bottom left is correct but top left and bottom right might be switched + std::vector > corners(3); + corners[0].reset(maybeTopLeft); + corners[1].reset(bottomLeft); + corners[2].reset(maybeBottomRight); + // Use the dot product trick to sort them out + orderBestPatterns(corners); + + // Now we know which is which: + Ref bottomRight(corners[0]); + bottomLeft = corners[1]; + Ref topLeft(corners[2]); + + // Which point didn't we find in relation to the "L" sides? that's the top right corner + Ref topRight; + if (!(pointA->equals(bottomRight) || pointA->equals(bottomLeft) || pointA->equals(topLeft))) { + topRight = pointA; + } else if (!(pointB->equals(bottomRight) || pointB->equals(bottomLeft) || pointB->equals(topLeft))) { + topRight = pointB; + } else if (!(pointC->equals(bottomRight) || pointC->equals(bottomLeft) || pointC->equals(topLeft))) { + topRight = pointC; + } else { + topRight = pointD; + } + + float topRightX = (bottomRight->getX() - bottomLeft->getX()) + topLeft->getX(); + float topRightY = (bottomRight->getY() - bottomLeft->getY()) + topLeft->getY(); + Ref topR(new CornerPoint(topRightX,topRightY)); + + // Next determine the dimension by tracing along the top or right side and counting black/white + // transitions. Since we start inside a black module, we should see a number of transitions + // equal to 1 less than the code dimension. Well, actually 2 less, because we are going to + // end on a black module: + // The top right point is actually the corner of a module, which is one of the two black modules + // adjacent to the white module at the top right. Tracing to that corner from either the top left + // or bottom right should work here. The number of transitions could be higher than it should be + // due to noise. So we try both and take the min. + int dimension = min(transitionsBetween(topLeft, topRight)->getTransitions(), + transitionsBetween(bottomRight, topRight)->getTransitions()); + if ((dimension & 0x01) == 1) { + // it can't be odd, so, round... up? + dimension++; + } + dimension += 2; + + Ref transform = createTransform(topLeft, topR, bottomLeft, bottomRight, dimension); + Ref bits(sampleGrid(image_, dimension, transform)); + std::vector > points(4); + points[0].reset(pointA); + points[1].reset(pointB); + points[2].reset(pointC); + points[3].reset(pointD); + Ref detectorResult(new DetectorResult(bits, points, transform)); + return detectorResult; +} + +Ref Detector::transitionsBetween(Ref from, Ref to) { + // See QR Code Detector, sizeOfBlackWhiteBlackRun() + int fromX = (int) from->getX(); + int fromY = (int) from->getY(); + int toX = (int) to->getX(); + int toY = (int) to->getY(); + bool steep = abs(toY - fromY) > abs(toX - fromX); + if (steep) { + int temp = fromX; + fromX = fromY; + fromY = temp; + temp = toX; + toX = toY; + toY = temp; + } + + int dx = abs(toX - fromX); + int dy = abs(toY - fromY); + int error = -dx >> 1; + int ystep = fromY < toY ? 1 : -1; + int xstep = fromX < toX ? 1 : -1; + int transitions = 0; + bool inBlack = image_->get(steep ? fromY : fromX, steep ? fromX : fromY); + for (int x = fromX, y = fromY; x != toX; x += xstep) { + bool isBlack = image_->get(steep ? y : x, steep ? x : y); + if (isBlack != inBlack) { + transitions++; + inBlack = isBlack; + } + error += dy; + if (error > 0) { + if (y == toY) { + break; + } + y += ystep; + error -= dx; + } + } + Ref result(new ResultPointsAndTransitions(from, to, transitions)); + return result; + } + +Ref Detector::createTransform(Ref topLeft, Ref topRight, Ref < + ResultPoint > bottomLeft, Ref bottomRight, int dimension) { + + Ref transform(PerspectiveTransform::quadrilateralToQuadrilateral( + 0.0f, + 0.0f, + dimension, + 0.0f, + dimension, + dimension, + 0.0f, + dimension, + topLeft->getX(), + topLeft->getY(), + topRight->getX(), + topRight->getY(), + bottomRight->getX(), + bottomRight->getY(), + bottomLeft->getX(), + bottomLeft->getY())); + return transform; +} + +Ref Detector::sampleGrid(Ref image, int dimension, Ref transform) { + GridSampler &sampler = GridSampler::getInstance(); + return sampler.sampleGrid(image, dimension, transform); +} + +void Detector::insertionSort(std::vector > &vector) { + int max = vector.size(); + bool swapped = true; + Ref value; + Ref valueB; + do { + swapped = false; + for (int i = 1; i < max; i++) { + value = vector[i-1]; + if (compare(value, (valueB = vector[i])) > 0) { + swapped = true; + vector[i-1].reset(valueB); + vector[i].reset(value); + } + } + } while (swapped); +} +void Detector::orderBestPatterns(std::vector > &patterns) { + // Find distances between pattern centers + float zeroOneDistance = distance(patterns[0]->getX(), patterns[1]->getX(),patterns[0]->getY(), patterns[1]->getY()); + float oneTwoDistance = distance(patterns[1]->getX(), patterns[2]->getX(),patterns[1]->getY(), patterns[2]->getY()); + float zeroTwoDistance = distance(patterns[0]->getX(), patterns[2]->getX(),patterns[0]->getY(), patterns[2]->getY()); + + Ref pointA, pointB, pointC; + // Assume one closest to other two is B; A and C will just be guesses at first + if (oneTwoDistance >= zeroOneDistance && oneTwoDistance >= zeroTwoDistance) { + pointB = patterns[0]; + pointA = patterns[1]; + pointC = patterns[2]; + } else if (zeroTwoDistance >= oneTwoDistance && zeroTwoDistance >= zeroOneDistance) { + pointB = patterns[1]; + pointA = patterns[0]; + pointC = patterns[2]; + } else { + pointB = patterns[2]; + pointA = patterns[0]; + pointC = patterns[1]; + } + + // Use cross product to figure out whether A and C are correct or flipped. + // This asks whether BC x BA has a positive z component, which is the arrangement + // we want for A, B, C. If it's negative, then we've got it flipped around and + // should swap A and C. + if (crossProductZ(pointA, pointB, pointC) < 0.0f) { + Ref temp = pointA; + pointA = pointC; + pointC = temp; + } + + patterns[0] = pointA; + patterns[1] = pointB; + patterns[2] = pointC; +} + +float Detector::distance(float x1, float x2, float y1, float y2) { + float xDiff = x1 - x2; + float yDiff = y1 - y2; + return (float) sqrt((double) (xDiff * xDiff + yDiff * yDiff)); + } + +int Detector::compare(Ref a, Ref b) { + return a->getTransitions() - b->getTransitions(); + } + +float Detector::crossProductZ(Ref pointA, Ref pointB, Ref pointC) { + float bX = pointB->getX(); + float bY = pointB->getY(); + return ((pointC->getX() - bX) * (pointA->getY() - bY)) - ((pointC->getY() - bY) * (pointA->getX() - bX)); + } +} +} diff --git a/symbian/QQrDecoder/zxing/datamatrix/detector/Detector.h b/symbian/QQrDecoder/zxing/datamatrix/detector/Detector.h new file mode 100644 index 000000000..96f58f502 --- /dev/null +++ b/symbian/QQrDecoder/zxing/datamatrix/detector/Detector.h @@ -0,0 +1,79 @@ +#ifndef __DETECTOR_H__ +#define __DETECTOR_H__ + +/* + * Detector.h + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include +#include +#include +#include +#include + + +namespace zxing { +namespace datamatrix { + +class ResultPointsAndTransitions : public Counted { +private: + Ref to_; + Ref from_; + int transitions_; + +public: + ResultPointsAndTransitions(); + ResultPointsAndTransitions(Ref from, Ref to, int transitions); + Ref getFrom(); + Ref getTo(); + int getTransitions(); +}; + +class Detector : public Counted { +private: + Ref image_; + +protected: + Ref sampleGrid(Ref image, int dimension, Ref transform); + + void insertionSort(std::vector >& vector); + + Ref transitionsBetween(Ref from, Ref to); + int min(int a, int b) { return a > b ? b : a; }; + +public: + Ref getImage(); + Detector(Ref image); + + virtual Ref createTransform(Ref topLeft, Ref topRight, Ref < + ResultPoint > bottomLeft, Ref bottomRight, int dimension); + + Ref detect(); + void orderBestPatterns(std::vector > &patterns); + float distance(float x1, float x2, float y1, float y2); +private: + int compare(Ref a, Ref b); + float crossProductZ(Ref pointA, Ref pointB, Ref pointC); +}; + +} +} + +#endif // __DETECTOR_H__ diff --git a/symbian/QQrDecoder/zxing/datamatrix/detector/MonochromeRectangleDetector.cpp b/symbian/QQrDecoder/zxing/datamatrix/detector/MonochromeRectangleDetector.cpp new file mode 100644 index 000000000..d2bc01471 --- /dev/null +++ b/symbian/QQrDecoder/zxing/datamatrix/detector/MonochromeRectangleDetector.cpp @@ -0,0 +1,172 @@ +/* + * MonochromeRectangleDetector.cpp + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +namespace zxing { +namespace datamatrix { + +std::vector > MonochromeRectangleDetector::detect() { + int height = image_->getHeight(); + int width = image_->getWidth(); + int halfHeight = height >> 1; + int halfWidth = width >> 1; + int deltaY = max(1, height / (MAX_MODULES << 3)); + int deltaX = max(1, width / (MAX_MODULES << 3)); + + int top = 0; + int bottom = height; + int left = 0; + int right = width; + Ref pointA(findCornerFromCenter(halfWidth, 0, left, right, + halfHeight, -deltaY, top, bottom, halfWidth >> 1)); + top = (int) pointA->getY() - 1; + Ref pointB(findCornerFromCenter(halfWidth, -deltaX, left, right, + halfHeight, 0, top, bottom, halfHeight >> 1)); + left = (int) pointB->getX() - 1; + Ref pointC(findCornerFromCenter(halfWidth, deltaX, left, right, + halfHeight, 0, top, bottom, halfHeight >> 1)); + right = (int) pointC->getX() + 1; + Ref pointD(findCornerFromCenter(halfWidth, 0, left, right, + halfHeight, deltaY, top, bottom, halfWidth >> 1)); + bottom = (int) pointD->getY() + 1; + + // Go try to find point A again with better information -- might have been off at first. + pointA.reset(findCornerFromCenter(halfWidth, 0, left, right, + halfHeight, -deltaY, top, bottom, halfWidth >> 2)); + std::vector > corners(4); + + corners[0].reset(pointA); + corners[1].reset(pointB); + corners[2].reset(pointC); + corners[3].reset(pointD); + return corners; + } + +Ref MonochromeRectangleDetector::findCornerFromCenter(int centerX, int deltaX, int left, int right, + int centerY, int deltaY, int top, int bottom, int maxWhiteRun) { + Ref lastRange(NULL); + for (int y = centerY, x = centerX; + y < bottom && y >= top && x < right && x >= left; + y += deltaY, x += deltaX) { + Ref range(NULL); + if (deltaX == 0) { + // horizontal slices, up and down + range = blackWhiteRange(y, maxWhiteRun, left, right, true); + } else { + // vertical slices, left and right + range = blackWhiteRange(x, maxWhiteRun, top, bottom, false); + } + if (range == NULL) { + if (lastRange == NULL) { + throw ReaderException("Couldn't find corners (lastRange = NULL) "); + } else { + // lastRange was found + if (deltaX == 0) { + int lastY = y - deltaY; + if (lastRange->start < centerX) { + if (lastRange->end > centerX) { + // straddle, choose one or the other based on direction + Ref result(new CornerPoint(deltaY > 0 ? lastRange->start : lastRange->end, lastY)); + return result; + } + Ref result(new CornerPoint(lastRange->start, lastY)); + return result; + } else { + Ref result(new CornerPoint(lastRange->end, lastY)); + return result; + } + } else { + int lastX = x - deltaX; + if (lastRange->start < centerY) { + if (lastRange->end > centerY) { + Ref result(new CornerPoint(lastX, deltaX < 0 ? lastRange->start : lastRange->end)); + return result; + } + Ref result(new CornerPoint(lastX, lastRange->start)); + return result; + } else { + Ref result(new CornerPoint(lastX, lastRange->end)); + return result; + } + } + } + } + lastRange = range; + } + throw ReaderException("Couldn't find corners"); + } + +Ref MonochromeRectangleDetector::blackWhiteRange(int fixedDimension, int maxWhiteRun, int minDim, int maxDim, + bool horizontal) { + + int center = (minDim + maxDim) >> 1; + + // Scan left/up first + int start = center; + while (start >= minDim) { + if (horizontal ? image_->get(start, fixedDimension) : image_->get(fixedDimension, start)) { + start--; + } else { + int whiteRunStart = start; + do { + start--; + } while (start >= minDim && !(horizontal ? image_->get(start, fixedDimension) : + image_->get(fixedDimension, start))); + int whiteRunSize = whiteRunStart - start; + if (start < minDim || whiteRunSize > maxWhiteRun) { + start = whiteRunStart; + break; + } + } + } + start++; + + // Then try right/down + int end = center; + while (end < maxDim) { + if (horizontal ? image_->get(end, fixedDimension) : image_->get(fixedDimension, end)) { + end++; + } else { + int whiteRunStart = end; + do { + end++; + } while (end < maxDim && !(horizontal ? image_->get(end, fixedDimension) : + image_->get(fixedDimension, end))); + int whiteRunSize = end - whiteRunStart; + if (end >= maxDim || whiteRunSize > maxWhiteRun) { + end = whiteRunStart; + break; + } + } + } + end--; + Ref result(NULL); + if (end > start) { + result = new TwoInts; + result->start = start; + result->end = end; + } + return result; + } +} +} diff --git a/symbian/QQrDecoder/zxing/datamatrix/detector/MonochromeRectangleDetector.h b/symbian/QQrDecoder/zxing/datamatrix/detector/MonochromeRectangleDetector.h new file mode 100644 index 000000000..45799a5be --- /dev/null +++ b/symbian/QQrDecoder/zxing/datamatrix/detector/MonochromeRectangleDetector.h @@ -0,0 +1,61 @@ +#ifndef __MONOCHROMERECTANGLEDETECTOR_H__ +#define __MONOCHROMERECTANGLEDETECTOR_H__ + +/* + * MonochromeRectangleDetector.h + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +namespace zxing { +namespace datamatrix { + +struct TwoInts: public Counted { + int start; + int end; +}; + +class MonochromeRectangleDetector : public Counted { +private: + static const int MAX_MODULES = 32; + Ref image_; + +public: + MonochromeRectangleDetector(Ref image) : image_(image) { }; + + std::vector > detect(); + +private: + Ref findCornerFromCenter(int centerX, int deltaX, int left, int right, + int centerY, int deltaY, int top, int bottom, int maxWhiteRun); + + Ref blackWhiteRange(int fixedDimension, int maxWhiteRun, int minDim, int maxDim, + bool horizontal); + + int max(int a, float b) { return (float) a > b ? a : (int) b;}; +}; +} +} + +#endif // __MONOCHROMERECTANGLEDETECTOR_H__ diff --git a/symbian/QQrDecoder/zxing/oned/Code128Reader.cpp b/symbian/QQrDecoder/zxing/oned/Code128Reader.cpp index 6f638d562..36ab5dc55 100644 --- a/symbian/QQrDecoder/zxing/oned/Code128Reader.cpp +++ b/symbian/QQrDecoder/zxing/oned/Code128Reader.cpp @@ -24,6 +24,7 @@ #include #include #include +#include namespace zxing { namespace oned { @@ -166,10 +167,10 @@ namespace zxing { counters[counterPosition]++; } else { if (counterPosition == patternLength - 1) { - int bestVariance = MAX_AVG_VARIANCE; + unsigned int bestVariance = MAX_AVG_VARIANCE; int bestMatch = -1; for (int startCode = CODE_START_A; startCode <= CODE_START_C; startCode++) { - int variance = patternMatchVariance(counters, sizeof(counters)/sizeof(int), CODE_PATTERNS[startCode], MAX_INDIVIDUAL_VARIANCE); + unsigned int variance = patternMatchVariance(counters, sizeof(counters)/sizeof(int), CODE_PATTERNS[startCode], MAX_INDIVIDUAL_VARIANCE); if (variance < bestVariance) { bestVariance = variance; bestMatch = startCode; @@ -204,7 +205,7 @@ namespace zxing { int Code128Reader::decodeCode(Ref row, int counters[], int countersCount, int rowOffset){ recordPattern(row, rowOffset, counters, countersCount); - int bestVariance = MAX_AVG_VARIANCE; // worst variance we'll accept + unsigned int bestVariance = MAX_AVG_VARIANCE; // worst variance we'll accept int bestMatch = -1; for (int d = 0; d < CODE_PATTERNS_LENGTH; d++) { int pattern[countersLength]; @@ -213,7 +214,7 @@ namespace zxing { pattern[ind] = CODE_PATTERNS[d][ind]; } // memcpy(pattern, CODE_PATTERNS[d], countersLength); - int variance = patternMatchVariance(counters, countersCount, pattern, MAX_INDIVIDUAL_VARIANCE); + unsigned int variance = patternMatchVariance(counters, countersCount, pattern, MAX_INDIVIDUAL_VARIANCE); if (variance < bestVariance) { bestVariance = variance; bestMatch = d; @@ -251,7 +252,7 @@ namespace zxing { bool isNextShifted = false; std::string tmpResultString; - + std::stringstream tmpResultSStr; // used if its Code 128C int lastStart = startPatternInfo[0]; int nextStart = startPatternInfo[1]; @@ -373,11 +374,11 @@ namespace zxing { } break; case CODE_CODE_C: + // the code read in this case is the number encoded directly if (code < 100) { - if (code < 10) { - tmpResultString.append(1, '0'); - } - tmpResultString.append(1, code); + if (code < 10) + tmpResultSStr << '0'; + tmpResultSStr << code; } else { if (code != CODE_STOP) { lastCharacterWasPrintable = false; @@ -437,6 +438,9 @@ namespace zxing { throw ReaderException(""); } + if (codeSet == CODE_CODE_C) + tmpResultString.append(tmpResultSStr.str()); + // Need to pull out the check digits from string int resultLength = tmpResultString.length(); // Only bother if the result had at least one character, and if the checksum digit happened to diff --git a/symbian/QQrDecoder/zxing/oned/Code128Reader.h b/symbian/QQrDecoder/zxing/oned/Code128Reader.h index ad191aa0d..2b6752eec 100644 --- a/symbian/QQrDecoder/zxing/oned/Code128Reader.h +++ b/symbian/QQrDecoder/zxing/oned/Code128Reader.h @@ -27,7 +27,7 @@ namespace zxing { class Code128Reader : public OneDReader { private: - static const int MAX_AVG_VARIANCE = (int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.25f); + static const unsigned int MAX_AVG_VARIANCE = (unsigned int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.25f); static const int MAX_INDIVIDUAL_VARIANCE = (int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.7f); static const int CODE_SHIFT = 98; diff --git a/symbian/QQrDecoder/zxing/oned/Code39Reader.cpp b/symbian/QQrDecoder/zxing/oned/Code39Reader.cpp index 92e63b5bd..337f23728 100644 --- a/symbian/QQrDecoder/zxing/oned/Code39Reader.cpp +++ b/symbian/QQrDecoder/zxing/oned/Code39Reader.cpp @@ -26,321 +26,333 @@ #include namespace zxing { - namespace oned { - - static const char* ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%"; - - - /** - * These represent the encodings of characters, as patterns of wide and narrow bars. - * The 9 least-significant bits of each int correspond to the pattern of wide and narrow, - * with 1s representing "wide" and 0s representing narrow. - */ - const int CHARACTER_ENCODINGS_LEN = 44; - static int CHARACTER_ENCODINGS[CHARACTER_ENCODINGS_LEN] = { - 0x034, 0x121, 0x061, 0x160, 0x031, 0x130, 0x070, 0x025, 0x124, 0x064, // 0-9 - 0x109, 0x049, 0x148, 0x019, 0x118, 0x058, 0x00D, 0x10C, 0x04C, 0x01C, // A-J - 0x103, 0x043, 0x142, 0x013, 0x112, 0x052, 0x007, 0x106, 0x046, 0x016, // K-T - 0x181, 0x0C1, 0x1C0, 0x091, 0x190, 0x0D0, 0x085, 0x184, 0x0C4, 0x094, // U-* - 0x0A8, 0x0A2, 0x08A, 0x02A // $-% - }; - - static int ASTERISK_ENCODING = 0x094; - static const char* ALPHABET_STRING = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%"; - - - /** - * Creates a reader that assumes all encoded data is data, and does not treat the final - * character as a check digit. It will not decoded "extended Code 39" sequences. - */ - Code39Reader::Code39Reader() : alphabet_string(ALPHABET_STRING), - usingCheckDigit(false), - extendedMode(false) { - } - - /** - * Creates a reader that can be configured to check the last character as a check digit. - * It will not decoded "extended Code 39" sequences. - * - * @param usingCheckDigit if true, treat the last data character as a check digit, not - * data, and verify that the checksum passes. - */ - Code39Reader::Code39Reader(bool usingCheckDigit_) : alphabet_string(ALPHABET_STRING), - usingCheckDigit(usingCheckDigit_), - extendedMode(false) { - } - +namespace oned { + + static const char* ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%"; + + + /** + * These represent the encodings of characters, as patterns of wide and narrow + * bars. + * The 9 least-significant bits of each int correspond to the pattern of wide + * and narrow, with 1s representing "wide" and 0s representing narrow. + */ + const int CHARACTER_ENCODINGS_LEN = 44; + static int CHARACTER_ENCODINGS[CHARACTER_ENCODINGS_LEN] = { + 0x034, 0x121, 0x061, 0x160, 0x031, 0x130, 0x070, 0x025, 0x124, 0x064, // 0-9 + 0x109, 0x049, 0x148, 0x019, 0x118, 0x058, 0x00D, 0x10C, 0x04C, 0x01C, // A-J + 0x103, 0x043, 0x142, 0x013, 0x112, 0x052, 0x007, 0x106, 0x046, 0x016, // K-T + 0x181, 0x0C1, 0x1C0, 0x091, 0x190, 0x0D0, 0x085, 0x184, 0x0C4, 0x094, // U-* + 0x0A8, 0x0A2, 0x08A, 0x02A // $-% + }; + + static int ASTERISK_ENCODING = 0x094; + static const char* ALPHABET_STRING = + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%"; + + + /** + * Creates a reader that assumes all encoded data is data, and does not treat + * the final character as a check digit. It will not decoded "extended + * Code 39" sequences. + */ + Code39Reader::Code39Reader() : alphabet_string(ALPHABET_STRING), + usingCheckDigit(false), + extendedMode(false) { + } + + /** + * Creates a reader that can be configured to check the last character as a + * check digit. It will not decoded "extended Code 39" sequences. + * + * @param usingCheckDigit if true, treat the last data character as a check + * digit, not data, and verify that the checksum passes. + */ + Code39Reader::Code39Reader(bool usingCheckDigit_) : + alphabet_string(ALPHABET_STRING), + usingCheckDigit(usingCheckDigit_), + extendedMode(false) { + } + + + + Ref Code39Reader::decodeRow(int rowNumber, Ref row){ + int* start = findAsteriskPattern(row); + int nextStart = start[1]; + int end = row->getSize(); + + // Read off white space + while (nextStart < end && !row->get(nextStart)) { + nextStart++; + } + + std::string tmpResultString; + + int countersLen = 9; + int* counters = new int[countersLen]; + for (int i=0; iget(nextStart)) { + nextStart++; + } + } while (decodedChar != '*'); + tmpResultString.erase(tmpResultString.length()-1, 1);// remove asterisk + + // Look for whitespace after pattern: + int lastPatternSize = 0; + for (int i = 0; i < countersLen; i++) { + lastPatternSize += counters[i]; + } + // IS begin + delete [] counters; + // IS end + int whiteSpaceAfterEnd = nextStart - lastStart - lastPatternSize; + // If 50% of last pattern size, following last pattern, is not whitespace, + // fail (but if it's whitespace to the very end of the image, that's OK) + if (nextStart != end && whiteSpaceAfterEnd / 2 < lastPatternSize) { + delete [] start; + throw ReaderException("too short end white space"); + } + + if (usingCheckDigit) { + int max = tmpResultString.length() - 1; + unsigned int total = 0; + for (int i = 0; i < max; i++) { + total += alphabet_string.find_first_of(tmpResultString[i], 0); + } + if (total % 43 != alphabet_string.find_first_of(tmpResultString[max], 0)) { + throw ReaderException(""); + } + tmpResultString.erase(max, 1); + } + + + + + Ref resultString(new String(tmpResultString)); + if (extendedMode) { + delete resultString; + resultString = decodeExtended(tmpResultString); + } + + if (tmpResultString.length() == 0) { + delete [] start; + // Almost surely a false positive + throw ReaderException(""); + } + + float left = (float) (start[1] + start[0]) / 2.0f; + float right = (float) (nextStart + lastStart) / 2.0f; + + std::vector< Ref > resultPoints(2); + Ref resultPoint1( + new OneDResultPoint(left, (float) rowNumber)); + Ref resultPoint2( + new OneDResultPoint(right, (float) rowNumber)); + resultPoints[0] = resultPoint1; + resultPoints[1] = resultPoint2; + + ArrayRef resultBytes(1); + + delete [] start; + + Ref res(new Result( + resultString, resultBytes, resultPoints, BarcodeFormat_CODE_39)); + return res; + } + + int* Code39Reader::findAsteriskPattern(Ref row){ + int width = row->getSize(); + int rowOffset = 0; + while (rowOffset < width) { + if (row->get(rowOffset)) { + break; + } + rowOffset++; + } + + int counterPosition = 0; + int countersLen = 9; + int* counters = new int[countersLen]; + for (int i=0; iget(i); + if (pixel ^ isWhite) { + counters[counterPosition]++; + } else { + if (counterPosition == patternLength - 1) { + if (toNarrowWidePattern(counters, countersLen) == ASTERISK_ENCODING) { + // Look for whitespace before start pattern, >= 50% of width of + // start pattern. + long double longPatternOffset = + fmaxl(0, patternStart - (i - patternStart) / 2); + if (row->isRange(longPatternOffset, patternStart, false)) { + int* resultValue = new int[2]; + resultValue[0] = patternStart; + resultValue[1] = i; + return resultValue; + } + } + patternStart += counters[0] + counters[1]; + for (int y = 2; y < patternLength; y++) { + counters[y - 2] = counters[y]; + } + counters[patternLength - 2] = 0; + counters[patternLength - 1] = 0; + counterPosition--; + } else { + counterPosition++; + } + counters[counterPosition] = 1; + isWhite = !isWhite; + } + } + // IS begin + delete [] counters; + // IS end + throw ReaderException(""); + } + + // For efficiency, returns -1 on failure. Not throwing here saved as many as + // 700 exceptions per image when using some of our blackbox images. + int Code39Reader::toNarrowWidePattern(int counters[], int countersLen){ + int numCounters = countersLen; + int maxNarrowCounter = 0; + int wideCounters; + do { + int minCounter = INT_MAX; + for (int i = 0; i < numCounters; i++) { + int counter = counters[i]; + if (counter < minCounter && counter > maxNarrowCounter) { + minCounter = counter; + } + } + maxNarrowCounter = minCounter; + wideCounters = 0; + int totalWideCountersWidth = 0; + int pattern = 0; + for (int i = 0; i < numCounters; i++) { + int counter = counters[i]; + if (counters[i] > maxNarrowCounter) { + pattern |= 1 << (numCounters - 1 - i); + wideCounters++; + totalWideCountersWidth += counter; + } + } + if (wideCounters == 3) { + // Found 3 wide counters, but are they close enough in width? + // We can perform a cheap, conservative check to see if any individual + // counter is more than 1.5 times the average: + for (int i = 0; i < numCounters && wideCounters > 0; i++) { + int counter = counters[i]; + if (counters[i] > maxNarrowCounter) { + wideCounters--; + // totalWideCountersWidth = 3 * average, so this checks if + // counter >= 3/2 * average. + if ((counter << 1) >= totalWideCountersWidth) { + return -1; + } + } + } + return pattern; + } + } while (wideCounters > 3); + return -1; + } + + char Code39Reader::patternToChar(int pattern){ + for (int i = 0; i < CHARACTER_ENCODINGS_LEN; i++) { + if (CHARACTER_ENCODINGS[i] == pattern) { + return ALPHABET[i]; + } + } + throw ReaderException(""); + } + + Ref Code39Reader::decodeExtended(std::string encoded){ + int length = encoded.length(); + std::string tmpDecoded; + for (int i = 0; i < length; i++) { + char c = encoded[i]; + if (c == '+' || c == '$' || c == '%' || c == '/') { + char next = encoded[i + 1]; + char decodedChar = '\0'; + switch (c) { + case '+': + // +A to +Z map to a to z + if (next >= 'A' && next <= 'Z') { + decodedChar = (char) (next + 32); + } else { + throw ReaderException(""); + } + break; + case '$': + // $A to $Z map to control codes SH to SB + if (next >= 'A' && next <= 'Z') { + decodedChar = (char) (next - 64); + } else { + throw ReaderException(""); + } + break; + case '%': + // %A to %E map to control codes ESC to US + if (next >= 'A' && next <= 'E') { + decodedChar = (char) (next - 38); + } else if (next >= 'F' && next <= 'W') { + decodedChar = (char) (next - 11); + } else { + throw ReaderException(""); + } + break; + case '/': + // /A to /O map to ! to , and /Z maps to : + if (next >= 'A' && next <= 'O') { + decodedChar = (char) (next - 32); + } else if (next == 'Z') { + decodedChar = ':'; + } else { + throw ReaderException(""); + } + break; + } + tmpDecoded.append(1, decodedChar); + // bump up i again since we read two characters + i++; + } else { + tmpDecoded.append(1, c); + } + } + Ref decoded(new String(tmpDecoded)); + return decoded; + } +} // namespace oned +} // namespace zxing - - Ref Code39Reader::decodeRow(int rowNumber, Ref row){ - int* start = findAsteriskPattern(row); - int nextStart = start[1]; - int end = row->getSize(); - - // Read off white space - while (nextStart < end && !row->get(nextStart)) { - nextStart++; - } - - std::string tmpResultString; - - int countersLen = 9; - int* counters = new int[countersLen]; - for (int i=0; iget(nextStart)) { - nextStart++; - } - } while (decodedChar != '*'); - tmpResultString.erase(tmpResultString.length()-1, 1);// remove asterisk - - // Look for whitespace after pattern: - int lastPatternSize = 0; - for (int i = 0; i < countersLen; i++) { - lastPatternSize += counters[i]; - } - // IS begin - delete [] counters; - // IS end - int whiteSpaceAfterEnd = nextStart - lastStart - lastPatternSize; - // If 50% of last pattern size, following last pattern, is not whitespace, fail - // (but if it's whitespace to the very end of the image, that's OK) - if (nextStart != end && whiteSpaceAfterEnd / 2 < lastPatternSize) { - delete [] start; - throw ReaderException("too short end white space"); - } - - if (usingCheckDigit) { - int max = tmpResultString.length() - 1; - int total = 0; - for (int i = 0; i < max; i++) { - total += alphabet_string.find_first_of(tmpResultString[i], 0); - } - if (total % 43 != alphabet_string.find_first_of(tmpResultString[max], 0)) { - throw ReaderException(""); - } - tmpResultString.erase(max, 1); - } - - - - - Ref resultString(new String(tmpResultString)); - if (extendedMode) { - delete resultString; - resultString = decodeExtended(tmpResultString); - } - - if (tmpResultString.length() == 0) { - delete [] start; - // Almost surely a false positive - throw ReaderException(""); - } - - float left = (float) (start[1] + start[0]) / 2.0f; - float right = (float) (nextStart + lastStart) / 2.0f; - - std::vector< Ref > resultPoints(2); - Ref resultPoint1(new OneDResultPoint(left, (float) rowNumber)); - Ref resultPoint2(new OneDResultPoint(right, (float) rowNumber)); - resultPoints[0] = resultPoint1; - resultPoints[1] = resultPoint2; - - ArrayRef resultBytes(1); - - delete [] start; - - Ref res(new Result(resultString, resultBytes, resultPoints, BarcodeFormat_CODE_39)); - return res; - } - - int* Code39Reader::findAsteriskPattern(Ref row){ - int width = row->getSize(); - int rowOffset = 0; - while (rowOffset < width) { - if (row->get(rowOffset)) { - break; - } - rowOffset++; - } - - int counterPosition = 0; - int countersLen = 9; - int* counters = new int[countersLen]; - for (int i=0; iget(i); - if (pixel ^ isWhite) { - counters[counterPosition]++; - } else { - if (counterPosition == patternLength - 1) { - if (toNarrowWidePattern(counters, countersLen) == ASTERISK_ENCODING) { - // Look for whitespace before start pattern, >= 50% of width of start pattern - if (row->isRange(fmaxl(0, patternStart - (i - patternStart) / 2), patternStart, false)) { - int* resultValue = new int[2]; - resultValue[0] = patternStart; - resultValue[1] = i; - return resultValue; - } - } - patternStart += counters[0] + counters[1]; - for (int y = 2; y < patternLength; y++) { - counters[y - 2] = counters[y]; - } - counters[patternLength - 2] = 0; - counters[patternLength - 1] = 0; - counterPosition--; - } else { - counterPosition++; - } - counters[counterPosition] = 1; - isWhite = !isWhite; - } - } - // IS begin - delete [] counters; - // IS end - throw ReaderException(""); - } - - // For efficiency, returns -1 on failure. Not throwing here saved as many as 700 exceptions - // per image when using some of our blackbox images. - int Code39Reader::toNarrowWidePattern(int counters[], int countersLen){ - int numCounters = countersLen; - int maxNarrowCounter = 0; - int wideCounters; - do { - int minCounter = INT_MAX; - for (int i = 0; i < numCounters; i++) { - int counter = counters[i]; - if (counter < minCounter && counter > maxNarrowCounter) { - minCounter = counter; - } - } - maxNarrowCounter = minCounter; - wideCounters = 0; - int totalWideCountersWidth = 0; - int pattern = 0; - for (int i = 0; i < numCounters; i++) { - int counter = counters[i]; - if (counters[i] > maxNarrowCounter) { - pattern |= 1 << (numCounters - 1 - i); - wideCounters++; - totalWideCountersWidth += counter; - } - } - if (wideCounters == 3) { - // Found 3 wide counters, but are they close enough in width? - // We can perform a cheap, conservative check to see if any individual - // counter is more than 1.5 times the average: - for (int i = 0; i < numCounters && wideCounters > 0; i++) { - int counter = counters[i]; - if (counters[i] > maxNarrowCounter) { - wideCounters--; - // totalWideCountersWidth = 3 * average, so this checks if counter >= 3/2 * average - if ((counter << 1) >= totalWideCountersWidth) { - return -1; - } - } - } - return pattern; - } - } while (wideCounters > 3); - return -1; - } - - char Code39Reader::patternToChar(int pattern){ - for (int i = 0; i < CHARACTER_ENCODINGS_LEN; i++) { - if (CHARACTER_ENCODINGS[i] == pattern) { - return ALPHABET[i]; - } - } - throw ReaderException(""); - } - - Ref Code39Reader::decodeExtended(std::string encoded){ - int length = encoded.length(); - std::string tmpDecoded; - for (int i = 0; i < length; i++) { - char c = encoded[i]; - if (c == '+' || c == '$' || c == '%' || c == '/') { - char next = encoded[i + 1]; - char decodedChar = '\0'; - switch (c) { - case '+': - // +A to +Z map to a to z - if (next >= 'A' && next <= 'Z') { - decodedChar = (char) (next + 32); - } else { - throw ReaderException(""); - } - break; - case '$': - // $A to $Z map to control codes SH to SB - if (next >= 'A' && next <= 'Z') { - decodedChar = (char) (next - 64); - } else { - throw ReaderException(""); - } - break; - case '%': - // %A to %E map to control codes ESC to US - if (next >= 'A' && next <= 'E') { - decodedChar = (char) (next - 38); - } else if (next >= 'F' && next <= 'W') { - decodedChar = (char) (next - 11); - } else { - throw ReaderException(""); - } - break; - case '/': - // /A to /O map to ! to , and /Z maps to : - if (next >= 'A' && next <= 'O') { - decodedChar = (char) (next - 32); - } else if (next == 'Z') { - decodedChar = ':'; - } else { - throw ReaderException(""); - } - break; - } - tmpDecoded.append(1, decodedChar); - // bump up i again since we read two characters - i++; - } else { - tmpDecoded.append(1, c); - } - } - Ref decoded(new String(tmpDecoded)); - return decoded; - } - } -} diff --git a/symbian/QQrDecoder/zxing/oned/ITFReader.cpp b/symbian/QQrDecoder/zxing/oned/ITFReader.cpp index 51a712f58..44643269a 100644 --- a/symbian/QQrDecoder/zxing/oned/ITFReader.cpp +++ b/symbian/QQrDecoder/zxing/oned/ITFReader.cpp @@ -237,7 +237,7 @@ namespace zxing { * @throws ReaderException if the quiet zone cannot be found, a ReaderException is thrown. */ void ITFReader::validateQuietZone(Ref row, int startPattern){ -#pragma mark needs some corrections +//#pragma mark needs some corrections // int quietCount = narrowLineWidth * 10; // expect to find this many pixels of quiet zone // // for (int i = startPattern - 1; quietCount > 0 && i >= 0; i--) { @@ -335,7 +335,7 @@ namespace zxing { * @throws ReaderException if digit cannot be decoded */ int ITFReader::decodeDigit(int counters[], int countersLen){ - int bestVariance = MAX_AVG_VARIANCE; // worst variance we'll accept + unsigned int bestVariance = MAX_AVG_VARIANCE; // worst variance we'll accept int bestMatch = -1; int max = PATTERNS_LEN; for (int i = 0; i < max; i++) { @@ -343,7 +343,7 @@ namespace zxing { for(int ind = 0; ind +#include #include #include @@ -93,6 +94,8 @@ namespace zxing { row = image->getBlackRow(rowNumber, row); }catch (ReaderException re) { continue; + }catch (IllegalArgumentException re) { + continue; } // While we have the image data in a BitArray, it's fairly cheap to reverse it in place to @@ -109,9 +112,17 @@ namespace zxing { // // But it was upside down, so note that // result.putMetadata(ResultMetadataType.ORIENTATION, new Integer(180)); // // And remember to flip the result points horizontally. - // ResultPoint[] points = result.getResultPoints(); - // points[0] = new ResultPoint(width - points[0].getX() - 1, points[0].getY()); - // points[1] = new ResultPoint(width - points[1].getX() - 1, points[1].getY()); + std::vector > points(result->getResultPoints()); + if (points.size() == 2) { + Ref pointZero(new OneDResultPoint(width - points[0]->getX() - 1, points[0]->getY())); + points[0] = pointZero; + + Ref pointOne(new OneDResultPoint(width - points[1]->getX() - 1, points[1]->getY())); + points[1] = pointOne; + + result.reset(new Result(result->getText(),result->getRawBytes(),points,result->getBarcodeFormat())); + } + } return result; } catch (ReaderException re) { @@ -119,13 +130,13 @@ namespace zxing { } } } - throw ReaderException(""); + throw ReaderException("doDecode() failed"); } - int OneDReader::patternMatchVariance(int counters[], int countersSize, const int pattern[], int maxIndividualVariance) { + unsigned int OneDReader::patternMatchVariance(int counters[], int countersSize, const int pattern[], int maxIndividualVariance) { int numCounters = countersSize; - int total = 0; - int patternLength = 0; + unsigned int total = 0; + unsigned int patternLength = 0; for (int i = 0; i < numCounters; i++) { total += counters[i]; patternLength += pattern[i]; @@ -138,10 +149,10 @@ namespace zxing { // We're going to fake floating-point math in integers. We just need to use more bits. // Scale up patternLength so that intermediate values below like scaledCounter will have // more "significant digits" - int unitBarWidth = (total << INTEGER_MATH_SHIFT) / patternLength; + unsigned int unitBarWidth = (total << INTEGER_MATH_SHIFT) / patternLength; maxIndividualVariance = (maxIndividualVariance * unitBarWidth) >> INTEGER_MATH_SHIFT; - int totalVariance = 0; + unsigned int totalVariance = 0; for (int x = 0; x < numCounters; x++) { int counter = counters[x] << INTEGER_MATH_SHIFT; int scaledPattern = pattern[x] * unitBarWidth; diff --git a/symbian/QQrDecoder/zxing/oned/OneDReader.h b/symbian/QQrDecoder/zxing/oned/OneDReader.h index 92a7e779b..bb3b64979 100644 --- a/symbian/QQrDecoder/zxing/oned/OneDReader.h +++ b/symbian/QQrDecoder/zxing/oned/OneDReader.h @@ -38,7 +38,7 @@ namespace zxing { virtual Ref decode(Ref image); virtual Ref decodeRow(int rowNumber, Ref row) = 0; - static int patternMatchVariance(int counters[], int countersSize, const int pattern[], int maxIndividualVariance); + static unsigned int patternMatchVariance(int counters[], int countersSize, const int pattern[], int maxIndividualVariance); static void recordPattern(Ref row, int start, int counters[], int countersCount); virtual ~OneDReader(); }; diff --git a/symbian/QQrDecoder/zxing/oned/UPCEANReader.cpp b/symbian/QQrDecoder/zxing/oned/UPCEANReader.cpp index b5923bf98..e0154c533 100644 --- a/symbian/QQrDecoder/zxing/oned/UPCEANReader.cpp +++ b/symbian/QQrDecoder/zxing/oned/UPCEANReader.cpp @@ -239,7 +239,7 @@ namespace zxing { // int UPCEANReader::decodeDigit(Ref row, int counters[], int countersLen, int rowOffset, int** patterns/*[][]*/, int paterns1Len, int paterns2Len) int UPCEANReader::decodeDigit(Ref row, int counters[], int countersLen, int rowOffset, UPC_EAN_PATTERNS patternType){ recordPattern(row, rowOffset, counters, countersLen); - int bestVariance = MAX_AVG_VARIANCE; // worst variance we'll accept + unsigned int bestVariance = MAX_AVG_VARIANCE; // worst variance we'll accept int bestMatch = -1; int max = 0; @@ -252,7 +252,7 @@ namespace zxing { pattern[j] = L_PATTERNS[i][j]; } - int variance = patternMatchVariance(counters, countersLen, pattern, MAX_INDIVIDUAL_VARIANCE); + unsigned int variance = patternMatchVariance(counters, countersLen, pattern, MAX_INDIVIDUAL_VARIANCE); if (variance < bestVariance) { bestVariance = variance; bestMatch = i; @@ -267,7 +267,7 @@ namespace zxing { pattern[j] = L_AND_G_PATTERNS[i][j]; } - int variance = patternMatchVariance(counters, countersLen, pattern, MAX_INDIVIDUAL_VARIANCE); + unsigned int variance = patternMatchVariance(counters, countersLen, pattern, MAX_INDIVIDUAL_VARIANCE); if (variance < bestVariance) { bestVariance = variance; bestMatch = i; diff --git a/symbian/QQrDecoder/zxing/oned/UPCEANReader.h b/symbian/QQrDecoder/zxing/oned/UPCEANReader.h index d673dc971..6ee218623 100644 --- a/symbian/QQrDecoder/zxing/oned/UPCEANReader.h +++ b/symbian/QQrDecoder/zxing/oned/UPCEANReader.h @@ -32,7 +32,7 @@ namespace zxing { class UPCEANReader : public OneDReader { private: - static const int MAX_AVG_VARIANCE = (int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.42f); + static const unsigned int MAX_AVG_VARIANCE = (unsigned int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.42f); static const int MAX_INDIVIDUAL_VARIANCE = (int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.7f); static int* findStartGuardPattern(Ref row); //throws ReaderException diff --git a/symbian/ZXingBarcodeReader/.cproject b/symbian/ZXingBarcodeReader/.cproject index 26abcfb0c..a64dacd29 100644 --- a/symbian/ZXingBarcodeReader/.cproject +++ b/symbian/ZXingBarcodeReader/.cproject @@ -4,8 +4,8 @@ - - + + @@ -21,18 +21,18 @@ + + - + - + - - - - + + @@ -49,18 +49,18 @@ + + - + - - - + - - + + @@ -77,18 +77,18 @@ + + - + - - - + - - + + @@ -105,19 +105,19 @@ - - - - - - - + + + + + + + - - + + @@ -134,14 +134,14 @@ + + - + - - - + diff --git a/symbian/ZXingBarcodeReader/group/ABLD.BAT b/symbian/ZXingBarcodeReader/group/ABLD.BAT index f77106118..ca1586ab6 100644 --- a/symbian/ZXingBarcodeReader/group/ABLD.BAT +++ b/symbian/ZXingBarcodeReader/group/ABLD.BAT @@ -3,7 +3,7 @@ REM Bldmake-generated batch file - ABLD.BAT REM ** DO NOT EDIT ** -perl -S ABLD.PL "\Carbide\ZXingWorkspace\ZXingBarcodeReader\group\\" %1 %2 %3 %4 %5 %6 %7 %8 %9 +perl -S ABLD.PL "\Carbide\workspace\ZXingBarcodeReader\group\\" %1 %2 %3 %4 %5 %6 %7 %8 %9 if errorlevel==1 goto CheckPerl goto End diff --git a/symbian/ZXingBarcodeReader/group/ZXingBarcodeReader.mmp b/symbian/ZXingBarcodeReader/group/ZXingBarcodeReader.mmp index 4d384e049..e395db5b1 100644 --- a/symbian/ZXingBarcodeReader/group/ZXingBarcodeReader.mmp +++ b/symbian/ZXingBarcodeReader/group/ZXingBarcodeReader.mmp @@ -31,12 +31,19 @@ SYSTEMINCLUDE /epoc32/include/stdapis/stlport/stl SYSTEMINCLUDE . SYSTEMINCLUDE ../inc +SYSTEMINCLUDE zxing/common SYSTEMINCLUDE zxing/common/reedsolomon SYSTEMINCLUDE zxing/oned SYSTEMINCLUDE zxing/qrcode SYSTEMINCLUDE zxing/qrcode/decoder SYSTEMINCLUDE zxing/qrcode/detector +/* +SYSTEMINCLUDE zxing/datamatrix +SYSTEMINCLUDE zxing/datamatrix/decoder +SYSTEMINCLUDE zxing/datamatrix/detector +*/ + SOURCEPATH ../src SOURCE ZXingBarcodeReader.cpp SOURCE ZXingBarcodeReaderApplication.cpp ZXingBarcodeReaderAppView.cpp @@ -81,6 +88,15 @@ SOURCE ErrorCorrectionLevel.cpp FormatInformation.cpp QRCodeReader.cpp Version.c SOURCEPATH zxing SOURCE BarcodeFormat.cpp Binarizer.cpp BinaryBitmap.cpp Exception.cpp LuminanceSource.cpp MultiFormatReader.cpp Reader.cpp ReaderException.cpp Result.cpp ResultPoint.cpp +/* +SOURCEPATH zxing/datamatrix/detector +SOURCE CornerPoint.cpp Detector.cpp MonochromeRectangleDetector.cpp +SOURCEPATH zxing/datamatrix/decoder +SOURCE BitMatrixParser.cpp DataBlock.cpp DecodedBitStreamParser.cpp Decoder.cpp +SOURCEPATH zxing/datamatrix +SOURCE Version.cpp DataMatrixReader.cpp +*/ + OPTION CW -wchar_t on OPTION ARMCC --visibility_inlines_hidden OPTION GCCE -fvisibility-inlines-hidden diff --git a/symbian/ZXingBarcodeReader/group/zxing/Binarizer.cpp b/symbian/ZXingBarcodeReader/group/zxing/Binarizer.cpp index 5f6e746bc..190138291 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/Binarizer.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/Binarizer.cpp @@ -23,15 +23,17 @@ namespace zxing { - Binarizer::Binarizer(Ref source) : source_(source) { + Binarizer::Binarizer(Ref source) : source_(source), array_(NULL), matrix_(NULL), cached_y_(-1) { } Binarizer::~Binarizer() { } Ref Binarizer::getBlackRow(int y, Ref row){ - if (array_ == NULL) + if (array_ == NULL && cached_y_ != y) { array_ = estimateBlackRow(y, row); + cached_y_ = y; + } return array_; } diff --git a/symbian/ZXingBarcodeReader/group/zxing/Binarizer.h b/symbian/ZXingBarcodeReader/group/zxing/Binarizer.h index ea1240c0b..694018d72 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/Binarizer.h +++ b/symbian/ZXingBarcodeReader/group/zxing/Binarizer.h @@ -28,24 +28,25 @@ #include namespace zxing { - - class Binarizer : public Counted { - private: - Ref source_; - Ref matrix_; - Ref array_; - - public: - Binarizer(Ref source); - virtual ~Binarizer(); - - virtual Ref estimateBlackRow(int y, Ref row)=0; - Ref getBlackRow(int y, Ref row); - - virtual Ref estimateBlackMatrix() = 0; - Ref getBlackMatrix(); - Ref getSource(); - }; - + +class Binarizer : public Counted { + private: + Ref source_; + Ref array_; + Ref matrix_; + int cached_y_; + + public: + Binarizer(Ref source); + virtual ~Binarizer(); + + virtual Ref estimateBlackRow(int y, Ref row)=0; + Ref getBlackRow(int y, Ref row); + + virtual Ref estimateBlackMatrix() = 0; + Ref getBlackMatrix(); + Ref getSource(); +}; + } #endif /* BINARIZER_H_ */ diff --git a/symbian/ZXingBarcodeReader/group/zxing/BinaryBitmap.cpp b/symbian/ZXingBarcodeReader/group/zxing/BinaryBitmap.cpp index 1e692a9f5..ff79b55d5 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/BinaryBitmap.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/BinaryBitmap.cpp @@ -23,7 +23,7 @@ namespace zxing { - BinaryBitmap::BinaryBitmap(Ref binarizer) : bits_(NULL), binarizer_(binarizer) { + BinaryBitmap::BinaryBitmap(Ref binarizer) : bits_(NULL), array_bits_(NULL), binarizer_(binarizer), cached_y_(-1) { } @@ -31,8 +31,9 @@ namespace zxing { } Ref BinaryBitmap::getBlackRow(int y, Ref row) { - if (array_bits_ == NULL) { + if (array_bits_ == NULL && cached_y_ != y) { array_bits_ = binarizer_->getBlackRow(y, row); + cached_y_ = y; } return array_bits_; } diff --git a/symbian/ZXingBarcodeReader/group/zxing/BinaryBitmap.h b/symbian/ZXingBarcodeReader/group/zxing/BinaryBitmap.h index ecd9a8549..ddea910c1 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/BinaryBitmap.h +++ b/symbian/ZXingBarcodeReader/group/zxing/BinaryBitmap.h @@ -33,6 +33,7 @@ namespace zxing { Ref bits_; Ref array_bits_; Ref binarizer_; + int cached_y_; public: BinaryBitmap(Ref binarizer); diff --git a/symbian/ZXingBarcodeReader/group/zxing/Exception.cpp b/symbian/ZXingBarcodeReader/group/zxing/Exception.cpp index 47143c964..d20b6e3c1 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/Exception.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/Exception.cpp @@ -16,7 +16,7 @@ Exception::Exception(const char *msg) : } const char* Exception::what() const throw() { - return message; + return message.c_str(); } Exception::~Exception() throw() { diff --git a/symbian/ZXingBarcodeReader/group/zxing/Exception.h b/symbian/ZXingBarcodeReader/group/zxing/Exception.h index 7502c5cb6..ac4026e66 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/Exception.h +++ b/symbian/ZXingBarcodeReader/group/zxing/Exception.h @@ -28,7 +28,7 @@ namespace zxing { class Exception : public std::exception { private: - const char * message; + std::string message; public: Exception(const char *msg); diff --git a/symbian/ZXingBarcodeReader/group/zxing/LuminanceSource.h b/symbian/ZXingBarcodeReader/group/zxing/LuminanceSource.h index e23621ef9..d39f06f38 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/LuminanceSource.h +++ b/symbian/ZXingBarcodeReader/group/zxing/LuminanceSource.h @@ -30,10 +30,10 @@ public: LuminanceSource(); virtual ~LuminanceSource(); - virtual int getWidth() = 0; - virtual int getHeight() = 0; + virtual int getWidth() const = 0; + virtual int getHeight() const = 0; - virtual unsigned char getPixel(int x, int y) = 0; + virtual unsigned char getPixel(int x, int y) const = 0; virtual unsigned char* copyMatrix(); }; diff --git a/symbian/ZXingBarcodeReader/group/zxing/MultiFormatReader.cpp b/symbian/ZXingBarcodeReader/group/zxing/MultiFormatReader.cpp index fd3d8d2f5..bacb3cd89 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/MultiFormatReader.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/MultiFormatReader.cpp @@ -19,7 +19,7 @@ * limitations under the License. */ -#include "MultiFormatReader.h" +#include #include //#include #include @@ -27,28 +27,27 @@ #include namespace zxing { - MultiFormatReader::MultiFormatReader(){ - readers = new std::vector(); - - readers->push_back(new zxing::qrcode::QRCodeReader()); - //readers->push_back(new zxing::datamatrix::DataMatrixReader()); - readers->push_back(new zxing::oned::MultiFormatUPCEANReader()); - readers->push_back(new zxing::oned::MultiFormatOneDReader()); + MultiFormatReader::MultiFormatReader() { + readers.push_back(new zxing::qrcode::QRCodeReader()); + //readers.push_back(new zxing::datamatrix::DataMatrixReader()); + readers.push_back(new zxing::oned::MultiFormatUPCEANReader()); + readers.push_back(new zxing::oned::MultiFormatOneDReader()); } Ref MultiFormatReader::decode(Ref image){ - int size = readers->size(); - for (int i = 0; i < size; i++) { - Reader* reader = (*readers)[i]; + for (unsigned int i = 0; i < readers.size(); i++) { try { - return reader->decode(image); + return readers[i]->decode(image); } catch (ReaderException re) { // continue } } throw ReaderException("No code detected"); } + MultiFormatReader::~MultiFormatReader(){ - delete readers; + for (unsigned int i = 0; i < readers.size(); i++) { + delete readers[i]; + } } } diff --git a/symbian/ZXingBarcodeReader/group/zxing/MultiFormatReader.h b/symbian/ZXingBarcodeReader/group/zxing/MultiFormatReader.h index 9fca54f6c..f88ebc979 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/MultiFormatReader.h +++ b/symbian/ZXingBarcodeReader/group/zxing/MultiFormatReader.h @@ -3,6 +3,7 @@ * ZXing * * Created by Lukasz Warchol on 10-01-26. + * Modified by Luiz Silva on 09/02/2010. * Copyright 2010 ZXing authors All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -27,12 +28,12 @@ namespace zxing { class MultiFormatReader : public Reader { private: - std::vector* readers; + std::vectorreaders; public: MultiFormatReader(); Ref decode(Ref image); - + ~MultiFormatReader(); }; -} \ No newline at end of file +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/Reader.h b/symbian/ZXingBarcodeReader/group/zxing/Reader.h index 3de270f95..d7844a9ae 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/Reader.h +++ b/symbian/ZXingBarcodeReader/group/zxing/Reader.h @@ -21,16 +21,17 @@ * limitations under the License. */ -#include #include #include namespace zxing { -class Reader { -public: - virtual Ref decode(Ref image) = 0; - virtual ~Reader(); + class Reader : public Counted { + protected: + Reader() {} + public: + virtual Ref decode(Ref image) = 0; + virtual ~Reader(); }; } diff --git a/symbian/ZXingBarcodeReader/group/zxing/Result.cpp b/symbian/ZXingBarcodeReader/group/zxing/Result.cpp index f87ef8844..6ea658272 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/Result.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/Result.cpp @@ -39,11 +39,11 @@ ArrayRef Result::getRawBytes() { return rawBytes_; } -std::vector > Result::getResultPoints() { +const std::vector >& Result::getResultPoints() const { return resultPoints_; } -BarcodeFormat Result::getBarcodeFormat() { +BarcodeFormat Result::getBarcodeFormat() const { return format_; } diff --git a/symbian/ZXingBarcodeReader/group/zxing/Result.h b/symbian/ZXingBarcodeReader/group/zxing/Result.h index 710d8d5a6..c9fcf43b5 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/Result.h +++ b/symbian/ZXingBarcodeReader/group/zxing/Result.h @@ -44,8 +44,8 @@ public: ~Result(); Ref getText(); ArrayRef getRawBytes(); - std::vector > getResultPoints(); - BarcodeFormat getBarcodeFormat(); + const std::vector >& getResultPoints() const; + BarcodeFormat getBarcodeFormat() const; friend std::ostream& operator<<(std::ostream &out, Result& result); }; diff --git a/symbian/ZXingBarcodeReader/group/zxing/ResultPoint.h b/symbian/ZXingBarcodeReader/group/zxing/ResultPoint.h index 6118cc0dc..33dff7039 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/ResultPoint.h +++ b/symbian/ZXingBarcodeReader/group/zxing/ResultPoint.h @@ -26,9 +26,11 @@ namespace zxing { class ResultPoint : public Counted { +protected: + ResultPoint() {} public: - virtual float getX() = 0; - virtual float getY() = 0; + virtual float getX() const = 0; + virtual float getY() const = 0; }; } diff --git a/symbian/ZXingBarcodeReader/group/zxing/common/Array.h b/symbian/ZXingBarcodeReader/group/zxing/common/Array.h index 39b178607..9b8226904 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/common/Array.h +++ b/symbian/ZXingBarcodeReader/group/zxing/common/Array.h @@ -21,8 +21,7 @@ * limitations under the License. */ -#include -#include +#include #ifdef DEBUG_COUNTING #include @@ -37,17 +36,17 @@ namespace zxing { template class Array : public Counted { protected: public: - std::valarray values_; + std::vector values_; Array(size_t n) : - Counted(), values_(T(), n) { + Counted(), values_(n, T()) { } Array(T *ts, size_t n) : - Counted(), values_(ts, n) { + Counted(), values_(ts, ts+n) { } Array(T v, size_t n) : - Counted(), values_(v, n) { + Counted(), values_(n, v) { } - Array(std::valarray &v) : + Array(std::vector &v) : Counted(), values_(v) { } Array(Array &other) : @@ -68,7 +67,7 @@ public: #endif return *this; } - Array& operator=(const std::valarray &array) { + Array& operator=(const std::vector &array) { #ifdef DEBUG_COUNTING cout << "assigning values from Array " << &array << " to this Array " << this << ", "; #endif @@ -87,10 +86,10 @@ public: size_t size() const { return values_.size(); } - std::valarray values() const { + std::vector values() const { return values_; } - std::valarray& values() { + std::vector& values() { return values_; } }; diff --git a/symbian/ZXingBarcodeReader/group/zxing/common/BitArray.cpp b/symbian/ZXingBarcodeReader/group/zxing/common/BitArray.cpp index 26e686930..6ba7fd22f 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/common/BitArray.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/common/BitArray.cpp @@ -20,6 +20,7 @@ #include #include +#include using namespace std; @@ -43,12 +44,9 @@ size_t BitArray::wordsForBits(size_t bits) { } return arraySize; } -BitArray::BitArray() { - cout << "hey! don't use this BitArrayConstructor!\n"; -} BitArray::BitArray(size_t size) : - size_(size), bits_((const unsigned int)0, wordsForBits(size)) { + size_(size), bits_(wordsForBits(size), (const unsigned int)0) { } BitArray::~BitArray() { } @@ -105,14 +103,16 @@ bool BitArray::isRange(size_t start, size_t end, bool value) { } return true; } -valarray& BitArray::getBitArray() { +vector& BitArray::getBitArray() { return bits_; } void BitArray::reverse() { - unsigned int allBits = numeric_limits::max(); - size_t max = bits_.size(); - for (size_t i = 0; i < max; i++) { - bits_[i] = bits_[i] ^ allBits; + std::vector newBits(bits_.size(),(const unsigned int) 0); + for (size_t i = 0; i < size_; i++) { + if (get(size_ - i - 1)) { + newBits[i >> logBits_] |= 1<< (i & bitsMask_); + } } + bits_ = newBits; } } diff --git a/symbian/ZXingBarcodeReader/group/zxing/common/BitArray.h b/symbian/ZXingBarcodeReader/group/zxing/common/BitArray.h index 1e8828e96..d3b6f661f 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/common/BitArray.h +++ b/symbian/ZXingBarcodeReader/group/zxing/common/BitArray.h @@ -23,8 +23,7 @@ #include #include -#include -#include +#include #include namespace zxing { @@ -32,7 +31,7 @@ namespace zxing { class BitArray : public Counted { private: size_t size_; - std::valarray bits_; + std::vector bits_; static const unsigned int bitsPerWord_; static const unsigned int logBits_; static const unsigned int bitsMask_; @@ -48,7 +47,7 @@ public: void setBulk(size_t i, unsigned int newBits); void clear(); bool isRange(size_t start, size_t end, bool value); - std::valarray& getBitArray(); + std::vector& getBitArray(); void reverse(); }; diff --git a/symbian/ZXingBarcodeReader/group/zxing/common/BitMatrix.cpp b/symbian/ZXingBarcodeReader/group/zxing/common/BitMatrix.cpp index 9256c4097..8c137f2a7 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/common/BitMatrix.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/common/BitMatrix.cpp @@ -24,7 +24,6 @@ #include #include #include -#include namespace zxing { using namespace std; @@ -40,7 +39,7 @@ unsigned int logDigits(unsigned digits) { } -const unsigned int bitsPerWord = std::numeric_limits::digits; +const unsigned int bitsPerWord = numeric_limits::digits; const unsigned int logBits = logDigits(bitsPerWord); const unsigned int bitsMask = (1 << logBits) - 1; @@ -54,7 +53,7 @@ static size_t wordsForSize(size_t width, size_t height) { } BitMatrix::BitMatrix(size_t dimension) : - width_(dimension), height_(dimension), bits_(NULL) { + width_(dimension), height_(dimension), words_(0), bits_(NULL) { words_ = wordsForSize(width_, height_); bits_ = new unsigned int[words_]; @@ -62,7 +61,7 @@ BitMatrix::BitMatrix(size_t dimension) : } BitMatrix::BitMatrix(size_t width, size_t height) : - width_(width), height_(height), bits_(NULL) { + width_(width), height_(height), words_(0), bits_(NULL) { words_ = wordsForSize(width_, height_); bits_ = new unsigned int[words_]; @@ -90,7 +89,7 @@ void BitMatrix::flip(size_t x, size_t y) { } void BitMatrix::clear() { - std::memset(bits_, 0, sizeof(unsigned int) * words_); + std::fill(bits_, bits_+words_, 0); } void BitMatrix::setRegion(size_t left, size_t top, size_t width, size_t height) { @@ -126,11 +125,11 @@ size_t BitMatrix::getDimension() const { return width_; } -unsigned int* BitMatrix::getBits() { +unsigned int* BitMatrix::getBits() const { return bits_; } -ostream& operator<<(ostream &out, BitMatrix &bm) { +ostream& operator<<(ostream &out, const BitMatrix &bm) { for (size_t y = 0; y < bm.height_; y++) { for (size_t x = 0; x < bm.width_; x++) { out << (bm.get(x, y) ? "X " : " "); diff --git a/symbian/ZXingBarcodeReader/group/zxing/common/BitMatrix.h b/symbian/ZXingBarcodeReader/group/zxing/common/BitMatrix.h index e8f8f847e..91d785e97 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/common/BitMatrix.h +++ b/symbian/ZXingBarcodeReader/group/zxing/common/BitMatrix.h @@ -22,7 +22,6 @@ */ #include -#include #include namespace zxing { @@ -50,10 +49,14 @@ public: size_t getWidth() const; size_t getHeight() const; - unsigned int* getBits(); + unsigned int* getBits() const; - friend std::ostream& operator<<(std::ostream &out, BitMatrix &bm); + friend std::ostream& operator<<(std::ostream &out, const BitMatrix &bm); const char *description(); + +private: + BitMatrix(const BitMatrix&); + BitMatrix& operator =(const BitMatrix&); }; } diff --git a/symbian/ZXingBarcodeReader/group/zxing/common/Counted.h b/symbian/ZXingBarcodeReader/group/zxing/common/Counted.h index dd0f84552..4f2b369c5 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/common/Counted.h +++ b/symbian/ZXingBarcodeReader/group/zxing/common/Counted.h @@ -172,10 +172,10 @@ public: T& operator*() { return *object_; } - T* operator->() { + T* operator->() const { return object_; } - operator T*() { + operator T*() const { return object_; } diff --git a/symbian/ZXingBarcodeReader/group/zxing/common/EdgeDetector.cpp b/symbian/ZXingBarcodeReader/group/zxing/common/EdgeDetector.cpp index 3f0b403cc..70ac8c5de 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/common/EdgeDetector.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/common/EdgeDetector.cpp @@ -20,6 +20,7 @@ #include #include +#include using namespace std; diff --git a/symbian/ZXingBarcodeReader/group/zxing/common/GlobalHistogramBinarizer.cpp b/symbian/ZXingBarcodeReader/group/zxing/common/GlobalHistogramBinarizer.cpp index 8767dbd34..8b99611eb 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/common/GlobalHistogramBinarizer.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/common/GlobalHistogramBinarizer.cpp @@ -24,154 +24,160 @@ #include namespace zxing { - using namespace std; - - const int LUMINANCE_BITS = 5; - const int LUMINANCE_SHIFT = 8 - LUMINANCE_BITS; - const int LUMINANCE_BUCKETS = 1 << LUMINANCE_BITS; - - GlobalHistogramBinarizer::GlobalHistogramBinarizer(Ref source) : - Binarizer(source) { - - } - - GlobalHistogramBinarizer::~GlobalHistogramBinarizer() { - } - - - Ref GlobalHistogramBinarizer::estimateBlackRow(int y, Ref row){ - valarray histogram(0, LUMINANCE_BUCKETS); - LuminanceSource& source = *getSource(); - int width = source.getWidth(); - if (row == NULL || row->getSize() < width) { - row = new BitArray(width); - } else { - row->clear(); - } - - for (int x = 0; x < width; x++) { - unsigned char pixel = source.getPixel(x, y); - histogram[pixel >> LUMINANCE_SHIFT]++; - } - int blackPoint = estimate(histogram) << LUMINANCE_SHIFT; - - - Ref array_ref(new BitArray(width)); - BitArray& array = *array_ref; - - int left = source.getPixel(0, y); - int center = source.getPixel(1, y); - for (int x = 1; x < width - 1; x++) { - int right = source.getPixel(x+1, y); - // A simple -1 4 -1 box filter with a weight of 2. - int luminance = ((center << 2) - left - right) >> 1; - if (luminance < blackPoint) { - array.set(x); - } - left = center; - center = right; - } - - return array_ref; - } - - Ref GlobalHistogramBinarizer::estimateBlackMatrix() { - // Faster than working with the reference - LuminanceSource& source = *getSource(); - int width = source.getWidth(); - int height = source.getHeight(); - valarray histogram(0, LUMINANCE_BUCKETS); - - - // Quickly calculates the histogram by sampling four rows from the image. This proved to be - // more robust on the blackbox tests than sampling a diagonal as we used to do. - for (int y = 1; y < 5; y++) { - int row = height * y / 5; - int right = (width << 2) / 5; - int sdf; - for (int x = width / 5; x < right; x++) { - unsigned char pixel = source.getPixel(x, row); - histogram[pixel >> LUMINANCE_SHIFT]++; - sdf = histogram[pixel >> LUMINANCE_SHIFT]; - } - } - - int blackPoint = estimate(histogram) << LUMINANCE_SHIFT; - - Ref matrix_ref(new BitMatrix(width, height)); - BitMatrix& matrix = *matrix_ref; - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - if (source.getPixel(x, y) <= blackPoint) - matrix.set(x, y); - } - } - return matrix_ref; - } - - int GlobalHistogramBinarizer::estimate(valarray &histogram) { - int numBuckets = histogram.size(); - int maxBucketCount = 0; - - - // Find tallest peak in histogram - int firstPeak = 0; - int firstPeakSize = 0; - for (int i = 0; i < numBuckets; i++) { - if (histogram[i] > firstPeakSize) { - firstPeak = i; - firstPeakSize = histogram[i]; - } - if (histogram[i] > maxBucketCount) { - maxBucketCount = histogram[i]; - } - } - - // Find second-tallest peak -- well, another peak that is tall and not - // so close to the first one - int secondPeak = 0; - int secondPeakScore = 0; - for (int i = 0; i < numBuckets; i++) { - int distanceToBiggest = i - firstPeak; - // Encourage more distant second peaks by multiplying by square of distance - int score = histogram[i] * distanceToBiggest * distanceToBiggest; - if (score > secondPeakScore) { - secondPeak = i; - secondPeakScore = score; - } - } - - // Put firstPeak first - if (firstPeak > secondPeak) { - int temp = firstPeak; - firstPeak = secondPeak; - secondPeak = temp; - } - - // Kind of arbitrary; if the two peaks are very close, then we figure there is so little - // dynamic range in the image, that discriminating black and white is too error-prone. - // Decoding the image/line is either pointless, or may in some cases lead to a false positive - // for 1D formats, which are relatively lenient. - // We arbitrarily say "close" is "<= 1/16 of the total histogram buckets apart" - if (secondPeak - firstPeak <= numBuckets >> 4) { - throw IllegalArgumentException("Too little dynamic range in luminance"); - } - - // Find a valley between them that is low and closer to the white peak - int bestValley = secondPeak - 1; - int bestValleyScore = -1; - for (int i = secondPeak - 1; i > firstPeak; i--) { - int fromFirst = i - firstPeak; - // Favor a "valley" that is not too close to either peak -- especially not the black peak -- - // and that has a low value of course - int score = fromFirst * fromFirst * (secondPeak - i) * (maxBucketCount - histogram[i]); - if (score > bestValleyScore) { - bestValley = i; - bestValleyScore = score; - } - } - - return bestValley; - } - +using namespace std; + +const int LUMINANCE_BITS = 5; +const int LUMINANCE_SHIFT = 8 - LUMINANCE_BITS; +const int LUMINANCE_BUCKETS = 1 << LUMINANCE_BITS; + +GlobalHistogramBinarizer::GlobalHistogramBinarizer(Ref source) : + Binarizer(source) { + } + +GlobalHistogramBinarizer::~GlobalHistogramBinarizer() { +} + + +Ref GlobalHistogramBinarizer::estimateBlackRow(int y, + Ref row){ + vector histogram(LUMINANCE_BUCKETS, 0); + LuminanceSource& source = *getSource(); + int width = source.getWidth(); + if (row == NULL || static_cast(row->getSize()) < width) { + row = new BitArray(width); + } else { + row->clear(); + } + + for (int x = 0; x < width; x++) { + unsigned char pixel = source.getPixel(x, y); + histogram[pixel >> LUMINANCE_SHIFT]++; + } + int blackPoint = estimate(histogram) << LUMINANCE_SHIFT; + + + Ref array_ref(new BitArray(width)); + BitArray& array = *array_ref; + + int left = source.getPixel(0, y); + int center = source.getPixel(1, y); + for (int x = 1; x < width - 1; x++) { + int right = source.getPixel(x+1, y); + // A simple -1 4 -1 box filter with a weight of 2. + int luminance = ((center << 2) - left - right) >> 1; + if (luminance < blackPoint) { + array.set(x); + } + left = center; + center = right; + } + + return array_ref; +} + +Ref GlobalHistogramBinarizer::estimateBlackMatrix() { + // Faster than working with the reference + LuminanceSource& source = *getSource(); + int width = source.getWidth(); + int height = source.getHeight(); + vector histogram(LUMINANCE_BUCKETS, 0); + + + // Quickly calculates the histogram by sampling four rows from the image. + // This proved to be more robust on the blackbox tests than sampling a + // diagonal as we used to do. + for (int y = 1; y < 5; y++) { + int row = height * y / 5; + int right = (width << 2) / 5; + int sdf; + for (int x = width / 5; x < right; x++) { + unsigned char pixel = source.getPixel(x, row); + histogram[pixel >> LUMINANCE_SHIFT]++; + sdf = histogram[pixel >> LUMINANCE_SHIFT]; + } + } + + int blackPoint = estimate(histogram) << LUMINANCE_SHIFT; + + Ref matrix_ref(new BitMatrix(width, height)); + BitMatrix& matrix = *matrix_ref; + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + if (source.getPixel(x, y) <= blackPoint) + matrix.set(x, y); + } + } + return matrix_ref; +} + +int GlobalHistogramBinarizer::estimate(vector &histogram) { + int numBuckets = histogram.size(); + int maxBucketCount = 0; + + + // Find tallest peak in histogram + int firstPeak = 0; + int firstPeakSize = 0; + for (int i = 0; i < numBuckets; i++) { + if (histogram[i] > firstPeakSize) { + firstPeak = i; + firstPeakSize = histogram[i]; + } + if (histogram[i] > maxBucketCount) { + maxBucketCount = histogram[i]; + } + } + + // Find second-tallest peak -- well, another peak that is tall and not + // so close to the first one + int secondPeak = 0; + int secondPeakScore = 0; + for (int i = 0; i < numBuckets; i++) { + int distanceToBiggest = i - firstPeak; + // Encourage more distant second peaks by multiplying by square of distance + int score = histogram[i] * distanceToBiggest * distanceToBiggest; + if (score > secondPeakScore) { + secondPeak = i; + secondPeakScore = score; + } + } + + // Put firstPeak first + if (firstPeak > secondPeak) { + int temp = firstPeak; + firstPeak = secondPeak; + secondPeak = temp; + } + + // Kind of arbitrary; if the two peaks are very close, then we figure there is + // so little dynamic range in the image, that discriminating black and white + // is too error-prone. + // Decoding the image/line is either pointless, or may in some cases lead to + // a false positive for 1D formats, which are relatively lenient. + // We arbitrarily say "close" is + // "<= 1/16 of the total histogram buckets apart" + if (secondPeak - firstPeak <= numBuckets >> 4) { + throw IllegalArgumentException("Too little dynamic range in luminance"); + } + + // Find a valley between them that is low and closer to the white peak + int bestValley = secondPeak - 1; + int bestValleyScore = -1; + for (int i = secondPeak - 1; i > firstPeak; i--) { + int fromFirst = i - firstPeak; + // Favor a "valley" that is not too close to either peak -- especially not + // the black peak -- and that has a low value of course + int score = fromFirst * fromFirst * (secondPeak - i) * + (maxBucketCount - histogram[i]); + if (score > bestValleyScore) { + bestValley = i; + bestValleyScore = score; + } + } + + return bestValley; +} + +} // namespace zxing + diff --git a/symbian/ZXingBarcodeReader/group/zxing/common/GlobalHistogramBinarizer.h b/symbian/ZXingBarcodeReader/group/zxing/common/GlobalHistogramBinarizer.h index 6735c5b9f..42956e944 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/common/GlobalHistogramBinarizer.h +++ b/symbian/ZXingBarcodeReader/group/zxing/common/GlobalHistogramBinarizer.h @@ -22,7 +22,7 @@ #ifndef GLOBALHISTOGRAMBINARIZER_H_ #define GLOBALHISTOGRAMBINARIZER_H_ -#include +#include #include #include #include @@ -36,7 +36,7 @@ namespace zxing { virtual Ref estimateBlackRow(int y, Ref row); virtual Ref estimateBlackMatrix(); - static int estimate(std::valarray &histogram); + static int estimate(std::vector &histogram); }; } diff --git a/symbian/ZXingBarcodeReader/group/zxing/common/GridSampler.cpp b/symbian/ZXingBarcodeReader/group/zxing/common/GridSampler.cpp index 06bb602c1..03a240ebb 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/common/GridSampler.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/common/GridSampler.cpp @@ -34,7 +34,7 @@ GridSampler::GridSampler() { Ref GridSampler::sampleGrid(Ref image, int dimension, Ref transform) { Ref bits(new BitMatrix(dimension)); - valarray points((const float)0.0f, dimension << 1); + vector points(dimension << 1, (const float)0.0f); for (int y = 0; y < dimension; y++) { int max = points.size(); float yValue = (float)y + 0.5f; @@ -63,7 +63,7 @@ Ref GridSampler::sampleGrid(Ref image, int dimension, floa } -void GridSampler::checkAndNudgePoints(Ref image, valarray &points) { +void GridSampler::checkAndNudgePoints(Ref image, vector &points) { int width = image->getWidth(); int height = image->getHeight(); diff --git a/symbian/ZXingBarcodeReader/group/zxing/common/GridSampler.h b/symbian/ZXingBarcodeReader/group/zxing/common/GridSampler.h index 3dd577dcb..a7ad8b991 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/common/GridSampler.h +++ b/symbian/ZXingBarcodeReader/group/zxing/common/GridSampler.h @@ -36,7 +36,7 @@ public: Ref sampleGrid(Ref image, int dimension, float p1ToX, float p1ToY, float p2ToX, float p2ToY, float p3ToX, float p3ToY, float p4ToX, float p4ToY, float p1FromX, float p1FromY, float p2FromX, float p2FromY, float p3FromX, float p3FromY, float p4FromX, float p4FromY); - static void checkAndNudgePoints(Ref image, std::valarray &points); + static void checkAndNudgePoints(Ref image, std::vector &points); static GridSampler &getInstance(); }; } diff --git a/symbian/ZXingBarcodeReader/group/zxing/common/PerspectiveTransform.cpp b/symbian/ZXingBarcodeReader/group/zxing/common/PerspectiveTransform.cpp index 44d9ddcb0..5b4ae2e8b 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/common/PerspectiveTransform.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/common/PerspectiveTransform.cpp @@ -23,18 +23,13 @@ namespace zxing { using namespace std; -PerspectiveTransform::PerspectiveTransform(float a11, float a21, float a31, float a12, float a22, float a32, float a13, - float a23, float a33) { - this->a11 = a11; - this->a12 = a12; - this->a13 = a13; - this->a21 = a21; - this->a22 = a22; - this->a23 = a23; - this->a31 = a31; - this->a32 = a32; - this->a33 = a33; -} +PerspectiveTransform::PerspectiveTransform(float inA11, float inA21, + float inA31, float inA12, + float inA22, float inA32, + float inA13, float inA23, + float inA33) : + a11(inA11), a12(inA12), a13(inA13), a21(inA21), a22(inA22), a23(inA23), + a31(inA31), a32(inA32), a33(inA33) {} Ref PerspectiveTransform::quadrilateralToQuadrilateral(float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3, float x0p, float y0p, float x1p, float y1p, float x2p, float y2p, @@ -91,17 +86,8 @@ Ref PerspectiveTransform::times(Ref return result; } -void PerspectiveTransform::transformPoints(valarray &points) { +void PerspectiveTransform::transformPoints(vector &points) { int max = points.size(); - float a11 = this->a11; - float a12 = this->a12; - float a13 = this->a13; - float a21 = this->a21; - float a22 = this->a22; - float a23 = this->a23; - float a31 = this->a31; - float a32 = this->a32; - float a33 = this->a33; for (int i = 0; i < max; i += 2) { float x = points[i]; float y = points[i + 1]; @@ -111,7 +97,7 @@ void PerspectiveTransform::transformPoints(valarray &points) { } } -ostream& operator<<(ostream& out, PerspectiveTransform &pt) { +ostream& operator<<(ostream& out, const PerspectiveTransform &pt) { out << pt.a11 << ", " << pt.a12 << ", " << pt.a13 << ", \n"; out << pt.a21 << ", " << pt.a22 << ", " << pt.a23 << ", \n"; out << pt.a31 << ", " << pt.a32 << ", " << pt.a33 << "\n"; diff --git a/symbian/ZXingBarcodeReader/group/zxing/common/PerspectiveTransform.h b/symbian/ZXingBarcodeReader/group/zxing/common/PerspectiveTransform.h index 581f92880..b32263270 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/common/PerspectiveTransform.h +++ b/symbian/ZXingBarcodeReader/group/zxing/common/PerspectiveTransform.h @@ -22,7 +22,7 @@ */ #include -#include +#include namespace zxing { class PerspectiveTransform : public Counted { @@ -41,9 +41,9 @@ public: float x3, float y3); Ref buildAdjoint(); Ref times(Ref other); - void transformPoints(std::valarray &points); + void transformPoints(std::vector &points); - friend std::ostream& operator<<(std::ostream& out, PerspectiveTransform &pt); + friend std::ostream& operator<<(std::ostream& out, const PerspectiveTransform &pt); }; } diff --git a/symbian/ZXingBarcodeReader/group/zxing/common/Point.h b/symbian/ZXingBarcodeReader/group/zxing/common/Point.h index a391042fe..ea2705221 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/common/Point.h +++ b/symbian/ZXingBarcodeReader/group/zxing/common/Point.h @@ -18,10 +18,10 @@ * limitations under the License. */ -#ifndef ZXING_POINT_H_ -#define ZXING_POINT_H_ +#ifndef ZXING_POINT_H_ +#define ZXING_POINT_H_ -namespace zxing { +namespace zxing { class PointI { public: int x; @@ -30,6 +30,7 @@ public: class Point { public: + Point() : x(0.0f), y(0.0f) {}; Point(float x_, float y_) : x(x_), y(y_) {}; float x; @@ -42,6 +43,6 @@ public: Point start; Point end; -}; -} -#endif // POINT_H_ +}; +} +#endif // POINT_H_ diff --git a/symbian/ZXingBarcodeReader/group/zxing/common/Str.cpp b/symbian/ZXingBarcodeReader/group/zxing/common/Str.cpp index e2122dc3a..6259f9477 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/common/Str.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/common/Str.cpp @@ -26,7 +26,7 @@ using namespace std; String::String(const std::string &text) : text_(text) { } -std::string& String::getText() { +const std::string& String::getText() const { return text_; } diff --git a/symbian/ZXingBarcodeReader/group/zxing/common/Str.h b/symbian/ZXingBarcodeReader/group/zxing/common/Str.h index 255a05531..09ff2bb0a 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/common/Str.h +++ b/symbian/ZXingBarcodeReader/group/zxing/common/Str.h @@ -32,7 +32,7 @@ private: std::string text_; public: String(const std::string &text); - std::string &getText(); + const std::string &getText() const; friend std::ostream &operator<<(std::ostream &out, const String &s); }; diff --git a/symbian/ZXingBarcodeReader/group/zxing/common/reedsolomon/GF256.cpp b/symbian/ZXingBarcodeReader/group/zxing/common/reedsolomon/GF256.cpp index 8add88934..51b621e8e 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/common/reedsolomon/GF256.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/common/reedsolomon/GF256.cpp @@ -18,7 +18,6 @@ * limitations under the License. */ -#include #include #include #include @@ -42,7 +41,7 @@ static inline Ref refPoly(GF256 &field, int value) { } GF256::GF256(int primitive) : - exp_((const int)0, 256), log_((const int)0, 256), zero_(refPoly(*this, 0)), one_(refPoly(*this, 1)) { + exp_(256, (const int)0), log_(256, (const int)0), zero_(refPoly(*this, 0)), one_(refPoly(*this, 1)) { int x = 1; for (int i = 0; i < 256; i++) { exp_[i] = x; @@ -110,13 +109,10 @@ int GF256::multiply(int a, int b) { if (a == 0 || b == 0) { return 0; } - if (a == 1) { - return b; - } - if (b == 1) { - return a; - } - return exp_[(log_[a] + log_[b]) % 255]; + int logSum = log_[a] + log_[b]; + // index is a sped-up alternative to logSum % 255 since sum + // is in [0,510]. Thanks to jmsachs for the idea + return exp_[(logSum & 0xFF) + (logSum >> 8)]; } GF256 GF256::QR_CODE_FIELD(0x011D); // x^8 + x^4 + x^3 + x^2 + 1 diff --git a/symbian/ZXingBarcodeReader/group/zxing/common/reedsolomon/GF256.h b/symbian/ZXingBarcodeReader/group/zxing/common/reedsolomon/GF256.h index 0930f63bf..070a0fdcf 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/common/reedsolomon/GF256.h +++ b/symbian/ZXingBarcodeReader/group/zxing/common/reedsolomon/GF256.h @@ -22,7 +22,7 @@ */ #include -#include +#include #include namespace zxing { @@ -42,8 +42,8 @@ class GF256 { * @author christian.brunschen@gmail.com (Christian Brunschen) */ private: - std::valarray exp_; - std::valarray log_; + std::vector exp_; + std::vector log_; Ref zero_; Ref one_; diff --git a/symbian/ZXingBarcodeReader/group/zxing/datamatrix/DataMatrixReader.cpp b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/DataMatrixReader.cpp new file mode 100644 index 000000000..8b00161ef --- /dev/null +++ b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/DataMatrixReader.cpp @@ -0,0 +1,82 @@ +/* + * DataMatrixReader.cpp + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +namespace zxing { +namespace datamatrix { + +using namespace std; + +DataMatrixReader::DataMatrixReader() : + decoder_() { +} + +Ref DataMatrixReader::decode(Ref image) { +#ifdef DEBUG + cout << "decoding image " << image.object_ << ":\n" << flush; +#endif + + Detector detector(image->getBlackMatrix()); + + +#ifdef DEBUG + cout << "(1) created detector " << &detector << "\n" << flush; +#endif + + Ref detectorResult(detector.detect()); +#ifdef DEBUG + cout << "(2) detected, have detectorResult " << detectorResult.object_ << "\n" << flush; +#endif + + std::vector > points(detectorResult->getPoints()); + + +#ifdef DEBUG + cout << "(3) extracted points " << &points << "\n" << flush; + cout << "found " << points.size() << " points:\n"; + for (size_t i = 0; i < points.size(); i++) { + cout << " " << points[i]->getX() << "," << points[i]->getY() << "\n"; + } + cout << "bits:\n"; + cout << *(detectorResult->getBits()) << "\n"; +#endif + + Ref decoderResult(decoder_.decode(detectorResult->getBits())); +#ifdef DEBUG + cout << "(4) decoded, have decoderResult " << decoderResult.object_ << "\n" << flush; +#endif + + Ref result( + new Result(decoderResult->getText(), decoderResult->getRawBytes(), points, BarcodeFormat_DATA_MATRIX)); +#ifdef DEBUG + cout << "(5) created result " << result.object_ << ", returning\n" << flush; +#endif + + return result; +} + +DataMatrixReader::~DataMatrixReader() { +} + +} +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/datamatrix/DataMatrixReader.h b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/DataMatrixReader.h new file mode 100644 index 000000000..4d621c8d9 --- /dev/null +++ b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/DataMatrixReader.h @@ -0,0 +1,44 @@ +#ifndef __DATA_MATRIX_READER_H__ +#define __DATA_MATRIX_READER_H__ + +/* + * DataMatrixReader.h + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +namespace zxing { +namespace datamatrix { + +class DataMatrixReader : public Reader { +private: + Decoder decoder_; + +public: + DataMatrixReader(); + virtual Ref decode(Ref image); + virtual ~DataMatrixReader(); + +}; + +} +} + +#endif // __DATA_MATRIX_READER_H__ diff --git a/symbian/ZXingBarcodeReader/group/zxing/datamatrix/Version.cpp b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/Version.cpp new file mode 100644 index 000000000..e48d88ef9 --- /dev/null +++ b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/Version.cpp @@ -0,0 +1,199 @@ +/* + * Version.cpp + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +namespace zxing { +namespace datamatrix { +using namespace std; + +ECB::ECB(int count, int dataCodewords) : + count_(count), dataCodewords_(dataCodewords) { +} + +int ECB::getCount() { + return count_; +} + +int ECB::getDataCodewords() { + return dataCodewords_; +} + +ECBlocks::ECBlocks(int ecCodewords, ECB *ecBlocks) : + ecCodewords_(ecCodewords), ecBlocks_(1, ecBlocks) { +} + +ECBlocks::ECBlocks(int ecCodewords, ECB *ecBlocks1, ECB *ecBlocks2) : + ecCodewords_(ecCodewords), ecBlocks_(1, ecBlocks1) { + ecBlocks_.push_back(ecBlocks2); +} + +int ECBlocks::getECCodewords() { + return ecCodewords_; +} + +std::vector& ECBlocks::getECBlocks() { + return ecBlocks_; +} + +ECBlocks::~ECBlocks() { + for (size_t i = 0; i < ecBlocks_.size(); i++) { + delete ecBlocks_[i]; + } +} + +vector > Version::VERSIONS; +static int N_VERSIONS = Version::buildVersions(); + +Version::Version(int versionNumber, int symbolSizeRows, int symbolSizeColumns, int dataRegionSizeRows, + int dataRegionSizeColumns, ECBlocks* ecBlocks) : versionNumber_(versionNumber), + symbolSizeRows_(symbolSizeRows), symbolSizeColumns_(symbolSizeColumns), + dataRegionSizeRows_(dataRegionSizeRows), dataRegionSizeColumns_(dataRegionSizeColumns), + ecBlocks_(ecBlocks), totalCodewords_(0) { + // Calculate the total number of codewords + int total = 0; + int ecCodewords = ecBlocks_->getECCodewords(); + vector &ecbArray = ecBlocks_->getECBlocks(); + for (unsigned int i = 0; i < ecbArray.size(); i++) { + ECB *ecBlock = ecbArray[i]; + total += ecBlock->getCount() * (ecBlock->getDataCodewords() + ecCodewords); + } + totalCodewords_ = total; +} + +Version::~Version() { + delete ecBlocks_; +} + +int Version::getVersionNumber() { + return versionNumber_; +} + +int Version::getSymbolSizeRows() { + return symbolSizeRows_; +} + +int Version::getSymbolSizeColumns() { + return symbolSizeColumns_; +} + +int Version::getDataRegionSizeRows() { + return dataRegionSizeRows_; +} + +int Version::getDataRegionSizeColumns() { + return dataRegionSizeColumns_; +} + +int Version::getTotalCodewords() { + return totalCodewords_; +} + +ECBlocks* Version::getECBlocks() { + return ecBlocks_; +} + +Ref Version::getVersionForDimensions(int numRows, int numColumns) { + if ((numRows & 0x01) != 0 || (numColumns & 0x01) != 0) { + throw ReaderException("Number of rows and columns must be even"); + } + + // TODO(bbrown): This is doing a linear search through the array of versions. + // If we interleave the rectangular versions with the square versions we could + // do a binary search. + for (int i = 0; i < N_VERSIONS; ++i){ + Ref version(VERSIONS[i]); + if (version->getSymbolSizeRows() == numRows && version->getSymbolSizeColumns() == numColumns) { + return version; + } + } + throw ReaderException("Error version not found"); + } + +/** + * See ISO 16022:2006 5.5.1 Table 7 + */ +int Version::buildVersions() { + VERSIONS.push_back(Ref(new Version(1, 10, 10, 8, 8, + new ECBlocks(5, new ECB(1, 3))))); + VERSIONS.push_back(Ref(new Version(2, 12, 12, 10, 10, + new ECBlocks(7, new ECB(1, 5))))); + VERSIONS.push_back(Ref(new Version(3, 14, 14, 12, 12, + new ECBlocks(10, new ECB(1, 8))))); + VERSIONS.push_back(Ref(new Version(4, 16, 16, 14, 14, + new ECBlocks(12, new ECB(1, 12))))); + VERSIONS.push_back(Ref(new Version(5, 18, 18, 16, 16, + new ECBlocks(14, new ECB(1, 18))))); + VERSIONS.push_back(Ref(new Version(6, 20, 20, 18, 18, + new ECBlocks(18, new ECB(1, 22))))); + VERSIONS.push_back(Ref(new Version(7, 22, 22, 20, 20, + new ECBlocks(20, new ECB(1, 30))))); + VERSIONS.push_back(Ref(new Version(8, 24, 24, 22, 22, + new ECBlocks(24, new ECB(1, 36))))); + VERSIONS.push_back(Ref(new Version(9, 26, 26, 24, 24, + new ECBlocks(28, new ECB(1, 44))))); + VERSIONS.push_back(Ref(new Version(10, 32, 32, 14, 14, + new ECBlocks(36, new ECB(1, 62))))); + VERSIONS.push_back(Ref(new Version(11, 36, 36, 16, 16, + new ECBlocks(42, new ECB(1, 86))))); + VERSIONS.push_back(Ref(new Version(12, 40, 40, 18, 18, + new ECBlocks(48, new ECB(1, 114))))); + VERSIONS.push_back(Ref(new Version(13, 44, 44, 20, 20, + new ECBlocks(56, new ECB(1, 144))))); + VERSIONS.push_back(Ref(new Version(14, 48, 48, 22, 22, + new ECBlocks(68, new ECB(1, 174))))); + VERSIONS.push_back(Ref(new Version(15, 52, 52, 24, 24, + new ECBlocks(42, new ECB(2, 102))))); + VERSIONS.push_back(Ref(new Version(16, 64, 64, 14, 14, + new ECBlocks(56, new ECB(2, 140))))); + VERSIONS.push_back(Ref(new Version(17, 72, 72, 16, 16, + new ECBlocks(36, new ECB(4, 92))))); + VERSIONS.push_back(Ref(new Version(18, 80, 80, 18, 18, + new ECBlocks(48, new ECB(4, 114))))); + VERSIONS.push_back(Ref(new Version(19, 88, 88, 20, 20, + new ECBlocks(56, new ECB(4, 144))))); + VERSIONS.push_back(Ref(new Version(20, 96, 96, 22, 22, + new ECBlocks(68, new ECB(4, 174))))); + VERSIONS.push_back(Ref(new Version(21, 104, 104, 24, 24, + new ECBlocks(56, new ECB(6, 136))))); + VERSIONS.push_back(Ref(new Version(22, 120, 120, 18, 18, + new ECBlocks(68, new ECB(6, 175))))); + VERSIONS.push_back(Ref(new Version(23, 132, 132, 20, 20, + new ECBlocks(62, new ECB(8, 163))))); + VERSIONS.push_back(Ref(new Version(24, 144, 144, 22, 22, + new ECBlocks(62, new ECB(8, 156), new ECB(2, 155))))); + VERSIONS.push_back(Ref(new Version(25, 8, 18, 6, 16, + new ECBlocks(7, new ECB(1, 5))))); + VERSIONS.push_back(Ref(new Version(26, 8, 32, 6, 14, + new ECBlocks(11, new ECB(1, 10))))); + VERSIONS.push_back(Ref(new Version(27, 12, 26, 10, 24, + new ECBlocks(14, new ECB(1, 16))))); + VERSIONS.push_back(Ref(new Version(28, 12, 36, 10, 16, + new ECBlocks(18, new ECB(1, 22))))); + VERSIONS.push_back(Ref(new Version(29, 16, 36, 10, 16, + new ECBlocks(24, new ECB(1, 32))))); + VERSIONS.push_back(Ref(new Version(30, 16, 48, 14, 22, + new ECBlocks(28, new ECB(1, 49))))); + return VERSIONS.size(); +} +} +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/datamatrix/Version.h b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/Version.h new file mode 100644 index 000000000..d8523fe23 --- /dev/null +++ b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/Version.h @@ -0,0 +1,87 @@ +#ifndef __VERSION_H__ +#define __VERSION_H__ + +/* + * Version.h + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +namespace zxing { +namespace datamatrix { + +class ECB { +private: + int count_; + int dataCodewords_; +public: + ECB(int count, int dataCodewords); + int getCount(); + int getDataCodewords(); +}; + +class ECBlocks { +private: + int ecCodewords_; + std::vector ecBlocks_; +public: + ECBlocks(int ecCodewords, ECB *ecBlocks); + ECBlocks(int ecCodewords, ECB *ecBlocks1, ECB *ecBlocks2); + int getECCodewords(); + std::vector& getECBlocks(); + ~ECBlocks(); +}; + +class Version : public Counted { +private: + int versionNumber_; + int symbolSizeRows_; + int symbolSizeColumns_; + int dataRegionSizeRows_; + int dataRegionSizeColumns_; + ECBlocks* ecBlocks_; + int totalCodewords_; + Version(int versionNumber, int symbolSizeRows, int symbolSizeColumns, int dataRegionSizeRows, + int dataRegionSizeColumns, ECBlocks *ecBlocks); + +public: + static std::vector > VERSIONS; + + ~Version(); + int getVersionNumber(); + int getSymbolSizeRows(); + int getSymbolSizeColumns(); + int getDataRegionSizeRows(); + int getDataRegionSizeColumns(); + int getTotalCodewords(); + ECBlocks* getECBlocks(); + static int buildVersions(); + Ref getVersionForDimensions(int numRows, int numColumns); + +private: + Version(const Version&); + Version & operator=(const Version&); +}; +} +} + +#endif // __VERSION_H__ diff --git a/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/BitMatrixParser.cpp b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/BitMatrixParser.cpp new file mode 100644 index 000000000..eb5c06f48 --- /dev/null +++ b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/BitMatrixParser.cpp @@ -0,0 +1,364 @@ +/* + * BitMatrixParser.cpp + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +namespace zxing { +namespace datamatrix { + +int BitMatrixParser::copyBit(size_t x, size_t y, int versionBits) { + return bitMatrix_->get(x, y) ? (versionBits << 1) | 0x1 : versionBits << 1; +} + +BitMatrixParser::BitMatrixParser(Ref bitMatrix) : bitMatrix_(NULL), + parsedVersion_(NULL), + readBitMatrix_(NULL) { + size_t dimension = bitMatrix->getDimension(); + if (dimension < 10 || dimension > 144 || (dimension & 0x01) != 0) + throw ReaderException("Dimension must be even, > 10 < 144"); + + parsedVersion_ = readVersion(bitMatrix); + bitMatrix_ = extractDataRegion(bitMatrix); + // TODO(bbrown): Make this work for rectangular symbols + readBitMatrix_ = new BitMatrix(bitMatrix_->getDimension()); +} + +Ref BitMatrixParser::readVersion(Ref bitMatrix) { + if (parsedVersion_ != 0) { + return parsedVersion_; + } + + // TODO(bbrown): make this work for rectangular dimensions as well. + int numRows = bitMatrix->getDimension(); + int numColumns = numRows; + + Ref version = parsedVersion_->getVersionForDimensions(numRows, numColumns); + if (version != 0) { + return version; + } + throw ReaderException("Couldn't decode version"); +} + +ArrayRef BitMatrixParser::readCodewords() { + ArrayRef result(parsedVersion_->getTotalCodewords()); + int resultOffset = 0; + int row = 4; + int column = 0; + + // TODO(bbrown): Data Matrix can be rectangular, assuming square for now + int numRows = bitMatrix_->getDimension(); + int numColumns = numRows; + + bool corner1Read = false; + bool corner2Read = false; + bool corner3Read = false; + bool corner4Read = false; + + // Read all of the codewords + do { + // Check the four corner cases + if ((row == numRows) && (column == 0) && !corner1Read) { + result[resultOffset++] = (unsigned char) readCorner1(numRows, numColumns); + row -= 2; + column +=2; + corner1Read = true; + } else if ((row == numRows-2) && (column == 0) && ((numColumns & 0x03) != 0) && !corner2Read) { + result[resultOffset++] = (unsigned char) readCorner2(numRows, numColumns); + row -= 2; + column +=2; + corner2Read = true; + } else if ((row == numRows+4) && (column == 2) && ((numColumns & 0x07) == 0) && !corner3Read) { + result[resultOffset++] = (unsigned char) readCorner3(numRows, numColumns); + row -= 2; + column +=2; + corner3Read = true; + } else if ((row == numRows-2) && (column == 0) && ((numColumns & 0x07) == 4) && !corner4Read) { + result[resultOffset++] = (unsigned char) readCorner4(numRows, numColumns); + row -= 2; + column +=2; + corner4Read = true; + } else { + // Sweep upward diagonally to the right + do { + if ((row < numRows) && (column >= 0) && !readBitMatrix_->get(column, row)) { + result[resultOffset++] = (unsigned char) readUtah(row, column, numRows, numColumns); + } + row -= 2; + column +=2; + } while ((row >= 0) && (column < numColumns)); + row += 1; + column +=3; + + // Sweep downward diagonally to the left + do { + if ((row >= 0) && (column < numColumns) && !readBitMatrix_->get(column, row)) { + result[resultOffset++] = (unsigned char) readUtah(row, column, numRows, numColumns); + } + row += 2; + column -=2; + } while ((row < numRows) && (column >= 0)); + row += 3; + column +=1; + } + } while ((row < numRows) || (column < numColumns)); + + if (resultOffset != parsedVersion_->getTotalCodewords()) { + throw ReaderException("Did not read all codewords"); + } + return result; +} + +bool BitMatrixParser::readModule(int row, int column, int numRows, int numColumns) { + // Adjust the row and column indices based on boundary wrapping + if (row < 0) { + row += numRows; + column += 4 - ((numRows + 4) & 0x07); + } + if (column < 0) { + column += numColumns; + row += 4 - ((numColumns + 4) & 0x07); + } + readBitMatrix_->set(column, row); + return bitMatrix_->get(column, row); + } + +int BitMatrixParser::readUtah(int row, int column, int numRows, int numColumns) { + int currentByte = 0; + if (readModule(row - 2, column - 2, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(row - 2, column - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(row - 1, column - 2, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(row - 1, column - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(row - 1, column, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(row, column - 2, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(row, column - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(row, column, numRows, numColumns)) { + currentByte |= 1; + } + return currentByte; + } + +int BitMatrixParser::readCorner1(int numRows, int numColumns) { + int currentByte = 0; + if (readModule(numRows - 1, 0, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(numRows - 1, 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(numRows - 1, 2, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 2, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(1, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(2, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(3, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + return currentByte; + } + +int BitMatrixParser::readCorner2(int numRows, int numColumns) { + int currentByte = 0; + if (readModule(numRows - 3, 0, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(numRows - 2, 0, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(numRows - 1, 0, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 4, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 3, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 2, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(1, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + return currentByte; + } + +int BitMatrixParser::readCorner3(int numRows, int numColumns) { + int currentByte = 0; + if (readModule(numRows - 1, 0, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(numRows - 1, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 3, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 2, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(1, numColumns - 3, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(1, numColumns - 2, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(1, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + return currentByte; + } + +int BitMatrixParser::readCorner4(int numRows, int numColumns) { + int currentByte = 0; + if (readModule(numRows - 3, 0, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(numRows - 2, 0, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(numRows - 1, 0, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 2, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(0, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(1, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(2, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + currentByte <<= 1; + if (readModule(3, numColumns - 1, numRows, numColumns)) { + currentByte |= 1; + } + return currentByte; + } + +Ref BitMatrixParser::extractDataRegion(Ref bitMatrix) { + int symbolSizeRows = parsedVersion_->getSymbolSizeRows(); + int symbolSizeColumns = parsedVersion_->getSymbolSizeColumns(); + + // TODO(bbrown): Make this work with rectangular codes + if ((int)bitMatrix->getDimension() != symbolSizeRows) { + throw IllegalArgumentException("Dimension of bitMarix must match the version size"); + } + + int dataRegionSizeRows = parsedVersion_->getDataRegionSizeRows(); + int dataRegionSizeColumns = parsedVersion_->getDataRegionSizeColumns(); + + int numDataRegionsRow = symbolSizeRows / dataRegionSizeRows; + int numDataRegionsColumn = symbolSizeColumns / dataRegionSizeColumns; + + int sizeDataRegionRow = numDataRegionsRow * dataRegionSizeRows; + //int sizeDataRegionColumn = numDataRegionsColumn * dataRegionSizeColumns; + + // TODO(bbrown): Make this work with rectangular codes + Ref bitMatrixWithoutAlignment(new BitMatrix(sizeDataRegionRow)); + for (int dataRegionRow = 0; dataRegionRow < numDataRegionsRow; ++dataRegionRow) { + int dataRegionRowOffset = dataRegionRow * dataRegionSizeRows; + for (int dataRegionColumn = 0; dataRegionColumn < numDataRegionsColumn; ++dataRegionColumn) { + int dataRegionColumnOffset = dataRegionColumn * dataRegionSizeColumns; + for (int i = 0; i < dataRegionSizeRows; ++i) { + int readRowOffset = dataRegionRow * (dataRegionSizeRows + 2) + 1 + i; + int writeRowOffset = dataRegionRowOffset + i; + for (int j = 0; j < dataRegionSizeColumns; ++j) { + int readColumnOffset = dataRegionColumn * (dataRegionSizeColumns + 2) + 1 + j; + if (bitMatrix->get(readColumnOffset, readRowOffset)) { + int writeColumnOffset = dataRegionColumnOffset + j; + bitMatrixWithoutAlignment->set(writeColumnOffset, writeRowOffset); + } + } + } + } + } + return bitMatrixWithoutAlignment; +} + +} +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/BitMatrixParser.h b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/BitMatrixParser.h new file mode 100644 index 000000000..30123d59c --- /dev/null +++ b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/BitMatrixParser.h @@ -0,0 +1,59 @@ +#ifndef __BIT_MATRIX_PARSER_DM_H__ +#define __BIT_MATRIX_PARSER_DM_H__ + +/* + * BitMatrixParser.h + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +namespace zxing { +namespace datamatrix { + +class BitMatrixParser : public Counted { +private: + Ref bitMatrix_; + Ref parsedVersion_; + Ref readBitMatrix_; + + int copyBit(size_t x, size_t y, int versionBits); + +public: + BitMatrixParser(Ref bitMatrix); + Ref readVersion(Ref bitMatrix); + ArrayRef readCodewords(); + bool readModule(int row, int column, int numRows, int numColumns); + +private: + int readUtah(int row, int column, int numRows, int numColumns); + int readCorner1(int numRows, int numColumns); + int readCorner2(int numRows, int numColumns); + int readCorner3(int numRows, int numColumns); + int readCorner4(int numRows, int numColumns); + Ref extractDataRegion(Ref bitMatrix); +}; + +} +} + +#endif // __BIT_MATRIX_PARSER_DM_H__ diff --git a/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/DataBlock.cpp b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/DataBlock.cpp new file mode 100644 index 000000000..c87d5f309 --- /dev/null +++ b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/DataBlock.cpp @@ -0,0 +1,113 @@ +/* + * DataBlock.cpp + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +namespace zxing { +namespace datamatrix { + +using namespace std; + +DataBlock::DataBlock(int numDataCodewords, ArrayRef codewords) : + numDataCodewords_(numDataCodewords), codewords_(codewords) { +} + +int DataBlock::getNumDataCodewords() { + return numDataCodewords_; +} + +ArrayRef DataBlock::getCodewords() { + return codewords_; +} + +std::vector > DataBlock::getDataBlocks(ArrayRef rawCodewords, Version *version) { + // Figure out the number and size of data blocks used by this version and + // error correction level + ECBlocks* ecBlocks = version->getECBlocks(); + + // First count the total number of data blocks + int totalBlocks = 0; + vector ecBlockArray = ecBlocks->getECBlocks(); + for (size_t i = 0; i < ecBlockArray.size(); i++) { + totalBlocks += ecBlockArray[i]->getCount(); + } + + // Now establish DataBlocks of the appropriate size and number of data codewords + std::vector > result(totalBlocks); + int numResultBlocks = 0; + for (size_t j = 0; j < ecBlockArray.size(); j++) { + ECB *ecBlock = ecBlockArray[j]; + for (int i = 0; i < ecBlock->getCount(); i++) { + int numDataCodewords = ecBlock->getDataCodewords(); + int numBlockCodewords = ecBlocks->getECCodewords() + numDataCodewords; + ArrayRef buffer(numBlockCodewords); + Ref blockRef(new DataBlock(numDataCodewords, buffer)); + result[numResultBlocks++] = blockRef; + } + } + + // All blocks have the same amount of data, except that the last n + // (where n may be 0) have 1 more byte. Figure out where these start. + int shorterBlocksTotalCodewords = result[0]->codewords_.size(); + int longerBlocksStartAt = result.size() - 1; + while (longerBlocksStartAt >= 0) { + int numCodewords = result[longerBlocksStartAt]->codewords_.size(); + if (numCodewords == shorterBlocksTotalCodewords) { + break; + } + if (numCodewords != shorterBlocksTotalCodewords + 1) { + throw IllegalArgumentException("Data block sizes differ by more than 1"); + } + longerBlocksStartAt--; + } + longerBlocksStartAt++; + + int shorterBlocksNumDataCodewords = shorterBlocksTotalCodewords - ecBlocks->getECCodewords(); + // The last elements of result may be 1 element longer; + // first fill out as many elements as all of them have + int rawCodewordsOffset = 0; + for (int i = 0; i < shorterBlocksNumDataCodewords; i++) { + for (int j = 0; j < numResultBlocks; j++) { + result[j]->codewords_[i] = rawCodewords[rawCodewordsOffset++]; + } + } + // Fill out the last data block in the longer ones + for (int j = longerBlocksStartAt; j < numResultBlocks; j++) { + result[j]->codewords_[shorterBlocksNumDataCodewords] = rawCodewords[rawCodewordsOffset++]; + } + // Now add in error correction blocks + int max = result[0]->codewords_.size(); + for (int i = shorterBlocksNumDataCodewords; i < max; i++) { + for (int j = 0; j < numResultBlocks; j++) { + int iOffset = j < longerBlocksStartAt ? i : i + 1; + result[j]->codewords_[iOffset] = rawCodewords[rawCodewordsOffset++]; + } + } + + if ((size_t)rawCodewordsOffset != rawCodewords.size()) { + throw IllegalArgumentException("rawCodewordsOffset != rawCodewords.length"); + } + + return result; +} + +} +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/DataBlock.h b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/DataBlock.h new file mode 100644 index 000000000..7fc72f655 --- /dev/null +++ b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/DataBlock.h @@ -0,0 +1,49 @@ +#ifndef __DATA_BLOCK_DM_H__ +#define __DATA_BLOCK_DM_H__ + +/* + * DataBlock.h + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +namespace zxing { +namespace datamatrix { + +class DataBlock : public Counted { +private: + int numDataCodewords_; + ArrayRef codewords_; + + DataBlock(int numDataCodewords, ArrayRef codewords); + +public: + static std::vector > getDataBlocks(ArrayRef rawCodewords, Version *version); + + int getNumDataCodewords(); + ArrayRef getCodewords(); +}; + +} +} + +#endif // __DATA_BLOCK_DM_H__ diff --git a/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/DecodedBitStreamParser.cpp b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/DecodedBitStreamParser.cpp new file mode 100644 index 000000000..9aa2f684c --- /dev/null +++ b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/DecodedBitStreamParser.cpp @@ -0,0 +1,404 @@ +/* + * DecodedBitStreamParser.cpp + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +namespace zxing { +namespace datamatrix { + +using namespace std; + +const char DecodedBitStreamParser::C40_BASIC_SET_CHARS[] = { + '*', '*', '*', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', + 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' + }; + +const char DecodedBitStreamParser::C40_SHIFT2_SET_CHARS[] = { + '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', + '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_' +}; + +const char DecodedBitStreamParser::TEXT_BASIC_SET_CHARS[] = { + '*', '*', '*', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', + 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' + }; + +const char DecodedBitStreamParser::TEXT_SHIFT3_SET_CHARS[] = { + '\'', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', + 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '{', '|', '}', '~', (char) 127 +}; + +std::string DecodedBitStreamParser::decode(ArrayRef bytes) { + Ref bits(new BitSource(bytes)); + ostringstream result; + ostringstream resultTrailer; +// bool trailer = false; + int mode = ASCII_ENCODE; + do { + if (mode == ASCII_ENCODE) { + mode = decodeAsciiSegment(bits, result, resultTrailer); + } else { + switch (mode) { + case C40_ENCODE: + decodeC40Segment(bits, result); + break; + case TEXT_ENCODE: + decodeTextSegment(bits, result); + break; + case ANSIX12_ENCODE: + decodeAnsiX12Segment(bits, result); + break; + case EDIFACT_ENCODE: + decodeEdifactSegment(bits, result); + break; + case BASE256_ENCODE: + decodeBase256Segment(bits, result); + break; + default: + throw ReaderException("Unsupported mode indicator"); + } + mode = ASCII_ENCODE; + } + } while (mode != PAD_ENCODE && bits->available() > 0); +/* if (trailer) { + result << resultTrailer; + } +*/ + return result.str(); +} + +int DecodedBitStreamParser::decodeAsciiSegment(Ref bits, ostringstream & result, + ostringstream & resultTrailer) { + bool upperShift = false; + do { + int oneByte = bits->readBits(8); + if (oneByte == 0) { + throw ReaderException("Not enough bits to decode"); + } else if (oneByte <= 128) { // ASCII data (ASCII value + 1) + oneByte = upperShift ? (oneByte + 128) : oneByte; + upperShift = false; + result << (char) (oneByte - 1); + return ASCII_ENCODE; + } else if (oneByte == 129) { // Pad + return PAD_ENCODE; + } else if (oneByte <= 229) { // 2-digit data 00-99 (Numeric Value + 130) + int value = oneByte - 130; + if (value < 10) { // padd with '0' for single digit values + result << '0'; + } + result << value; + } else if (oneByte == 230) { // Latch to C40 encodation + return C40_ENCODE; + } else if (oneByte == 231) { // Latch to Base 256 encodation + return BASE256_ENCODE; + } else if (oneByte == 232) { // FNC1 + //throw ReaderException.getInstance(); + // Ignore this symbol for now + } else if (oneByte == 233) { // Structured Append + //throw ReaderException.getInstance(); + // Ignore this symbol for now + } else if (oneByte == 234) { // Reader Programming + //throw ReaderException.getInstance(); + // Ignore this symbol for now + } else if (oneByte == 235) { // Upper Shift (shift to Extended ASCII) + upperShift = true; + } else if (oneByte == 236) { // 05 Macro + /* trailer = false; + result << "[)>\u001E05\u001D"; + resultTrailer << "\u001E\u0004"; + // Ignore this symbol for now + */ } else if (oneByte == 237) { // 06 Macro + /* trailer = false; + result << "[)>\u001E06\u001D"; + resultTrailer << "\u001E\u0004"; + // Ignore this symbol for now + */ } else if (oneByte == 238) { // Latch to ANSI X12 encodation + return ANSIX12_ENCODE; + } else if (oneByte == 239) { // Latch to Text encodation + return TEXT_ENCODE; + } else if (oneByte == 240) { // Latch to EDIFACT encodation + return EDIFACT_ENCODE; + } else if (oneByte == 241) { // ECI Character + // TODO(bbrown): I think we need to support ECI + //throw ReaderException.getInstance(); + // Ignore this symbol for now + } else if (oneByte >= 242) { // Not to be used in ASCII encodation + throw ReaderException("Not to be used in ASCII encodation"); + } + } while (bits->available() > 0); + return ASCII_ENCODE; +} + +void DecodedBitStreamParser::decodeC40Segment(Ref bits, ostringstream & result) { + // Three C40 values are encoded in a 16-bit value as + // (1600 * C1) + (40 * C2) + C3 + 1 + // TODO(bbrown): The Upper Shift with C40 doesn't work in the 4 value scenario all the time + bool upperShift = false; + + int* cValues = new int[3]; + do { + // If there is only one byte left then it will be encoded as ASCII + if (bits->available() == 8) { + return; + } + int firstByte = bits->readBits(8); + if (firstByte == 254) { // Unlatch codeword + return; + } + + parseTwoBytes(firstByte, bits->readBits(8), cValues); + + int shift = 0; + for (int i = 0; i < 3; i++) { + int cValue = cValues[i]; + switch (shift) { + case 0: + if (cValue < 3) { + shift = cValue + 1; + } else { + if (upperShift) { + result << (char) (C40_BASIC_SET_CHARS[cValue] + 128); + upperShift = false; + } else { + result << C40_BASIC_SET_CHARS[cValue]; + } + } + break; + case 1: + if (upperShift) { + result << cValue + 128; + upperShift = false; + } else { + result << cValue; + } + shift = 0; + break; + case 2: + if (cValue < 27) { + if (upperShift) { + result << (char) (C40_SHIFT2_SET_CHARS[cValue] + 128); + upperShift = false; + } else { + result << C40_SHIFT2_SET_CHARS[cValue]; + } + } else if (cValue == 27) { // FNC1 + throw ReaderException("FNC1"); + } else if (cValue == 30) { // Upper Shift + upperShift = true; + } else { + throw ReaderException("Upper Shift"); + } + shift = 0; + break; + case 3: + if (upperShift) { + result << (char) (cValue + 224); + upperShift = false; + } else { + result << (char) (cValue + 96); + } + shift = 0; + break; + default: + throw ReaderException(""); + } + } + } while (bits->available() > 0); +} + +void DecodedBitStreamParser::decodeTextSegment(Ref bits, ostringstream & result) { + // Three Text values are encoded in a 16-bit value as + // (1600 * C1) + (40 * C2) + C3 + 1 + // TODO(bbrown): The Upper Shift with Text doesn't work in the 4 value scenario all the time + bool upperShift = false; + + int* cValues = new int[3]; + do { + // If there is only one byte left then it will be encoded as ASCII + if (bits->available() == 8) { + return; + } + int firstByte = bits->readBits(8); + if (firstByte == 254) { // Unlatch codeword + return; + } + + parseTwoBytes(firstByte, bits->readBits(8), cValues); + + int shift = 0; + for (int i = 0; i < 3; i++) { + int cValue = cValues[i]; + switch (shift) { + case 0: + if (cValue < 3) { + shift = cValue + 1; + } else { + if (upperShift) { + result << (char) (TEXT_BASIC_SET_CHARS[cValue] + 128); + upperShift = false; + } else { + result << (TEXT_BASIC_SET_CHARS[cValue]); + } + } + break; + case 1: + if (upperShift) { + result << (char) (cValue + 128); + upperShift = false; + } else { + result << (cValue); + } + shift = 0; + break; + case 2: + // Shift 2 for Text is the same encoding as C40 + if (cValue < 27) { + if (upperShift) { + result << (char) (C40_SHIFT2_SET_CHARS[cValue] + 128); + upperShift = false; + } else { + result << (C40_SHIFT2_SET_CHARS[cValue]); + } + } else if (cValue == 27) { // FNC1 + throw ReaderException("FNC1"); + } else if (cValue == 30) { // Upper Shift + upperShift = true; + } else { + throw ReaderException("Upper Shift"); + } + shift = 0; + break; + case 3: + if (upperShift) { + result << (char) (TEXT_SHIFT3_SET_CHARS[cValue] + 128); + upperShift = false; + } else { + result << (TEXT_SHIFT3_SET_CHARS[cValue]); + } + shift = 0; + break; + default: + throw ReaderException(""); + } + } + } while (bits->available() > 0); +} + +void DecodedBitStreamParser::decodeAnsiX12Segment(Ref bits, ostringstream & result) { + // Three ANSI X12 values are encoded in a 16-bit value as + // (1600 * C1) + (40 * C2) + C3 + 1 + + int* cValues = new int[3]; + do { + // If there is only one byte left then it will be encoded as ASCII + if (bits->available() == 8) { + return; + } + int firstByte = bits->readBits(8); + if (firstByte == 254) { // Unlatch codeword + return; + } + + parseTwoBytes(firstByte, bits->readBits(8), cValues); + + for (int i = 0; i < 3; i++) { + int cValue = cValues[i]; + if (cValue == 0) { // X12 segment terminator + result << '\r'; + } else if (cValue == 1) { // X12 segment separator * + result << '*'; + } else if (cValue == 2) { // X12 sub-element separator > + result << '>'; + } else if (cValue == 3) { // space + result << ' '; + } else if (cValue < 14) { // 0 - 9 + result << (char) (cValue + 44); + } else if (cValue < 40) { // A - Z + result << (char) (cValue + 51); + } else { + throw ReaderException(""); + } + } + } while (bits->available() > 0); +} + +void DecodedBitStreamParser::parseTwoBytes(int firstByte, int secondByte, int*& result) { + int fullBitValue = (firstByte << 8) + secondByte - 1; + int temp = fullBitValue / 1600; + result[0] = temp; + fullBitValue -= temp * 1600; + temp = fullBitValue / 40; + result[1] = temp; + result[2] = fullBitValue - temp * 40; +} + +void DecodedBitStreamParser::decodeEdifactSegment(Ref bits, ostringstream & result) { + bool unlatch = false; + do { + // If there is only two or less bytes left then it will be encoded as ASCII + if (bits->available() <= 16) { + return; + } + + for (int i = 0; i < 4; i++) { + int edifactValue = bits->readBits(6); + + // Check for the unlatch character + if (edifactValue == 0x2B67) { // 011111 + unlatch = true; + // If we encounter the unlatch code then continue reading because the Codeword triple + // is padded with 0's + } + + if (!unlatch) { + if ((edifactValue & 32) == 0) { // no 1 in the leading (6th) bit + edifactValue |= 64; // Add a leading 01 to the 6 bit binary value + } + result << (edifactValue); + } + } + } while (!unlatch && bits->available() > 0); +} + +void DecodedBitStreamParser::decodeBase256Segment(Ref bits, ostringstream & result){//, vector byteSegments) + // Figure out how long the Base 256 Segment is. + int d1 = bits->readBits(8); + int count; + if (d1 == 0) { // Read the remainder of the symbol + count = bits->available() / 8; + } else if (d1 < 250) { + count = d1; + } else { + count = 250 * (d1 - 249) + bits->readBits(8); + } + unsigned char* bytes = new unsigned char[count]; + for (int i = 0; i < count; i++) { + bytes[i] = unrandomize255State(bits->readBits(8), i); + } + //byteSegments.push_back(bytes); + result << bytes; +} +} +} + diff --git a/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/DecodedBitStreamParser.h b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/DecodedBitStreamParser.h new file mode 100644 index 000000000..6a0b26030 --- /dev/null +++ b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/DecodedBitStreamParser.h @@ -0,0 +1,103 @@ +#ifndef __DECODED_BIT_STREAM_PARSER_DM_H__ +#define __DECODED_BIT_STREAM_PARSER_DM_H__ + +/* + * DecodedBitStreamParser.h + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + + +namespace zxing { +namespace datamatrix { + +class DecodedBitStreamParser { +private: + static const int PAD_ENCODE = 0; // Not really an encoding + static const int ASCII_ENCODE = 1; + static const int C40_ENCODE = 2; + static const int TEXT_ENCODE = 3; + static const int ANSIX12_ENCODE = 4; + static const int EDIFACT_ENCODE = 5; + static const int BASE256_ENCODE = 6; + + /** + * See ISO 16022:2006, Annex C Table C.1 + * The C40 Basic Character Set (*'s used for placeholders for the shift values) + */ + static const char C40_BASIC_SET_CHARS[]; + + static const char C40_SHIFT2_SET_CHARS[]; + /** + * See ISO 16022:2006, Annex C Table C.2 + * The Text Basic Character Set (*'s used for placeholders for the shift values) + */ + static const char TEXT_BASIC_SET_CHARS[]; + + static const char TEXT_SHIFT3_SET_CHARS[]; + /** + * See ISO 16022:2006, 5.2.3 and Annex C, Table C.2 + */ + int decodeAsciiSegment(Ref bits, std::ostringstream &result, std::ostringstream &resultTrailer); + /** + * See ISO 16022:2006, 5.2.5 and Annex C, Table C.1 + */ + void decodeC40Segment(Ref bits, std::ostringstream &result); + /** + * See ISO 16022:2006, 5.2.6 and Annex C, Table C.2 + */ + void decodeTextSegment(Ref bits, std::ostringstream &result); + /** + * See ISO 16022:2006, 5.2.7 + */ + void decodeAnsiX12Segment(Ref bits, std::ostringstream &result); + /** + * See ISO 16022:2006, 5.2.8 and Annex C Table C.3 + */ + void decodeEdifactSegment(Ref bits, std::ostringstream &result); + /** + * See ISO 16022:2006, 5.2.9 and Annex B, B.2 + */ + void decodeBase256Segment(Ref bits, std::ostringstream &result);//,std::vector byteSegments); + + void parseTwoBytes(int firstByte, int secondByte, int*& result); + /** + * See ISO 16022:2006, Annex B, B.2 + */ + unsigned char unrandomize255State(int randomizedBase256Codeword, + int base256CodewordPosition) { + int pseudoRandomNumber = ((149 * base256CodewordPosition) % 255) + 1; + int tempVariable = randomizedBase256Codeword - pseudoRandomNumber; + return (unsigned char) (tempVariable >= 0 ? tempVariable : (tempVariable + 256)); + }; + void append(std::ostream &ost, const unsigned char *bufIn, size_t nIn, const char *src); + +public: + DecodedBitStreamParser() { }; + std::string decode(ArrayRef bytes); +}; + +} +} + +#endif // __DECODED_BIT_STREAM_PARSER_DM_H__ diff --git a/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/Decoder.cpp b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/Decoder.cpp new file mode 100644 index 000000000..72172dc41 --- /dev/null +++ b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/Decoder.cpp @@ -0,0 +1,96 @@ +/* + * Decoder.cpp + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +namespace zxing { +namespace datamatrix { + +using namespace std; + +Decoder::Decoder() : + rsDecoder_(GF256::DATA_MATRIX_FIELD) { +} + + +void Decoder::correctErrors(ArrayRef codewordBytes, int numDataCodewords) { + int numCodewords = codewordBytes->size(); + ArrayRef codewordInts(numCodewords); + for (int i = 0; i < numCodewords; i++) { + codewordInts[i] = codewordBytes[i] & 0xff; + } + int numECCodewords = numCodewords - numDataCodewords; + + try { + rsDecoder_.decode(codewordInts, numECCodewords); + } catch (ReedSolomonException ex) { + ReaderException rex(ex.what()); + throw rex; + } + + for (int i = 0; i < numDataCodewords; i++) { + codewordBytes[i] = (unsigned char)codewordInts[i]; + } +} + +Ref Decoder::decode(Ref bits) { + // Construct a parser and read version, error-correction level + BitMatrixParser parser(bits); + Version *version = parser.readVersion(bits); + + // Read codewords + ArrayRef codewords(parser.readCodewords()); + // Separate into data blocks + std::vector > dataBlocks = DataBlock::getDataBlocks(codewords, version); + + // Count total number of data bytes + int totalBytes = 0; + for (unsigned int i = 0; i < dataBlocks.size(); i++) { + totalBytes += dataBlocks[i]->getNumDataCodewords(); + } + ArrayRef resultBytes(totalBytes); + int resultOffset = 0; + + // Error-correct and copy data blocks together into a stream of bytes + for (unsigned int j = 0; j < dataBlocks.size(); j++) { + Ref dataBlock(dataBlocks[j]); + ArrayRef codewordBytes = dataBlock->getCodewords(); + int numDataCodewords = dataBlock->getNumDataCodewords(); + correctErrors(codewordBytes, numDataCodewords); + for (int i = 0; i < numDataCodewords; i++) { + resultBytes[resultOffset++] = codewordBytes[i]; + } + } + + // Decode the contents of that stream of bytes + DecodedBitStreamParser decodedBSParser; + Ref text(new String(decodedBSParser.decode(resultBytes))); + + Ref result(new DecoderResult(resultBytes, text)); + return result; +} +} +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/Decoder.h b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/Decoder.h new file mode 100644 index 000000000..65fdf740c --- /dev/null +++ b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/decoder/Decoder.h @@ -0,0 +1,50 @@ +#ifndef __DECODER_DM_H__ +#define __DECODER_DM_H__ + +/* + * Decoder.h + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + + +namespace zxing { +namespace datamatrix { + +class Decoder { +private: + ReedSolomonDecoder rsDecoder_; + + void correctErrors(ArrayRef bytes, int numDataCodewords); + +public: + Decoder(); + + Ref decode(Ref bits); +}; + +} +} + +#endif // __DECODER_DM_H__ diff --git a/symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/CornerPoint.cpp b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/CornerPoint.cpp new file mode 100644 index 000000000..8222f6b27 --- /dev/null +++ b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/CornerPoint.cpp @@ -0,0 +1,54 @@ +/* + * CornerPoint.cpp + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + + +namespace zxing { + namespace datamatrix { + + using namespace std; + + CornerPoint::CornerPoint(float posX, float posY) : + posX_(posX), posY_(posY), counter_(0) { + } + + float CornerPoint::getX() const { + return posX_; + } + + float CornerPoint::getY() const { + return posY_; + } + + int CornerPoint::getCount() const { + return counter_; + } + + void CornerPoint::incrementCount() { + counter_++; + } + + bool CornerPoint::equals(Ref other) const { + return posX_ == other->getX() && posY_ == other->getY(); + } + + } +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/CornerPoint.h b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/CornerPoint.h new file mode 100644 index 000000000..a44d72b38 --- /dev/null +++ b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/CornerPoint.h @@ -0,0 +1,47 @@ +#ifndef __CORNER_FINDER_H__ +#define __CORNER_FINDER_H__ + +/* + * CornerPoint.h + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +namespace zxing { + namespace datamatrix { + + class CornerPoint : public ResultPoint { + private: + float posX_; + float posY_; + int counter_; + + public: + CornerPoint(float posX, float posY); + float getX() const; + float getY() const; + int getCount() const; + void incrementCount(); + bool equals(Ref other) const; + }; + } +} + +#endif // __CORNER_FINDER_H__ diff --git a/symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/Detector.cpp b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/Detector.cpp new file mode 100644 index 000000000..54b1a1165 --- /dev/null +++ b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/Detector.cpp @@ -0,0 +1,315 @@ +/* + * Detector.cpp + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +namespace zxing { +namespace datamatrix { + +using namespace std; + +ResultPointsAndTransitions::ResultPointsAndTransitions() : to_(), from_(), transitions_(0) { + Ref ref(new CornerPoint(0,0)); + from_ = ref; + to_ = ref; +} + +ResultPointsAndTransitions::ResultPointsAndTransitions(Ref from, Ref to, int transitions) : + to_(to), from_(from), transitions_(transitions) { +} + +Ref ResultPointsAndTransitions::getFrom() { + return from_; +} + +Ref ResultPointsAndTransitions::getTo() { + return to_; +} + +int ResultPointsAndTransitions::getTransitions() { + return transitions_; +} + +Detector::Detector(Ref image) : image_(image) { } + +Ref Detector::getImage() { + return image_; +} + +Ref Detector::detect() { + Ref rectangleDetector_(new MonochromeRectangleDetector(image_)); + std::vector > cornerPoints = rectangleDetector_->detect(); + Ref pointA = cornerPoints[0]; + Ref pointB = cornerPoints[1]; + Ref pointC = cornerPoints[2]; + Ref pointD = cornerPoints[3]; + + // Point A and D are across the diagonal from one another, + // as are B and C. Figure out which are the solid black lines + // by counting transitions + std::vector > transitions(4); + transitions[0].reset(transitionsBetween(pointA, pointB)); + transitions[1].reset(transitionsBetween(pointA, pointC)); + transitions[2].reset(transitionsBetween(pointB, pointD)); + transitions[3].reset(transitionsBetween(pointC, pointD)); + insertionSort(transitions); + + // Sort by number of transitions. First two will be the two solid sides; last two + // will be the two alternating black/white sides + Ref lSideOne(transitions[0]); + Ref lSideTwo(transitions[1]); + + // Figure out which point is their intersection by tallying up the number of times we see the + // endpoints in the four endpoints. One will show up twice. + Ref maybeTopLeft; + Ref bottomLeft; + Ref maybeBottomRight; + if (lSideOne->getFrom()->equals(lSideOne->getTo())) { + bottomLeft = lSideOne->getFrom(); + maybeTopLeft = lSideTwo->getFrom(); + maybeBottomRight = lSideTwo->getTo(); + } + else if (lSideOne->getFrom()->equals(lSideTwo->getFrom())) { + bottomLeft = lSideOne->getFrom(); + maybeTopLeft = lSideOne->getTo(); + maybeBottomRight = lSideTwo->getTo(); + } + else if (lSideOne->getFrom()->equals(lSideTwo->getTo())) { + bottomLeft = lSideOne->getFrom(); + maybeTopLeft = lSideOne->getTo(); + maybeBottomRight = lSideTwo->getFrom(); + } + else if (lSideOne->getTo()->equals(lSideTwo->getFrom())) { + bottomLeft = lSideOne->getTo(); + maybeTopLeft = lSideOne->getFrom(); + maybeBottomRight = lSideTwo->getTo(); + } + else if (lSideOne->getTo()->equals(lSideTwo->getTo())) { + bottomLeft = lSideOne->getTo(); + maybeTopLeft = lSideOne->getFrom(); + maybeBottomRight = lSideTwo->getFrom(); + } + else { + bottomLeft = lSideTwo->getFrom(); + maybeTopLeft = lSideOne->getTo(); + maybeBottomRight = lSideOne->getFrom(); + } + + // Bottom left is correct but top left and bottom right might be switched + std::vector > corners(3); + corners[0].reset(maybeTopLeft); + corners[1].reset(bottomLeft); + corners[2].reset(maybeBottomRight); + // Use the dot product trick to sort them out + orderBestPatterns(corners); + + // Now we know which is which: + Ref bottomRight(corners[0]); + bottomLeft = corners[1]; + Ref topLeft(corners[2]); + + // Which point didn't we find in relation to the "L" sides? that's the top right corner + Ref topRight; + if (!(pointA->equals(bottomRight) || pointA->equals(bottomLeft) || pointA->equals(topLeft))) { + topRight = pointA; + } else if (!(pointB->equals(bottomRight) || pointB->equals(bottomLeft) || pointB->equals(topLeft))) { + topRight = pointB; + } else if (!(pointC->equals(bottomRight) || pointC->equals(bottomLeft) || pointC->equals(topLeft))) { + topRight = pointC; + } else { + topRight = pointD; + } + + float topRightX = (bottomRight->getX() - bottomLeft->getX()) + topLeft->getX(); + float topRightY = (bottomRight->getY() - bottomLeft->getY()) + topLeft->getY(); + Ref topR(new CornerPoint(topRightX,topRightY)); + + // Next determine the dimension by tracing along the top or right side and counting black/white + // transitions. Since we start inside a black module, we should see a number of transitions + // equal to 1 less than the code dimension. Well, actually 2 less, because we are going to + // end on a black module: + // The top right point is actually the corner of a module, which is one of the two black modules + // adjacent to the white module at the top right. Tracing to that corner from either the top left + // or bottom right should work here. The number of transitions could be higher than it should be + // due to noise. So we try both and take the min. + int dimension = min(transitionsBetween(topLeft, topRight)->getTransitions(), + transitionsBetween(bottomRight, topRight)->getTransitions()); + if ((dimension & 0x01) == 1) { + // it can't be odd, so, round... up? + dimension++; + } + dimension += 2; + + Ref transform = createTransform(topLeft, topR, bottomLeft, bottomRight, dimension); + Ref bits(sampleGrid(image_, dimension, transform)); + std::vector > points(4); + points[0].reset(pointA); + points[1].reset(pointB); + points[2].reset(pointC); + points[3].reset(pointD); + Ref detectorResult(new DetectorResult(bits, points, transform)); + return detectorResult; +} + +Ref Detector::transitionsBetween(Ref from, Ref to) { + // See QR Code Detector, sizeOfBlackWhiteBlackRun() + int fromX = (int) from->getX(); + int fromY = (int) from->getY(); + int toX = (int) to->getX(); + int toY = (int) to->getY(); + bool steep = abs(toY - fromY) > abs(toX - fromX); + if (steep) { + int temp = fromX; + fromX = fromY; + fromY = temp; + temp = toX; + toX = toY; + toY = temp; + } + + int dx = abs(toX - fromX); + int dy = abs(toY - fromY); + int error = -dx >> 1; + int ystep = fromY < toY ? 1 : -1; + int xstep = fromX < toX ? 1 : -1; + int transitions = 0; + bool inBlack = image_->get(steep ? fromY : fromX, steep ? fromX : fromY); + for (int x = fromX, y = fromY; x != toX; x += xstep) { + bool isBlack = image_->get(steep ? y : x, steep ? x : y); + if (isBlack != inBlack) { + transitions++; + inBlack = isBlack; + } + error += dy; + if (error > 0) { + if (y == toY) { + break; + } + y += ystep; + error -= dx; + } + } + Ref result(new ResultPointsAndTransitions(from, to, transitions)); + return result; + } + +Ref Detector::createTransform(Ref topLeft, Ref topRight, Ref < + ResultPoint > bottomLeft, Ref bottomRight, int dimension) { + + Ref transform(PerspectiveTransform::quadrilateralToQuadrilateral( + 0.0f, + 0.0f, + dimension, + 0.0f, + dimension, + dimension, + 0.0f, + dimension, + topLeft->getX(), + topLeft->getY(), + topRight->getX(), + topRight->getY(), + bottomRight->getX(), + bottomRight->getY(), + bottomLeft->getX(), + bottomLeft->getY())); + return transform; +} + +Ref Detector::sampleGrid(Ref image, int dimension, Ref transform) { + GridSampler &sampler = GridSampler::getInstance(); + return sampler.sampleGrid(image, dimension, transform); +} + +void Detector::insertionSort(std::vector > &vector) { + int max = vector.size(); + bool swapped = true; + Ref value; + Ref valueB; + do { + swapped = false; + for (int i = 1; i < max; i++) { + value = vector[i-1]; + if (compare(value, (valueB = vector[i])) > 0) { + swapped = true; + vector[i-1].reset(valueB); + vector[i].reset(value); + } + } + } while (swapped); +} +void Detector::orderBestPatterns(std::vector > &patterns) { + // Find distances between pattern centers + float zeroOneDistance = distance(patterns[0]->getX(), patterns[1]->getX(),patterns[0]->getY(), patterns[1]->getY()); + float oneTwoDistance = distance(patterns[1]->getX(), patterns[2]->getX(),patterns[1]->getY(), patterns[2]->getY()); + float zeroTwoDistance = distance(patterns[0]->getX(), patterns[2]->getX(),patterns[0]->getY(), patterns[2]->getY()); + + Ref pointA, pointB, pointC; + // Assume one closest to other two is B; A and C will just be guesses at first + if (oneTwoDistance >= zeroOneDistance && oneTwoDistance >= zeroTwoDistance) { + pointB = patterns[0]; + pointA = patterns[1]; + pointC = patterns[2]; + } else if (zeroTwoDistance >= oneTwoDistance && zeroTwoDistance >= zeroOneDistance) { + pointB = patterns[1]; + pointA = patterns[0]; + pointC = patterns[2]; + } else { + pointB = patterns[2]; + pointA = patterns[0]; + pointC = patterns[1]; + } + + // Use cross product to figure out whether A and C are correct or flipped. + // This asks whether BC x BA has a positive z component, which is the arrangement + // we want for A, B, C. If it's negative, then we've got it flipped around and + // should swap A and C. + if (crossProductZ(pointA, pointB, pointC) < 0.0f) { + Ref temp = pointA; + pointA = pointC; + pointC = temp; + } + + patterns[0] = pointA; + patterns[1] = pointB; + patterns[2] = pointC; +} + +float Detector::distance(float x1, float x2, float y1, float y2) { + float xDiff = x1 - x2; + float yDiff = y1 - y2; + return (float) sqrt((double) (xDiff * xDiff + yDiff * yDiff)); + } + +int Detector::compare(Ref a, Ref b) { + return a->getTransitions() - b->getTransitions(); + } + +float Detector::crossProductZ(Ref pointA, Ref pointB, Ref pointC) { + float bX = pointB->getX(); + float bY = pointB->getY(); + return ((pointC->getX() - bX) * (pointA->getY() - bY)) - ((pointC->getY() - bY) * (pointA->getX() - bX)); + } +} +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/Detector.h b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/Detector.h new file mode 100644 index 000000000..96f58f502 --- /dev/null +++ b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/Detector.h @@ -0,0 +1,79 @@ +#ifndef __DETECTOR_H__ +#define __DETECTOR_H__ + +/* + * Detector.h + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include +#include +#include +#include +#include + + +namespace zxing { +namespace datamatrix { + +class ResultPointsAndTransitions : public Counted { +private: + Ref to_; + Ref from_; + int transitions_; + +public: + ResultPointsAndTransitions(); + ResultPointsAndTransitions(Ref from, Ref to, int transitions); + Ref getFrom(); + Ref getTo(); + int getTransitions(); +}; + +class Detector : public Counted { +private: + Ref image_; + +protected: + Ref sampleGrid(Ref image, int dimension, Ref transform); + + void insertionSort(std::vector >& vector); + + Ref transitionsBetween(Ref from, Ref to); + int min(int a, int b) { return a > b ? b : a; }; + +public: + Ref getImage(); + Detector(Ref image); + + virtual Ref createTransform(Ref topLeft, Ref topRight, Ref < + ResultPoint > bottomLeft, Ref bottomRight, int dimension); + + Ref detect(); + void orderBestPatterns(std::vector > &patterns); + float distance(float x1, float x2, float y1, float y2); +private: + int compare(Ref a, Ref b); + float crossProductZ(Ref pointA, Ref pointB, Ref pointC); +}; + +} +} + +#endif // __DETECTOR_H__ diff --git a/symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/MonochromeRectangleDetector.cpp b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/MonochromeRectangleDetector.cpp new file mode 100644 index 000000000..d2bc01471 --- /dev/null +++ b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/MonochromeRectangleDetector.cpp @@ -0,0 +1,172 @@ +/* + * MonochromeRectangleDetector.cpp + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +namespace zxing { +namespace datamatrix { + +std::vector > MonochromeRectangleDetector::detect() { + int height = image_->getHeight(); + int width = image_->getWidth(); + int halfHeight = height >> 1; + int halfWidth = width >> 1; + int deltaY = max(1, height / (MAX_MODULES << 3)); + int deltaX = max(1, width / (MAX_MODULES << 3)); + + int top = 0; + int bottom = height; + int left = 0; + int right = width; + Ref pointA(findCornerFromCenter(halfWidth, 0, left, right, + halfHeight, -deltaY, top, bottom, halfWidth >> 1)); + top = (int) pointA->getY() - 1; + Ref pointB(findCornerFromCenter(halfWidth, -deltaX, left, right, + halfHeight, 0, top, bottom, halfHeight >> 1)); + left = (int) pointB->getX() - 1; + Ref pointC(findCornerFromCenter(halfWidth, deltaX, left, right, + halfHeight, 0, top, bottom, halfHeight >> 1)); + right = (int) pointC->getX() + 1; + Ref pointD(findCornerFromCenter(halfWidth, 0, left, right, + halfHeight, deltaY, top, bottom, halfWidth >> 1)); + bottom = (int) pointD->getY() + 1; + + // Go try to find point A again with better information -- might have been off at first. + pointA.reset(findCornerFromCenter(halfWidth, 0, left, right, + halfHeight, -deltaY, top, bottom, halfWidth >> 2)); + std::vector > corners(4); + + corners[0].reset(pointA); + corners[1].reset(pointB); + corners[2].reset(pointC); + corners[3].reset(pointD); + return corners; + } + +Ref MonochromeRectangleDetector::findCornerFromCenter(int centerX, int deltaX, int left, int right, + int centerY, int deltaY, int top, int bottom, int maxWhiteRun) { + Ref lastRange(NULL); + for (int y = centerY, x = centerX; + y < bottom && y >= top && x < right && x >= left; + y += deltaY, x += deltaX) { + Ref range(NULL); + if (deltaX == 0) { + // horizontal slices, up and down + range = blackWhiteRange(y, maxWhiteRun, left, right, true); + } else { + // vertical slices, left and right + range = blackWhiteRange(x, maxWhiteRun, top, bottom, false); + } + if (range == NULL) { + if (lastRange == NULL) { + throw ReaderException("Couldn't find corners (lastRange = NULL) "); + } else { + // lastRange was found + if (deltaX == 0) { + int lastY = y - deltaY; + if (lastRange->start < centerX) { + if (lastRange->end > centerX) { + // straddle, choose one or the other based on direction + Ref result(new CornerPoint(deltaY > 0 ? lastRange->start : lastRange->end, lastY)); + return result; + } + Ref result(new CornerPoint(lastRange->start, lastY)); + return result; + } else { + Ref result(new CornerPoint(lastRange->end, lastY)); + return result; + } + } else { + int lastX = x - deltaX; + if (lastRange->start < centerY) { + if (lastRange->end > centerY) { + Ref result(new CornerPoint(lastX, deltaX < 0 ? lastRange->start : lastRange->end)); + return result; + } + Ref result(new CornerPoint(lastX, lastRange->start)); + return result; + } else { + Ref result(new CornerPoint(lastX, lastRange->end)); + return result; + } + } + } + } + lastRange = range; + } + throw ReaderException("Couldn't find corners"); + } + +Ref MonochromeRectangleDetector::blackWhiteRange(int fixedDimension, int maxWhiteRun, int minDim, int maxDim, + bool horizontal) { + + int center = (minDim + maxDim) >> 1; + + // Scan left/up first + int start = center; + while (start >= minDim) { + if (horizontal ? image_->get(start, fixedDimension) : image_->get(fixedDimension, start)) { + start--; + } else { + int whiteRunStart = start; + do { + start--; + } while (start >= minDim && !(horizontal ? image_->get(start, fixedDimension) : + image_->get(fixedDimension, start))); + int whiteRunSize = whiteRunStart - start; + if (start < minDim || whiteRunSize > maxWhiteRun) { + start = whiteRunStart; + break; + } + } + } + start++; + + // Then try right/down + int end = center; + while (end < maxDim) { + if (horizontal ? image_->get(end, fixedDimension) : image_->get(fixedDimension, end)) { + end++; + } else { + int whiteRunStart = end; + do { + end++; + } while (end < maxDim && !(horizontal ? image_->get(end, fixedDimension) : + image_->get(fixedDimension, end))); + int whiteRunSize = end - whiteRunStart; + if (end >= maxDim || whiteRunSize > maxWhiteRun) { + end = whiteRunStart; + break; + } + } + } + end--; + Ref result(NULL); + if (end > start) { + result = new TwoInts; + result->start = start; + result->end = end; + } + return result; + } +} +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/MonochromeRectangleDetector.h b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/MonochromeRectangleDetector.h new file mode 100644 index 000000000..45799a5be --- /dev/null +++ b/symbian/ZXingBarcodeReader/group/zxing/datamatrix/detector/MonochromeRectangleDetector.h @@ -0,0 +1,61 @@ +#ifndef __MONOCHROMERECTANGLEDETECTOR_H__ +#define __MONOCHROMERECTANGLEDETECTOR_H__ + +/* + * MonochromeRectangleDetector.h + * zxing + * + * Created by Luiz Silva on 09/02/2010. + * Copyright 2010 ZXing authors All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +namespace zxing { +namespace datamatrix { + +struct TwoInts: public Counted { + int start; + int end; +}; + +class MonochromeRectangleDetector : public Counted { +private: + static const int MAX_MODULES = 32; + Ref image_; + +public: + MonochromeRectangleDetector(Ref image) : image_(image) { }; + + std::vector > detect(); + +private: + Ref findCornerFromCenter(int centerX, int deltaX, int left, int right, + int centerY, int deltaY, int top, int bottom, int maxWhiteRun); + + Ref blackWhiteRange(int fixedDimension, int maxWhiteRun, int minDim, int maxDim, + bool horizontal); + + int max(int a, float b) { return (float) a > b ? a : (int) b;}; +}; +} +} + +#endif // __MONOCHROMERECTANGLEDETECTOR_H__ diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/Code128Reader.cpp b/symbian/ZXingBarcodeReader/group/zxing/oned/Code128Reader.cpp index 943a57481..36ab5dc55 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/Code128Reader.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/Code128Reader.cpp @@ -24,13 +24,14 @@ #include #include #include +#include namespace zxing { namespace oned { - const int CODE_PATTERNS_LENGHT = 107; - const int countersLenght = 6; - static const int CODE_PATTERNS[CODE_PATTERNS_LENGHT][countersLenght] = { + const int CODE_PATTERNS_LENGTH = 107; + const int countersLength = 6; + static const int CODE_PATTERNS[CODE_PATTERNS_LENGTH][countersLength] = { {2, 1, 2, 2, 2, 2}, /* 0 */ {2, 2, 2, 1, 2, 2}, {2, 2, 2, 2, 2, 1}, @@ -155,7 +156,7 @@ namespace zxing { } int counterPosition = 0; - int counters[countersLenght] = {0,0,0,0,0,0}; + int counters[countersLength] = {0,0,0,0,0,0}; int patternStart = rowOffset; bool isWhite = false; int patternLength = sizeof(counters) / sizeof(int); @@ -166,10 +167,10 @@ namespace zxing { counters[counterPosition]++; } else { if (counterPosition == patternLength - 1) { - int bestVariance = MAX_AVG_VARIANCE; + unsigned int bestVariance = MAX_AVG_VARIANCE; int bestMatch = -1; for (int startCode = CODE_START_A; startCode <= CODE_START_C; startCode++) { - int variance = patternMatchVariance(counters, sizeof(counters)/sizeof(int), CODE_PATTERNS[startCode], MAX_INDIVIDUAL_VARIANCE); + unsigned int variance = patternMatchVariance(counters, sizeof(counters)/sizeof(int), CODE_PATTERNS[startCode], MAX_INDIVIDUAL_VARIANCE); if (variance < bestVariance) { bestVariance = variance; bestMatch = startCode; @@ -204,16 +205,16 @@ namespace zxing { int Code128Reader::decodeCode(Ref row, int counters[], int countersCount, int rowOffset){ recordPattern(row, rowOffset, counters, countersCount); - int bestVariance = MAX_AVG_VARIANCE; // worst variance we'll accept + unsigned int bestVariance = MAX_AVG_VARIANCE; // worst variance we'll accept int bestMatch = -1; - for (int d = 0; d < CODE_PATTERNS_LENGHT; d++) { - int pattern[countersLenght]; + for (int d = 0; d < CODE_PATTERNS_LENGTH; d++) { + int pattern[countersLength]; - for(int ind = 0; ind< countersLenght; ind++){ + for(int ind = 0; ind< countersLength; ind++){ pattern[ind] = CODE_PATTERNS[d][ind]; } -// memcpy(pattern, CODE_PATTERNS[d], countersLenght); - int variance = patternMatchVariance(counters, countersCount, pattern, MAX_INDIVIDUAL_VARIANCE); +// memcpy(pattern, CODE_PATTERNS[d], countersLength); + unsigned int variance = patternMatchVariance(counters, countersCount, pattern, MAX_INDIVIDUAL_VARIANCE); if (variance < bestVariance) { bestVariance = variance; bestMatch = d; @@ -243,6 +244,7 @@ namespace zxing { codeSet = CODE_CODE_C; break; default: + delete [] startPatternInfo; throw ReaderException(""); } @@ -250,11 +252,11 @@ namespace zxing { bool isNextShifted = false; std::string tmpResultString; - + std::stringstream tmpResultSStr; // used if its Code 128C int lastStart = startPatternInfo[0]; int nextStart = startPatternInfo[1]; - int counters[countersLenght] = {0,0,0,0,0,0}; + int counters[countersLength] = {0,0,0,0,0,0}; int lastCode = 0; int code = 0; @@ -271,7 +273,12 @@ namespace zxing { lastCode = code; // Decode another code from image + try { code = decodeCode(row, counters, sizeof(counters)/sizeof(int), nextStart); + } catch (ReaderException re) { + delete [] startPatternInfo; + throw re; + } // Remember whether the last code was printable or not (excluding CODE_STOP) if (code != CODE_STOP) { @@ -286,8 +293,8 @@ namespace zxing { // Advance to where the next code will to start lastStart = nextStart; - int _countersLenght = sizeof(counters) / sizeof(int); - for (int i = 0; i < _countersLenght; i++) { + int _countersLength = sizeof(counters) / sizeof(int); + for (int i = 0; i < _countersLength; i++) { nextStart += counters[i]; } @@ -296,6 +303,7 @@ namespace zxing { case CODE_START_A: case CODE_START_B: case CODE_START_C: + delete [] startPatternInfo; throw ReaderException(""); } @@ -366,11 +374,11 @@ namespace zxing { } break; case CODE_CODE_C: + // the code read in this case is the number encoded directly if (code < 100) { - if (code < 10) { - tmpResultString.append(1, '0'); - } - tmpResultString.append(1, code); + if (code < 10) + tmpResultSStr << '0'; + tmpResultSStr << code; } else { if (code != CODE_STOP) { lastCharacterWasPrintable = false; @@ -418,6 +426,7 @@ namespace zxing { nextStart++; } if (!row->isRange(nextStart, fminl(width, nextStart + (nextStart - lastStart) / 2), false)) { + delete [] startPatternInfo; throw ReaderException(""); } @@ -425,9 +434,13 @@ namespace zxing { checksumTotal -= multiplier * lastCode; // lastCode is the checksum then: if (checksumTotal % 103 != lastCode) { + delete [] startPatternInfo; throw ReaderException(""); } + if (codeSet == CODE_CODE_C) + tmpResultString.append(tmpResultSStr.str()); + // Need to pull out the check digits from string int resultLength = tmpResultString.length(); // Only bother if the result had at least one character, and if the checksum digit happened to @@ -444,6 +457,7 @@ namespace zxing { // String resultString(tmpResultString); if (tmpResultString.length() == 0) { + delete [] startPatternInfo; // Almost surely a false positive throw ReaderException(""); } diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/Code128Reader.h b/symbian/ZXingBarcodeReader/group/zxing/oned/Code128Reader.h index ad191aa0d..2b6752eec 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/Code128Reader.h +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/Code128Reader.h @@ -27,7 +27,7 @@ namespace zxing { class Code128Reader : public OneDReader { private: - static const int MAX_AVG_VARIANCE = (int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.25f); + static const unsigned int MAX_AVG_VARIANCE = (unsigned int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.25f); static const int MAX_INDIVIDUAL_VARIANCE = (int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.7f); static const int CODE_SHIFT = 98; diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/Code39Reader.cpp b/symbian/ZXingBarcodeReader/group/zxing/oned/Code39Reader.cpp index cb03dd9ac..337f23728 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/Code39Reader.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/Code39Reader.cpp @@ -26,315 +26,333 @@ #include namespace zxing { - namespace oned { - - static const char* ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%"; - - - /** - * These represent the encodings of characters, as patterns of wide and narrow bars. - * The 9 least-significant bits of each int correspond to the pattern of wide and narrow, - * with 1s representing "wide" and 0s representing narrow. - */ - const int CHARACTER_ENCODINGS_LEN = 44; - static int CHARACTER_ENCODINGS[CHARACTER_ENCODINGS_LEN] = { - 0x034, 0x121, 0x061, 0x160, 0x031, 0x130, 0x070, 0x025, 0x124, 0x064, // 0-9 - 0x109, 0x049, 0x148, 0x019, 0x118, 0x058, 0x00D, 0x10C, 0x04C, 0x01C, // A-J - 0x103, 0x043, 0x142, 0x013, 0x112, 0x052, 0x007, 0x106, 0x046, 0x016, // K-T - 0x181, 0x0C1, 0x1C0, 0x091, 0x190, 0x0D0, 0x085, 0x184, 0x0C4, 0x094, // U-* - 0x0A8, 0x0A2, 0x08A, 0x02A // $-% - }; - - static int ASTERISK_ENCODING = 0x094; - - - - /** - * Creates a reader that assumes all encoded data is data, and does not treat the final - * character as a check digit. It will not decoded "extended Code 39" sequences. - */ - Code39Reader::Code39Reader(){ - ALPHABET_STRING = new std::string("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%"); - usingCheckDigit = false; - extendedMode = false; - } - - /** - * Creates a reader that can be configured to check the last character as a check digit. - * It will not decoded "extended Code 39" sequences. - * - * @param usingCheckDigit if true, treat the last data character as a check digit, not - * data, and verify that the checksum passes. - */ - Code39Reader::Code39Reader(bool usingCheckDigit_){ - ALPHABET_STRING = new std::string("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%"); - usingCheckDigit = usingCheckDigit_; - extendedMode = false; - } - +namespace oned { - - Ref Code39Reader::decodeRow(int rowNumber, Ref row){ - int* start = findAsteriskPattern(row); - int nextStart = start[1]; - int end = row->getSize(); - - // Read off white space - while (nextStart < end && !row->get(nextStart)) { - nextStart++; - } - - std::string tmpResultString; - - int countersLen = 9; - int* counters = new int[countersLen]; - for (int i=0; iget(nextStart)) { - nextStart++; - } - } while (decodedChar != '*'); - tmpResultString.erase(tmpResultString.length()-1, 1);// remove asterisk - - // Look for whitespace after pattern: - int lastPatternSize = 0; - for (int i = 0; i < countersLen; i++) { - lastPatternSize += counters[i]; - } - int whiteSpaceAfterEnd = nextStart - lastStart - lastPatternSize; - // If 50% of last pattern size, following last pattern, is not whitespace, fail - // (but if it's whitespace to the very end of the image, that's OK) - if (nextStart != end && whiteSpaceAfterEnd / 2 < lastPatternSize) { - throw ReaderException("too short end white space"); - } - - if (usingCheckDigit) { - int max = tmpResultString.length() - 1; - int total = 0; - for (int i = 0; i < max; i++) { - total += ALPHABET_STRING->find_first_of(tmpResultString[i], 0); - } - if (total % 43 != ALPHABET_STRING->find_first_of(tmpResultString[max], 0)) { - throw ReaderException(""); - } - tmpResultString.erase(max, 1); - } - - - - - Ref resultString(new String(tmpResultString)); - if (extendedMode) { - delete resultString; - resultString = decodeExtended(tmpResultString); - } - - if (tmpResultString.length() == 0) { - // Almost surely a false positive - throw ReaderException(""); - } - - float left = (float) (start[1] + start[0]) / 2.0f; - float right = (float) (nextStart + lastStart) / 2.0f; - - std::vector< Ref > resultPoints(2); - Ref resultPoint1(new OneDResultPoint(left, (float) rowNumber)); - Ref resultPoint2(new OneDResultPoint(right, (float) rowNumber)); - resultPoints[0] = resultPoint1; - resultPoints[1] = resultPoint2; - - ArrayRef resultBytes(1); - - delete [] start; - - Ref res(new Result(resultString, resultBytes, resultPoints, BarcodeFormat_CODE_39)); - return res; - } - - int* Code39Reader::findAsteriskPattern(Ref row){ - int width = row->getSize(); - int rowOffset = 0; - while (rowOffset < width) { - if (row->get(rowOffset)) { - break; - } - rowOffset++; - } - - int counterPosition = 0; - int countersLen = 9; - int* counters = new int[countersLen]; - for (int i=0; iget(i); - if (pixel ^ isWhite) { - counters[counterPosition]++; - } else { - if (counterPosition == patternLength - 1) { - if (toNarrowWidePattern(counters, countersLen) == ASTERISK_ENCODING) { - // Look for whitespace before start pattern, >= 50% of width of start pattern - if (row->isRange(fmaxl(0, patternStart - (i - patternStart) / 2), patternStart, false)) { - int* resultValue = new int[2]; - resultValue[0] = patternStart; - resultValue[1] = i; - return resultValue; - } - } - patternStart += counters[0] + counters[1]; - for (int y = 2; y < patternLength; y++) { - counters[y - 2] = counters[y]; - } - counters[patternLength - 2] = 0; - counters[patternLength - 1] = 0; - counterPosition--; - } else { - counterPosition++; - } - counters[counterPosition] = 1; - isWhite = !isWhite; - } - } - throw ReaderException(""); - } - - // For efficiency, returns -1 on failure. Not throwing here saved as many as 700 exceptions - // per image when using some of our blackbox images. - int Code39Reader::toNarrowWidePattern(int counters[], int countersLen){ - int numCounters = countersLen; - int maxNarrowCounter = 0; - int wideCounters; - do { - int minCounter = INT_MAX; - for (int i = 0; i < numCounters; i++) { - int counter = counters[i]; - if (counter < minCounter && counter > maxNarrowCounter) { - minCounter = counter; - } - } - maxNarrowCounter = minCounter; - wideCounters = 0; - int totalWideCountersWidth = 0; - int pattern = 0; - for (int i = 0; i < numCounters; i++) { - int counter = counters[i]; - if (counters[i] > maxNarrowCounter) { - pattern |= 1 << (numCounters - 1 - i); - wideCounters++; - totalWideCountersWidth += counter; - } - } - if (wideCounters == 3) { - // Found 3 wide counters, but are they close enough in width? - // We can perform a cheap, conservative check to see if any individual - // counter is more than 1.5 times the average: - for (int i = 0; i < numCounters && wideCounters > 0; i++) { - int counter = counters[i]; - if (counters[i] > maxNarrowCounter) { - wideCounters--; - // totalWideCountersWidth = 3 * average, so this checks if counter >= 3/2 * average - if ((counter << 1) >= totalWideCountersWidth) { - return -1; - } - } - } - return pattern; - } - } while (wideCounters > 3); - return -1; - } - - char Code39Reader::patternToChar(int pattern){ - for (int i = 0; i < CHARACTER_ENCODINGS_LEN; i++) { - if (CHARACTER_ENCODINGS[i] == pattern) { - return ALPHABET[i]; - } - } - throw ReaderException(""); - } - - Ref Code39Reader::decodeExtended(std::string encoded){ - int length = encoded.length(); - std::string tmpDecoded; - for (int i = 0; i < length; i++) { - char c = encoded[i]; - if (c == '+' || c == '$' || c == '%' || c == '/') { - char next = encoded[i + 1]; - char decodedChar = '\0'; - switch (c) { - case '+': - // +A to +Z map to a to z - if (next >= 'A' && next <= 'Z') { - decodedChar = (char) (next + 32); - } else { - throw ReaderException(""); - } - break; - case '$': - // $A to $Z map to control codes SH to SB - if (next >= 'A' && next <= 'Z') { - decodedChar = (char) (next - 64); - } else { - throw ReaderException(""); - } - break; - case '%': - // %A to %E map to control codes ESC to US - if (next >= 'A' && next <= 'E') { - decodedChar = (char) (next - 38); - } else if (next >= 'F' && next <= 'W') { - decodedChar = (char) (next - 11); - } else { - throw ReaderException(""); - } - break; - case '/': - // /A to /O map to ! to , and /Z maps to : - if (next >= 'A' && next <= 'O') { - decodedChar = (char) (next - 32); - } else if (next == 'Z') { - decodedChar = ':'; - } else { - throw ReaderException(""); - } - break; - } - tmpDecoded.append(1, decodedChar); - // bump up i again since we read two characters - i++; - } else { - tmpDecoded.append(1, c); - } - } - Ref decoded(new String(tmpDecoded)); - return decoded; - } - + static const char* ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%"; - Code39Reader::~Code39Reader(){ - delete ALPHABET_STRING; - } - } -} + /** + * These represent the encodings of characters, as patterns of wide and narrow + * bars. + * The 9 least-significant bits of each int correspond to the pattern of wide + * and narrow, with 1s representing "wide" and 0s representing narrow. + */ + const int CHARACTER_ENCODINGS_LEN = 44; + static int CHARACTER_ENCODINGS[CHARACTER_ENCODINGS_LEN] = { + 0x034, 0x121, 0x061, 0x160, 0x031, 0x130, 0x070, 0x025, 0x124, 0x064, // 0-9 + 0x109, 0x049, 0x148, 0x019, 0x118, 0x058, 0x00D, 0x10C, 0x04C, 0x01C, // A-J + 0x103, 0x043, 0x142, 0x013, 0x112, 0x052, 0x007, 0x106, 0x046, 0x016, // K-T + 0x181, 0x0C1, 0x1C0, 0x091, 0x190, 0x0D0, 0x085, 0x184, 0x0C4, 0x094, // U-* + 0x0A8, 0x0A2, 0x08A, 0x02A // $-% + }; + + static int ASTERISK_ENCODING = 0x094; + static const char* ALPHABET_STRING = + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%"; + + + /** + * Creates a reader that assumes all encoded data is data, and does not treat + * the final character as a check digit. It will not decoded "extended + * Code 39" sequences. + */ + Code39Reader::Code39Reader() : alphabet_string(ALPHABET_STRING), + usingCheckDigit(false), + extendedMode(false) { + } + + /** + * Creates a reader that can be configured to check the last character as a + * check digit. It will not decoded "extended Code 39" sequences. + * + * @param usingCheckDigit if true, treat the last data character as a check + * digit, not data, and verify that the checksum passes. + */ + Code39Reader::Code39Reader(bool usingCheckDigit_) : + alphabet_string(ALPHABET_STRING), + usingCheckDigit(usingCheckDigit_), + extendedMode(false) { + } + + + + Ref Code39Reader::decodeRow(int rowNumber, Ref row){ + int* start = findAsteriskPattern(row); + int nextStart = start[1]; + int end = row->getSize(); + + // Read off white space + while (nextStart < end && !row->get(nextStart)) { + nextStart++; + } + + std::string tmpResultString; + + int countersLen = 9; + int* counters = new int[countersLen]; + for (int i=0; iget(nextStart)) { + nextStart++; + } + } while (decodedChar != '*'); + tmpResultString.erase(tmpResultString.length()-1, 1);// remove asterisk + + // Look for whitespace after pattern: + int lastPatternSize = 0; + for (int i = 0; i < countersLen; i++) { + lastPatternSize += counters[i]; + } + // IS begin + delete [] counters; + // IS end + int whiteSpaceAfterEnd = nextStart - lastStart - lastPatternSize; + // If 50% of last pattern size, following last pattern, is not whitespace, + // fail (but if it's whitespace to the very end of the image, that's OK) + if (nextStart != end && whiteSpaceAfterEnd / 2 < lastPatternSize) { + delete [] start; + throw ReaderException("too short end white space"); + } + + if (usingCheckDigit) { + int max = tmpResultString.length() - 1; + unsigned int total = 0; + for (int i = 0; i < max; i++) { + total += alphabet_string.find_first_of(tmpResultString[i], 0); + } + if (total % 43 != alphabet_string.find_first_of(tmpResultString[max], 0)) { + throw ReaderException(""); + } + tmpResultString.erase(max, 1); + } + + + + + Ref resultString(new String(tmpResultString)); + if (extendedMode) { + delete resultString; + resultString = decodeExtended(tmpResultString); + } + + if (tmpResultString.length() == 0) { + delete [] start; + // Almost surely a false positive + throw ReaderException(""); + } + + float left = (float) (start[1] + start[0]) / 2.0f; + float right = (float) (nextStart + lastStart) / 2.0f; + + std::vector< Ref > resultPoints(2); + Ref resultPoint1( + new OneDResultPoint(left, (float) rowNumber)); + Ref resultPoint2( + new OneDResultPoint(right, (float) rowNumber)); + resultPoints[0] = resultPoint1; + resultPoints[1] = resultPoint2; + + ArrayRef resultBytes(1); + + delete [] start; + + Ref res(new Result( + resultString, resultBytes, resultPoints, BarcodeFormat_CODE_39)); + return res; + } + + int* Code39Reader::findAsteriskPattern(Ref row){ + int width = row->getSize(); + int rowOffset = 0; + while (rowOffset < width) { + if (row->get(rowOffset)) { + break; + } + rowOffset++; + } + + int counterPosition = 0; + int countersLen = 9; + int* counters = new int[countersLen]; + for (int i=0; iget(i); + if (pixel ^ isWhite) { + counters[counterPosition]++; + } else { + if (counterPosition == patternLength - 1) { + if (toNarrowWidePattern(counters, countersLen) == ASTERISK_ENCODING) { + // Look for whitespace before start pattern, >= 50% of width of + // start pattern. + long double longPatternOffset = + fmaxl(0, patternStart - (i - patternStart) / 2); + if (row->isRange(longPatternOffset, patternStart, false)) { + int* resultValue = new int[2]; + resultValue[0] = patternStart; + resultValue[1] = i; + return resultValue; + } + } + patternStart += counters[0] + counters[1]; + for (int y = 2; y < patternLength; y++) { + counters[y - 2] = counters[y]; + } + counters[patternLength - 2] = 0; + counters[patternLength - 1] = 0; + counterPosition--; + } else { + counterPosition++; + } + counters[counterPosition] = 1; + isWhite = !isWhite; + } + } + // IS begin + delete [] counters; + // IS end + throw ReaderException(""); + } + + // For efficiency, returns -1 on failure. Not throwing here saved as many as + // 700 exceptions per image when using some of our blackbox images. + int Code39Reader::toNarrowWidePattern(int counters[], int countersLen){ + int numCounters = countersLen; + int maxNarrowCounter = 0; + int wideCounters; + do { + int minCounter = INT_MAX; + for (int i = 0; i < numCounters; i++) { + int counter = counters[i]; + if (counter < minCounter && counter > maxNarrowCounter) { + minCounter = counter; + } + } + maxNarrowCounter = minCounter; + wideCounters = 0; + int totalWideCountersWidth = 0; + int pattern = 0; + for (int i = 0; i < numCounters; i++) { + int counter = counters[i]; + if (counters[i] > maxNarrowCounter) { + pattern |= 1 << (numCounters - 1 - i); + wideCounters++; + totalWideCountersWidth += counter; + } + } + if (wideCounters == 3) { + // Found 3 wide counters, but are they close enough in width? + // We can perform a cheap, conservative check to see if any individual + // counter is more than 1.5 times the average: + for (int i = 0; i < numCounters && wideCounters > 0; i++) { + int counter = counters[i]; + if (counters[i] > maxNarrowCounter) { + wideCounters--; + // totalWideCountersWidth = 3 * average, so this checks if + // counter >= 3/2 * average. + if ((counter << 1) >= totalWideCountersWidth) { + return -1; + } + } + } + return pattern; + } + } while (wideCounters > 3); + return -1; + } + + char Code39Reader::patternToChar(int pattern){ + for (int i = 0; i < CHARACTER_ENCODINGS_LEN; i++) { + if (CHARACTER_ENCODINGS[i] == pattern) { + return ALPHABET[i]; + } + } + throw ReaderException(""); + } + + Ref Code39Reader::decodeExtended(std::string encoded){ + int length = encoded.length(); + std::string tmpDecoded; + for (int i = 0; i < length; i++) { + char c = encoded[i]; + if (c == '+' || c == '$' || c == '%' || c == '/') { + char next = encoded[i + 1]; + char decodedChar = '\0'; + switch (c) { + case '+': + // +A to +Z map to a to z + if (next >= 'A' && next <= 'Z') { + decodedChar = (char) (next + 32); + } else { + throw ReaderException(""); + } + break; + case '$': + // $A to $Z map to control codes SH to SB + if (next >= 'A' && next <= 'Z') { + decodedChar = (char) (next - 64); + } else { + throw ReaderException(""); + } + break; + case '%': + // %A to %E map to control codes ESC to US + if (next >= 'A' && next <= 'E') { + decodedChar = (char) (next - 38); + } else if (next >= 'F' && next <= 'W') { + decodedChar = (char) (next - 11); + } else { + throw ReaderException(""); + } + break; + case '/': + // /A to /O map to ! to , and /Z maps to : + if (next >= 'A' && next <= 'O') { + decodedChar = (char) (next - 32); + } else if (next == 'Z') { + decodedChar = ':'; + } else { + throw ReaderException(""); + } + break; + } + tmpDecoded.append(1, decodedChar); + // bump up i again since we read two characters + i++; + } else { + tmpDecoded.append(1, c); + } + } + Ref decoded(new String(tmpDecoded)); + return decoded; + } +} // namespace oned +} // namespace zxing + diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/Code39Reader.h b/symbian/ZXingBarcodeReader/group/zxing/oned/Code39Reader.h index 1846761a6..cc7148c77 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/Code39Reader.h +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/Code39Reader.h @@ -33,7 +33,7 @@ namespace zxing { class Code39Reader : public OneDReader { private: - std::string* ALPHABET_STRING; + std::string alphabet_string; bool usingCheckDigit; bool extendedMode; @@ -49,9 +49,7 @@ namespace zxing { Code39Reader(bool usingCheckDigit_); Ref decodeRow(int rowNumber, Ref row); - - ~Code39Reader(); - }; + }; } } diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/EAN13Reader.cpp b/symbian/ZXingBarcodeReader/group/zxing/oned/EAN13Reader.cpp index 0e3de9731..dab360b84 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/EAN13Reader.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/EAN13Reader.cpp @@ -27,20 +27,11 @@ namespace zxing { static const int FIRST_DIGIT_ENCODINGS[10] = {0x00, 0x0B, 0x0D, 0xE, 0x13, 0x19, 0x1C, 0x15, 0x16, 0x1A}; - EAN13Reader::EAN13Reader(){ - decodeMiddleCounters = new int[4]; - for (int i=0; i<4; i++) { - decodeMiddleCounters[i] = 0; - } - } + EAN13Reader::EAN13Reader() { } int EAN13Reader::decodeMiddle(Ref row, int startRange[], int startRangeLen, std::string& resultString){ - int countersLen = 4; - int* counters = decodeMiddleCounters; - counters[0] = 0; - counters[1] = 0; - counters[2] = 0; - counters[3] = 0; + const int countersLen = 4; + int counters[countersLen] = { 0, 0, 0, 0 }; int end = row->getSize(); @@ -88,8 +79,5 @@ namespace zxing { BarcodeFormat EAN13Reader::getBarcodeFormat(){ return BarcodeFormat_EAN_13; } - EAN13Reader::~EAN13Reader(){ - delete [] decodeMiddleCounters; - } } } diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/EAN13Reader.h b/symbian/ZXingBarcodeReader/group/zxing/oned/EAN13Reader.h index 8ef6fe38b..540d32695 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/EAN13Reader.h +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/EAN13Reader.h @@ -26,7 +26,6 @@ namespace zxing { class EAN13Reader : public UPCEANReader { private: - int* decodeMiddleCounters; static void determineFirstDigit(std::string& resultString, int lgPatternFound); //throws ReaderException public: @@ -35,7 +34,6 @@ namespace zxing { int decodeMiddle(Ref row, int startRange[], int startRangeLen, std::string& resultString); //throws ReaderException BarcodeFormat getBarcodeFormat(); - ~EAN13Reader(); }; } -} \ No newline at end of file +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/EAN8Reader.cpp b/symbian/ZXingBarcodeReader/group/zxing/oned/EAN8Reader.cpp index 52d09fe99..e3c0e2a7e 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/EAN8Reader.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/EAN8Reader.cpp @@ -24,21 +24,11 @@ namespace zxing { namespace oned { - EAN8Reader::EAN8Reader(){ - decodeMiddleCounters = new int[4]; - for (int i=0; i<4; i++) { - decodeMiddleCounters[i] = 0; - } - } + EAN8Reader::EAN8Reader(){ } int EAN8Reader::decodeMiddle(Ref row, int startRange[], int startRangeLen, std::string& resultString){ - int countersLen = 4; - int* counters = decodeMiddleCounters; - counters[0] = 0; - counters[1] = 0; - counters[2] = 0; - counters[3] = 0; - + const int countersLen = 4; + int counters[countersLen] = { 0, 0, 0, 0 }; int end = row->getSize(); int rowOffset = startRange[1]; @@ -68,8 +58,5 @@ namespace zxing { BarcodeFormat EAN8Reader::getBarcodeFormat(){ return BarcodeFormat_EAN_8; } - EAN8Reader::~EAN8Reader(){ - delete [] decodeMiddleCounters; - } } -} \ No newline at end of file +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/EAN8Reader.h b/symbian/ZXingBarcodeReader/group/zxing/oned/EAN8Reader.h index 3e4f3d67e..481944c4f 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/EAN8Reader.h +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/EAN8Reader.h @@ -25,16 +25,12 @@ namespace zxing { namespace oned { class EAN8Reader : public UPCEANReader { - private: - int* decodeMiddleCounters; - public: EAN8Reader(); int decodeMiddle(Ref row, int startRange[], int startRangeLen, std::string& resultString); //throws ReaderException BarcodeFormat getBarcodeFormat(); - ~EAN8Reader(); }; } -} \ No newline at end of file +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/ITFReader.cpp b/symbian/ZXingBarcodeReader/group/zxing/oned/ITFReader.cpp index e38ab2160..44643269a 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/ITFReader.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/ITFReader.cpp @@ -62,18 +62,29 @@ namespace zxing { }; - ITFReader::ITFReader(){ - narrowLineWidth = -1; + ITFReader::ITFReader() : narrowLineWidth(-1) { } Ref ITFReader::decodeRow(int rowNumber, Ref row){ // Find out where the Middle section (payload) starts & ends int* startRange = decodeStart(row); - int* endRange = decodeEnd(row); + int* endRange; + try { + endRange = decodeEnd(row); + } catch (Exception e) { + delete [] startRange; + throw e; + } std::string tmpResult; + try { decodeMiddle(row, startRange[1], endRange[0], tmpResult); + } catch (zxing::ReaderException re) { + delete [] startRange; + delete [] endRange; + throw re; + } // To avoid false positives with 2D barcodes (and other patterns), make // an assumption that the decoded string must be 6, 10 or 14 digits. @@ -83,7 +94,9 @@ namespace zxing { lengthOK = true; } if (!lengthOK) { - throw ReaderException("not enought characters count"); + delete [] startRange; + delete [] endRange; + throw ReaderException("not enough characters count"); } Ref resultString(new String(tmpResult)); @@ -116,13 +129,13 @@ namespace zxing { // Therefore, need to scan 10 lines and then // split these into two arrays int counterDigitPairLen = 10; - int* counterDigitPair = new int[counterDigitPairLen]; + int counterDigitPair[counterDigitPairLen]; for (int i=0; i row, int startPattern){ -#pragma mark needs some corrections +//#pragma mark needs some corrections // int quietCount = narrowLineWidth * 10; // expect to find this many pixels of quiet zone // // for (int i = startPattern - 1; quietCount > 0 && i >= 0; i--) { @@ -278,7 +288,7 @@ namespace zxing { // TODO: This is very similar to implementation in UPCEANReader. Consider if they can be // merged to a single method. int patternLength = patternLen; - int* counters = new int[patternLength]; + int counters[patternLength]; for (int i=0; i(); - readers->push_back(new MultiFormatUPCEANReader()); - readers->push_back(new Code39Reader()); - readers->push_back(new Code128Reader()); - readers->push_back(new ITFReader()); + MultiFormatOneDReader::MultiFormatOneDReader() : readers() { + readers.push_back(Ref(new MultiFormatUPCEANReader())); + readers.push_back(Ref(new Code39Reader())); + readers.push_back(Ref(new Code128Reader())); + readers.push_back(Ref(new ITFReader())); } Ref MultiFormatOneDReader::decodeRow(int rowNumber, Ref row){ - int size = readers->size(); + int size = readers.size(); for (int i = 0; i < size; i++) { - OneDReader* reader = (*readers)[i]; + OneDReader* reader = readers[i]; try { return reader->decodeRow(rowNumber, row); } catch (ReaderException re) { @@ -48,8 +47,5 @@ namespace zxing { } throw ReaderException("No code detected"); } - MultiFormatOneDReader::~MultiFormatOneDReader(){ - delete readers; - } } -} \ No newline at end of file +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/MultiFormatOneDReader.h b/symbian/ZXingBarcodeReader/group/zxing/oned/MultiFormatOneDReader.h index 9fcc6fbb2..0e5ab530d 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/MultiFormatOneDReader.h +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/MultiFormatOneDReader.h @@ -27,13 +27,11 @@ namespace zxing { class MultiFormatOneDReader : public OneDReader { private: - std::vector* readers; + std::vector > readers; public: MultiFormatOneDReader(); - Ref decodeRow(int rowNumber, Ref row); - - ~MultiFormatOneDReader(); + Ref decodeRow(int rowNumber, Ref row); }; } -} \ No newline at end of file +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/MultiFormatUPCEANReader.cpp b/symbian/ZXingBarcodeReader/group/zxing/oned/MultiFormatUPCEANReader.cpp index 61011f0ff..24aa5e6f4 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/MultiFormatUPCEANReader.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/MultiFormatUPCEANReader.cpp @@ -30,19 +30,18 @@ namespace zxing { namespace oned { - MultiFormatUPCEANReader::MultiFormatUPCEANReader(){ - readers = new std::vector(); - readers->push_back(new EAN13Reader()); + MultiFormatUPCEANReader::MultiFormatUPCEANReader() : readers() { + readers.push_back(Ref(new EAN13Reader())); // UPC-A is covered by EAN-13 - readers->push_back(new EAN8Reader()); - readers->push_back(new UPCEReader()); + readers.push_back(Ref(new EAN8Reader())); + readers.push_back(Ref(new UPCEReader())); } Ref MultiFormatUPCEANReader::decodeRow(int rowNumber, Ref row){ // Compute this location once and reuse it on multiple implementations - int size = readers->size(); + int size = readers.size(); for (int i = 0; i < size; i++) { - OneDReader* reader = (*readers)[i]; + Ref reader = readers[i]; Ref result; try { result = reader->decodeRow(rowNumber, row);//decodeRow(rowNumber, row, startGuardPattern); @@ -60,7 +59,7 @@ namespace zxing { // UPC-A. So we special case it here, and convert an EAN-13 result to a UPC-A // result if appropriate. if (result->getBarcodeFormat() == BarcodeFormat_EAN_13) { - std::string& text = (result->getText())->getText(); + const std::string& text = (result->getText())->getText(); if (text[0] == '0') { Ref resultString(new String(text.substr(1))); Ref res(new Result(resultString, result->getRawBytes(), result->getResultPoints(), BarcodeFormat_UPC_A)); @@ -71,9 +70,5 @@ namespace zxing { } throw ReaderException("No EAN code detected"); } - - MultiFormatUPCEANReader::~MultiFormatUPCEANReader(){ - delete readers; - } } -} \ No newline at end of file +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/MultiFormatUPCEANReader.h b/symbian/ZXingBarcodeReader/group/zxing/oned/MultiFormatUPCEANReader.h index 706f9c431..2c5b196bf 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/MultiFormatUPCEANReader.h +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/MultiFormatUPCEANReader.h @@ -29,13 +29,11 @@ namespace zxing { class MultiFormatUPCEANReader : public OneDReader { private: - std::vector* readers; + std::vector > readers; public: MultiFormatUPCEANReader(); Ref decodeRow(int rowNumber, Ref row); - - ~MultiFormatUPCEANReader(); - }; + }; } -} \ No newline at end of file +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/OneDReader.cpp b/symbian/ZXingBarcodeReader/group/zxing/oned/OneDReader.cpp index 21526f57f..d3e491691 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/OneDReader.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/OneDReader.cpp @@ -20,6 +20,7 @@ #include "OneDReader.h" #include +#include #include #include @@ -93,6 +94,8 @@ namespace zxing { row = image->getBlackRow(rowNumber, row); }catch (ReaderException re) { continue; + }catch (IllegalArgumentException re) { + continue; } // While we have the image data in a BitArray, it's fairly cheap to reverse it in place to @@ -109,9 +112,17 @@ namespace zxing { // // But it was upside down, so note that // result.putMetadata(ResultMetadataType.ORIENTATION, new Integer(180)); // // And remember to flip the result points horizontally. - // ResultPoint[] points = result.getResultPoints(); - // points[0] = new ResultPoint(width - points[0].getX() - 1, points[0].getY()); - // points[1] = new ResultPoint(width - points[1].getX() - 1, points[1].getY()); + std::vector > points(result->getResultPoints()); + if (points.size() == 2) { + Ref pointZero(new OneDResultPoint(width - points[0]->getX() - 1, points[0]->getY())); + points[0] = pointZero; + + Ref pointOne(new OneDResultPoint(width - points[1]->getX() - 1, points[1]->getY())); + points[1] = pointOne; + + result.reset(new Result(result->getText(),result->getRawBytes(),points,result->getBarcodeFormat())); + } + } return result; } catch (ReaderException re) { @@ -119,13 +130,13 @@ namespace zxing { } } } - throw ReaderException(""); + throw ReaderException("doDecode() failed"); } - int OneDReader::patternMatchVariance(int counters[], int countersSize, const int pattern[], int maxIndividualVariance) { + unsigned int OneDReader::patternMatchVariance(int counters[], int countersSize, const int pattern[], int maxIndividualVariance) { int numCounters = countersSize; - int total = 0; - int patternLength = 0; + unsigned int total = 0; + unsigned int patternLength = 0; for (int i = 0; i < numCounters; i++) { total += counters[i]; patternLength += pattern[i]; @@ -138,10 +149,10 @@ namespace zxing { // We're going to fake floating-point math in integers. We just need to use more bits. // Scale up patternLength so that intermediate values below like scaledCounter will have // more "significant digits" - int unitBarWidth = (total << INTEGER_MATH_SHIFT) / patternLength; + unsigned int unitBarWidth = (total << INTEGER_MATH_SHIFT) / patternLength; maxIndividualVariance = (maxIndividualVariance * unitBarWidth) >> INTEGER_MATH_SHIFT; - int totalVariance = 0; + unsigned int totalVariance = 0; for (int x = 0; x < numCounters; x++) { int counter = counters[x] << INTEGER_MATH_SHIFT; int scaledPattern = pattern[x] * unitBarWidth; @@ -191,4 +202,4 @@ namespace zxing { OneDReader::~OneDReader() { } } -} \ No newline at end of file +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/OneDReader.h b/symbian/ZXingBarcodeReader/group/zxing/oned/OneDReader.h index a029f9cb1..bb3b64979 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/OneDReader.h +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/OneDReader.h @@ -38,9 +38,9 @@ namespace zxing { virtual Ref decode(Ref image); virtual Ref decodeRow(int rowNumber, Ref row) = 0; - static int patternMatchVariance(int counters[], int countersSize, const int pattern[], int maxIndividualVariance); + static unsigned int patternMatchVariance(int counters[], int countersSize, const int pattern[], int maxIndividualVariance); static void recordPattern(Ref row, int start, int counters[], int countersCount); virtual ~OneDReader(); }; } -} \ No newline at end of file +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/OneDResultPoint.cpp b/symbian/ZXingBarcodeReader/group/zxing/oned/OneDResultPoint.cpp index 272319dbf..0ac8dc3ca 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/OneDResultPoint.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/OneDResultPoint.cpp @@ -23,17 +23,15 @@ namespace zxing { namespace oned { - using namespace std; - OneDResultPoint::OneDResultPoint(float posX, float posY) : posX_(posX), posY_(posY){ } - float OneDResultPoint::getX() { + float OneDResultPoint::getX() const { return posX_; } - float OneDResultPoint::getY() { + float OneDResultPoint::getY() const { return posY_; } } -} \ No newline at end of file +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/OneDResultPoint.h b/symbian/ZXingBarcodeReader/group/zxing/oned/OneDResultPoint.h index 1b07b772c..18f1614b9 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/OneDResultPoint.h +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/OneDResultPoint.h @@ -30,8 +30,8 @@ namespace zxing { public: OneDResultPoint(float posX, float posY); - float getX(); - float getY(); + float getX() const; + float getY() const; }; } } diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/UPCAReader.cpp b/symbian/ZXingBarcodeReader/group/zxing/oned/UPCAReader.cpp index e46c2b76f..cb2fcb5e3 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/UPCAReader.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/UPCAReader.cpp @@ -19,31 +19,29 @@ */ #include "UPCAReader.h" -#include #include namespace zxing { namespace oned { - UPCAReader::UPCAReader(){ - ean13Reader = new EAN13Reader(); + UPCAReader::UPCAReader() : ean13Reader() { } Ref UPCAReader::decodeRow(int rowNumber, Ref row){ - return maybeReturnResult(ean13Reader->decodeRow(rowNumber, row)); + return maybeReturnResult(ean13Reader.decodeRow(rowNumber, row)); } Ref UPCAReader::decodeRow(int rowNumber, Ref row, int startGuardRange[]){ - return maybeReturnResult(ean13Reader->decodeRow(rowNumber, row, startGuardRange)); + return maybeReturnResult(ean13Reader.decodeRow(rowNumber, row, startGuardRange)); } Ref UPCAReader::decode(Ref image){ - return maybeReturnResult(ean13Reader->decode(image)); + return maybeReturnResult(ean13Reader.decode(image)); } int UPCAReader::decodeMiddle(Ref row, int startRange[], int startRangeLen, std::string& resultString){ - return ean13Reader->decodeMiddle(row, startRange, startRangeLen, resultString); + return ean13Reader.decodeMiddle(row, startRange, startRangeLen, resultString); } Ref UPCAReader::maybeReturnResult(Ref result){ - std::string& text = (result->getText())->getText(); + const std::string& text = (result->getText())->getText(); if (text[0] == '0') { Ref resultString(new String(text.substr(1))); Ref res(new Result(resultString, result->getRawBytes(), result->getResultPoints(), BarcodeFormat_UPC_A)); @@ -57,8 +55,5 @@ namespace zxing { BarcodeFormat UPCAReader::getBarcodeFormat(){ return BarcodeFormat_UPC_A; } - UPCAReader::~UPCAReader(){ - delete ean13Reader; - } } -} \ No newline at end of file +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/UPCAReader.h b/symbian/ZXingBarcodeReader/group/zxing/oned/UPCAReader.h index 217184b84..85422072c 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/UPCAReader.h +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/UPCAReader.h @@ -18,15 +18,14 @@ * limitations under the License. */ -#include -#include +#include namespace zxing { namespace oned { class UPCAReader : public UPCEANReader { private: - UPCEANReader* ean13Reader; + EAN13Reader ean13Reader; static Ref maybeReturnResult(Ref result); //throws ReaderException public: @@ -39,7 +38,6 @@ namespace zxing { Ref decode(Ref image); BarcodeFormat getBarcodeFormat(); - ~UPCAReader(); }; } -} \ No newline at end of file +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/UPCEANReader.cpp b/symbian/ZXingBarcodeReader/group/zxing/oned/UPCEANReader.cpp index 5345cad9b..e0154c533 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/UPCEANReader.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/UPCEANReader.cpp @@ -100,7 +100,16 @@ namespace zxing { std::string tmpResultString; std::string& tmpResultStringRef = tmpResultString; - int endStart = decodeMiddle(row, startGuardRange, 2 /*reference findGuardPattern*/ , tmpResultStringRef); + int endStart; + try { + endStart = decodeMiddle(row, startGuardRange, 2 /*reference findGuardPattern*/ , tmpResultStringRef); + } catch (ReaderException re) { + if (startGuardRange!=NULL) { + delete [] startGuardRange; + startGuardRange = NULL; + } + throw re; + } int* endRange = decodeEnd(row, endStart); @@ -114,6 +123,14 @@ namespace zxing { // } if (!checkChecksum(tmpResultString)) { + if (startGuardRange!=NULL) { + delete [] startGuardRange; + startGuardRange = NULL; + } + if (endRange!=NULL) { + delete [] endRange; + endRange = NULL; + } throw ReaderException("Checksum fail."); } @@ -159,6 +176,9 @@ namespace zxing { if (quietStart >= 0) { foundStart = row->isRange(quietStart, start, false); } + if (!foundStart) { + delete [] startRange; + } } return startRange; } @@ -217,13 +237,13 @@ namespace zxing { } // int UPCEANReader::decodeDigit(Ref row, int counters[], int countersLen, int rowOffset, int** patterns/*[][]*/, int paterns1Len, int paterns2Len) - int UPCEANReader::decodeDigit(Ref row, int counters[], int countersLen, int rowOffset, UPC_EAN_PATTERNS paternType){ + int UPCEANReader::decodeDigit(Ref row, int counters[], int countersLen, int rowOffset, UPC_EAN_PATTERNS patternType){ recordPattern(row, rowOffset, counters, countersLen); - int bestVariance = MAX_AVG_VARIANCE; // worst variance we'll accept + unsigned int bestVariance = MAX_AVG_VARIANCE; // worst variance we'll accept int bestMatch = -1; int max = 0; - switch (paternType) { + switch (patternType) { case UPC_EAN_PATTERNS_L_PATTERNS: max = L_PATTERNS_LEN; for (int i = 0; i < max; i++) { @@ -232,7 +252,7 @@ namespace zxing { pattern[j] = L_PATTERNS[i][j]; } - int variance = patternMatchVariance(counters, countersLen, pattern, MAX_INDIVIDUAL_VARIANCE); + unsigned int variance = patternMatchVariance(counters, countersLen, pattern, MAX_INDIVIDUAL_VARIANCE); if (variance < bestVariance) { bestVariance = variance; bestMatch = i; @@ -247,7 +267,7 @@ namespace zxing { pattern[j] = L_AND_G_PATTERNS[i][j]; } - int variance = patternMatchVariance(counters, countersLen, pattern, MAX_INDIVIDUAL_VARIANCE); + unsigned int variance = patternMatchVariance(counters, countersLen, pattern, MAX_INDIVIDUAL_VARIANCE); if (variance < bestVariance) { bestVariance = variance; bestMatch = i; diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/UPCEANReader.h b/symbian/ZXingBarcodeReader/group/zxing/oned/UPCEANReader.h index 8f825c26c..6ee218623 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/UPCEANReader.h +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/UPCEANReader.h @@ -32,7 +32,7 @@ namespace zxing { class UPCEANReader : public OneDReader { private: - static const int MAX_AVG_VARIANCE = (int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.42f); + static const unsigned int MAX_AVG_VARIANCE = (unsigned int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.42f); static const int MAX_INDIVIDUAL_VARIANCE = (int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.7f); static int* findStartGuardPattern(Ref row); //throws ReaderException @@ -54,7 +54,7 @@ namespace zxing { Ref decodeRow(int rowNumber, Ref row); Ref decodeRow(int rowNumber, Ref row, int startGuardRange[]); - static int decodeDigit(Ref row, int counters[], int countersLen, int rowOffset, UPC_EAN_PATTERNS paternType); //throws ReaderException + static int decodeDigit(Ref row, int counters[], int countersLen, int rowOffset, UPC_EAN_PATTERNS patternType); //throws ReaderException bool checkChecksum(std::string s); //throws ReaderException @@ -62,4 +62,5 @@ namespace zxing { virtual ~UPCEANReader(); }; } -} \ No newline at end of file +} + diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/UPCEReader.cpp b/symbian/ZXingBarcodeReader/group/zxing/oned/UPCEReader.cpp index 3738d4c6b..1bba2f73f 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/UPCEReader.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/UPCEReader.cpp @@ -40,21 +40,11 @@ namespace zxing { {0x07, 0x0B, 0x0D, 0x0E, 0x13, 0x19, 0x1C, 0x15, 0x16, 0x1A} }; - UPCEReader::UPCEReader(){ - decodeMiddleCounters = new int[4]; - for (int i=0; i<4; i++) { - decodeMiddleCounters[i] = 0; - } - } + UPCEReader::UPCEReader(){} int UPCEReader::decodeMiddle(Ref row, int startRange[], int startRangeLen, std::string& resultString){ - int countersLen = 4; - int* counters = decodeMiddleCounters; - counters[0] = 0; - counters[1] = 0; - counters[2] = 0; - counters[3] = 0; - + const int countersLen = 4; + int counters[countersLen] = { 0, 0, 0, 0 }; int end = row->getSize(); int rowOffset = startRange[1]; @@ -143,8 +133,5 @@ namespace zxing { BarcodeFormat UPCEReader::getBarcodeFormat(){ return BarcodeFormat_UPC_E; } - UPCEReader::~UPCEReader(){ - delete [] decodeMiddleCounters; - } } } diff --git a/symbian/ZXingBarcodeReader/group/zxing/oned/UPCEReader.h b/symbian/ZXingBarcodeReader/group/zxing/oned/UPCEReader.h index a26e2ec62..5de2ef57b 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/oned/UPCEReader.h +++ b/symbian/ZXingBarcodeReader/group/zxing/oned/UPCEReader.h @@ -26,7 +26,6 @@ namespace zxing { class UPCEReader : public UPCEANReader { private: - int* decodeMiddleCounters; static void determineFirstDigit(std::string& resultString, int lgPatternFound); //throws ReaderException static void determineNumSysAndCheckDigit(std::string& resultString, int lgPatternFound); //throws ReaderException protected: @@ -39,7 +38,6 @@ namespace zxing { static std::string& convertUPCEtoUPCA(std::string upce); BarcodeFormat getBarcodeFormat(); - ~UPCEReader(); }; } -} \ No newline at end of file +} diff --git a/symbian/ZXingBarcodeReader/group/zxing/qrcode/ErrorCorrectionLevel.cpp b/symbian/ZXingBarcodeReader/group/zxing/qrcode/ErrorCorrectionLevel.cpp index 9c610b526..e8faf9091 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/qrcode/ErrorCorrectionLevel.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/qrcode/ErrorCorrectionLevel.cpp @@ -23,8 +23,8 @@ namespace zxing { namespace qrcode { -ErrorCorrectionLevel::ErrorCorrectionLevel(int ordinal) : - ordinal_(ordinal) { +ErrorCorrectionLevel::ErrorCorrectionLevel(int inOrdinal) : + ordinal_(inOrdinal) { } int ErrorCorrectionLevel::ordinal() { diff --git a/symbian/ZXingBarcodeReader/group/zxing/qrcode/ErrorCorrectionLevel.h b/symbian/ZXingBarcodeReader/group/zxing/qrcode/ErrorCorrectionLevel.h index 426d204cf..9d6a6c524 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/qrcode/ErrorCorrectionLevel.h +++ b/symbian/ZXingBarcodeReader/group/zxing/qrcode/ErrorCorrectionLevel.h @@ -29,7 +29,7 @@ namespace qrcode { class ErrorCorrectionLevel { private: int ordinal_; - ErrorCorrectionLevel(int ordinal); + ErrorCorrectionLevel(int inOrdinal); static ErrorCorrectionLevel *FOR_BITS[]; static int N_LEVELS; public: diff --git a/symbian/ZXingBarcodeReader/group/zxing/qrcode/Version.cpp b/symbian/ZXingBarcodeReader/group/zxing/qrcode/Version.cpp index 5e63c8271..62c2acfe7 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/qrcode/Version.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/qrcode/Version.cpp @@ -20,9 +20,9 @@ #include #include -#include #include #include +#include namespace zxing { namespace qrcode { @@ -41,13 +41,11 @@ int ECB::getDataCodewords() { } ECBlocks::ECBlocks(int ecCodewords, ECB *ecBlocks) : - ecCodewords_(ecCodewords) { - ecBlocks_.push_back(ecBlocks); + ecCodewords_(ecCodewords), ecBlocks_(1, ecBlocks) { } ECBlocks::ECBlocks(int ecCodewords, ECB *ecBlocks1, ECB *ecBlocks2) : - ecCodewords_(ecCodewords) { - ecBlocks_.push_back(ecBlocks1); + ecCodewords_(ecCodewords), ecBlocks_(1, ecBlocks1) { ecBlocks_.push_back(ecBlocks2); } @@ -78,7 +76,7 @@ int Version::getVersionNumber() { return versionNumber_; } -valarray &Version::getAlignmentPatternCenters() { +vector &Version::getAlignmentPatternCenters() { return alignmentPatternCenters_; } @@ -102,16 +100,16 @@ Version *Version::getProvisionalVersionForDimension(int dimension) { } Version *Version::getVersionForNumber(int versionNumber) { - if (versionNumber < 1 || versionNumber > 40) { + if (versionNumber < 1 || versionNumber > N_VERSIONS) { throw ReaderException("versionNumber must be between 1 and 40"); } return VERSIONS[versionNumber - 1]; } -Version::Version(int versionNumber, valarray *alignmentPatternCenters, ECBlocks *ecBlocks1, ECBlocks *ecBlocks2, +Version::Version(int versionNumber, vector *alignmentPatternCenters, ECBlocks *ecBlocks1, ECBlocks *ecBlocks2, ECBlocks *ecBlocks3, ECBlocks *ecBlocks4) : - versionNumber_(versionNumber), alignmentPatternCenters_(*alignmentPatternCenters), ecBlocks_(4) { + versionNumber_(versionNumber), alignmentPatternCenters_(*alignmentPatternCenters), ecBlocks_(4), totalCodewords_(0) { ecBlocks_[0] = ecBlocks1; ecBlocks_[1] = ecBlocks2; ecBlocks_[2] = ecBlocks3; @@ -207,10 +205,10 @@ Ref Version::buildFunctionPattern() { return functionPattern; } -static valarray *intArray(size_t n...) { +static vector *intArray(size_t n...) { va_list ap; va_start(ap, n); - valarray *result = new valarray(n); + vector *result = new vector(n); for (size_t i = 0; i < n; i++) { (*result)[i] = va_arg(ap, int); } diff --git a/symbian/ZXingBarcodeReader/group/zxing/qrcode/Version.h b/symbian/ZXingBarcodeReader/group/zxing/qrcode/Version.h index 181bd98fe..a89518da3 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/qrcode/Version.h +++ b/symbian/ZXingBarcodeReader/group/zxing/qrcode/Version.h @@ -27,7 +27,6 @@ #include #include #include -#include namespace zxing { namespace qrcode { @@ -58,10 +57,10 @@ class Version : public Counted { private: int versionNumber_; - std::valarray &alignmentPatternCenters_; + std::vector &alignmentPatternCenters_; std::vector ecBlocks_; int totalCodewords_; - Version(int versionNumber, std::valarray *alignmentPatternCenters, ECBlocks *ecBlocks1, ECBlocks *ecBlocks2, + Version(int versionNumber, std::vector *alignmentPatternCenters, ECBlocks *ecBlocks1, ECBlocks *ecBlocks2, ECBlocks *ecBlocks3, ECBlocks *ecBlocks4); public: @@ -71,7 +70,7 @@ public: ~Version(); int getVersionNumber(); - std::valarray &getAlignmentPatternCenters(); + std::vector &getAlignmentPatternCenters(); int getTotalCodewords(); int getDimensionForVersion(); ECBlocks &getECBlocksForLevel(ErrorCorrectionLevel &ecLevel); diff --git a/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/BitMatrixParser.cpp b/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/BitMatrixParser.cpp index e4ef5e2d8..04cd06bc5 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/BitMatrixParser.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/BitMatrixParser.cpp @@ -158,8 +158,8 @@ ArrayRef BitMatrixParser::readCodewords() { x--; } // Read alternatingly from bottom to top then top to bottom - for (int count = 0; count < dimension; count++) { - int y = readingUp ? dimension - 1 - count : count; + for (int counter = 0; counter < dimension; counter++) { + int y = readingUp ? dimension - 1 - counter : counter; for (int col = 0; col < 2; col++) { // Ignore bits covered by the function pattern if (!functionPattern->get(x - col, y)) { diff --git a/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/BitMatrixParser.h b/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/BitMatrixParser.h index 824556b93..093949211 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/BitMatrixParser.h +++ b/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/BitMatrixParser.h @@ -44,6 +44,11 @@ public: Ref readFormatInformation(); Version *readVersion(); ArrayRef readCodewords(); + +private: + BitMatrixParser(const BitMatrixParser&); + BitMatrixParser& operator =(const BitMatrixParser&); + }; } diff --git a/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/DataBlock.h b/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/DataBlock.h index df536f4d6..fed669c11 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/DataBlock.h +++ b/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/DataBlock.h @@ -21,7 +21,6 @@ * limitations under the License. */ -#include #include #include #include diff --git a/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/DecodedBitStreamParser.cpp b/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/DecodedBitStreamParser.cpp index ab32b2e8c..20232fef4 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/DecodedBitStreamParser.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/DecodedBitStreamParser.cpp @@ -20,7 +20,9 @@ #include #include +#ifndef NO_ICONV #include +#endif // Required for compatibility. TODO: test on Symbian #ifdef ZXING_ICONV_CONST @@ -50,7 +52,8 @@ const char *DecodedBitStreamParser::UTF8 = "UTF-8"; const char *DecodedBitStreamParser::SHIFT_JIS = "SHIFT_JIS"; const char *DecodedBitStreamParser::EUC_JP = "EUC-JP"; -void DecodedBitStreamParser::append(ostream &ost, const unsigned char *bufIn, size_t nIn, const char *src) { +void DecodedBitStreamParser::append(std::string &result, const unsigned char *bufIn, size_t nIn, const char *src) { +#ifndef NO_ICONV if (nIn == 0) { return; } @@ -76,12 +79,14 @@ void DecodedBitStreamParser::append(ostream &ost, const unsigned char *bufIn, si int nResult = maxOut - nTo; bufOut[nResult] = '\0'; - - ost << bufOut; + result.append((const char *)bufOut); delete[] bufOut; + #else + result.append((const char *)bufIn, nIn); + #endif } -void DecodedBitStreamParser::decodeKanjiSegment(Ref bits, ostringstream &result, int count) { +void DecodedBitStreamParser::decodeKanjiSegment(Ref bits, std::string &result, int count) { // Each character will require 2 bytes. Read the characters as 2-byte pairs // and decode as Shift_JIS afterwards size_t nBytes = 2 * count; @@ -109,7 +114,7 @@ void DecodedBitStreamParser::decodeKanjiSegment(Ref bits, ostringstre delete[] buffer; } -void DecodedBitStreamParser::decodeByteSegment(Ref bits, ostringstream &result, int count) { +void DecodedBitStreamParser::decodeByteSegment(Ref bits, std::string &result, int count) { int nBytes = count; unsigned char* readBytes = new unsigned char[nBytes]; if (count << 3 > bits->available()) { @@ -131,7 +136,7 @@ void DecodedBitStreamParser::decodeByteSegment(Ref bits, ostringstrea delete[] readBytes; } -void DecodedBitStreamParser::decodeNumericSegment(Ref bits, ostringstream &result, int count) { +void DecodedBitStreamParser::decodeNumericSegment(Ref bits, std::string &result, int count) { int nBytes = count; unsigned char* bytes = new unsigned char[nBytes]; int i = 0; @@ -176,7 +181,7 @@ void DecodedBitStreamParser::decodeNumericSegment(Ref bits, ostringst delete[] bytes; } -void DecodedBitStreamParser::decodeAlphanumericSegment(Ref bits, ostringstream &result, int count) { +void DecodedBitStreamParser::decodeAlphanumericSegment(Ref bits, std::string &result, int count) { int nBytes = count; unsigned char* bytes = new unsigned char[nBytes]; int i = 0; @@ -248,7 +253,7 @@ DecodedBitStreamParser::guessEncoding(unsigned char *bytes, int length) { } string DecodedBitStreamParser::decode(ArrayRef bytes, Version *version) { - ostringstream result; + string result; Ref bits(new BitSource(bytes)); Mode *mode = &Mode::TERMINATOR; do { @@ -275,7 +280,7 @@ string DecodedBitStreamParser::decode(ArrayRef bytes, Version *ve } } } while (mode != &Mode::TERMINATOR); - return result.str(); + return result; } } diff --git a/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/DecodedBitStreamParser.h b/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/DecodedBitStreamParser.h index 8c4ab9bb3..83582e156 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/DecodedBitStreamParser.h +++ b/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/DecodedBitStreamParser.h @@ -43,12 +43,12 @@ private: static const char *SHIFT_JIS; static const char *EUC_JP; - static void decodeKanjiSegment(Ref bits, std::ostringstream &result, int count); - static void decodeByteSegment(Ref bits, std::ostringstream &result, int count); - static void decodeAlphanumericSegment(Ref bits, std::ostringstream &result, int count); - static void decodeNumericSegment(Ref bits, std::ostringstream &result, int count); + static void decodeKanjiSegment(Ref bits, std::string &result, int count); + static void decodeByteSegment(Ref bits, std::string &result, int count); + static void decodeAlphanumericSegment(Ref bits, std::string &result, int count); + static void decodeNumericSegment(Ref bits, std::string &result, int count); static const char *guessEncoding(unsigned char *bytes, int length); - static void append(std::ostream &ost, const unsigned char *bufIn, size_t nIn, const char *src); + static void append(std::string &ost, const unsigned char *bufIn, size_t nIn, const char *src); public: static std::string decode(ArrayRef bytes, Version *version); diff --git a/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/Decoder.h b/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/Decoder.h index 96e1dc0cc..14053a3a0 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/Decoder.h +++ b/symbian/ZXingBarcodeReader/group/zxing/qrcode/decoder/Decoder.h @@ -27,7 +27,6 @@ #include #include #include -#include namespace zxing { namespace qrcode { diff --git a/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/AlignmentPattern.cpp b/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/AlignmentPattern.cpp index 0f6ee592b..25baeb365 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/AlignmentPattern.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/AlignmentPattern.cpp @@ -29,15 +29,15 @@ AlignmentPattern::AlignmentPattern(float posX, float posY, float estimatedModule posX_(posX), posY_(posY), estimatedModuleSize_(estimatedModuleSize) { } -float AlignmentPattern::getX() { +float AlignmentPattern::getX() const { return posX_; } -float AlignmentPattern::getY() { +float AlignmentPattern::getY() const { return posY_; } -bool AlignmentPattern::aboutEquals(float moduleSize, float i, float j) { +bool AlignmentPattern::aboutEquals(float moduleSize, float i, float j) const { return abs(i - posY_) <= moduleSize && abs(j - posX_) <= moduleSize && (abs(moduleSize - estimatedModuleSize_) <= 1.0f || abs(moduleSize - estimatedModuleSize_) / estimatedModuleSize_ <= 0.1f); } diff --git a/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/AlignmentPattern.h b/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/AlignmentPattern.h index 56a683f95..b822afacb 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/AlignmentPattern.h +++ b/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/AlignmentPattern.h @@ -35,9 +35,9 @@ namespace zxing { public: AlignmentPattern(float posX, float posY, float estimatedModuleSize); - float getX(); - float getY(); - bool aboutEquals(float moduleSize, float i, float j); + float getX() const; + float getY() const; + bool aboutEquals(float moduleSize, float i, float j) const; }; } diff --git a/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/AlignmentPatternFinder.cpp b/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/AlignmentPatternFinder.cpp index b3d92d40c..017e2ee6b 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/AlignmentPatternFinder.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/AlignmentPatternFinder.cpp @@ -23,17 +23,18 @@ #include #include #include +#include namespace zxing { namespace qrcode { using namespace std; -float AlignmentPatternFinder::centerFromEnd(valarray &stateCount, int end) { +float AlignmentPatternFinder::centerFromEnd(vector &stateCount, int end) { return (float)(end - stateCount[2]) - stateCount[1] / 2.0f; } -bool AlignmentPatternFinder::foundPatternCross(valarray &stateCount) { +bool AlignmentPatternFinder::foundPatternCross(vector &stateCount) { float maxVariance = moduleSize_ / 2.0f; for (size_t i = 0; i < 3; i++) { if (abs(moduleSize_ - stateCount[i]) >= maxVariance) { @@ -46,7 +47,7 @@ bool AlignmentPatternFinder::foundPatternCross(valarray &stateCount) { float AlignmentPatternFinder::crossCheckVertical(size_t startI, size_t centerJ, int maxCount, int originalStateCountTotal) { int maxI = image_->getHeight(); - valarray stateCount(0, 3); + vector stateCount(3, 0); // Start counting up from center @@ -92,7 +93,7 @@ float AlignmentPatternFinder::crossCheckVertical(size_t startI, size_t centerJ, return foundPatternCross(stateCount) ? centerFromEnd(stateCount, i) : NAN; } -Ref AlignmentPatternFinder::handlePossibleCenter(valarray &stateCount, size_t i, size_t j) { +Ref AlignmentPatternFinder::handlePossibleCenter(vector &stateCount, size_t i, size_t j) { int stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2]; float centerJ = centerFromEnd(stateCount, j); float centerI = crossCheckVertical(i, (int)centerJ, 2 * stateCount[1], stateCountTotal); @@ -136,7 +137,7 @@ Ref AlignmentPatternFinder::find() { // Ref luminanceRow(new BitArray(width_)); // We are looking for black/white/black modules in 1:1:1 ratio; // this tracks the number of black/white/black modules seen so far - valarray stateCount(0, 3); + vector stateCount(3, 0); for (size_t iGen = 0; iGen < height_; iGen++) { // Search from middle outwards size_t i = middleI + ((iGen & 0x01) == 0 ? ((iGen + 1) >> 1) : -((iGen + 1) >> 1)); diff --git a/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/AlignmentPatternFinder.h b/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/AlignmentPatternFinder.h index 266364316..6221b6c32 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/AlignmentPatternFinder.h +++ b/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/AlignmentPatternFinder.h @@ -43,18 +43,23 @@ private: size_t height_; float moduleSize_; - static float centerFromEnd(std::valarray &stateCount, int end); - bool foundPatternCross(std::valarray &stateCount); + static float centerFromEnd(std::vector &stateCount, int end); + bool foundPatternCross(std::vector &stateCount); float crossCheckVertical(size_t startI, size_t centerJ, int maxCount, int originalStateCountTotal); - Ref handlePossibleCenter(std::valarray &stateCount, size_t i, size_t j); + Ref handlePossibleCenter(std::vector &stateCount, size_t i, size_t j); public: AlignmentPatternFinder(Ref image, size_t startX, size_t startY, size_t width, size_t height, float moduleSize); ~AlignmentPatternFinder(); Ref find(); + +private: + AlignmentPatternFinder(const AlignmentPatternFinder&); + AlignmentPatternFinder& operator =(const AlignmentPatternFinder&); + }; } } diff --git a/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/Detector.cpp b/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/Detector.cpp index 9dbc29754..a50424c9e 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/Detector.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/Detector.cpp @@ -27,6 +27,7 @@ #include #include #include +#include namespace zxing { namespace qrcode { @@ -133,8 +134,8 @@ Ref Detector::sampleGrid(Ref image, int dimension, Ref topLeft, Ref topRight, Ref bottomLeft, float moduleSize) { - int tltrCentersDimension = lround(FinderPatternFinder::distance(topLeft, topRight) / moduleSize); - int tlblCentersDimension = lround(FinderPatternFinder::distance(topLeft, bottomLeft) / moduleSize); + int tltrCentersDimension = int(FinderPatternFinder::distance(topLeft, topRight) / moduleSize + 0.5f); + int tlblCentersDimension = int(FinderPatternFinder::distance(topLeft, bottomLeft) / moduleSize + 0.5f); int dimension = ((tltrCentersDimension + tlblCentersDimension) >> 1) + 7; switch (dimension & 0x03) { // mod 4 case 0: diff --git a/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/FinderPattern.cpp b/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/FinderPattern.cpp index 531d4e2a1..1c9a53414 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/FinderPattern.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/FinderPattern.cpp @@ -29,19 +29,19 @@ namespace zxing { posX_(posX), posY_(posY), estimatedModuleSize_(estimatedModuleSize), counter_(1) { } - float FinderPattern::getX() { + float FinderPattern::getX() const { return posX_; } - float FinderPattern::getY() { + float FinderPattern::getY() const { return posY_; } - int FinderPattern::getCount() { + int FinderPattern::getCount() const { return counter_; } - float FinderPattern::getEstimatedModuleSize() { + float FinderPattern::getEstimatedModuleSize() const { return estimatedModuleSize_; } @@ -49,7 +49,7 @@ namespace zxing { counter_++; } - bool FinderPattern::aboutEquals(float moduleSize, float i, float j) { + bool FinderPattern::aboutEquals(float moduleSize, float i, float j) const { return abs(i - posY_) <= moduleSize && abs(j - posX_) <= moduleSize && (abs(moduleSize - estimatedModuleSize_) <= 1.0f || abs(moduleSize - estimatedModuleSize_) / estimatedModuleSize_ <= 0.1f); } diff --git a/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/FinderPattern.h b/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/FinderPattern.h index 0b6615c81..8b2ff590f 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/FinderPattern.h +++ b/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/FinderPattern.h @@ -36,12 +36,12 @@ namespace zxing { public: FinderPattern(float posX, float posY, float estimatedModuleSize); - float getX(); - float getY(); - int getCount(); - float getEstimatedModuleSize(); + float getX() const; + float getY() const; + int getCount() const; + float getEstimatedModuleSize() const; void incrementCount(); - bool aboutEquals(float moduleSize, float i, float j); + bool aboutEquals(float moduleSize, float i, float j) const; }; } } diff --git a/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/FinderPatternFinder.cpp b/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/FinderPatternFinder.cpp index 666c4f210..8b46b0f2b 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/FinderPatternFinder.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/FinderPatternFinder.cpp @@ -22,6 +22,8 @@ #include #include #include +#include +#include namespace zxing { namespace qrcode { @@ -32,6 +34,8 @@ class ClosestToAverageComparator { private: float averageModuleSize_; public: + ClosestToAverageComparator() : averageModuleSize_(0.0f) { } + ClosestToAverageComparator(float averageModuleSize) : averageModuleSize_(averageModuleSize) { } @@ -393,7 +397,7 @@ Ref FinderPatternFinder::find() { // We are looking for black/white/black/white/black modules in // 1:1:3:1:1 ratio; this tracks the number of such modules seen so far - // As this is used often, we use an integer array instead of valarray + // As this is used often, we use an integer array instead of vector int stateCount[5]; bool done = false; diff --git a/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/QREdgeDetector.cpp b/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/QREdgeDetector.cpp index 18affe6e1..b2162ef50 100644 --- a/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/QREdgeDetector.cpp +++ b/symbian/ZXingBarcodeReader/group/zxing/qrcode/detector/QREdgeDetector.cpp @@ -20,6 +20,7 @@ #include #include +#include using namespace std; diff --git a/symbian/ZXingBarcodeReader/inc/CameraImage.h b/symbian/ZXingBarcodeReader/inc/CameraImage.h index a91950407..e8b102802 100644 --- a/symbian/ZXingBarcodeReader/inc/CameraImage.h +++ b/symbian/ZXingBarcodeReader/inc/CameraImage.h @@ -15,10 +15,10 @@ public: CameraImage(CameraImage& otherInstance); ~CameraImage(); - int getWidth(); - int getHeight(); + int getWidth() const; + int getHeight() const; - unsigned char getPixel(int x, int y); + unsigned char getPixel(int x, int y) const; void setImage(CFbsBitmap* newImage); diff --git a/symbian/ZXingBarcodeReader/sis/ZXingBarcodeReader_S60.sisx b/symbian/ZXingBarcodeReader/sis/ZXingBarcodeReader_S60.sisx index abdf27b9ed5e7b832632773f7e96cb523e48ca8c..81fdd021237fe5a341db87e54f53563ca705609f 100644 GIT binary patch delta 173091 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

y2mq~!(NZ~x28evQX=@f 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 z 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 P|NoW$$BVZ}P6Es;=Aft| delta 152296 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 z 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

!p96B?GbLiG`wA*7NJWEYfrC?i&rp3ehL{ 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 znoc;{{SizeInPixels().iWidth; } -int CameraImage::getHeight() +int CameraImage::getHeight() const { return image->SizeInPixels().iHeight; } -unsigned char CameraImage::getPixel(int x, int y) +unsigned char CameraImage::getPixel(int x, int y) const { TPoint pixelPosition(x,y); TRgb color; diff --git a/symbian/ZXingBarcodeReader/src/DecodingOperations.cpp b/symbian/ZXingBarcodeReader/src/DecodingOperations.cpp index 47b87437a..b7287a9af 100644 --- a/symbian/ZXingBarcodeReader/src/DecodingOperations.cpp +++ b/symbian/ZXingBarcodeReader/src/DecodingOperations.cpp @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -35,7 +36,7 @@ TInt CZXingBarcodeReaderAppView::Tick(TAny* aObject) void CZXingBarcodeReaderAppView::decodeBackbufferImage() { - QRCodeReader decoder; + MultiFormatReader decoder; CameraImage image; image.setImage(iBackBuffer);