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

Side by Side Diff: xfa/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.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
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 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 m_isLeft ? boundingBox->getBottomLeft() : boundingBox->getBottomRight(); 60 m_isLeft ? boundingBox->getBottomLeft() : boundingBox->getBottomRight();
61 int32_t firstRow = imageRowToCodewordIndex((int32_t)top->GetY()); 61 int32_t firstRow = imageRowToCodewordIndex((int32_t)top->GetY());
62 int32_t lastRow = imageRowToCodewordIndex((int32_t)bottom->GetY()); 62 int32_t lastRow = imageRowToCodewordIndex((int32_t)bottom->GetY());
63 FX_FLOAT averageRowHeight = 63 FX_FLOAT averageRowHeight =
64 (lastRow - firstRow) / (FX_FLOAT)barcodeMetadata.getRowCount(); 64 (lastRow - firstRow) / (FX_FLOAT)barcodeMetadata.getRowCount();
65 int32_t barcodeRow = -1; 65 int32_t barcodeRow = -1;
66 int32_t maxRowHeight = 1; 66 int32_t maxRowHeight = 1;
67 int32_t currentRowHeight = 0; 67 int32_t currentRowHeight = 0;
68 for (int32_t codewordsRow = firstRow; codewordsRow < lastRow; 68 for (int32_t codewordsRow = firstRow; codewordsRow < lastRow;
69 codewordsRow++) { 69 codewordsRow++) {
70 if (codewords->GetAt(codewordsRow) == NULL) { 70 if (!codewords->GetAt(codewordsRow))
71 continue; 71 continue;
72 } 72
73 CBC_Codeword* codeword = codewords->GetAt(codewordsRow); 73 CBC_Codeword* codeword = codewords->GetAt(codewordsRow);
74 int32_t rowDifference = codeword->getRowNumber() - barcodeRow; 74 int32_t rowDifference = codeword->getRowNumber() - barcodeRow;
75 if (rowDifference == 0) { 75 if (rowDifference == 0) {
76 currentRowHeight++; 76 currentRowHeight++;
77 } else if (rowDifference == 1) { 77 } else if (rowDifference == 1) {
78 maxRowHeight = 78 maxRowHeight =
79 maxRowHeight > currentRowHeight ? maxRowHeight : currentRowHeight; 79 maxRowHeight > currentRowHeight ? maxRowHeight : currentRowHeight;
80 currentRowHeight = 1; 80 currentRowHeight = 1;
81 barcodeRow = codeword->getRowNumber(); 81 barcodeRow = codeword->getRowNumber();
82 } else if (rowDifference < 0) { 82 } else if (rowDifference < 0) {
83 codewords->SetAt(codewordsRow, NULL); 83 codewords->SetAt(codewordsRow, nullptr);
84 } else if (codeword->getRowNumber() >= barcodeMetadata.getRowCount()) { 84 } else if (codeword->getRowNumber() >= barcodeMetadata.getRowCount()) {
85 codewords->SetAt(codewordsRow, NULL); 85 codewords->SetAt(codewordsRow, nullptr);
86 } else if (rowDifference > codewordsRow) { 86 } else if (rowDifference > codewordsRow) {
87 codewords->SetAt(codewordsRow, NULL); 87 codewords->SetAt(codewordsRow, nullptr);
88 } else { 88 } else {
89 int32_t checkedRows; 89 int32_t checkedRows;
90 if (maxRowHeight > 2) { 90 if (maxRowHeight > 2) {
91 checkedRows = (maxRowHeight - 2) * rowDifference; 91 checkedRows = (maxRowHeight - 2) * rowDifference;
92 } else { 92 } else {
93 checkedRows = rowDifference; 93 checkedRows = rowDifference;
94 } 94 }
95 FX_BOOL closePreviousCodewordFound = checkedRows >= codewordsRow; 95 FX_BOOL closePreviousCodewordFound = checkedRows >= codewordsRow;
96 for (int32_t i = 1; i <= checkedRows && !closePreviousCodewordFound; 96 for (int32_t i = 1; i <= checkedRows && !closePreviousCodewordFound;
97 i++) { 97 i++) {
98 closePreviousCodewordFound = codewords->GetAt(codewordsRow - i) != NULL; 98 closePreviousCodewordFound = !!codewords->GetAt(codewordsRow - i);
99 } 99 }
100 if (closePreviousCodewordFound) { 100 if (closePreviousCodewordFound) {
101 codewords->SetAt(codewordsRow, NULL); 101 codewords->SetAt(codewordsRow, nullptr);
102 } else { 102 } else {
103 barcodeRow = codeword->getRowNumber(); 103 barcodeRow = codeword->getRowNumber();
104 currentRowHeight = 1; 104 currentRowHeight = 1;
105 } 105 }
106 } 106 }
107 } 107 }
108 return (int32_t)(averageRowHeight + 0.5); 108 return (int32_t)(averageRowHeight + 0.5);
109 } 109 }
110 CFX_Int32Array* CBC_DetectionResultRowIndicatorColumn::getRowHeights( 110 CFX_Int32Array* CBC_DetectionResultRowIndicatorColumn::getRowHeights(
111 int32_t& e) { 111 int32_t& e) {
112 CBC_BarcodeMetadata* barcodeMetadata = getBarcodeMetadata(); 112 CBC_BarcodeMetadata* barcodeMetadata = getBarcodeMetadata();
113 if (barcodeMetadata == NULL) { 113 if (!barcodeMetadata) {
114 e = BCExceptionCannotMetadata; 114 e = BCExceptionCannotMetadata;
115 return NULL; 115 return nullptr;
116 } 116 }
117 adjustIncompleteIndicatorColumnRowNumbers(*barcodeMetadata); 117 adjustIncompleteIndicatorColumnRowNumbers(*barcodeMetadata);
118 CFX_Int32Array* result = new CFX_Int32Array; 118 CFX_Int32Array* result = new CFX_Int32Array;
119 result->SetSize(barcodeMetadata->getRowCount()); 119 result->SetSize(barcodeMetadata->getRowCount());
120 for (int32_t i = 0; i < getCodewords()->GetSize(); i++) { 120 for (int32_t i = 0; i < getCodewords()->GetSize(); i++) {
121 CBC_Codeword* codeword = (CBC_Codeword*)getCodewords()->GetAt(i); 121 CBC_Codeword* codeword = (CBC_Codeword*)getCodewords()->GetAt(i);
122 if (codeword) { 122 if (codeword) {
123 result->SetAt(codeword->getRowNumber(), 123 result->SetAt(codeword->getRowNumber(),
124 result->GetAt(codeword->getRowNumber()) + 1); 124 result->GetAt(codeword->getRowNumber()) + 1);
125 } 125 }
(...skipping 11 matching lines...) Expand all
137 int32_t firstRow = imageRowToCodewordIndex((int32_t)top->GetY()); 137 int32_t firstRow = imageRowToCodewordIndex((int32_t)top->GetY());
138 int32_t lastRow = imageRowToCodewordIndex((int32_t)bottom->GetY()); 138 int32_t lastRow = imageRowToCodewordIndex((int32_t)bottom->GetY());
139 FX_FLOAT averageRowHeight = 139 FX_FLOAT averageRowHeight =
140 (lastRow - firstRow) / (FX_FLOAT)barcodeMetadata.getRowCount(); 140 (lastRow - firstRow) / (FX_FLOAT)barcodeMetadata.getRowCount();
141 CFX_ArrayTemplate<CBC_Codeword*>* codewords = getCodewords(); 141 CFX_ArrayTemplate<CBC_Codeword*>* codewords = getCodewords();
142 int32_t barcodeRow = -1; 142 int32_t barcodeRow = -1;
143 int32_t maxRowHeight = 1; 143 int32_t maxRowHeight = 1;
144 int32_t currentRowHeight = 0; 144 int32_t currentRowHeight = 0;
145 for (int32_t codewordsRow = firstRow; codewordsRow < lastRow; 145 for (int32_t codewordsRow = firstRow; codewordsRow < lastRow;
146 codewordsRow++) { 146 codewordsRow++) {
147 if (codewords->GetAt(codewordsRow) == NULL) { 147 if (!codewords->GetAt(codewordsRow))
148 continue; 148 continue;
149 } 149
150 CBC_Codeword* codeword = codewords->GetAt(codewordsRow); 150 CBC_Codeword* codeword = codewords->GetAt(codewordsRow);
151 codeword->setRowNumberAsRowIndicatorColumn(); 151 codeword->setRowNumberAsRowIndicatorColumn();
152 int32_t rowDifference = codeword->getRowNumber() - barcodeRow; 152 int32_t rowDifference = codeword->getRowNumber() - barcodeRow;
153 if (rowDifference == 0) { 153 if (rowDifference == 0) {
154 currentRowHeight++; 154 currentRowHeight++;
155 } else if (rowDifference == 1) { 155 } else if (rowDifference == 1) {
156 maxRowHeight = 156 maxRowHeight =
157 maxRowHeight > currentRowHeight ? maxRowHeight : currentRowHeight; 157 maxRowHeight > currentRowHeight ? maxRowHeight : currentRowHeight;
158 currentRowHeight = 1; 158 currentRowHeight = 1;
159 barcodeRow = codeword->getRowNumber(); 159 barcodeRow = codeword->getRowNumber();
160 } else if (codeword->getRowNumber() >= barcodeMetadata.getRowCount()) { 160 } else if (codeword->getRowNumber() >= barcodeMetadata.getRowCount()) {
161 codewords->SetAt(codewordsRow, NULL); 161 codewords->SetAt(codewordsRow, nullptr);
162 } else { 162 } else {
163 barcodeRow = codeword->getRowNumber(); 163 barcodeRow = codeword->getRowNumber();
164 currentRowHeight = 1; 164 currentRowHeight = 1;
165 } 165 }
166 } 166 }
167 return (int32_t)(averageRowHeight + 0.5); 167 return (int32_t)(averageRowHeight + 0.5);
168 } 168 }
169 CBC_BarcodeMetadata* 169 CBC_BarcodeMetadata*
170 CBC_DetectionResultRowIndicatorColumn::getBarcodeMetadata() { 170 CBC_DetectionResultRowIndicatorColumn::getBarcodeMetadata() {
171 CFX_ArrayTemplate<CBC_Codeword*>* codewords = getCodewords(); 171 CFX_ArrayTemplate<CBC_Codeword*>* codewords = getCodewords();
172 CBC_BarcodeValue barcodeColumnCount; 172 CBC_BarcodeValue barcodeColumnCount;
173 CBC_BarcodeValue barcodeRowCountUpperPart; 173 CBC_BarcodeValue barcodeRowCountUpperPart;
174 CBC_BarcodeValue barcodeRowCountLowerPart; 174 CBC_BarcodeValue barcodeRowCountLowerPart;
175 CBC_BarcodeValue barcodeECLevel; 175 CBC_BarcodeValue barcodeECLevel;
176 for (int32_t i = 0; i < codewords->GetSize(); i++) { 176 for (int32_t i = 0; i < codewords->GetSize(); i++) {
177 CBC_Codeword* codeword = codewords->GetAt(i); 177 CBC_Codeword* codeword = codewords->GetAt(i);
178 if (codeword == NULL) { 178 if (!codeword)
179 continue; 179 continue;
180 } 180
181 codeword->setRowNumberAsRowIndicatorColumn(); 181 codeword->setRowNumberAsRowIndicatorColumn();
182 int32_t rowIndicatorValue = codeword->getValue() % 30; 182 int32_t rowIndicatorValue = codeword->getValue() % 30;
183 int32_t codewordRowNumber = codeword->getRowNumber(); 183 int32_t codewordRowNumber = codeword->getRowNumber();
184 if (!m_isLeft) { 184 if (!m_isLeft) {
185 codewordRowNumber += 2; 185 codewordRowNumber += 2;
186 } 186 }
187 switch (codewordRowNumber % 3) { 187 switch (codewordRowNumber % 3) {
188 case 0: 188 case 0:
189 barcodeRowCountUpperPart.setValue(rowIndicatorValue * 3 + 1); 189 barcodeRowCountUpperPart.setValue(rowIndicatorValue * 3 + 1);
190 break; 190 break;
(...skipping 10 matching lines...) Expand all
201 (barcodeRowCountUpperPart.getValue()->GetSize() == 0) || 201 (barcodeRowCountUpperPart.getValue()->GetSize() == 0) ||
202 (barcodeRowCountLowerPart.getValue()->GetSize() == 0) || 202 (barcodeRowCountLowerPart.getValue()->GetSize() == 0) ||
203 (barcodeECLevel.getValue()->GetSize() == 0) || 203 (barcodeECLevel.getValue()->GetSize() == 0) ||
204 barcodeColumnCount.getValue()->GetAt(0) < 1 || 204 barcodeColumnCount.getValue()->GetAt(0) < 1 ||
205 barcodeRowCountUpperPart.getValue()->GetAt(0) + 205 barcodeRowCountUpperPart.getValue()->GetAt(0) +
206 barcodeRowCountLowerPart.getValue()->GetAt(0) < 206 barcodeRowCountLowerPart.getValue()->GetAt(0) <
207 CBC_PDF417Common::MIN_ROWS_IN_BARCODE || 207 CBC_PDF417Common::MIN_ROWS_IN_BARCODE ||
208 barcodeRowCountUpperPart.getValue()->GetAt(0) + 208 barcodeRowCountUpperPart.getValue()->GetAt(0) +
209 barcodeRowCountLowerPart.getValue()->GetAt(0) > 209 barcodeRowCountLowerPart.getValue()->GetAt(0) >
210 CBC_PDF417Common::MAX_ROWS_IN_BARCODE) { 210 CBC_PDF417Common::MAX_ROWS_IN_BARCODE) {
211 return NULL; 211 return nullptr;
212 } 212 }
213 CBC_BarcodeMetadata* barcodeMetadata = 213 CBC_BarcodeMetadata* barcodeMetadata =
214 new CBC_BarcodeMetadata(barcodeColumnCount.getValue()->GetAt(0), 214 new CBC_BarcodeMetadata(barcodeColumnCount.getValue()->GetAt(0),
215 barcodeRowCountUpperPart.getValue()->GetAt(0), 215 barcodeRowCountUpperPart.getValue()->GetAt(0),
216 barcodeRowCountLowerPart.getValue()->GetAt(0), 216 barcodeRowCountLowerPart.getValue()->GetAt(0),
217 barcodeECLevel.getValue()->GetAt(0)); 217 barcodeECLevel.getValue()->GetAt(0));
218 removeIncorrectCodewords(codewords, *barcodeMetadata); 218 removeIncorrectCodewords(codewords, *barcodeMetadata);
219 return barcodeMetadata; 219 return barcodeMetadata;
220 } 220 }
221 FX_BOOL CBC_DetectionResultRowIndicatorColumn::isLeft() { 221 FX_BOOL CBC_DetectionResultRowIndicatorColumn::isLeft() {
222 return m_isLeft; 222 return m_isLeft;
223 } 223 }
224 CFX_ByteString CBC_DetectionResultRowIndicatorColumn::toString() { 224 CFX_ByteString CBC_DetectionResultRowIndicatorColumn::toString() {
225 return CFX_ByteString("IsLeft: ") + m_isLeft + '\n' + 225 return CFX_ByteString("IsLeft: ") + m_isLeft + '\n' +
226 CBC_DetectionResultColumn::toString(); 226 CBC_DetectionResultColumn::toString();
227 } 227 }
228 void CBC_DetectionResultRowIndicatorColumn::removeIncorrectCodewords( 228 void CBC_DetectionResultRowIndicatorColumn::removeIncorrectCodewords(
229 CFX_ArrayTemplate<CBC_Codeword*>* codewords, 229 CFX_ArrayTemplate<CBC_Codeword*>* codewords,
230 CBC_BarcodeMetadata barcodeMetadata) { 230 CBC_BarcodeMetadata barcodeMetadata) {
231 for (int32_t codewordRow = 0; codewordRow < codewords->GetSize(); 231 for (int32_t codewordRow = 0; codewordRow < codewords->GetSize();
232 codewordRow++) { 232 codewordRow++) {
233 CBC_Codeword* codeword = codewords->GetAt(codewordRow); 233 CBC_Codeword* codeword = codewords->GetAt(codewordRow);
234 if (codeword == NULL) { 234 if (!codeword)
235 continue; 235 continue;
236 } 236
237 int32_t rowIndicatorValue = codeword->getValue() % 30; 237 int32_t rowIndicatorValue = codeword->getValue() % 30;
238 int32_t codewordRowNumber = codeword->getRowNumber(); 238 int32_t codewordRowNumber = codeword->getRowNumber();
239 if (codewordRowNumber > barcodeMetadata.getRowCount()) { 239 if (codewordRowNumber > barcodeMetadata.getRowCount()) {
240 codewords->SetAt(codewordRow, NULL); 240 codewords->SetAt(codewordRow, nullptr);
241 continue; 241 continue;
242 } 242 }
243 if (!m_isLeft) { 243 if (!m_isLeft) {
244 codewordRowNumber += 2; 244 codewordRowNumber += 2;
245 } 245 }
246 switch (codewordRowNumber % 3) { 246 switch (codewordRowNumber % 3) {
247 case 0: 247 case 0:
248 if (rowIndicatorValue * 3 + 1 != 248 if (rowIndicatorValue * 3 + 1 !=
249 barcodeMetadata.getRowCountUpperPart()) { 249 barcodeMetadata.getRowCountUpperPart()) {
250 codewords->SetAt(codewordRow, NULL); 250 codewords->SetAt(codewordRow, nullptr);
251 } 251 }
252 break; 252 break;
253 case 1: 253 case 1:
254 if (rowIndicatorValue / 3 != 254 if (rowIndicatorValue / 3 !=
255 barcodeMetadata.getErrorCorrectionLevel() || 255 barcodeMetadata.getErrorCorrectionLevel() ||
256 rowIndicatorValue % 3 != barcodeMetadata.getRowCountLowerPart()) { 256 rowIndicatorValue % 3 != barcodeMetadata.getRowCountLowerPart()) {
257 codewords->SetAt(codewordRow, NULL); 257 codewords->SetAt(codewordRow, nullptr);
258 } 258 }
259 break; 259 break;
260 case 2: 260 case 2:
261 if (rowIndicatorValue + 1 != barcodeMetadata.getColumnCount()) { 261 if (rowIndicatorValue + 1 != barcodeMetadata.getColumnCount()) {
262 codewords->SetAt(codewordRow, NULL); 262 codewords->SetAt(codewordRow, nullptr);
263 } 263 }
264 break; 264 break;
265 } 265 }
266 } 266 }
267 } 267 }
OLDNEW
« no previous file with comments | « xfa/fxbarcode/pdf417/BC_PDF417DetectionResultColumn.cpp ('k') | xfa/fxbarcode/pdf417/BC_PDF417Detector.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698