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

Side by Side Diff: xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.cpp

Issue 1172793002: Merge to XFA: Use stdint.h types throughout PDFium. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Created 5 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 2009 ZXing authors 8 * Copyright 2009 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 18 matching lines...) Expand all
29 #include "BC_PDF417DecodedBitStreamParser.h" 29 #include "BC_PDF417DecodedBitStreamParser.h"
30 #define TEXT_COMPACTION_MODE_LATCH 900 30 #define TEXT_COMPACTION_MODE_LATCH 900
31 #define BYTE_COMPACTION_MODE_LATCH 901 31 #define BYTE_COMPACTION_MODE_LATCH 901
32 #define NUMERIC_COMPACTION_MODE_LATCH 902 32 #define NUMERIC_COMPACTION_MODE_LATCH 902
33 #define BYTE_COMPACTION_MODE_LATCH_6 924 33 #define BYTE_COMPACTION_MODE_LATCH_6 924
34 #define BEGIN_MACRO_PDF417_CONTROL_BLOCK 928 34 #define BEGIN_MACRO_PDF417_CONTROL_BLOCK 928
35 #define BEGIN_MACRO_PDF417_OPTIONAL_FIELD 923 35 #define BEGIN_MACRO_PDF417_OPTIONAL_FIELD 923
36 #define MACRO_PDF417_TERMINATOR 922 36 #define MACRO_PDF417_TERMINATOR 922
37 #define MODE_SHIFT_TO_BYTE_COMPACTION_MODE 913 37 #define MODE_SHIFT_TO_BYTE_COMPACTION_MODE 913
38 38
39 FX_INT32 CBC_DecodedBitStreamPaser::MAX_NUMERIC_CODEWORDS = 15; 39 int32_t CBC_DecodedBitStreamPaser::MAX_NUMERIC_CODEWORDS = 15;
40 FX_INT32 CBC_DecodedBitStreamPaser::NUMBER_OF_SEQUENCE_CODEWORDS = 2; 40 int32_t CBC_DecodedBitStreamPaser::NUMBER_OF_SEQUENCE_CODEWORDS = 2;
41 FX_INT32 CBC_DecodedBitStreamPaser::PL = 25; 41 int32_t CBC_DecodedBitStreamPaser::PL = 25;
42 FX_INT32 CBC_DecodedBitStreamPaser::LL = 27; 42 int32_t CBC_DecodedBitStreamPaser::LL = 27;
43 FX_INT32 CBC_DecodedBitStreamPaser::AS = 27; 43 int32_t CBC_DecodedBitStreamPaser::AS = 27;
44 FX_INT32 CBC_DecodedBitStreamPaser::ML = 28; 44 int32_t CBC_DecodedBitStreamPaser::ML = 28;
45 FX_INT32 CBC_DecodedBitStreamPaser::AL = 28; 45 int32_t CBC_DecodedBitStreamPaser::AL = 28;
46 FX_INT32 CBC_DecodedBitStreamPaser::PS = 29; 46 int32_t CBC_DecodedBitStreamPaser::PS = 29;
47 FX_INT32 CBC_DecodedBitStreamPaser::PAL = 29; 47 int32_t CBC_DecodedBitStreamPaser::PAL = 29;
48 FX_CHAR CBC_DecodedBitStreamPaser::PUNCT_CHARS[29] = { 48 FX_CHAR CBC_DecodedBitStreamPaser::PUNCT_CHARS[29] = {
49 ';', '<', '>', '@', '[', '\\', '}', '_', '`', '~', '!', 49 ';', '<', '>', '@', '[', '\\', '}', '_', '`', '~', '!',
50 '\r', '\t', ',', ':', '\n', '-', '.', '$', '/', '"', '|', '*', 50 '\r', '\t', ',', ':', '\n', '-', '.', '$', '/', '"', '|', '*',
51 '(', ')', '?', '{', '}', '\'' 51 '(', ')', '?', '{', '}', '\''
52 }; 52 };
53 FX_CHAR CBC_DecodedBitStreamPaser::MIXED_CHARS[30] = { 53 FX_CHAR CBC_DecodedBitStreamPaser::MIXED_CHARS[30] = {
54 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '&', 54 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '&',
55 '\r', '\t', ',', ':', '#', '-', '.', '$', '/', '+', '%', '*', 55 '\r', '\t', ',', ':', '#', '-', '.', '$', '/', '+', '%', '*',
56 '=', '^' 56 '=', '^'
57 }; 57 };
58 void CBC_DecodedBitStreamPaser::Initialize() 58 void CBC_DecodedBitStreamPaser::Initialize()
59 { 59 {
60 } 60 }
61 void CBC_DecodedBitStreamPaser::Finalize() 61 void CBC_DecodedBitStreamPaser::Finalize()
62 { 62 {
63 } 63 }
64 CBC_DecodedBitStreamPaser::CBC_DecodedBitStreamPaser() 64 CBC_DecodedBitStreamPaser::CBC_DecodedBitStreamPaser()
65 { 65 {
66 } 66 }
67 CBC_DecodedBitStreamPaser::~CBC_DecodedBitStreamPaser() 67 CBC_DecodedBitStreamPaser::~CBC_DecodedBitStreamPaser()
68 { 68 {
69 } 69 }
70 CBC_CommonDecoderResult* CBC_DecodedBitStreamPaser::decode(CFX_Int32Array &codew ords, CFX_ByteString ecLevel, FX_INT32 &e) 70 CBC_CommonDecoderResult* CBC_DecodedBitStreamPaser::decode(CFX_Int32Array &codew ords, CFX_ByteString ecLevel, int32_t &e)
71 { 71 {
72 CFX_ByteString result; 72 CFX_ByteString result;
73 FX_INT32 codeIndex = 1; 73 int32_t codeIndex = 1;
74 FX_INT32 code = codewords.GetAt(codeIndex); 74 int32_t code = codewords.GetAt(codeIndex);
75 codeIndex++; 75 codeIndex++;
76 CBC_PDF417ResultMetadata* resultMetadata = FX_NEW CBC_PDF417ResultMetadata; 76 CBC_PDF417ResultMetadata* resultMetadata = FX_NEW CBC_PDF417ResultMetadata;
77 while (codeIndex < codewords[0]) { 77 while (codeIndex < codewords[0]) {
78 switch (code) { 78 switch (code) {
79 case TEXT_COMPACTION_MODE_LATCH: 79 case TEXT_COMPACTION_MODE_LATCH:
80 codeIndex = textCompaction(codewords, codeIndex, result); 80 codeIndex = textCompaction(codewords, codeIndex, result);
81 break; 81 break;
82 case BYTE_COMPACTION_MODE_LATCH: 82 case BYTE_COMPACTION_MODE_LATCH:
83 codeIndex = byteCompaction(code, codewords, codeIndex, result); 83 codeIndex = byteCompaction(code, codewords, codeIndex, result);
84 break; 84 break;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 CFX_PtrArray byteSegments; 121 CFX_PtrArray byteSegments;
122 CBC_CommonDecoderResult *tempCd = FX_NEW CBC_CommonDecoderResult(); 122 CBC_CommonDecoderResult *tempCd = FX_NEW CBC_CommonDecoderResult();
123 tempCd->Init(rawBytes, result, byteSegments, ecLevel, e); 123 tempCd->Init(rawBytes, result, byteSegments, ecLevel, e);
124 if (e != BCExceptionNO) { 124 if (e != BCExceptionNO) {
125 delete resultMetadata; 125 delete resultMetadata;
126 return NULL; 126 return NULL;
127 } 127 }
128 tempCd->setOther(resultMetadata); 128 tempCd->setOther(resultMetadata);
129 return tempCd; 129 return tempCd;
130 } 130 }
131 FX_INT32 CBC_DecodedBitStreamPaser::decodeMacroBlock(CFX_Int32Array &codewords, FX_INT32 codeIndex, CBC_PDF417ResultMetadata* resultMetadata, FX_INT32 &e) 131 int32_t CBC_DecodedBitStreamPaser::decodeMacroBlock(CFX_Int32Array &codewords, i nt32_t codeIndex, CBC_PDF417ResultMetadata* resultMetadata, int32_t &e)
132 { 132 {
133 if (codeIndex + NUMBER_OF_SEQUENCE_CODEWORDS > codewords[0]) { 133 if (codeIndex + NUMBER_OF_SEQUENCE_CODEWORDS > codewords[0]) {
134 e = BCExceptionFormatInstance; 134 e = BCExceptionFormatInstance;
135 return -1; 135 return -1;
136 } 136 }
137 CFX_Int32Array segmentIndexArray; 137 CFX_Int32Array segmentIndexArray;
138 segmentIndexArray.SetSize(NUMBER_OF_SEQUENCE_CODEWORDS); 138 segmentIndexArray.SetSize(NUMBER_OF_SEQUENCE_CODEWORDS);
139 for (FX_INT32 i = 0; i < NUMBER_OF_SEQUENCE_CODEWORDS; i++, codeIndex++) { 139 for (int32_t i = 0; i < NUMBER_OF_SEQUENCE_CODEWORDS; i++, codeIndex++) {
140 segmentIndexArray.SetAt(i, codewords[codeIndex]); 140 segmentIndexArray.SetAt(i, codewords[codeIndex]);
141 } 141 }
142 CFX_ByteString str = decodeBase900toBase10(segmentIndexArray, NUMBER_OF_SEQU ENCE_CODEWORDS, e); 142 CFX_ByteString str = decodeBase900toBase10(segmentIndexArray, NUMBER_OF_SEQU ENCE_CODEWORDS, e);
143 BC_EXCEPTION_CHECK_ReturnValue(e, -1); 143 BC_EXCEPTION_CHECK_ReturnValue(e, -1);
144 resultMetadata->setSegmentIndex(atoi(str.GetBuffer(str.GetLength()))); 144 resultMetadata->setSegmentIndex(atoi(str.GetBuffer(str.GetLength())));
145 CFX_ByteString fileId; 145 CFX_ByteString fileId;
146 codeIndex = textCompaction(codewords, codeIndex, fileId); 146 codeIndex = textCompaction(codewords, codeIndex, fileId);
147 resultMetadata->setFileId(fileId); 147 resultMetadata->setFileId(fileId);
148 if (codewords[codeIndex] == BEGIN_MACRO_PDF417_OPTIONAL_FIELD) { 148 if (codewords[codeIndex] == BEGIN_MACRO_PDF417_OPTIONAL_FIELD) {
149 codeIndex++; 149 codeIndex++;
150 CFX_Int32Array additionalOptionCodeWords; 150 CFX_Int32Array additionalOptionCodeWords;
151 additionalOptionCodeWords.SetSize(codewords[0] - codeIndex); 151 additionalOptionCodeWords.SetSize(codewords[0] - codeIndex);
152 FX_INT32 additionalOptionCodeWordsIndex = 0; 152 int32_t additionalOptionCodeWordsIndex = 0;
153 FX_BOOL end = FALSE; 153 FX_BOOL end = FALSE;
154 while ((codeIndex < codewords[0]) && !end) { 154 while ((codeIndex < codewords[0]) && !end) {
155 FX_INT32 code = codewords[codeIndex++]; 155 int32_t code = codewords[codeIndex++];
156 if (code < TEXT_COMPACTION_MODE_LATCH) { 156 if (code < TEXT_COMPACTION_MODE_LATCH) {
157 additionalOptionCodeWords[additionalOptionCodeWordsIndex++] = co de; 157 additionalOptionCodeWords[additionalOptionCodeWordsIndex++] = co de;
158 } else { 158 } else {
159 switch (code) { 159 switch (code) {
160 case MACRO_PDF417_TERMINATOR: 160 case MACRO_PDF417_TERMINATOR:
161 resultMetadata->setLastSegment(TRUE); 161 resultMetadata->setLastSegment(TRUE);
162 codeIndex++; 162 codeIndex++;
163 end = TRUE; 163 end = TRUE;
164 break; 164 break;
165 default: 165 default:
166 e = BCExceptionFormatInstance; 166 e = BCExceptionFormatInstance;
167 return -1; 167 return -1;
168 } 168 }
169 } 169 }
170 } 170 }
171 CFX_Int32Array array; 171 CFX_Int32Array array;
172 array.SetSize(additionalOptionCodeWordsIndex); 172 array.SetSize(additionalOptionCodeWordsIndex);
173 array.Copy(additionalOptionCodeWords); 173 array.Copy(additionalOptionCodeWords);
174 resultMetadata->setOptionalData(array); 174 resultMetadata->setOptionalData(array);
175 } else if (codewords[codeIndex] == MACRO_PDF417_TERMINATOR) { 175 } else if (codewords[codeIndex] == MACRO_PDF417_TERMINATOR) {
176 resultMetadata->setLastSegment(TRUE); 176 resultMetadata->setLastSegment(TRUE);
177 codeIndex++; 177 codeIndex++;
178 } 178 }
179 return codeIndex; 179 return codeIndex;
180 } 180 }
181 FX_INT32 CBC_DecodedBitStreamPaser::textCompaction(CFX_Int32Array &codewords, FX _INT32 codeIndex, CFX_ByteString &result) 181 int32_t CBC_DecodedBitStreamPaser::textCompaction(CFX_Int32Array &codewords, int 32_t codeIndex, CFX_ByteString &result)
182 { 182 {
183 CFX_Int32Array textCompactionData; 183 CFX_Int32Array textCompactionData;
184 textCompactionData.SetSize((codewords[0] - codeIndex) << 1); 184 textCompactionData.SetSize((codewords[0] - codeIndex) << 1);
185 CFX_Int32Array byteCompactionData; 185 CFX_Int32Array byteCompactionData;
186 byteCompactionData.SetSize((codewords[0] - codeIndex) << 1); 186 byteCompactionData.SetSize((codewords[0] - codeIndex) << 1);
187 FX_INT32 index = 0; 187 int32_t index = 0;
188 FX_BOOL end = FALSE; 188 FX_BOOL end = FALSE;
189 while ((codeIndex < codewords[0]) && !end) { 189 while ((codeIndex < codewords[0]) && !end) {
190 FX_INT32 code = codewords[codeIndex++]; 190 int32_t code = codewords[codeIndex++];
191 if (code < TEXT_COMPACTION_MODE_LATCH) { 191 if (code < TEXT_COMPACTION_MODE_LATCH) {
192 textCompactionData[index] = code / 30; 192 textCompactionData[index] = code / 30;
193 textCompactionData[index + 1] = code % 30; 193 textCompactionData[index + 1] = code % 30;
194 index += 2; 194 index += 2;
195 } else { 195 } else {
196 switch (code) { 196 switch (code) {
197 case TEXT_COMPACTION_MODE_LATCH: 197 case TEXT_COMPACTION_MODE_LATCH:
198 textCompactionData[index++] = TEXT_COMPACTION_MODE_LATCH; 198 textCompactionData[index++] = TEXT_COMPACTION_MODE_LATCH;
199 break; 199 break;
200 case BYTE_COMPACTION_MODE_LATCH: 200 case BYTE_COMPACTION_MODE_LATCH:
(...skipping 25 matching lines...) Expand all
226 case BYTE_COMPACTION_MODE_LATCH_6: 226 case BYTE_COMPACTION_MODE_LATCH_6:
227 codeIndex--; 227 codeIndex--;
228 end = TRUE; 228 end = TRUE;
229 break; 229 break;
230 } 230 }
231 } 231 }
232 } 232 }
233 decodeTextCompaction(textCompactionData, byteCompactionData, index, result); 233 decodeTextCompaction(textCompactionData, byteCompactionData, index, result);
234 return codeIndex; 234 return codeIndex;
235 } 235 }
236 void CBC_DecodedBitStreamPaser::decodeTextCompaction(CFX_Int32Array &textCompact ionData, CFX_Int32Array &byteCompactionData, FX_INT32 length, CFX_ByteString &re sult) 236 void CBC_DecodedBitStreamPaser::decodeTextCompaction(CFX_Int32Array &textCompact ionData, CFX_Int32Array &byteCompactionData, int32_t length, CFX_ByteString &res ult)
237 { 237 {
238 Mode subMode = ALPHA; 238 Mode subMode = ALPHA;
239 Mode priorToShiftMode = ALPHA; 239 Mode priorToShiftMode = ALPHA;
240 FX_INT32 i = 0; 240 int32_t i = 0;
241 while (i < length) { 241 while (i < length) {
242 FX_INT32 subModeCh = textCompactionData[i]; 242 int32_t subModeCh = textCompactionData[i];
243 FX_CHAR ch = 0; 243 FX_CHAR ch = 0;
244 switch (subMode) { 244 switch (subMode) {
245 case ALPHA: 245 case ALPHA:
246 if (subModeCh < 26) { 246 if (subModeCh < 26) {
247 ch = (FX_CHAR) ('A' + subModeCh); 247 ch = (FX_CHAR) ('A' + subModeCh);
248 } else { 248 } else {
249 if (subModeCh == 26) { 249 if (subModeCh == 26) {
250 ch = ' '; 250 ch = ' ';
251 } else if (subModeCh == LL) { 251 } else if (subModeCh == LL) {
252 subMode = LOWER; 252 subMode = LOWER;
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 } 344 }
345 } 345 }
346 break; 346 break;
347 } 347 }
348 if (ch != 0) { 348 if (ch != 0) {
349 result += ch; 349 result += ch;
350 } 350 }
351 i++; 351 i++;
352 } 352 }
353 } 353 }
354 FX_INT32 CBC_DecodedBitStreamPaser::byteCompaction(FX_INT32 mode, CFX_Int32Array &codewords, FX_INT32 codeIndex, CFX_ByteString &result) 354 int32_t CBC_DecodedBitStreamPaser::byteCompaction(int32_t mode, CFX_Int32Array & codewords, int32_t codeIndex, CFX_ByteString &result)
355 { 355 {
356 if (mode == BYTE_COMPACTION_MODE_LATCH) { 356 if (mode == BYTE_COMPACTION_MODE_LATCH) {
357 FX_INT32 count = 0; 357 int32_t count = 0;
358 FX_INT64 value = 0; 358 int64_t value = 0;
359 FX_WORD* decodedData = FX_Alloc(FX_WORD, 6 * sizeof(FX_WORD)); 359 FX_WORD* decodedData = FX_Alloc(FX_WORD, 6 * sizeof(FX_WORD));
360 CFX_Int32Array byteCompactedCodewords; 360 CFX_Int32Array byteCompactedCodewords;
361 byteCompactedCodewords.SetSize(6); 361 byteCompactedCodewords.SetSize(6);
362 FX_BOOL end = FALSE; 362 FX_BOOL end = FALSE;
363 FX_INT32 nextCode = codewords[codeIndex++]; 363 int32_t nextCode = codewords[codeIndex++];
364 while ((codeIndex < codewords[0]) && !end) { 364 while ((codeIndex < codewords[0]) && !end) {
365 byteCompactedCodewords[count++] = nextCode; 365 byteCompactedCodewords[count++] = nextCode;
366 value = 900 * value + nextCode; 366 value = 900 * value + nextCode;
367 nextCode = codewords[codeIndex++]; 367 nextCode = codewords[codeIndex++];
368 if (nextCode == TEXT_COMPACTION_MODE_LATCH || 368 if (nextCode == TEXT_COMPACTION_MODE_LATCH ||
369 nextCode == BYTE_COMPACTION_MODE_LATCH || 369 nextCode == BYTE_COMPACTION_MODE_LATCH ||
370 nextCode == NUMERIC_COMPACTION_MODE_LATCH || 370 nextCode == NUMERIC_COMPACTION_MODE_LATCH ||
371 nextCode == BYTE_COMPACTION_MODE_LATCH_6 || 371 nextCode == BYTE_COMPACTION_MODE_LATCH_6 ||
372 nextCode == BEGIN_MACRO_PDF417_CONTROL_BLOCK || 372 nextCode == BEGIN_MACRO_PDF417_CONTROL_BLOCK ||
373 nextCode == BEGIN_MACRO_PDF417_OPTIONAL_FIELD || 373 nextCode == BEGIN_MACRO_PDF417_OPTIONAL_FIELD ||
374 nextCode == MACRO_PDF417_TERMINATOR) { 374 nextCode == MACRO_PDF417_TERMINATOR) {
375 codeIndex--; 375 codeIndex--;
376 end = TRUE; 376 end = TRUE;
377 } else { 377 } else {
378 if ((count % 5 == 0) && (count > 0)) { 378 if ((count % 5 == 0) && (count > 0)) {
379 FX_INT32 j = 0; 379 int32_t j = 0;
380 for (; j < 6; ++j) { 380 for (; j < 6; ++j) {
381 decodedData[5 - j] = (FX_WORD) (value % 256); 381 decodedData[5 - j] = (FX_WORD) (value % 256);
382 value >>= 8; 382 value >>= 8;
383 } 383 }
384 for (j = 0; j < 6; ++j) { 384 for (j = 0; j < 6; ++j) {
385 result += (FX_CHAR)decodedData[j]; 385 result += (FX_CHAR)decodedData[j];
386 } 386 }
387 count = 0; 387 count = 0;
388 } 388 }
389 } 389 }
390 } 390 }
391 FX_Free(decodedData); 391 FX_Free(decodedData);
392 if (codeIndex == codewords[0] && nextCode < TEXT_COMPACTION_MODE_LATCH) { 392 if (codeIndex == codewords[0] && nextCode < TEXT_COMPACTION_MODE_LATCH) {
393 byteCompactedCodewords[count++] = nextCode; 393 byteCompactedCodewords[count++] = nextCode;
394 } 394 }
395 for (FX_INT32 i = 0; i < count; i++) { 395 for (int32_t i = 0; i < count; i++) {
396 result += (FX_CHAR)(FX_WORD) byteCompactedCodewords[i]; 396 result += (FX_CHAR)(FX_WORD) byteCompactedCodewords[i];
397 } 397 }
398 } else if (mode == BYTE_COMPACTION_MODE_LATCH_6) { 398 } else if (mode == BYTE_COMPACTION_MODE_LATCH_6) {
399 FX_INT32 count = 0; 399 int32_t count = 0;
400 FX_INT64 value = 0; 400 int64_t value = 0;
401 FX_BOOL end = FALSE; 401 FX_BOOL end = FALSE;
402 while (codeIndex < codewords[0] && !end) { 402 while (codeIndex < codewords[0] && !end) {
403 FX_INT32 code = codewords[codeIndex++]; 403 int32_t code = codewords[codeIndex++];
404 if (code < TEXT_COMPACTION_MODE_LATCH) { 404 if (code < TEXT_COMPACTION_MODE_LATCH) {
405 count++; 405 count++;
406 value = 900 * value + code; 406 value = 900 * value + code;
407 } else { 407 } else {
408 if (code == TEXT_COMPACTION_MODE_LATCH || 408 if (code == TEXT_COMPACTION_MODE_LATCH ||
409 code == BYTE_COMPACTION_MODE_LATCH || 409 code == BYTE_COMPACTION_MODE_LATCH ||
410 code == NUMERIC_COMPACTION_MODE_LATCH || 410 code == NUMERIC_COMPACTION_MODE_LATCH ||
411 code == BYTE_COMPACTION_MODE_LATCH_6 || 411 code == BYTE_COMPACTION_MODE_LATCH_6 ||
412 code == BEGIN_MACRO_PDF417_CONTROL_BLOCK || 412 code == BEGIN_MACRO_PDF417_CONTROL_BLOCK ||
413 code == BEGIN_MACRO_PDF417_OPTIONAL_FIELD || 413 code == BEGIN_MACRO_PDF417_OPTIONAL_FIELD ||
414 code == MACRO_PDF417_TERMINATOR) { 414 code == MACRO_PDF417_TERMINATOR) {
415 codeIndex--; 415 codeIndex--;
416 end = TRUE; 416 end = TRUE;
417 } 417 }
418 } 418 }
419 if ((count % 5 == 0) && (count > 0)) { 419 if ((count % 5 == 0) && (count > 0)) {
420 FX_WORD* decodedData = FX_Alloc(FX_WORD, 6 * sizeof(FX_WORD)); 420 FX_WORD* decodedData = FX_Alloc(FX_WORD, 6 * sizeof(FX_WORD));
421 FX_INT32 j = 0; 421 int32_t j = 0;
422 for (; j < 6; ++j) { 422 for (; j < 6; ++j) {
423 decodedData[5 - j] = (FX_WORD) (value & 0xFF); 423 decodedData[5 - j] = (FX_WORD) (value & 0xFF);
424 value >>= 8; 424 value >>= 8;
425 } 425 }
426 for (j = 0; j < 6; ++j) { 426 for (j = 0; j < 6; ++j) {
427 result += (FX_CHAR)decodedData[j]; 427 result += (FX_CHAR)decodedData[j];
428 } 428 }
429 count = 0; 429 count = 0;
430 FX_Free(decodedData); 430 FX_Free(decodedData);
431 } 431 }
432 } 432 }
433 } 433 }
434 return codeIndex; 434 return codeIndex;
435 } 435 }
436 FX_INT32 CBC_DecodedBitStreamPaser::numericCompaction(CFX_Int32Array &codewords, FX_INT32 codeIndex, CFX_ByteString &result, FX_INT32 &e) 436 int32_t CBC_DecodedBitStreamPaser::numericCompaction(CFX_Int32Array &codewords, int32_t codeIndex, CFX_ByteString &result, int32_t &e)
437 { 437 {
438 FX_INT32 count = 0; 438 int32_t count = 0;
439 FX_BOOL end = FALSE; 439 FX_BOOL end = FALSE;
440 CFX_Int32Array numericCodewords; 440 CFX_Int32Array numericCodewords;
441 numericCodewords.SetSize(MAX_NUMERIC_CODEWORDS); 441 numericCodewords.SetSize(MAX_NUMERIC_CODEWORDS);
442 while (codeIndex < codewords[0] && !end) { 442 while (codeIndex < codewords[0] && !end) {
443 FX_INT32 code = codewords[codeIndex++]; 443 int32_t code = codewords[codeIndex++];
444 if (codeIndex == codewords[0]) { 444 if (codeIndex == codewords[0]) {
445 end = TRUE; 445 end = TRUE;
446 } 446 }
447 if (code < TEXT_COMPACTION_MODE_LATCH) { 447 if (code < TEXT_COMPACTION_MODE_LATCH) {
448 numericCodewords[count] = code; 448 numericCodewords[count] = code;
449 count++; 449 count++;
450 } else { 450 } else {
451 if (code == TEXT_COMPACTION_MODE_LATCH || 451 if (code == TEXT_COMPACTION_MODE_LATCH ||
452 code == BYTE_COMPACTION_MODE_LATCH || 452 code == BYTE_COMPACTION_MODE_LATCH ||
453 code == BYTE_COMPACTION_MODE_LATCH_6 || 453 code == BYTE_COMPACTION_MODE_LATCH_6 ||
454 code == BEGIN_MACRO_PDF417_CONTROL_BLOCK || 454 code == BEGIN_MACRO_PDF417_CONTROL_BLOCK ||
455 code == BEGIN_MACRO_PDF417_OPTIONAL_FIELD || 455 code == BEGIN_MACRO_PDF417_OPTIONAL_FIELD ||
456 code == MACRO_PDF417_TERMINATOR) { 456 code == MACRO_PDF417_TERMINATOR) {
457 codeIndex--; 457 codeIndex--;
458 end = TRUE; 458 end = TRUE;
459 } 459 }
460 } 460 }
461 if (count % MAX_NUMERIC_CODEWORDS == 0 || 461 if (count % MAX_NUMERIC_CODEWORDS == 0 ||
462 code == NUMERIC_COMPACTION_MODE_LATCH || 462 code == NUMERIC_COMPACTION_MODE_LATCH ||
463 end) { 463 end) {
464 CFX_ByteString s = decodeBase900toBase10(numericCodewords, count, e) ; 464 CFX_ByteString s = decodeBase900toBase10(numericCodewords, count, e) ;
465 BC_EXCEPTION_CHECK_ReturnValue(e, -1); 465 BC_EXCEPTION_CHECK_ReturnValue(e, -1);
466 result += s; 466 result += s;
467 count = 0; 467 count = 0;
468 } 468 }
469 } 469 }
470 return codeIndex; 470 return codeIndex;
471 } 471 }
472 CFX_ByteString CBC_DecodedBitStreamPaser::decodeBase900toBase10(CFX_Int32Array & codewords, FX_INT32 count, FX_INT32 &e) 472 CFX_ByteString CBC_DecodedBitStreamPaser::decodeBase900toBase10(CFX_Int32Array & codewords, int32_t count, int32_t &e)
473 { 473 {
474 BigInteger result = 0; 474 BigInteger result = 0;
475 BigInteger nineHundred(900); 475 BigInteger nineHundred(900);
476 for (FX_INT32 i = 0; i < count; i++) { 476 for (int32_t i = 0; i < count; i++) {
477 result = result * nineHundred + BigInteger(codewords[i]); 477 result = result * nineHundred + BigInteger(codewords[i]);
478 } 478 }
479 CFX_ByteString resultString(bigIntegerToString(result).c_str()); 479 CFX_ByteString resultString(bigIntegerToString(result).c_str());
480 if (resultString.GetAt(0) != '1') { 480 if (resultString.GetAt(0) != '1') {
481 e = BCExceptionFormatInstance; 481 e = BCExceptionFormatInstance;
482 return ' '; 482 return ' ';
483 } 483 }
484 return resultString.Mid(1, resultString.GetLength() - 1); 484 return resultString.Mid(1, resultString.GetLength() - 1);
485 } 485 }
OLDNEW
« no previous file with comments | « xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h ('k') | xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResult.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698