Index: xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResult.cpp |
diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResult.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResult.cpp |
index 23c2aacc3909aeb7b3c7a1a194505550bc585331..ecb5f75134286d1c86d63f5b9de2e504591363f5 100644 |
--- a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResult.cpp |
+++ b/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResult.cpp |
@@ -1,338 +1,338 @@ |
-// Copyright 2014 PDFium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
-// Original code is licensed as follows: |
-/* |
- * Copyright 2013 ZXing authors |
- * |
- * 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 "xfa/src/fxbarcode/barcode.h" |
-#include "BC_PDF417Codeword.h" |
-#include "BC_PDF417BarcodeMetadata.h" |
-#include "BC_PDF417BoundingBox.h" |
-#include "BC_PDF417DetectionResultColumn.h" |
-#include "BC_PDF417Common.h" |
-#include "BC_PDF417DetectionResultRowIndicatorColumn.h" |
-#include "BC_PDF417DetectionResult.h" |
-int32_t CBC_DetectionResult::ADJUST_ROW_NUMBER_SKIP = 2; |
-CBC_DetectionResult::CBC_DetectionResult(CBC_BarcodeMetadata* barcodeMetadata, |
- CBC_BoundingBox* boundingBox) { |
- m_barcodeMetadata = barcodeMetadata; |
- m_barcodeColumnCount = barcodeMetadata->getColumnCount(); |
- m_boundingBox = boundingBox; |
- m_detectionResultColumns.SetSize(m_barcodeColumnCount + 2); |
- for (int32_t i = 0; i < m_barcodeColumnCount + 2; i++) { |
- m_detectionResultColumns[i] = NULL; |
- } |
-} |
-CBC_DetectionResult::~CBC_DetectionResult() { |
- delete m_boundingBox; |
- delete m_barcodeMetadata; |
- m_detectionResultColumns.RemoveAll(); |
-} |
-CFX_PtrArray& CBC_DetectionResult::getDetectionResultColumns() { |
- adjustIndicatorColumnRowNumbers( |
- (CBC_DetectionResultColumn*)m_detectionResultColumns.GetAt(0)); |
- adjustIndicatorColumnRowNumbers( |
- (CBC_DetectionResultColumn*)m_detectionResultColumns.GetAt( |
- m_barcodeColumnCount + 1)); |
- int32_t unadjustedCodewordCount = CBC_PDF417Common::MAX_CODEWORDS_IN_BARCODE; |
- int32_t previousUnadjustedCount; |
- do { |
- previousUnadjustedCount = unadjustedCodewordCount; |
- unadjustedCodewordCount = adjustRowNumbers(); |
- } while (unadjustedCodewordCount > 0 && |
- unadjustedCodewordCount < previousUnadjustedCount); |
- return m_detectionResultColumns; |
-} |
-void CBC_DetectionResult::setBoundingBox(CBC_BoundingBox* boundingBox) { |
- m_boundingBox = boundingBox; |
-} |
-CBC_BoundingBox* CBC_DetectionResult::getBoundingBox() { |
- return m_boundingBox; |
-} |
-void CBC_DetectionResult::setDetectionResultColumn( |
- int32_t barcodeColumn, |
- CBC_DetectionResultColumn* detectionResultColumn) { |
- m_detectionResultColumns[barcodeColumn] = detectionResultColumn; |
-} |
-CBC_DetectionResultColumn* CBC_DetectionResult::getDetectionResultColumn( |
- int32_t barcodeColumn) { |
- return (CBC_DetectionResultColumn*)m_detectionResultColumns[barcodeColumn]; |
-} |
-CFX_ByteString CBC_DetectionResult::toString() { |
- CBC_DetectionResultColumn* rowIndicatorColumn = |
- (CBC_DetectionResultColumn*)m_detectionResultColumns[0]; |
- if (rowIndicatorColumn == NULL) { |
- rowIndicatorColumn = (CBC_DetectionResultColumn*) |
- m_detectionResultColumns[m_barcodeColumnCount + 1]; |
- } |
- CFX_ByteString result; |
- for (int32_t codewordsRow = 0; |
- codewordsRow < rowIndicatorColumn->getCodewords()->GetSize(); |
- codewordsRow++) { |
- result += (FX_CHAR)codewordsRow; |
- for (int32_t barcodeColumn = 0; barcodeColumn < m_barcodeColumnCount + 2; |
- barcodeColumn++) { |
- if (m_detectionResultColumns[barcodeColumn] == NULL) { |
- result += " | "; |
- continue; |
- } |
- CBC_Codeword* codeword = |
- (CBC_Codeword*)((CBC_DetectionResultColumn*) |
- m_detectionResultColumns[barcodeColumn]) |
- ->getCodewords() |
- ->GetAt(codewordsRow); |
- if (codeword == NULL) { |
- result += " | "; |
- continue; |
- } |
- result += codeword->getRowNumber(); |
- result += codeword->getValue(); |
- } |
- } |
- return result; |
-} |
-void CBC_DetectionResult::adjustIndicatorColumnRowNumbers( |
- CBC_DetectionResultColumn* detectionResultColumn) { |
- if (detectionResultColumn != NULL) { |
- ((CBC_DetectionResultRowIndicatorColumn*)detectionResultColumn) |
- ->adjustCompleteIndicatorColumnRowNumbers(*m_barcodeMetadata); |
- } |
-} |
-int32_t CBC_DetectionResult::adjustRowNumbers() { |
- int32_t unadjustedCount = adjustRowNumbersByRow(); |
- if (unadjustedCount == 0) { |
- return 0; |
- } |
- for (int32_t barcodeColumn = 1; barcodeColumn < m_barcodeColumnCount + 1; |
- barcodeColumn++) { |
- CFX_PtrArray* codewords = |
- ((CBC_DetectionResultColumn*)m_detectionResultColumns[barcodeColumn]) |
- ->getCodewords(); |
- for (int32_t codewordsRow = 0; codewordsRow < codewords->GetSize(); |
- codewordsRow++) { |
- if (codewords->GetAt(codewordsRow) == NULL) { |
- continue; |
- } |
- if (!((CBC_Codeword*)codewords->GetAt(codewordsRow)) |
- ->hasValidRowNumber()) { |
- adjustRowNumbers(barcodeColumn, codewordsRow, codewords); |
- } |
- } |
- } |
- return unadjustedCount; |
-} |
-int32_t CBC_DetectionResult::adjustRowNumbersByRow() { |
- adjustRowNumbersFromBothRI(); |
- int32_t unadjustedCount = adjustRowNumbersFromLRI(); |
- return unadjustedCount + adjustRowNumbersFromRRI(); |
-} |
-int32_t CBC_DetectionResult::adjustRowNumbersFromBothRI() { |
- if (m_detectionResultColumns[0] == NULL || |
- m_detectionResultColumns[m_barcodeColumnCount + 1] == NULL) { |
- return 0; |
- } |
- CFX_PtrArray* LRIcodewords = |
- ((CBC_DetectionResultColumn*)m_detectionResultColumns[0])->getCodewords(); |
- CFX_PtrArray* RRIcodewords = |
- ((CBC_DetectionResultColumn*) |
- m_detectionResultColumns[m_barcodeColumnCount + 1]) |
- ->getCodewords(); |
- for (int32_t codewordsRow = 0; codewordsRow < LRIcodewords->GetSize(); |
- codewordsRow++) { |
- if (LRIcodewords->GetAt(codewordsRow) != NULL && |
- RRIcodewords->GetAt(codewordsRow) != NULL && |
- ((CBC_Codeword*)LRIcodewords->GetAt(codewordsRow))->getRowNumber() == |
- ((CBC_Codeword*)RRIcodewords->GetAt(codewordsRow)) |
- ->getRowNumber()) { |
- for (int32_t barcodeColumn = 1; barcodeColumn <= m_barcodeColumnCount; |
- barcodeColumn++) { |
- CBC_Codeword* codeword = |
- (CBC_Codeword*)((CBC_DetectionResultColumn*) |
- m_detectionResultColumns[barcodeColumn]) |
- ->getCodewords() |
- ->GetAt(codewordsRow); |
- if (codeword == NULL) { |
- continue; |
- } |
- codeword->setRowNumber( |
- ((CBC_Codeword*)LRIcodewords->GetAt(codewordsRow))->getRowNumber()); |
- if (!codeword->hasValidRowNumber()) { |
- ((CBC_DetectionResultColumn*)m_detectionResultColumns[barcodeColumn]) |
- ->getCodewords() |
- ->SetAt(codewordsRow, NULL); |
- } |
- } |
- } |
- } |
- return 0; |
-} |
-int32_t CBC_DetectionResult::adjustRowNumbersFromRRI() { |
- if (m_detectionResultColumns[m_barcodeColumnCount + 1] == NULL) { |
- return 0; |
- } |
- int32_t unadjustedCount = 0; |
- CFX_PtrArray* codewords = |
- ((CBC_DetectionResultColumn*)m_detectionResultColumns.GetAt( |
- m_barcodeColumnCount + 1)) |
- ->getCodewords(); |
- for (int32_t codewordsRow = 0; codewordsRow < codewords->GetSize(); |
- codewordsRow++) { |
- if (codewords->GetAt(codewordsRow) == NULL) { |
- continue; |
- } |
- int32_t rowIndicatorRowNumber = |
- ((CBC_Codeword*)codewords->GetAt(codewordsRow))->getRowNumber(); |
- int32_t invalidRowCounts = 0; |
- for (int32_t barcodeColumn = m_barcodeColumnCount + 1; |
- barcodeColumn > 0 && invalidRowCounts < ADJUST_ROW_NUMBER_SKIP; |
- barcodeColumn--) { |
- CBC_Codeword* codeword = |
- (CBC_Codeword*)((CBC_DetectionResultColumn*) |
- m_detectionResultColumns.GetAt(barcodeColumn)) |
- ->getCodewords() |
- ->GetAt(codewordsRow); |
- if (codeword != NULL) { |
- invalidRowCounts = adjustRowNumberIfValid(rowIndicatorRowNumber, |
- invalidRowCounts, codeword); |
- if (!codeword->hasValidRowNumber()) { |
- unadjustedCount++; |
- } |
- } |
- } |
- } |
- return unadjustedCount; |
-} |
-int32_t CBC_DetectionResult::adjustRowNumbersFromLRI() { |
- if (m_detectionResultColumns[0] == NULL) { |
- return 0; |
- } |
- int32_t unadjustedCount = 0; |
- CFX_PtrArray* codewords = |
- ((CBC_DetectionResultColumn*)m_detectionResultColumns.GetAt(0)) |
- ->getCodewords(); |
- for (int32_t codewordsRow = 0; codewordsRow < codewords->GetSize(); |
- codewordsRow++) { |
- if (codewords->GetAt(codewordsRow) == NULL) { |
- continue; |
- } |
- int32_t rowIndicatorRowNumber = |
- ((CBC_Codeword*)codewords->GetAt(codewordsRow))->getRowNumber(); |
- int32_t invalidRowCounts = 0; |
- for (int32_t barcodeColumn = 1; barcodeColumn < m_barcodeColumnCount + 1 && |
- invalidRowCounts < ADJUST_ROW_NUMBER_SKIP; |
- barcodeColumn++) { |
- CBC_Codeword* codeword = |
- (CBC_Codeword*)((CBC_DetectionResultColumn*) |
- m_detectionResultColumns[barcodeColumn]) |
- ->getCodewords() |
- ->GetAt(codewordsRow); |
- if (codeword != NULL) { |
- invalidRowCounts = adjustRowNumberIfValid(rowIndicatorRowNumber, |
- invalidRowCounts, codeword); |
- if (!codeword->hasValidRowNumber()) { |
- unadjustedCount++; |
- } |
- } |
- } |
- } |
- return unadjustedCount; |
-} |
-int32_t CBC_DetectionResult::adjustRowNumberIfValid( |
- int32_t rowIndicatorRowNumber, |
- int32_t invalidRowCounts, |
- CBC_Codeword* codeword) { |
- if (codeword == NULL) { |
- return invalidRowCounts; |
- } |
- if (!codeword->hasValidRowNumber()) { |
- if (codeword->isValidRowNumber(rowIndicatorRowNumber)) { |
- codeword->setRowNumber(rowIndicatorRowNumber); |
- invalidRowCounts = 0; |
- } else { |
- ++invalidRowCounts; |
- } |
- } |
- return invalidRowCounts; |
-} |
-void CBC_DetectionResult::adjustRowNumbers(int32_t barcodeColumn, |
- int32_t codewordsRow, |
- CFX_PtrArray* codewords) { |
- CBC_Codeword* codeword = (CBC_Codeword*)codewords->GetAt(codewordsRow); |
- CFX_PtrArray* previousColumnCodewords = |
- ((CBC_DetectionResultColumn*)m_detectionResultColumns.GetAt( |
- barcodeColumn - 1)) |
- ->getCodewords(); |
- CFX_PtrArray* nextColumnCodewords = previousColumnCodewords; |
- if (m_detectionResultColumns[barcodeColumn + 1] != NULL) { |
- nextColumnCodewords = ((CBC_DetectionResultColumn*) |
- m_detectionResultColumns[barcodeColumn + 1]) |
- ->getCodewords(); |
- } |
- CFX_PtrArray otherCodewords; |
- otherCodewords.SetSize(14); |
- otherCodewords[2] = previousColumnCodewords->GetAt(codewordsRow); |
- otherCodewords[3] = nextColumnCodewords->GetAt(codewordsRow); |
- if (codewordsRow > 0) { |
- otherCodewords[0] = codewords->GetAt(codewordsRow - 1); |
- otherCodewords[4] = previousColumnCodewords->GetAt(codewordsRow - 1); |
- otherCodewords[5] = nextColumnCodewords->GetAt(codewordsRow - 1); |
- } |
- if (codewordsRow > 1) { |
- otherCodewords[8] = codewords->GetAt(codewordsRow - 2); |
- otherCodewords[10] = previousColumnCodewords->GetAt(codewordsRow - 2); |
- otherCodewords[11] = nextColumnCodewords->GetAt(codewordsRow - 2); |
- } |
- if (codewordsRow < codewords->GetSize() - 1) { |
- otherCodewords[1] = codewords->GetAt(codewordsRow + 1); |
- otherCodewords[6] = previousColumnCodewords->GetAt(codewordsRow + 1); |
- otherCodewords[7] = nextColumnCodewords->GetAt(codewordsRow + 1); |
- } |
- if (codewordsRow < codewords->GetSize() - 2) { |
- otherCodewords[9] = codewords->GetAt(codewordsRow + 2); |
- otherCodewords[12] = previousColumnCodewords->GetAt(codewordsRow + 2); |
- otherCodewords[13] = nextColumnCodewords->GetAt(codewordsRow + 2); |
- } |
- for (int32_t i = 0; i < otherCodewords.GetSize(); i++) { |
- CBC_Codeword* otherCodeword = (CBC_Codeword*)otherCodewords.GetAt(i); |
- if (adjustRowNumber(codeword, otherCodeword)) { |
- return; |
- } |
- } |
-} |
-FX_BOOL CBC_DetectionResult::adjustRowNumber(CBC_Codeword* codeword, |
- CBC_Codeword* otherCodeword) { |
- if (otherCodeword == NULL) { |
- return FALSE; |
- } |
- if (otherCodeword->hasValidRowNumber() && |
- otherCodeword->getBucket() == codeword->getBucket()) { |
- codeword->setRowNumber(otherCodeword->getRowNumber()); |
- return TRUE; |
- } |
- return FALSE; |
-} |
-int32_t CBC_DetectionResult::getBarcodeColumnCount() { |
- return m_barcodeColumnCount; |
-} |
-int32_t CBC_DetectionResult::getBarcodeRowCount() { |
- return m_barcodeMetadata->getRowCount(); |
-} |
-int32_t CBC_DetectionResult::getBarcodeECLevel() { |
- return m_barcodeMetadata->getErrorCorrectionLevel(); |
-} |
+// Copyright 2014 PDFium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
+// Original code is licensed as follows: |
+/* |
+ * Copyright 2013 ZXing authors |
+ * |
+ * 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 "xfa/src/fxbarcode/barcode.h" |
+#include "BC_PDF417Codeword.h" |
+#include "BC_PDF417BarcodeMetadata.h" |
+#include "BC_PDF417BoundingBox.h" |
+#include "BC_PDF417DetectionResultColumn.h" |
+#include "BC_PDF417Common.h" |
+#include "BC_PDF417DetectionResultRowIndicatorColumn.h" |
+#include "BC_PDF417DetectionResult.h" |
+int32_t CBC_DetectionResult::ADJUST_ROW_NUMBER_SKIP = 2; |
+CBC_DetectionResult::CBC_DetectionResult(CBC_BarcodeMetadata* barcodeMetadata, |
+ CBC_BoundingBox* boundingBox) { |
+ m_barcodeMetadata = barcodeMetadata; |
+ m_barcodeColumnCount = barcodeMetadata->getColumnCount(); |
+ m_boundingBox = boundingBox; |
+ m_detectionResultColumns.SetSize(m_barcodeColumnCount + 2); |
+ for (int32_t i = 0; i < m_barcodeColumnCount + 2; i++) { |
+ m_detectionResultColumns[i] = NULL; |
+ } |
+} |
+CBC_DetectionResult::~CBC_DetectionResult() { |
+ delete m_boundingBox; |
+ delete m_barcodeMetadata; |
+ m_detectionResultColumns.RemoveAll(); |
+} |
+CFX_PtrArray& CBC_DetectionResult::getDetectionResultColumns() { |
+ adjustIndicatorColumnRowNumbers( |
+ (CBC_DetectionResultColumn*)m_detectionResultColumns.GetAt(0)); |
+ adjustIndicatorColumnRowNumbers( |
+ (CBC_DetectionResultColumn*)m_detectionResultColumns.GetAt( |
+ m_barcodeColumnCount + 1)); |
+ int32_t unadjustedCodewordCount = CBC_PDF417Common::MAX_CODEWORDS_IN_BARCODE; |
+ int32_t previousUnadjustedCount; |
+ do { |
+ previousUnadjustedCount = unadjustedCodewordCount; |
+ unadjustedCodewordCount = adjustRowNumbers(); |
+ } while (unadjustedCodewordCount > 0 && |
+ unadjustedCodewordCount < previousUnadjustedCount); |
+ return m_detectionResultColumns; |
+} |
+void CBC_DetectionResult::setBoundingBox(CBC_BoundingBox* boundingBox) { |
+ m_boundingBox = boundingBox; |
+} |
+CBC_BoundingBox* CBC_DetectionResult::getBoundingBox() { |
+ return m_boundingBox; |
+} |
+void CBC_DetectionResult::setDetectionResultColumn( |
+ int32_t barcodeColumn, |
+ CBC_DetectionResultColumn* detectionResultColumn) { |
+ m_detectionResultColumns[barcodeColumn] = detectionResultColumn; |
+} |
+CBC_DetectionResultColumn* CBC_DetectionResult::getDetectionResultColumn( |
+ int32_t barcodeColumn) { |
+ return (CBC_DetectionResultColumn*)m_detectionResultColumns[barcodeColumn]; |
+} |
+CFX_ByteString CBC_DetectionResult::toString() { |
+ CBC_DetectionResultColumn* rowIndicatorColumn = |
+ (CBC_DetectionResultColumn*)m_detectionResultColumns[0]; |
+ if (rowIndicatorColumn == NULL) { |
+ rowIndicatorColumn = (CBC_DetectionResultColumn*) |
+ m_detectionResultColumns[m_barcodeColumnCount + 1]; |
+ } |
+ CFX_ByteString result; |
+ for (int32_t codewordsRow = 0; |
+ codewordsRow < rowIndicatorColumn->getCodewords()->GetSize(); |
+ codewordsRow++) { |
+ result += (FX_CHAR)codewordsRow; |
+ for (int32_t barcodeColumn = 0; barcodeColumn < m_barcodeColumnCount + 2; |
+ barcodeColumn++) { |
+ if (m_detectionResultColumns[barcodeColumn] == NULL) { |
+ result += " | "; |
+ continue; |
+ } |
+ CBC_Codeword* codeword = |
+ (CBC_Codeword*)((CBC_DetectionResultColumn*) |
+ m_detectionResultColumns[barcodeColumn]) |
+ ->getCodewords() |
+ ->GetAt(codewordsRow); |
+ if (codeword == NULL) { |
+ result += " | "; |
+ continue; |
+ } |
+ result += codeword->getRowNumber(); |
+ result += codeword->getValue(); |
+ } |
+ } |
+ return result; |
+} |
+void CBC_DetectionResult::adjustIndicatorColumnRowNumbers( |
+ CBC_DetectionResultColumn* detectionResultColumn) { |
+ if (detectionResultColumn != NULL) { |
+ ((CBC_DetectionResultRowIndicatorColumn*)detectionResultColumn) |
+ ->adjustCompleteIndicatorColumnRowNumbers(*m_barcodeMetadata); |
+ } |
+} |
+int32_t CBC_DetectionResult::adjustRowNumbers() { |
+ int32_t unadjustedCount = adjustRowNumbersByRow(); |
+ if (unadjustedCount == 0) { |
+ return 0; |
+ } |
+ for (int32_t barcodeColumn = 1; barcodeColumn < m_barcodeColumnCount + 1; |
+ barcodeColumn++) { |
+ CFX_PtrArray* codewords = |
+ ((CBC_DetectionResultColumn*)m_detectionResultColumns[barcodeColumn]) |
+ ->getCodewords(); |
+ for (int32_t codewordsRow = 0; codewordsRow < codewords->GetSize(); |
+ codewordsRow++) { |
+ if (codewords->GetAt(codewordsRow) == NULL) { |
+ continue; |
+ } |
+ if (!((CBC_Codeword*)codewords->GetAt(codewordsRow)) |
+ ->hasValidRowNumber()) { |
+ adjustRowNumbers(barcodeColumn, codewordsRow, codewords); |
+ } |
+ } |
+ } |
+ return unadjustedCount; |
+} |
+int32_t CBC_DetectionResult::adjustRowNumbersByRow() { |
+ adjustRowNumbersFromBothRI(); |
+ int32_t unadjustedCount = adjustRowNumbersFromLRI(); |
+ return unadjustedCount + adjustRowNumbersFromRRI(); |
+} |
+int32_t CBC_DetectionResult::adjustRowNumbersFromBothRI() { |
+ if (m_detectionResultColumns[0] == NULL || |
+ m_detectionResultColumns[m_barcodeColumnCount + 1] == NULL) { |
+ return 0; |
+ } |
+ CFX_PtrArray* LRIcodewords = |
+ ((CBC_DetectionResultColumn*)m_detectionResultColumns[0])->getCodewords(); |
+ CFX_PtrArray* RRIcodewords = |
+ ((CBC_DetectionResultColumn*) |
+ m_detectionResultColumns[m_barcodeColumnCount + 1]) |
+ ->getCodewords(); |
+ for (int32_t codewordsRow = 0; codewordsRow < LRIcodewords->GetSize(); |
+ codewordsRow++) { |
+ if (LRIcodewords->GetAt(codewordsRow) != NULL && |
+ RRIcodewords->GetAt(codewordsRow) != NULL && |
+ ((CBC_Codeword*)LRIcodewords->GetAt(codewordsRow))->getRowNumber() == |
+ ((CBC_Codeword*)RRIcodewords->GetAt(codewordsRow)) |
+ ->getRowNumber()) { |
+ for (int32_t barcodeColumn = 1; barcodeColumn <= m_barcodeColumnCount; |
+ barcodeColumn++) { |
+ CBC_Codeword* codeword = |
+ (CBC_Codeword*)((CBC_DetectionResultColumn*) |
+ m_detectionResultColumns[barcodeColumn]) |
+ ->getCodewords() |
+ ->GetAt(codewordsRow); |
+ if (codeword == NULL) { |
+ continue; |
+ } |
+ codeword->setRowNumber( |
+ ((CBC_Codeword*)LRIcodewords->GetAt(codewordsRow))->getRowNumber()); |
+ if (!codeword->hasValidRowNumber()) { |
+ ((CBC_DetectionResultColumn*)m_detectionResultColumns[barcodeColumn]) |
+ ->getCodewords() |
+ ->SetAt(codewordsRow, NULL); |
+ } |
+ } |
+ } |
+ } |
+ return 0; |
+} |
+int32_t CBC_DetectionResult::adjustRowNumbersFromRRI() { |
+ if (m_detectionResultColumns[m_barcodeColumnCount + 1] == NULL) { |
+ return 0; |
+ } |
+ int32_t unadjustedCount = 0; |
+ CFX_PtrArray* codewords = |
+ ((CBC_DetectionResultColumn*)m_detectionResultColumns.GetAt( |
+ m_barcodeColumnCount + 1)) |
+ ->getCodewords(); |
+ for (int32_t codewordsRow = 0; codewordsRow < codewords->GetSize(); |
+ codewordsRow++) { |
+ if (codewords->GetAt(codewordsRow) == NULL) { |
+ continue; |
+ } |
+ int32_t rowIndicatorRowNumber = |
+ ((CBC_Codeword*)codewords->GetAt(codewordsRow))->getRowNumber(); |
+ int32_t invalidRowCounts = 0; |
+ for (int32_t barcodeColumn = m_barcodeColumnCount + 1; |
+ barcodeColumn > 0 && invalidRowCounts < ADJUST_ROW_NUMBER_SKIP; |
+ barcodeColumn--) { |
+ CBC_Codeword* codeword = |
+ (CBC_Codeword*)((CBC_DetectionResultColumn*) |
+ m_detectionResultColumns.GetAt(barcodeColumn)) |
+ ->getCodewords() |
+ ->GetAt(codewordsRow); |
+ if (codeword != NULL) { |
+ invalidRowCounts = adjustRowNumberIfValid(rowIndicatorRowNumber, |
+ invalidRowCounts, codeword); |
+ if (!codeword->hasValidRowNumber()) { |
+ unadjustedCount++; |
+ } |
+ } |
+ } |
+ } |
+ return unadjustedCount; |
+} |
+int32_t CBC_DetectionResult::adjustRowNumbersFromLRI() { |
+ if (m_detectionResultColumns[0] == NULL) { |
+ return 0; |
+ } |
+ int32_t unadjustedCount = 0; |
+ CFX_PtrArray* codewords = |
+ ((CBC_DetectionResultColumn*)m_detectionResultColumns.GetAt(0)) |
+ ->getCodewords(); |
+ for (int32_t codewordsRow = 0; codewordsRow < codewords->GetSize(); |
+ codewordsRow++) { |
+ if (codewords->GetAt(codewordsRow) == NULL) { |
+ continue; |
+ } |
+ int32_t rowIndicatorRowNumber = |
+ ((CBC_Codeword*)codewords->GetAt(codewordsRow))->getRowNumber(); |
+ int32_t invalidRowCounts = 0; |
+ for (int32_t barcodeColumn = 1; barcodeColumn < m_barcodeColumnCount + 1 && |
+ invalidRowCounts < ADJUST_ROW_NUMBER_SKIP; |
+ barcodeColumn++) { |
+ CBC_Codeword* codeword = |
+ (CBC_Codeword*)((CBC_DetectionResultColumn*) |
+ m_detectionResultColumns[barcodeColumn]) |
+ ->getCodewords() |
+ ->GetAt(codewordsRow); |
+ if (codeword != NULL) { |
+ invalidRowCounts = adjustRowNumberIfValid(rowIndicatorRowNumber, |
+ invalidRowCounts, codeword); |
+ if (!codeword->hasValidRowNumber()) { |
+ unadjustedCount++; |
+ } |
+ } |
+ } |
+ } |
+ return unadjustedCount; |
+} |
+int32_t CBC_DetectionResult::adjustRowNumberIfValid( |
+ int32_t rowIndicatorRowNumber, |
+ int32_t invalidRowCounts, |
+ CBC_Codeword* codeword) { |
+ if (codeword == NULL) { |
+ return invalidRowCounts; |
+ } |
+ if (!codeword->hasValidRowNumber()) { |
+ if (codeword->isValidRowNumber(rowIndicatorRowNumber)) { |
+ codeword->setRowNumber(rowIndicatorRowNumber); |
+ invalidRowCounts = 0; |
+ } else { |
+ ++invalidRowCounts; |
+ } |
+ } |
+ return invalidRowCounts; |
+} |
+void CBC_DetectionResult::adjustRowNumbers(int32_t barcodeColumn, |
+ int32_t codewordsRow, |
+ CFX_PtrArray* codewords) { |
+ CBC_Codeword* codeword = (CBC_Codeword*)codewords->GetAt(codewordsRow); |
+ CFX_PtrArray* previousColumnCodewords = |
+ ((CBC_DetectionResultColumn*)m_detectionResultColumns.GetAt( |
+ barcodeColumn - 1)) |
+ ->getCodewords(); |
+ CFX_PtrArray* nextColumnCodewords = previousColumnCodewords; |
+ if (m_detectionResultColumns[barcodeColumn + 1] != NULL) { |
+ nextColumnCodewords = ((CBC_DetectionResultColumn*) |
+ m_detectionResultColumns[barcodeColumn + 1]) |
+ ->getCodewords(); |
+ } |
+ CFX_PtrArray otherCodewords; |
+ otherCodewords.SetSize(14); |
+ otherCodewords[2] = previousColumnCodewords->GetAt(codewordsRow); |
+ otherCodewords[3] = nextColumnCodewords->GetAt(codewordsRow); |
+ if (codewordsRow > 0) { |
+ otherCodewords[0] = codewords->GetAt(codewordsRow - 1); |
+ otherCodewords[4] = previousColumnCodewords->GetAt(codewordsRow - 1); |
+ otherCodewords[5] = nextColumnCodewords->GetAt(codewordsRow - 1); |
+ } |
+ if (codewordsRow > 1) { |
+ otherCodewords[8] = codewords->GetAt(codewordsRow - 2); |
+ otherCodewords[10] = previousColumnCodewords->GetAt(codewordsRow - 2); |
+ otherCodewords[11] = nextColumnCodewords->GetAt(codewordsRow - 2); |
+ } |
+ if (codewordsRow < codewords->GetSize() - 1) { |
+ otherCodewords[1] = codewords->GetAt(codewordsRow + 1); |
+ otherCodewords[6] = previousColumnCodewords->GetAt(codewordsRow + 1); |
+ otherCodewords[7] = nextColumnCodewords->GetAt(codewordsRow + 1); |
+ } |
+ if (codewordsRow < codewords->GetSize() - 2) { |
+ otherCodewords[9] = codewords->GetAt(codewordsRow + 2); |
+ otherCodewords[12] = previousColumnCodewords->GetAt(codewordsRow + 2); |
+ otherCodewords[13] = nextColumnCodewords->GetAt(codewordsRow + 2); |
+ } |
+ for (int32_t i = 0; i < otherCodewords.GetSize(); i++) { |
+ CBC_Codeword* otherCodeword = (CBC_Codeword*)otherCodewords.GetAt(i); |
+ if (adjustRowNumber(codeword, otherCodeword)) { |
+ return; |
+ } |
+ } |
+} |
+FX_BOOL CBC_DetectionResult::adjustRowNumber(CBC_Codeword* codeword, |
+ CBC_Codeword* otherCodeword) { |
+ if (otherCodeword == NULL) { |
+ return FALSE; |
+ } |
+ if (otherCodeword->hasValidRowNumber() && |
+ otherCodeword->getBucket() == codeword->getBucket()) { |
+ codeword->setRowNumber(otherCodeword->getRowNumber()); |
+ return TRUE; |
+ } |
+ return FALSE; |
+} |
+int32_t CBC_DetectionResult::getBarcodeColumnCount() { |
+ return m_barcodeColumnCount; |
+} |
+int32_t CBC_DetectionResult::getBarcodeRowCount() { |
+ return m_barcodeMetadata->getRowCount(); |
+} |
+int32_t CBC_DetectionResult::getBarcodeECLevel() { |
+ return m_barcodeMetadata->getErrorCorrectionLevel(); |
+} |