C++ port Binarizer and BinaryBitmap weren't caching rows correctly.
authorflyashi <flyashi@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Fri, 9 Jul 2010 15:15:01 +0000 (15:15 +0000)
committerflyashi <flyashi@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Fri, 9 Jul 2010 15:15:01 +0000 (15:15 +0000)
git-svn-id: http://zxing.googlecode.com/svn/trunk@1473 59b500cc-1b3d-0410-9834-0bbf25fbcc57

cpp/core/src/zxing/Binarizer.cpp
cpp/core/src/zxing/Binarizer.h
cpp/core/src/zxing/BinaryBitmap.cpp
cpp/core/src/zxing/BinaryBitmap.h

index adaab05..1901382 100644 (file)
 
 namespace zxing {
        
-       Binarizer::Binarizer(Ref<LuminanceSource> source) : source_(source), array_(NULL), matrix_(NULL) {
+       Binarizer::Binarizer(Ref<LuminanceSource> source) : source_(source), array_(NULL), matrix_(NULL), cached_y_(-1) {
        }
        
        Binarizer::~Binarizer() {
        }
        
        Ref<BitArray> Binarizer::getBlackRow(int y, Ref<BitArray> row){
-               if (array_ == NULL)
+               if (array_ == NULL && cached_y_ != y) {
                        array_ = estimateBlackRow(y, row);
+                       cached_y_ = y;
+               }
                return array_;
        }
        
index 225ec7d..694018d 100644 (file)
@@ -34,6 +34,7 @@ class Binarizer : public Counted {
   Ref<LuminanceSource> source_;
   Ref<BitArray> array_;
   Ref<BitMatrix> matrix_;
+  int cached_y_;
 
  public:
   Binarizer(Ref<LuminanceSource> source);
index c8fea36..ff79b55 100644 (file)
@@ -23,7 +23,7 @@
 
 namespace zxing {
        
-       BinaryBitmap::BinaryBitmap(Ref<Binarizer> binarizer) : bits_(NULL), array_bits_(NULL), binarizer_(binarizer) {
+       BinaryBitmap::BinaryBitmap(Ref<Binarizer> binarizer) : bits_(NULL), array_bits_(NULL), binarizer_(binarizer), cached_y_(-1) {
                
        }
        
@@ -31,8 +31,9 @@ namespace zxing {
        }
        
        Ref<BitArray> BinaryBitmap::getBlackRow(int y, Ref<BitArray> row) {
-               if (array_bits_ == NULL) {
+               if (array_bits_ == NULL && cached_y_ != y) {
                        array_bits_ = binarizer_->getBlackRow(y, row);
+                       cached_y_ = y;
                }
                return array_bits_;
        }
index ecd9a85..ddea910 100644 (file)
@@ -33,6 +33,7 @@ namespace zxing {
                Ref<BitMatrix> bits_;
                Ref<BitArray> array_bits_;
                Ref<Binarizer> binarizer_;
+               int cached_y_;
                
        public:
                BinaryBitmap(Ref<Binarizer> binarizer);