Issue 357

git-svn-id: https://zxing.googlecode.com/svn/trunk@1313 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
srowen 2010-04-19 20:49:54 +00:00
parent 54e61e3e0c
commit 33bbcab859

View file

@ -347,19 +347,18 @@ final class DecodedBitStreamParser {
byteCompactedCodewords[count] = code; byteCompactedCodewords[count] = code;
count++; count++;
// Base 900 // Base 900
value *= 900; value = 900 * value + code;
value += code;
} else { } else {
if ((code == TEXT_COMPACTION_MODE_LATCH) || if (code == TEXT_COMPACTION_MODE_LATCH ||
(code == BYTE_COMPACTION_MODE_LATCH) || code == BYTE_COMPACTION_MODE_LATCH ||
(code == NUMERIC_COMPACTION_MODE_LATCH) || code == NUMERIC_COMPACTION_MODE_LATCH ||
(code == BYTE_COMPACTION_MODE_LATCH_6) || code == BYTE_COMPACTION_MODE_LATCH_6 ||
(code == BEGIN_MACRO_PDF417_CONTROL_BLOCK) || code == BEGIN_MACRO_PDF417_CONTROL_BLOCK ||
(code == BEGIN_MACRO_PDF417_OPTIONAL_FIELD) || code == BEGIN_MACRO_PDF417_OPTIONAL_FIELD ||
(code == MACRO_PDF417_TERMINATOR)) { code == MACRO_PDF417_TERMINATOR) {
codeIndex--;
end = true;
} }
codeIndex--;
end = true;
} }
if ((count % 5 == 0) && (count > 0)) { if ((count % 5 == 0) && (count > 0)) {
// Decode every 5 codewords // Decode every 5 codewords
@ -385,31 +384,30 @@ final class DecodedBitStreamParser {
int count = 0; int count = 0;
long value = 0; long value = 0;
boolean end = false; boolean end = false;
while ((codeIndex < codewords[0]) && !end) { while (codeIndex < codewords[0] && !end) {
int code = codewords[codeIndex++]; int code = codewords[codeIndex++];
if (code < TEXT_COMPACTION_MODE_LATCH) { if (code < TEXT_COMPACTION_MODE_LATCH) {
count += 1; count++;
// Base 900 // Base 900
value *= 900; value = 900 * value + code;
value += code;
} else { } else {
if ((code == TEXT_COMPACTION_MODE_LATCH) || if (code == TEXT_COMPACTION_MODE_LATCH ||
(code == BYTE_COMPACTION_MODE_LATCH) || code == BYTE_COMPACTION_MODE_LATCH ||
(code == NUMERIC_COMPACTION_MODE_LATCH) || code == NUMERIC_COMPACTION_MODE_LATCH ||
(code == BYTE_COMPACTION_MODE_LATCH_6) || code == BYTE_COMPACTION_MODE_LATCH_6 ||
(code == BEGIN_MACRO_PDF417_CONTROL_BLOCK) || code == BEGIN_MACRO_PDF417_CONTROL_BLOCK ||
(code == BEGIN_MACRO_PDF417_OPTIONAL_FIELD) || code == BEGIN_MACRO_PDF417_OPTIONAL_FIELD ||
(code == MACRO_PDF417_TERMINATOR)) { code == MACRO_PDF417_TERMINATOR) {
codeIndex--;
end = true;
} }
codeIndex--;
end = true;
} }
if ((count % 5 == 0) && (count > 0)) { if ((count % 5 == 0) && (count > 0)) {
// Decode every 5 codewords // Decode every 5 codewords
// Convert to Base 256 // Convert to Base 256
char[] decodedData = new char[6]; char[] decodedData = new char[6];
for (int j = 0; j < 6; ++j) { for (int j = 0; j < 6; ++j) {
decodedData[5 - j] = (char) (value % 256); decodedData[5 - j] = (char) (value & 0xFF);
value >>= 8; value >>= 8;
} }
result.append(decodedData); result.append(decodedData);
@ -433,24 +431,28 @@ final class DecodedBitStreamParser {
int[] numericCodewords = new int[MAX_NUMERIC_CODEWORDS]; int[] numericCodewords = new int[MAX_NUMERIC_CODEWORDS];
while ((codeIndex < codewords.length) && !end) { while (codeIndex < codewords[0] && !end) {
int code = codewords[codeIndex++]; int code = codewords[codeIndex++];
if (codeIndex == codewords[0]) {
end = true;
}
if (code < TEXT_COMPACTION_MODE_LATCH) { if (code < TEXT_COMPACTION_MODE_LATCH) {
numericCodewords[count] = code; numericCodewords[count] = code;
count++; count++;
} else { } else {
if ((code == TEXT_COMPACTION_MODE_LATCH) || if (code == TEXT_COMPACTION_MODE_LATCH ||
(code == BYTE_COMPACTION_MODE_LATCH) || code == BYTE_COMPACTION_MODE_LATCH ||
(code == BYTE_COMPACTION_MODE_LATCH_6) || code == BYTE_COMPACTION_MODE_LATCH_6 ||
(code == BEGIN_MACRO_PDF417_CONTROL_BLOCK) || code == BEGIN_MACRO_PDF417_CONTROL_BLOCK ||
(code == BEGIN_MACRO_PDF417_OPTIONAL_FIELD) || code == BEGIN_MACRO_PDF417_OPTIONAL_FIELD ||
(code == MACRO_PDF417_TERMINATOR)) { code == MACRO_PDF417_TERMINATOR) {
codeIndex--;
end = true;
} }
codeIndex--;
end = true;
} }
if ((count % MAX_NUMERIC_CODEWORDS) == 0 || if (count % MAX_NUMERIC_CODEWORDS == 0 ||
code == NUMERIC_COMPACTION_MODE_LATCH) { code == NUMERIC_COMPACTION_MODE_LATCH ||
end) {
// Re-invoking Numeric Compaction mode (by using codeword 902 // Re-invoking Numeric Compaction mode (by using codeword 902
// while in Numeric Compaction mode) serves to terminate the // while in Numeric Compaction mode) serves to terminate the
// current Numeric Compaction mode grouping as described in 5.4.4.2, // current Numeric Compaction mode grouping as described in 5.4.4.2,