Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(160)

Side by Side Diff: xfa/fxbarcode/pdf417/BC_PDF417ScanningDecoder.cpp

Issue 2048983002: Get rid of NULLs in xfa/fxbarcode/ (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: nits Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/fxbarcode/pdf417/BC_PDF417Reader.cpp ('k') | xfa/fxbarcode/pdf417/BC_PDF417Writer.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 // Original code is licensed as follows: 6 // Original code is licensed as follows:
7 /* 7 /*
8 * Copyright 2013 ZXing authors 8 * Copyright 2013 ZXing authors
9 * 9 *
10 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * Licensed under the Apache License, Version 2.0 (the "License");
(...skipping 28 matching lines...) Expand all
39 #include "xfa/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.h" 39 #include "xfa/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.h"
40 #include "xfa/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.h" 40 #include "xfa/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.h"
41 #include "xfa/fxbarcode/pdf417/BC_PDF417ECModulusGF.h" 41 #include "xfa/fxbarcode/pdf417/BC_PDF417ECModulusGF.h"
42 #include "xfa/fxbarcode/pdf417/BC_PDF417ECModulusPoly.h" 42 #include "xfa/fxbarcode/pdf417/BC_PDF417ECModulusPoly.h"
43 #include "xfa/fxbarcode/pdf417/BC_PDF417ScanningDecoder.h" 43 #include "xfa/fxbarcode/pdf417/BC_PDF417ScanningDecoder.h"
44 #include "xfa/fxbarcode/utils.h" 44 #include "xfa/fxbarcode/utils.h"
45 45
46 int32_t CBC_PDF417ScanningDecoder::CODEWORD_SKEW_SIZE = 2; 46 int32_t CBC_PDF417ScanningDecoder::CODEWORD_SKEW_SIZE = 2;
47 int32_t CBC_PDF417ScanningDecoder::MAX_ERRORS = 3; 47 int32_t CBC_PDF417ScanningDecoder::MAX_ERRORS = 3;
48 int32_t CBC_PDF417ScanningDecoder::MAX_EC_CODEWORDS = 512; 48 int32_t CBC_PDF417ScanningDecoder::MAX_EC_CODEWORDS = 512;
49 CBC_PDF417ECErrorCorrection* CBC_PDF417ScanningDecoder::errorCorrection = NULL; 49 CBC_PDF417ECErrorCorrection* CBC_PDF417ScanningDecoder::errorCorrection =
50 nullptr;
50 51
51 CBC_PDF417ScanningDecoder::CBC_PDF417ScanningDecoder() {} 52 CBC_PDF417ScanningDecoder::CBC_PDF417ScanningDecoder() {}
52 CBC_PDF417ScanningDecoder::~CBC_PDF417ScanningDecoder() {} 53 CBC_PDF417ScanningDecoder::~CBC_PDF417ScanningDecoder() {}
53 void CBC_PDF417ScanningDecoder::Initialize() { 54 void CBC_PDF417ScanningDecoder::Initialize() {
54 errorCorrection = new CBC_PDF417ECErrorCorrection; 55 errorCorrection = new CBC_PDF417ECErrorCorrection;
55 } 56 }
56 void CBC_PDF417ScanningDecoder::Finalize() { 57 void CBC_PDF417ScanningDecoder::Finalize() {
57 delete errorCorrection; 58 delete errorCorrection;
58 } 59 }
59 CBC_CommonDecoderResult* CBC_PDF417ScanningDecoder::decode( 60 CBC_CommonDecoderResult* CBC_PDF417ScanningDecoder::decode(
60 CBC_CommonBitMatrix* image, 61 CBC_CommonBitMatrix* image,
61 CBC_ResultPoint* imageTopLeft, 62 CBC_ResultPoint* imageTopLeft,
62 CBC_ResultPoint* imageBottomLeft, 63 CBC_ResultPoint* imageBottomLeft,
63 CBC_ResultPoint* imageTopRight, 64 CBC_ResultPoint* imageTopRight,
64 CBC_ResultPoint* imageBottomRight, 65 CBC_ResultPoint* imageBottomRight,
65 int32_t minCodewordWidth, 66 int32_t minCodewordWidth,
66 int32_t maxCodewordWidth, 67 int32_t maxCodewordWidth,
67 int32_t& e) { 68 int32_t& e) {
68 CBC_BoundingBox* boundingBox = new CBC_BoundingBox( 69 CBC_BoundingBox* boundingBox = new CBC_BoundingBox(
69 image, imageTopLeft, imageBottomLeft, imageTopRight, imageBottomRight, e); 70 image, imageTopLeft, imageBottomLeft, imageTopRight, imageBottomRight, e);
70 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); 71 BC_EXCEPTION_CHECK_ReturnValue(e, nullptr);
71 CBC_DetectionResultRowIndicatorColumn* leftRowIndicatorColumn = NULL; 72 CBC_DetectionResultRowIndicatorColumn* leftRowIndicatorColumn = nullptr;
72 CBC_DetectionResultRowIndicatorColumn* rightRowIndicatorColumn = NULL; 73 CBC_DetectionResultRowIndicatorColumn* rightRowIndicatorColumn = nullptr;
73 CBC_DetectionResult* detectionResult = NULL; 74 CBC_DetectionResult* detectionResult = nullptr;
74 for (int32_t i = 0; i < 2; i++) { 75 for (int32_t i = 0; i < 2; i++) {
75 if (imageTopLeft) { 76 if (imageTopLeft) {
76 leftRowIndicatorColumn = 77 leftRowIndicatorColumn =
77 getRowIndicatorColumn(image, boundingBox, *imageTopLeft, TRUE, 78 getRowIndicatorColumn(image, boundingBox, *imageTopLeft, TRUE,
78 minCodewordWidth, maxCodewordWidth); 79 minCodewordWidth, maxCodewordWidth);
79 } 80 }
80 if (imageTopRight) { 81 if (imageTopRight) {
81 rightRowIndicatorColumn = 82 rightRowIndicatorColumn =
82 getRowIndicatorColumn(image, boundingBox, *imageTopRight, FALSE, 83 getRowIndicatorColumn(image, boundingBox, *imageTopRight, FALSE,
83 minCodewordWidth, maxCodewordWidth); 84 minCodewordWidth, maxCodewordWidth);
84 } 85 }
85 detectionResult = merge(leftRowIndicatorColumn, rightRowIndicatorColumn, e); 86 detectionResult = merge(leftRowIndicatorColumn, rightRowIndicatorColumn, e);
86 if (e != BCExceptionNO) { 87 if (e != BCExceptionNO) {
87 e = BCExceptiontNotFoundInstance; 88 e = BCExceptiontNotFoundInstance;
88 delete leftRowIndicatorColumn; 89 delete leftRowIndicatorColumn;
89 delete rightRowIndicatorColumn; 90 delete rightRowIndicatorColumn;
90 delete boundingBox; 91 delete boundingBox;
91 return NULL; 92 return nullptr;
92 } 93 }
93 if (i == 0 && (detectionResult->getBoundingBox()->getMinY() < 94 if (i == 0 && (detectionResult->getBoundingBox()->getMinY() <
94 boundingBox->getMinY() || 95 boundingBox->getMinY() ||
95 detectionResult->getBoundingBox()->getMaxY() > 96 detectionResult->getBoundingBox()->getMaxY() >
96 boundingBox->getMaxY())) { 97 boundingBox->getMaxY())) {
97 delete boundingBox; 98 delete boundingBox;
98 boundingBox = detectionResult->getBoundingBox(); 99 boundingBox = detectionResult->getBoundingBox();
99 } else { 100 } else {
100 detectionResult->setBoundingBox(boundingBox); 101 detectionResult->setBoundingBox(boundingBox);
101 break; 102 break;
102 } 103 }
103 } 104 }
104 int32_t maxBarcodeColumn = detectionResult->getBarcodeColumnCount() + 1; 105 int32_t maxBarcodeColumn = detectionResult->getBarcodeColumnCount() + 1;
105 detectionResult->setDetectionResultColumn(0, leftRowIndicatorColumn); 106 detectionResult->setDetectionResultColumn(0, leftRowIndicatorColumn);
106 detectionResult->setDetectionResultColumn(maxBarcodeColumn, 107 detectionResult->setDetectionResultColumn(maxBarcodeColumn,
107 rightRowIndicatorColumn); 108 rightRowIndicatorColumn);
108 FX_BOOL leftToRight = leftRowIndicatorColumn != NULL; 109 FX_BOOL leftToRight = !!leftRowIndicatorColumn;
109 for (int32_t barcodeColumnCount = 1; barcodeColumnCount <= maxBarcodeColumn; 110 for (int32_t barcodeColumnCount = 1; barcodeColumnCount <= maxBarcodeColumn;
110 barcodeColumnCount++) { 111 barcodeColumnCount++) {
111 int32_t barcodeColumn = leftToRight ? barcodeColumnCount 112 int32_t barcodeColumn = leftToRight ? barcodeColumnCount
112 : maxBarcodeColumn - barcodeColumnCount; 113 : maxBarcodeColumn - barcodeColumnCount;
113 if (detectionResult->getDetectionResultColumn(barcodeColumn)) { 114 if (detectionResult->getDetectionResultColumn(barcodeColumn)) {
114 continue; 115 continue;
115 } 116 }
116 CBC_DetectionResultColumn* detectionResultColumn = NULL; 117 CBC_DetectionResultColumn* detectionResultColumn = nullptr;
117 if (barcodeColumn == 0 || barcodeColumn == maxBarcodeColumn) { 118 if (barcodeColumn == 0 || barcodeColumn == maxBarcodeColumn) {
118 detectionResultColumn = new CBC_DetectionResultRowIndicatorColumn( 119 detectionResultColumn = new CBC_DetectionResultRowIndicatorColumn(
119 boundingBox, barcodeColumn == 0); 120 boundingBox, barcodeColumn == 0);
120 } else { 121 } else {
121 detectionResultColumn = new CBC_DetectionResultColumn(boundingBox); 122 detectionResultColumn = new CBC_DetectionResultColumn(boundingBox);
122 } 123 }
123 detectionResult->setDetectionResultColumn(barcodeColumn, 124 detectionResult->setDetectionResultColumn(barcodeColumn,
124 detectionResultColumn); 125 detectionResultColumn);
125 int32_t startColumn = -1; 126 int32_t startColumn = -1;
126 int32_t previousStartColumn = startColumn; 127 int32_t previousStartColumn = startColumn;
(...skipping 19 matching lines...) Expand all
146 maxCodewordWidth = maxCodewordWidth > codeword->getWidth() 147 maxCodewordWidth = maxCodewordWidth > codeword->getWidth()
147 ? maxCodewordWidth 148 ? maxCodewordWidth
148 : codeword->getWidth(); 149 : codeword->getWidth();
149 } 150 }
150 } 151 }
151 } 152 }
152 CBC_CommonDecoderResult* decoderresult = 153 CBC_CommonDecoderResult* decoderresult =
153 createDecoderResult(detectionResult, e); 154 createDecoderResult(detectionResult, e);
154 if (e != BCExceptionNO) { 155 if (e != BCExceptionNO) {
155 delete detectionResult; 156 delete detectionResult;
156 return NULL; 157 return nullptr;
157 } 158 }
158 return decoderresult; 159 return decoderresult;
159 } 160 }
160 161
161 CFX_ByteString CBC_PDF417ScanningDecoder::toString( 162 CFX_ByteString CBC_PDF417ScanningDecoder::toString(
162 CBC_BarcodeValueArrayArray* barcodeMatrix) { 163 CBC_BarcodeValueArrayArray* barcodeMatrix) {
163 CFX_ByteString result; 164 CFX_ByteString result;
164 for (int32_t row = 0; row < barcodeMatrix->GetSize(); row++) { 165 for (int32_t row = 0; row < barcodeMatrix->GetSize(); row++) {
165 result += row; 166 result += row;
166 for (int32_t l = 0; l < barcodeMatrix->GetAt(row)->GetSize(); l++) { 167 for (int32_t l = 0; l < barcodeMatrix->GetAt(row)->GetSize(); l++) {
167 CBC_BarcodeValue* barcodeValue = barcodeMatrix->GetAt(row)->GetAt(l); 168 CBC_BarcodeValue* barcodeValue = barcodeMatrix->GetAt(row)->GetAt(l);
168 if (barcodeValue->getValue()->GetSize() == 0) { 169 if (barcodeValue->getValue()->GetSize() == 0) {
169 result += ""; 170 result += "";
170 } else { 171 } else {
171 result += barcodeValue->getValue()->GetAt(0); 172 result += barcodeValue->getValue()->GetAt(0);
172 result += 173 result +=
173 barcodeValue->getConfidence(barcodeValue->getValue()->GetAt(0)); 174 barcodeValue->getConfidence(barcodeValue->getValue()->GetAt(0));
174 } 175 }
175 } 176 }
176 } 177 }
177 return result; 178 return result;
178 } 179 }
179 180
180 CBC_DetectionResult* CBC_PDF417ScanningDecoder::merge( 181 CBC_DetectionResult* CBC_PDF417ScanningDecoder::merge(
181 CBC_DetectionResultRowIndicatorColumn* leftRowIndicatorColumn, 182 CBC_DetectionResultRowIndicatorColumn* leftRowIndicatorColumn,
182 CBC_DetectionResultRowIndicatorColumn* rightRowIndicatorColumn, 183 CBC_DetectionResultRowIndicatorColumn* rightRowIndicatorColumn,
183 int32_t& e) { 184 int32_t& e) {
184 if (leftRowIndicatorColumn == NULL && rightRowIndicatorColumn == NULL) { 185 if (!leftRowIndicatorColumn && !rightRowIndicatorColumn) {
185 e = BCExceptionIllegalArgument; 186 e = BCExceptionIllegalArgument;
186 return NULL; 187 return nullptr;
187 } 188 }
188 CBC_BarcodeMetadata* barcodeMetadata = 189 CBC_BarcodeMetadata* barcodeMetadata =
189 getBarcodeMetadata(leftRowIndicatorColumn, rightRowIndicatorColumn); 190 getBarcodeMetadata(leftRowIndicatorColumn, rightRowIndicatorColumn);
190 if (barcodeMetadata == NULL) { 191 if (!barcodeMetadata) {
191 e = BCExceptionCannotMetadata; 192 e = BCExceptionCannotMetadata;
192 return NULL; 193 return nullptr;
193 } 194 }
194 CBC_BoundingBox* leftboundingBox = 195 CBC_BoundingBox* leftboundingBox =
195 adjustBoundingBox(leftRowIndicatorColumn, e); 196 adjustBoundingBox(leftRowIndicatorColumn, e);
196 if (e != BCExceptionNO) { 197 if (e != BCExceptionNO) {
197 delete barcodeMetadata; 198 delete barcodeMetadata;
198 return NULL; 199 return nullptr;
199 } 200 }
200 CBC_BoundingBox* rightboundingBox = 201 CBC_BoundingBox* rightboundingBox =
201 adjustBoundingBox(rightRowIndicatorColumn, e); 202 adjustBoundingBox(rightRowIndicatorColumn, e);
202 if (e != BCExceptionNO) { 203 if (e != BCExceptionNO) {
203 delete barcodeMetadata; 204 delete barcodeMetadata;
204 return NULL; 205 return nullptr;
205 } 206 }
206 CBC_BoundingBox* boundingBox = 207 CBC_BoundingBox* boundingBox =
207 CBC_BoundingBox::merge(leftboundingBox, rightboundingBox, e); 208 CBC_BoundingBox::merge(leftboundingBox, rightboundingBox, e);
208 if (e != BCExceptionNO) { 209 if (e != BCExceptionNO) {
209 delete barcodeMetadata; 210 delete barcodeMetadata;
210 return NULL; 211 return nullptr;
211 } 212 }
212 CBC_DetectionResult* detectionresult = 213 CBC_DetectionResult* detectionresult =
213 new CBC_DetectionResult(barcodeMetadata, boundingBox); 214 new CBC_DetectionResult(barcodeMetadata, boundingBox);
214 return detectionresult; 215 return detectionresult;
215 } 216 }
216 CBC_BoundingBox* CBC_PDF417ScanningDecoder::adjustBoundingBox( 217 CBC_BoundingBox* CBC_PDF417ScanningDecoder::adjustBoundingBox(
217 CBC_DetectionResultRowIndicatorColumn* rowIndicatorColumn, 218 CBC_DetectionResultRowIndicatorColumn* rowIndicatorColumn,
218 int32_t& e) { 219 int32_t& e) {
219 if (rowIndicatorColumn == NULL) { 220 if (!rowIndicatorColumn)
220 return NULL; 221 return nullptr;
221 } 222
222 CFX_Int32Array* rowHeights = rowIndicatorColumn->getRowHeights(e); 223 CFX_Int32Array* rowHeights = rowIndicatorColumn->getRowHeights(e);
223 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); 224 BC_EXCEPTION_CHECK_ReturnValue(e, nullptr);
224 int32_t maxRowHeight = getMax(*rowHeights); 225 int32_t maxRowHeight = getMax(*rowHeights);
225 int32_t missingStartRows = 0; 226 int32_t missingStartRows = 0;
226 for (int32_t i = 0; i < rowHeights->GetSize(); i++) { 227 for (int32_t i = 0; i < rowHeights->GetSize(); i++) {
227 int32_t rowHeight = rowHeights->GetAt(i); 228 int32_t rowHeight = rowHeights->GetAt(i);
228 missingStartRows += maxRowHeight - rowHeight; 229 missingStartRows += maxRowHeight - rowHeight;
229 if (rowHeight > 0) { 230 if (rowHeight > 0) {
230 break; 231 break;
231 } 232 }
232 } 233 }
233 CFX_ArrayTemplate<CBC_Codeword*>* codewords = 234 CFX_ArrayTemplate<CBC_Codeword*>* codewords =
234 rowIndicatorColumn->getCodewords(); 235 rowIndicatorColumn->getCodewords();
235 for (int32_t row = 0; missingStartRows > 0 && codewords->GetAt(row) == NULL; 236 for (int32_t row = 0; missingStartRows > 0 && !codewords->GetAt(row); row++) {
236 row++) {
237 missingStartRows--; 237 missingStartRows--;
238 } 238 }
239 int32_t missingEndRows = 0; 239 int32_t missingEndRows = 0;
240 for (int32_t row1 = rowHeights->GetSize() - 1; row1 >= 0; row1--) { 240 for (int32_t row1 = rowHeights->GetSize() - 1; row1 >= 0; row1--) {
241 missingEndRows += maxRowHeight - rowHeights->GetAt(row1); 241 missingEndRows += maxRowHeight - rowHeights->GetAt(row1);
242 if (rowHeights->GetAt(row1) > 0) { 242 if (rowHeights->GetAt(row1) > 0) {
243 break; 243 break;
244 } 244 }
245 } 245 }
246 for (int32_t row2 = codewords->GetSize() - 1; 246 for (int32_t row2 = codewords->GetSize() - 1;
247 missingEndRows > 0 && codewords->GetAt(row2) == NULL; row2--) { 247 missingEndRows > 0 && !codewords->GetAt(row2); row2--) {
248 missingEndRows--; 248 missingEndRows--;
249 } 249 }
250 CBC_BoundingBox* boundingBox = 250 CBC_BoundingBox* boundingBox =
251 rowIndicatorColumn->getBoundingBox()->addMissingRows( 251 rowIndicatorColumn->getBoundingBox()->addMissingRows(
252 missingStartRows, missingEndRows, rowIndicatorColumn->isLeft(), e); 252 missingStartRows, missingEndRows, rowIndicatorColumn->isLeft(), e);
253 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); 253 BC_EXCEPTION_CHECK_ReturnValue(e, nullptr);
254 return boundingBox; 254 return boundingBox;
255 } 255 }
256 int32_t CBC_PDF417ScanningDecoder::getMax(CFX_Int32Array& values) { 256 int32_t CBC_PDF417ScanningDecoder::getMax(CFX_Int32Array& values) {
257 int32_t maxValue = -1; 257 int32_t maxValue = -1;
258 for (int32_t i = 0; i < values.GetSize(); i++) { 258 for (int32_t i = 0; i < values.GetSize(); i++) {
259 int32_t value = values.GetAt(i); 259 int32_t value = values.GetAt(i);
260 maxValue = maxValue > value ? maxValue : value; 260 maxValue = maxValue > value ? maxValue : value;
261 } 261 }
262 return maxValue; 262 return maxValue;
263 } 263 }
264 CBC_BarcodeMetadata* CBC_PDF417ScanningDecoder::getBarcodeMetadata( 264 CBC_BarcodeMetadata* CBC_PDF417ScanningDecoder::getBarcodeMetadata(
265 CBC_DetectionResultRowIndicatorColumn* leftRowIndicatorColumn, 265 CBC_DetectionResultRowIndicatorColumn* leftRowIndicatorColumn,
266 CBC_DetectionResultRowIndicatorColumn* rightRowIndicatorColumn) { 266 CBC_DetectionResultRowIndicatorColumn* rightRowIndicatorColumn) {
267 CBC_BarcodeMetadata* leftBarcodeMetadata = NULL; 267 CBC_BarcodeMetadata* leftBarcodeMetadata =
268 CBC_BarcodeMetadata* rightBarcodeMetadata = NULL; 268 leftRowIndicatorColumn ? leftRowIndicatorColumn->getBarcodeMetadata()
269 if (leftRowIndicatorColumn == NULL || 269 : nullptr;
270 (leftBarcodeMetadata = leftRowIndicatorColumn->getBarcodeMetadata()) == 270 if (!leftBarcodeMetadata) {
271 NULL) { 271 return rightRowIndicatorColumn
272 return rightRowIndicatorColumn == NULL 272 ? rightRowIndicatorColumn->getBarcodeMetadata()
273 ? NULL 273 : nullptr;
274 : rightRowIndicatorColumn->getBarcodeMetadata();
275 } 274 }
276 if (rightRowIndicatorColumn == NULL || 275
277 (rightBarcodeMetadata = rightRowIndicatorColumn->getBarcodeMetadata()) == 276 CBC_BarcodeMetadata* rightBarcodeMetadata =
278 NULL) { 277 rightRowIndicatorColumn ? rightRowIndicatorColumn->getBarcodeMetadata()
279 return leftRowIndicatorColumn == NULL 278 : nullptr;
280 ? NULL 279 if (!rightBarcodeMetadata) {
281 : leftRowIndicatorColumn->getBarcodeMetadata(); 280 return leftRowIndicatorColumn ? leftRowIndicatorColumn->getBarcodeMetadata()
281 : nullptr;
282 } 282 }
283
283 if (leftBarcodeMetadata->getColumnCount() != 284 if (leftBarcodeMetadata->getColumnCount() !=
284 rightBarcodeMetadata->getColumnCount() && 285 rightBarcodeMetadata->getColumnCount() &&
285 leftBarcodeMetadata->getErrorCorrectionLevel() != 286 leftBarcodeMetadata->getErrorCorrectionLevel() !=
286 rightBarcodeMetadata->getErrorCorrectionLevel() && 287 rightBarcodeMetadata->getErrorCorrectionLevel() &&
287 leftBarcodeMetadata->getRowCount() != 288 leftBarcodeMetadata->getRowCount() !=
288 rightBarcodeMetadata->getRowCount()) { 289 rightBarcodeMetadata->getRowCount()) {
289 delete leftBarcodeMetadata; 290 delete leftBarcodeMetadata;
290 delete rightBarcodeMetadata; 291 delete rightBarcodeMetadata;
291 return NULL; 292 return nullptr;
292 } 293 }
293 delete rightBarcodeMetadata; 294 delete rightBarcodeMetadata;
294 return leftBarcodeMetadata; 295 return leftBarcodeMetadata;
295 } 296 }
296 CBC_DetectionResultRowIndicatorColumn* 297 CBC_DetectionResultRowIndicatorColumn*
297 CBC_PDF417ScanningDecoder::getRowIndicatorColumn(CBC_CommonBitMatrix* image, 298 CBC_PDF417ScanningDecoder::getRowIndicatorColumn(CBC_CommonBitMatrix* image,
298 CBC_BoundingBox* boundingBox, 299 CBC_BoundingBox* boundingBox,
299 CBC_ResultPoint startPoint, 300 CBC_ResultPoint startPoint,
300 FX_BOOL leftToRight, 301 FX_BOOL leftToRight,
301 int32_t minCodewordWidth, 302 int32_t minCodewordWidth,
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 } else { 440 } else {
440 ambiguousIndexCount[i] = 0; 441 ambiguousIndexCount[i] = 0;
441 if (i == ambiguousIndexCount.GetSize() - 1) { 442 if (i == ambiguousIndexCount.GetSize() - 1) {
442 e = BCExceptionChecksumInstance; 443 e = BCExceptionChecksumInstance;
443 return nullptr; 444 return nullptr;
444 } 445 }
445 } 446 }
446 } 447 }
447 } 448 }
448 e = BCExceptionChecksumInstance; 449 e = BCExceptionChecksumInstance;
449 return NULL; 450 return nullptr;
450 } 451 }
451 CBC_BarcodeValueArrayArray* CBC_PDF417ScanningDecoder::createBarcodeMatrix( 452 CBC_BarcodeValueArrayArray* CBC_PDF417ScanningDecoder::createBarcodeMatrix(
452 CBC_DetectionResult* detectionResult) { 453 CBC_DetectionResult* detectionResult) {
453 CBC_BarcodeValueArrayArray* barcodeMatrix = new CBC_BarcodeValueArrayArray; 454 CBC_BarcodeValueArrayArray* barcodeMatrix = new CBC_BarcodeValueArrayArray;
454 barcodeMatrix->SetSize(detectionResult->getBarcodeRowCount()); 455 barcodeMatrix->SetSize(detectionResult->getBarcodeRowCount());
455 for (int32_t row = 0; row < barcodeMatrix->GetSize(); row++) { 456 for (int32_t row = 0; row < barcodeMatrix->GetSize(); row++) {
456 CBC_BarcodeValueArray* temp = new CBC_BarcodeValueArray; 457 CBC_BarcodeValueArray* temp = new CBC_BarcodeValueArray;
457 temp->SetSize(detectionResult->getBarcodeColumnCount() + 2); 458 temp->SetSize(detectionResult->getBarcodeColumnCount() + 2);
458 for (int32_t column = 0; 459 for (int32_t column = 0;
459 column < detectionResult->getBarcodeColumnCount() + 2; column++) { 460 column < detectionResult->getBarcodeColumnCount() + 2; column++) {
460 temp->SetAt(column, new CBC_BarcodeValue()); 461 temp->SetAt(column, new CBC_BarcodeValue());
461 } 462 }
462 barcodeMatrix->SetAt(row, temp); 463 barcodeMatrix->SetAt(row, temp);
463 } 464 }
464 for (int32_t i = 0; 465 for (int32_t i = 0;
465 i < detectionResult->getDetectionResultColumns().GetSize(); i++) { 466 i < detectionResult->getDetectionResultColumns().GetSize(); i++) {
466 CBC_DetectionResultColumn* detectionResultColumn = 467 CBC_DetectionResultColumn* detectionResultColumn =
467 (CBC_DetectionResultColumn*)detectionResult->getDetectionResultColumns() 468 (CBC_DetectionResultColumn*)detectionResult->getDetectionResultColumns()
468 .GetAt(i); 469 .GetAt(i);
469 if (detectionResultColumn == NULL) { 470 if (!detectionResultColumn)
470 continue; 471 continue;
471 } 472
472 CFX_ArrayTemplate<CBC_Codeword*>* temp = 473 CFX_ArrayTemplate<CBC_Codeword*>* temp =
473 detectionResultColumn->getCodewords(); 474 detectionResultColumn->getCodewords();
474 for (int32_t l = 0; l < temp->GetSize(); l++) { 475 for (int32_t l = 0; l < temp->GetSize(); l++) {
475 CBC_Codeword* codeword = temp->GetAt(l); 476 CBC_Codeword* codeword = temp->GetAt(l);
476 if (codeword == NULL || codeword->getRowNumber() == -1) { 477 if (!codeword || codeword->getRowNumber() == -1)
477 continue; 478 continue;
478 } 479
479 barcodeMatrix->GetAt(codeword->getRowNumber()) 480 barcodeMatrix->GetAt(codeword->getRowNumber())
480 ->GetAt(i) 481 ->GetAt(i)
481 ->setValue(codeword->getValue()); 482 ->setValue(codeword->getValue());
482 } 483 }
483 } 484 }
484 return barcodeMatrix; 485 return barcodeMatrix;
485 } 486 }
486 FX_BOOL CBC_PDF417ScanningDecoder::isValidBarcodeColumn( 487 FX_BOOL CBC_PDF417ScanningDecoder::isValidBarcodeColumn(
487 CBC_DetectionResult* detectionResult, 488 CBC_DetectionResult* detectionResult,
488 int32_t barcodeColumn) { 489 int32_t barcodeColumn) {
489 return barcodeColumn >= 0 && 490 return barcodeColumn >= 0 &&
490 barcodeColumn <= detectionResult->getBarcodeColumnCount() + 1; 491 barcodeColumn <= detectionResult->getBarcodeColumnCount() + 1;
491 } 492 }
492 int32_t CBC_PDF417ScanningDecoder::getStartColumn( 493 int32_t CBC_PDF417ScanningDecoder::getStartColumn(
493 CBC_DetectionResult* detectionResult, 494 CBC_DetectionResult* detectionResult,
494 int32_t barcodeColumn, 495 int32_t barcodeColumn,
495 int32_t imageRow, 496 int32_t imageRow,
496 FX_BOOL leftToRight) { 497 FX_BOOL leftToRight) {
497 int32_t offset = leftToRight ? 1 : -1; 498 int32_t offset = leftToRight ? 1 : -1;
498 CBC_Codeword* codeword = NULL; 499 CBC_Codeword* codeword = nullptr;
499 if (isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) { 500 if (isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) {
500 codeword = detectionResult->getDetectionResultColumn(barcodeColumn - offset) 501 codeword = detectionResult->getDetectionResultColumn(barcodeColumn - offset)
501 ->getCodeword(imageRow); 502 ->getCodeword(imageRow);
502 } 503 }
503 if (codeword) { 504 if (codeword) {
504 return leftToRight ? codeword->getEndX() : codeword->getStartX(); 505 return leftToRight ? codeword->getEndX() : codeword->getStartX();
505 } 506 }
506 codeword = detectionResult->getDetectionResultColumn(barcodeColumn) 507 codeword = detectionResult->getDetectionResultColumn(barcodeColumn)
507 ->getCodewordNearby(imageRow); 508 ->getCodewordNearby(imageRow);
508 if (codeword) { 509 if (codeword) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 int32_t maxColumn, 547 int32_t maxColumn,
547 FX_BOOL leftToRight, 548 FX_BOOL leftToRight,
548 int32_t startColumn, 549 int32_t startColumn,
549 int32_t imageRow, 550 int32_t imageRow,
550 int32_t minCodewordWidth, 551 int32_t minCodewordWidth,
551 int32_t maxCodewordWidth) { 552 int32_t maxCodewordWidth) {
552 startColumn = adjustCodewordStartColumn(image, minColumn, maxColumn, 553 startColumn = adjustCodewordStartColumn(image, minColumn, maxColumn,
553 leftToRight, startColumn, imageRow); 554 leftToRight, startColumn, imageRow);
554 CFX_Int32Array* moduleBitCount = getModuleBitCount( 555 CFX_Int32Array* moduleBitCount = getModuleBitCount(
555 image, minColumn, maxColumn, leftToRight, startColumn, imageRow); 556 image, minColumn, maxColumn, leftToRight, startColumn, imageRow);
556 if (moduleBitCount == NULL) { 557 if (!moduleBitCount)
557 return NULL; 558 return nullptr;
558 } 559
559 int32_t endColumn; 560 int32_t endColumn;
560 int32_t codewordBitCount = CBC_PDF417Common::getBitCountSum(*moduleBitCount); 561 int32_t codewordBitCount = CBC_PDF417Common::getBitCountSum(*moduleBitCount);
561 if (leftToRight) { 562 if (leftToRight) {
562 endColumn = startColumn + codewordBitCount; 563 endColumn = startColumn + codewordBitCount;
563 } else { 564 } else {
564 for (int32_t i = 0; i<moduleBitCount->GetSize()>> 1; i++) { 565 for (int32_t i = 0; i<moduleBitCount->GetSize()>> 1; i++) {
565 int32_t tmpCount = moduleBitCount->GetAt(i); 566 int32_t tmpCount = moduleBitCount->GetAt(i);
566 moduleBitCount->SetAt( 567 moduleBitCount->SetAt(
567 i, moduleBitCount->GetAt(moduleBitCount->GetSize() - 1 - i)); 568 i, moduleBitCount->GetAt(moduleBitCount->GetSize() - 1 - i));
568 moduleBitCount->SetAt(moduleBitCount->GetSize() - 1 - i, tmpCount); 569 moduleBitCount->SetAt(moduleBitCount->GetSize() - 1 - i, tmpCount);
569 } 570 }
570 endColumn = startColumn; 571 endColumn = startColumn;
571 startColumn = endColumn - codewordBitCount; 572 startColumn = endColumn - codewordBitCount;
572 } 573 }
573 int32_t decodedValue = 574 int32_t decodedValue =
574 CBC_PDF417CodewordDecoder::getDecodedValue(*moduleBitCount); 575 CBC_PDF417CodewordDecoder::getDecodedValue(*moduleBitCount);
575 int32_t codeword = CBC_PDF417Common::getCodeword(decodedValue); 576 int32_t codeword = CBC_PDF417Common::getCodeword(decodedValue);
576 delete moduleBitCount; 577 delete moduleBitCount;
577 if (codeword == -1) { 578 if (codeword == -1) {
578 return NULL; 579 return nullptr;
579 } 580 }
580 return new CBC_Codeword(startColumn, endColumn, 581 return new CBC_Codeword(startColumn, endColumn,
581 getCodewordBucketNumber(decodedValue), codeword); 582 getCodewordBucketNumber(decodedValue), codeword);
582 } 583 }
583 CFX_Int32Array* CBC_PDF417ScanningDecoder::getModuleBitCount( 584 CFX_Int32Array* CBC_PDF417ScanningDecoder::getModuleBitCount(
584 CBC_CommonBitMatrix* image, 585 CBC_CommonBitMatrix* image,
585 int32_t minColumn, 586 int32_t minColumn,
586 int32_t maxColumn, 587 int32_t maxColumn,
587 FX_BOOL leftToRight, 588 FX_BOOL leftToRight,
588 int32_t startColumn, 589 int32_t startColumn,
(...skipping 16 matching lines...) Expand all
605 previousPixelValue = !previousPixelValue; 606 previousPixelValue = !previousPixelValue;
606 } 607 }
607 } 608 }
608 if (moduleNumber == moduleBitCount->GetSize() || 609 if (moduleNumber == moduleBitCount->GetSize() ||
609 (((leftToRight && imageColumn == maxColumn) || 610 (((leftToRight && imageColumn == maxColumn) ||
610 (!leftToRight && imageColumn == minColumn)) && 611 (!leftToRight && imageColumn == minColumn)) &&
611 moduleNumber == moduleBitCount->GetSize() - 1)) { 612 moduleNumber == moduleBitCount->GetSize() - 1)) {
612 return moduleBitCount; 613 return moduleBitCount;
613 } 614 }
614 delete moduleBitCount; 615 delete moduleBitCount;
615 return NULL; 616 return nullptr;
616 } 617 }
617 int32_t CBC_PDF417ScanningDecoder::getNumberOfECCodeWords( 618 int32_t CBC_PDF417ScanningDecoder::getNumberOfECCodeWords(
618 int32_t barcodeECLevel) { 619 int32_t barcodeECLevel) {
619 return 2 << barcodeECLevel; 620 return 2 << barcodeECLevel;
620 } 621 }
621 int32_t CBC_PDF417ScanningDecoder::adjustCodewordStartColumn( 622 int32_t CBC_PDF417ScanningDecoder::adjustCodewordStartColumn(
622 CBC_CommonBitMatrix* image, 623 CBC_CommonBitMatrix* image,
623 int32_t minColumn, 624 int32_t minColumn,
624 int32_t maxColumn, 625 int32_t maxColumn,
625 FX_BOOL leftToRight, 626 FX_BOOL leftToRight,
(...skipping 22 matching lines...) Expand all
648 return minCodewordWidth - CODEWORD_SKEW_SIZE <= codewordSize && 649 return minCodewordWidth - CODEWORD_SKEW_SIZE <= codewordSize &&
649 codewordSize <= maxCodewordWidth + CODEWORD_SKEW_SIZE; 650 codewordSize <= maxCodewordWidth + CODEWORD_SKEW_SIZE;
650 } 651 }
651 CBC_CommonDecoderResult* CBC_PDF417ScanningDecoder::decodeCodewords( 652 CBC_CommonDecoderResult* CBC_PDF417ScanningDecoder::decodeCodewords(
652 CFX_Int32Array& codewords, 653 CFX_Int32Array& codewords,
653 int32_t ecLevel, 654 int32_t ecLevel,
654 CFX_Int32Array& erasures, 655 CFX_Int32Array& erasures,
655 int32_t& e) { 656 int32_t& e) {
656 if (codewords.GetSize() == 0) { 657 if (codewords.GetSize() == 0) {
657 e = BCExceptionFormatInstance; 658 e = BCExceptionFormatInstance;
658 return NULL; 659 return nullptr;
659 } 660 }
660 int32_t numECCodewords = 1 << (ecLevel + 1); 661 int32_t numECCodewords = 1 << (ecLevel + 1);
661 correctErrors(codewords, erasures, numECCodewords, e); 662 correctErrors(codewords, erasures, numECCodewords, e);
662 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); 663 BC_EXCEPTION_CHECK_ReturnValue(e, nullptr);
663 verifyCodewordCount(codewords, numECCodewords, e); 664 verifyCodewordCount(codewords, numECCodewords, e);
664 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); 665 BC_EXCEPTION_CHECK_ReturnValue(e, nullptr);
665 CFX_ByteString bytestring; 666 CFX_ByteString bytestring;
666 CBC_CommonDecoderResult* decoderResult = CBC_DecodedBitStreamPaser::decode( 667 CBC_CommonDecoderResult* decoderResult = CBC_DecodedBitStreamPaser::decode(
667 codewords, bytestring.FormatInteger(ecLevel), e); 668 codewords, bytestring.FormatInteger(ecLevel), e);
668 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); 669 BC_EXCEPTION_CHECK_ReturnValue(e, nullptr);
669 return decoderResult; 670 return decoderResult;
670 } 671 }
671 int32_t CBC_PDF417ScanningDecoder::correctErrors(CFX_Int32Array& codewords, 672 int32_t CBC_PDF417ScanningDecoder::correctErrors(CFX_Int32Array& codewords,
672 CFX_Int32Array& erasures, 673 CFX_Int32Array& erasures,
673 int32_t numECCodewords, 674 int32_t numECCodewords,
674 int32_t& e) { 675 int32_t& e) {
675 if ((erasures.GetSize() != 0 && 676 if ((erasures.GetSize() != 0 &&
676 erasures.GetSize() > (numECCodewords / 2 + MAX_ERRORS)) || 677 erasures.GetSize() > (numECCodewords / 2 + MAX_ERRORS)) ||
677 numECCodewords < 0 || numECCodewords > MAX_EC_CODEWORDS) { 678 numECCodewords < 0 || numECCodewords > MAX_EC_CODEWORDS) {
678 e = BCExceptionChecksumInstance; 679 e = BCExceptionChecksumInstance;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
728 int32_t result = getCodewordBucketNumber(*array); 729 int32_t result = getCodewordBucketNumber(*array);
729 delete array; 730 delete array;
730 return result; 731 return result;
731 } 732 }
732 int32_t CBC_PDF417ScanningDecoder::getCodewordBucketNumber( 733 int32_t CBC_PDF417ScanningDecoder::getCodewordBucketNumber(
733 CFX_Int32Array& moduleBitCount) { 734 CFX_Int32Array& moduleBitCount) {
734 return (moduleBitCount.GetAt(0) - moduleBitCount.GetAt(2) + 735 return (moduleBitCount.GetAt(0) - moduleBitCount.GetAt(2) +
735 moduleBitCount.GetAt(4) - moduleBitCount.GetAt(6) + 9) % 736 moduleBitCount.GetAt(4) - moduleBitCount.GetAt(6) + 9) %
736 9; 737 9;
737 } 738 }
OLDNEW
« no previous file with comments | « xfa/fxbarcode/pdf417/BC_PDF417Reader.cpp ('k') | xfa/fxbarcode/pdf417/BC_PDF417Writer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698