From 52dca915dc9f5e74e6e4d850b4bba5882ddeb850 Mon Sep 17 00:00:00 2001 From: srowen Date: Thu, 3 Apr 2008 15:39:06 +0000 Subject: [PATCH] Another fix to ensure that 2 barcodes with the same info are counted separately. git-svn-id: http://zxing.googlecode.com/svn/trunk@338 59b500cc-1b3d-0410-9834-0bbf25fbcc57 --- .../google/zxing/oned/AbstractOneDReader.java | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/core/src/com/google/zxing/oned/AbstractOneDReader.java b/core/src/com/google/zxing/oned/AbstractOneDReader.java index cca98784..a818cbb8 100644 --- a/core/src/com/google/zxing/oned/AbstractOneDReader.java +++ b/core/src/com/google/zxing/oned/AbstractOneDReader.java @@ -86,7 +86,11 @@ public abstract class AbstractOneDReader implements OneDReader { maxLines = 7; } - Hashtable lastResults = null; + // Remember last barcode to avoid thinking we've found a new barcode when + // we just rescanned the last one. Actually remember two, the last one + // found above and below. + String lastResultAboveText = null; + String lastResultBelowText = null; boolean skippingSomeBarcodes = hints != null && hints.containsKey(DecodeHintType.SKIP_N_BARCODES) && @@ -126,13 +130,18 @@ public abstract class AbstractOneDReader implements OneDReader { // Look for a barcode Result result = decodeRow(rowNumber, row, hints); + String resultText = result.getText(); - if (lastResults != null && lastResults.containsKey(result.getText())) { + // make sure we terminate inner loop after this because we found something + attempt = 1; + // See if we should skip and keep looking + if (( isAbove && resultText.equals(lastResultAboveText)) || + (!isAbove && resultText.equals(lastResultBelowText))) { // Just saw the last barcode again, proceed continue; } - if (skippingSomeBarcodes) { // See if we should skip and keep looking + if (skippingSomeBarcodes) { int oldValue = ((Integer) hints.get(DecodeHintType.SKIP_N_BARCODES)).intValue(); if (oldValue > 1) { hints.put(DecodeHintType.SKIP_N_BARCODES, new Integer(oldValue - 1)); @@ -140,10 +149,11 @@ public abstract class AbstractOneDReader implements OneDReader { hints.remove(DecodeHintType.SKIP_N_BARCODES); skippingSomeBarcodes = false; } - if (lastResults == null) { - lastResults = new Hashtable(3); + if (isAbove) { + lastResultAboveText = resultText; + } else { + lastResultBelowText = resultText; } - lastResults.put(result.getText(), Boolean.TRUE); // Remember what we just saw } else { // We found our barcode if (attempt == 1) { @@ -155,6 +165,13 @@ public abstract class AbstractOneDReader implements OneDReader { } catch (ReaderException re) { // continue -- just couldn't decode this row + if (skippingSomeBarcodes) { + if (isAbove) { + lastResultAboveText = null; + } else { + lastResultBelowText = null; + } + } } } -- 2.20.1