From fbff1b9718645cbfb8c6ae00b8a69d0c8f2604d6 Mon Sep 17 00:00:00 2001 From: dswitkin Date: Sun, 13 Dec 2009 16:58:28 +0000 Subject: [PATCH] Eliminated up to 700 execeptions being thrown per image by changing one method to return -1 on failure. git-svn-id: https://zxing.googlecode.com/svn/trunk@1154 59b500cc-1b3d-0410-9834-0bbf25fbcc57 --- .../com/google/zxing/oned/Code39Reader.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/core/src/com/google/zxing/oned/Code39Reader.java b/core/src/com/google/zxing/oned/Code39Reader.java index 5cf07ee47..f84840577 100644 --- a/core/src/com/google/zxing/oned/Code39Reader.java +++ b/core/src/com/google/zxing/oned/Code39Reader.java @@ -106,6 +106,9 @@ public final class Code39Reader extends OneDReader { do { recordPattern(row, nextStart, counters); int pattern = toNarrowWidePattern(counters); + if (pattern < 0) { + throw ReaderException.getInstance(); + } decodedChar = patternToChar(pattern); result.append(decodedChar); lastStart = nextStart; @@ -187,15 +190,11 @@ public final class Code39Reader extends OneDReader { counters[counterPosition]++; } else { if (counterPosition == patternLength - 1) { - try { - if (toNarrowWidePattern(counters) == ASTERISK_ENCODING) { - // Look for whitespace before start pattern, >= 50% of width of start pattern - if (row.isRange(Math.max(0, patternStart - (i - patternStart) / 2), patternStart, false)) { - return new int[]{patternStart, i}; - } + if (toNarrowWidePattern(counters) == ASTERISK_ENCODING) { + // Look for whitespace before start pattern, >= 50% of width of start pattern + if (row.isRange(Math.max(0, patternStart - (i - patternStart) / 2), patternStart, false)) { + return new int[]{patternStart, i}; } - } catch (ReaderException re) { - // no match, continue } patternStart += counters[0] + counters[1]; for (int y = 2; y < patternLength; y++) { @@ -214,7 +213,9 @@ public final class Code39Reader extends OneDReader { throw ReaderException.getInstance(); } - private static int toNarrowWidePattern(int[] counters) throws 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. + private static int toNarrowWidePattern(int[] counters) { int numCounters = counters.length; int maxNarrowCounter = 0; int wideCounters; @@ -248,14 +249,14 @@ public final class Code39Reader extends OneDReader { wideCounters--; // totalWideCountersWidth = 3 * average, so this checks if counter >= 3/2 * average if ((counter << 1) >= totalWideCountersWidth) { - throw ReaderException.getInstance(); + return -1; } } } return pattern; } } while (wideCounters > 3); - throw ReaderException.getInstance(); + return -1; } private static char patternToChar(int pattern) throws ReaderException {