react-native-nitro-zxing 0.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (423) hide show
  1. package/README.md +34 -0
  2. package/VisionCameraZxing.podspec +48 -0
  3. package/android/CMakeLists.txt +43 -0
  4. package/android/build.gradle +150 -0
  5. package/android/fix-prefab.gradle +51 -0
  6. package/android/gradle.properties +5 -0
  7. package/android/src/main/AndroidManifest.xml +3 -0
  8. package/android/src/main/cpp/cpp-adapter.cpp +7 -0
  9. package/android/src/main/java/com/margelo/nitro/camera/zxing/VisionCameraZxingPackage.kt +21 -0
  10. package/cpp/BarcodeValueTypeClassifier.cpp +70 -0
  11. package/cpp/BarcodeValueTypeClassifier.hpp +14 -0
  12. package/cpp/FrameImageView.cpp +75 -0
  13. package/cpp/FrameImageView.hpp +34 -0
  14. package/cpp/HybridBarcode.cpp +59 -0
  15. package/cpp/HybridBarcode.hpp +26 -0
  16. package/cpp/HybridBarcodeScanner.cpp +121 -0
  17. package/cpp/HybridBarcodeScanner.hpp +26 -0
  18. package/cpp/HybridBarcodeScannerFactory.cpp +11 -0
  19. package/cpp/HybridBarcodeScannerFactory.hpp +14 -0
  20. package/cpp/ImageDownscaler.cpp +34 -0
  21. package/cpp/ImageDownscaler.hpp +21 -0
  22. package/cpp/ZXingDecoder.cpp +189 -0
  23. package/cpp/ZXingDecoder.hpp +72 -0
  24. package/cpp/zxing-core/LICENSE +202 -0
  25. package/cpp/zxing-core/README.md +156 -0
  26. package/cpp/zxing-core/core/CMakeLists.txt +784 -0
  27. package/cpp/zxing-core/core/Version.h.in +28 -0
  28. package/cpp/zxing-core/core/ZXingConfig.cmake.in +9 -0
  29. package/cpp/zxing-core/core/src/Barcode.cpp +255 -0
  30. package/cpp/zxing-core/core/src/Barcode.h +191 -0
  31. package/cpp/zxing-core/core/src/BarcodeData.h +100 -0
  32. package/cpp/zxing-core/core/src/BarcodeFormat.cpp +286 -0
  33. package/cpp/zxing-core/core/src/BarcodeFormat.h +272 -0
  34. package/cpp/zxing-core/core/src/BinaryBitmap.cpp +111 -0
  35. package/cpp/zxing-core/core/src/BinaryBitmap.h +66 -0
  36. package/cpp/zxing-core/core/src/BitArray.cpp +38 -0
  37. package/cpp/zxing-core/core/src/BitArray.h +181 -0
  38. package/cpp/zxing-core/core/src/BitMatrix.cpp +175 -0
  39. package/cpp/zxing-core/core/src/BitMatrix.h +199 -0
  40. package/cpp/zxing-core/core/src/BitMatrixCursor.h +253 -0
  41. package/cpp/zxing-core/core/src/BitMatrixIO.cpp +101 -0
  42. package/cpp/zxing-core/core/src/BitMatrixIO.h +21 -0
  43. package/cpp/zxing-core/core/src/BitSource.cpp +77 -0
  44. package/cpp/zxing-core/core/src/BitSource.h +72 -0
  45. package/cpp/zxing-core/core/src/ByteArray.h +42 -0
  46. package/cpp/zxing-core/core/src/CharacterSet.cpp +78 -0
  47. package/cpp/zxing-core/core/src/CharacterSet.h +58 -0
  48. package/cpp/zxing-core/core/src/ConcentricFinder.cpp +312 -0
  49. package/cpp/zxing-core/core/src/ConcentricFinder.h +156 -0
  50. package/cpp/zxing-core/core/src/Content.cpp +471 -0
  51. package/cpp/zxing-core/core/src/Content.h +82 -0
  52. package/cpp/zxing-core/core/src/ContentType.h +19 -0
  53. package/cpp/zxing-core/core/src/CreateBarcode.cpp +490 -0
  54. package/cpp/zxing-core/core/src/CreateBarcode.h +132 -0
  55. package/cpp/zxing-core/core/src/DecoderResult.h +92 -0
  56. package/cpp/zxing-core/core/src/DetectorResult.h +44 -0
  57. package/cpp/zxing-core/core/src/ECI.cpp +81 -0
  58. package/cpp/zxing-core/core/src/ECI.h +78 -0
  59. package/cpp/zxing-core/core/src/Error.cpp +29 -0
  60. package/cpp/zxing-core/core/src/Error.h +79 -0
  61. package/cpp/zxing-core/core/src/Flags.h +165 -0
  62. package/cpp/zxing-core/core/src/GTIN.cpp +253 -0
  63. package/cpp/zxing-core/core/src/GTIN.h +58 -0
  64. package/cpp/zxing-core/core/src/GlobalHistogramBinarizer.cpp +197 -0
  65. package/cpp/zxing-core/core/src/GlobalHistogramBinarizer.h +34 -0
  66. package/cpp/zxing-core/core/src/GridSampler.cpp +124 -0
  67. package/cpp/zxing-core/core/src/GridSampler.h +59 -0
  68. package/cpp/zxing-core/core/src/HRI.cpp +343 -0
  69. package/cpp/zxing-core/core/src/HRI.h +16 -0
  70. package/cpp/zxing-core/core/src/HybridBinarizer.cpp +315 -0
  71. package/cpp/zxing-core/core/src/HybridBinarizer.h +40 -0
  72. package/cpp/zxing-core/core/src/ImageView.h +168 -0
  73. package/cpp/zxing-core/core/src/JSON.cpp +154 -0
  74. package/cpp/zxing-core/core/src/JSON.h +66 -0
  75. package/cpp/zxing-core/core/src/LocalGrid.cpp +242 -0
  76. package/cpp/zxing-core/core/src/LocalGrid.h +91 -0
  77. package/cpp/zxing-core/core/src/LogMatrix.h +105 -0
  78. package/cpp/zxing-core/core/src/Matrix.h +125 -0
  79. package/cpp/zxing-core/core/src/MultiFormatReader.cpp +107 -0
  80. package/cpp/zxing-core/core/src/MultiFormatReader.h +34 -0
  81. package/cpp/zxing-core/core/src/MultiFormatWriter.cpp +111 -0
  82. package/cpp/zxing-core/core/src/MultiFormatWriter.h +62 -0
  83. package/cpp/zxing-core/core/src/Pattern.h +472 -0
  84. package/cpp/zxing-core/core/src/PerspectiveTransform.cpp +81 -0
  85. package/cpp/zxing-core/core/src/PerspectiveTransform.h +47 -0
  86. package/cpp/zxing-core/core/src/Point.h +185 -0
  87. package/cpp/zxing-core/core/src/Quadrilateral.h +215 -0
  88. package/cpp/zxing-core/core/src/Range.h +112 -0
  89. package/cpp/zxing-core/core/src/ReadBarcode.cpp +335 -0
  90. package/cpp/zxing-core/core/src/ReadBarcode.h +33 -0
  91. package/cpp/zxing-core/core/src/Reader.h +32 -0
  92. package/cpp/zxing-core/core/src/ReaderOptions.h +210 -0
  93. package/cpp/zxing-core/core/src/ReedSolomon.cpp +100 -0
  94. package/cpp/zxing-core/core/src/ReedSolomon.h +66 -0
  95. package/cpp/zxing-core/core/src/RegressionLine.h +161 -0
  96. package/cpp/zxing-core/core/src/ResultPoint.cpp +20 -0
  97. package/cpp/zxing-core/core/src/ResultPoint.h +35 -0
  98. package/cpp/zxing-core/core/src/StdGenerator.h +121 -0
  99. package/cpp/zxing-core/core/src/StdPrint.h +38 -0
  100. package/cpp/zxing-core/core/src/StdScope.h +55 -0
  101. package/cpp/zxing-core/core/src/StructuredAppend.h +19 -0
  102. package/cpp/zxing-core/core/src/SymbologyIdentifier.h +29 -0
  103. package/cpp/zxing-core/core/src/TextDecoder.cpp +59 -0
  104. package/cpp/zxing-core/core/src/TextDecoder.h +23 -0
  105. package/cpp/zxing-core/core/src/TextEncoder.cpp +75 -0
  106. package/cpp/zxing-core/core/src/TextEncoder.h +31 -0
  107. package/cpp/zxing-core/core/src/ThresholdBinarizer.h +58 -0
  108. package/cpp/zxing-core/core/src/TritMatrix.h +29 -0
  109. package/cpp/zxing-core/core/src/Utf.cpp +276 -0
  110. package/cpp/zxing-core/core/src/Utf.h +26 -0
  111. package/cpp/zxing-core/core/src/WhiteRectDetector.cpp +276 -0
  112. package/cpp/zxing-core/core/src/WhiteRectDetector.h +36 -0
  113. package/cpp/zxing-core/core/src/WriteBarcode.cpp +213 -0
  114. package/cpp/zxing-core/core/src/WriteBarcode.h +72 -0
  115. package/cpp/zxing-core/core/src/ZXAlgorithms.h +353 -0
  116. package/cpp/zxing-core/core/src/ZXConfig.h +17 -0
  117. package/cpp/zxing-core/core/src/ZXTestSupport.h +9 -0
  118. package/cpp/zxing-core/core/src/ZXVersion.h +14 -0
  119. package/cpp/zxing-core/core/src/ZXingC.cpp +460 -0
  120. package/cpp/zxing-core/core/src/ZXingC.h +296 -0
  121. package/cpp/zxing-core/core/src/ZXingCpp.cpp +18 -0
  122. package/cpp/zxing-core/core/src/ZXingCpp.h +76 -0
  123. package/cpp/zxing-core/core/src/ZXingQt.h +606 -0
  124. package/cpp/zxing-core/core/src/aztec/AZDecoder.cpp +376 -0
  125. package/cpp/zxing-core/core/src/aztec/AZDecoder.h +20 -0
  126. package/cpp/zxing-core/core/src/aztec/AZDetector.cpp +508 -0
  127. package/cpp/zxing-core/core/src/aztec/AZDetector.h +25 -0
  128. package/cpp/zxing-core/core/src/aztec/AZDetectorResult.h +51 -0
  129. package/cpp/zxing-core/core/src/aztec/AZEncoder.cpp +318 -0
  130. package/cpp/zxing-core/core/src/aztec/AZEncoder.h +44 -0
  131. package/cpp/zxing-core/core/src/aztec/AZEncodingState.h +40 -0
  132. package/cpp/zxing-core/core/src/aztec/AZHighLevelEncoder.cpp +377 -0
  133. package/cpp/zxing-core/core/src/aztec/AZHighLevelEncoder.h +36 -0
  134. package/cpp/zxing-core/core/src/aztec/AZReader.cpp +45 -0
  135. package/cpp/zxing-core/core/src/aztec/AZReader.h +21 -0
  136. package/cpp/zxing-core/core/src/aztec/AZToken.cpp +44 -0
  137. package/cpp/zxing-core/core/src/aztec/AZToken.h +39 -0
  138. package/cpp/zxing-core/core/src/aztec/AZWriter.cpp +38 -0
  139. package/cpp/zxing-core/core/src/aztec/AZWriter.h +55 -0
  140. package/cpp/zxing-core/core/src/datamatrix/DMBitLayout.cpp +194 -0
  141. package/cpp/zxing-core/core/src/datamatrix/DMBitLayout.h +21 -0
  142. package/cpp/zxing-core/core/src/datamatrix/DMDataBlock.cpp +63 -0
  143. package/cpp/zxing-core/core/src/datamatrix/DMDataBlock.h +41 -0
  144. package/cpp/zxing-core/core/src/datamatrix/DMDecoder.cpp +457 -0
  145. package/cpp/zxing-core/core/src/datamatrix/DMDecoder.h +19 -0
  146. package/cpp/zxing-core/core/src/datamatrix/DMDetector.cpp +1230 -0
  147. package/cpp/zxing-core/core/src/datamatrix/DMDetector.h +23 -0
  148. package/cpp/zxing-core/core/src/datamatrix/DMECEncoder.cpp +137 -0
  149. package/cpp/zxing-core/core/src/datamatrix/DMECEncoder.h +26 -0
  150. package/cpp/zxing-core/core/src/datamatrix/DMEncoderContext.h +128 -0
  151. package/cpp/zxing-core/core/src/datamatrix/DMHighLevelEncoder.cpp +919 -0
  152. package/cpp/zxing-core/core/src/datamatrix/DMHighLevelEncoder.h +29 -0
  153. package/cpp/zxing-core/core/src/datamatrix/DMReader.cpp +40 -0
  154. package/cpp/zxing-core/core/src/datamatrix/DMReader.h +21 -0
  155. package/cpp/zxing-core/core/src/datamatrix/DMSymbolInfo.cpp +141 -0
  156. package/cpp/zxing-core/core/src/datamatrix/DMSymbolInfo.h +78 -0
  157. package/cpp/zxing-core/core/src/datamatrix/DMSymbolShape.h +17 -0
  158. package/cpp/zxing-core/core/src/datamatrix/DMVersion.cpp +82 -0
  159. package/cpp/zxing-core/core/src/datamatrix/DMVersion.h +76 -0
  160. package/cpp/zxing-core/core/src/datamatrix/DMWriter.cpp +114 -0
  161. package/cpp/zxing-core/core/src/datamatrix/DMWriter.h +62 -0
  162. package/cpp/zxing-core/core/src/librscpp/README.md +65 -0
  163. package/cpp/zxing-core/core/src/librscpp/decode.h +258 -0
  164. package/cpp/zxing-core/core/src/librscpp/encode.h +124 -0
  165. package/cpp/zxing-core/core/src/librscpp/field.h +158 -0
  166. package/cpp/zxing-core/core/src/librscpp/poly.h +194 -0
  167. package/cpp/zxing-core/core/src/libzint/2of5inter.c +1 -0
  168. package/cpp/zxing-core/core/src/libzint/2of5inter_based.c +1 -0
  169. package/cpp/zxing-core/core/src/libzint/aztec.c +1 -0
  170. package/cpp/zxing-core/core/src/libzint/aztec.h +1 -0
  171. package/cpp/zxing-core/core/src/libzint/big5.h +1 -0
  172. package/cpp/zxing-core/core/src/libzint/codabar.c +1 -0
  173. package/cpp/zxing-core/core/src/libzint/code.c +1 -0
  174. package/cpp/zxing-core/core/src/libzint/code128.c +1 -0
  175. package/cpp/zxing-core/core/src/libzint/code128.h +1 -0
  176. package/cpp/zxing-core/core/src/libzint/common.c +1 -0
  177. package/cpp/zxing-core/core/src/libzint/common.h +1 -0
  178. package/cpp/zxing-core/core/src/libzint/dmatrix.c +1 -0
  179. package/cpp/zxing-core/core/src/libzint/dmatrix.h +1 -0
  180. package/cpp/zxing-core/core/src/libzint/dxfilmedge.c +1 -0
  181. package/cpp/zxing-core/core/src/libzint/eci.c +1 -0
  182. package/cpp/zxing-core/core/src/libzint/eci.h +1 -0
  183. package/cpp/zxing-core/core/src/libzint/eci_sb.h +1 -0
  184. package/cpp/zxing-core/core/src/libzint/filemem.c +1 -0
  185. package/cpp/zxing-core/core/src/libzint/filemem.h +1 -0
  186. package/cpp/zxing-core/core/src/libzint/fonts/normal_woff2.h +1 -0
  187. package/cpp/zxing-core/core/src/libzint/fonts/upcean_woff2.h +1 -0
  188. package/cpp/zxing-core/core/src/libzint/gb18030.h +1 -0
  189. package/cpp/zxing-core/core/src/libzint/gb2312.h +1 -0
  190. package/cpp/zxing-core/core/src/libzint/gbk.h +1 -0
  191. package/cpp/zxing-core/core/src/libzint/general_field.c +1 -0
  192. package/cpp/zxing-core/core/src/libzint/general_field.h +1 -0
  193. package/cpp/zxing-core/core/src/libzint/gs1.c +1 -0
  194. package/cpp/zxing-core/core/src/libzint/gs1.h +1 -0
  195. package/cpp/zxing-core/core/src/libzint/gs1_lint.h +1 -0
  196. package/cpp/zxing-core/core/src/libzint/iso3166.h +1 -0
  197. package/cpp/zxing-core/core/src/libzint/iso4217.h +1 -0
  198. package/cpp/zxing-core/core/src/libzint/ksx1001.h +1 -0
  199. package/cpp/zxing-core/core/src/libzint/large.c +1 -0
  200. package/cpp/zxing-core/core/src/libzint/large.h +1 -0
  201. package/cpp/zxing-core/core/src/libzint/library.c +1 -0
  202. package/cpp/zxing-core/core/src/libzint/maxicode.c +1 -0
  203. package/cpp/zxing-core/core/src/libzint/maxicode.h +1 -0
  204. package/cpp/zxing-core/core/src/libzint/medical.c +1 -0
  205. package/cpp/zxing-core/core/src/libzint/output.c +1 -0
  206. package/cpp/zxing-core/core/src/libzint/output.h +1 -0
  207. package/cpp/zxing-core/core/src/libzint/pdf417.c +1 -0
  208. package/cpp/zxing-core/core/src/libzint/pdf417.h +1 -0
  209. package/cpp/zxing-core/core/src/libzint/pdf417_tabs.h +1 -0
  210. package/cpp/zxing-core/core/src/libzint/qr.c +1 -0
  211. package/cpp/zxing-core/core/src/libzint/qr.h +1 -0
  212. package/cpp/zxing-core/core/src/libzint/raster.c +1 -0
  213. package/cpp/zxing-core/core/src/libzint/raster_font.h +1 -0
  214. package/cpp/zxing-core/core/src/libzint/reedsol.c +1 -0
  215. package/cpp/zxing-core/core/src/libzint/reedsol.h +1 -0
  216. package/cpp/zxing-core/core/src/libzint/reedsol_logs.h +1 -0
  217. package/cpp/zxing-core/core/src/libzint/rss.c +1 -0
  218. package/cpp/zxing-core/core/src/libzint/rss.h +1 -0
  219. package/cpp/zxing-core/core/src/libzint/sjis.h +1 -0
  220. package/cpp/zxing-core/core/src/libzint/stubs.c +137 -0
  221. package/cpp/zxing-core/core/src/libzint/svg.c +1 -0
  222. package/cpp/zxing-core/core/src/libzint/telepen.c +1 -0
  223. package/cpp/zxing-core/core/src/libzint/upcean.c +1 -0
  224. package/cpp/zxing-core/core/src/libzint/vector.c +1 -0
  225. package/cpp/zxing-core/core/src/libzint/zfiletypes.h +1 -0
  226. package/cpp/zxing-core/core/src/libzint/zint.h +1 -0
  227. package/cpp/zxing-core/core/src/libzint/zintconfig.h +1 -0
  228. package/cpp/zxing-core/core/src/libzueci/README.md +11 -0
  229. package/cpp/zxing-core/core/src/libzueci/zueci.c +1718 -0
  230. package/cpp/zxing-core/core/src/libzueci/zueci.h +179 -0
  231. package/cpp/zxing-core/core/src/libzueci/zueci_big5.h +3884 -0
  232. package/cpp/zxing-core/core/src/libzueci/zueci_common.h +31 -0
  233. package/cpp/zxing-core/core/src/libzueci/zueci_gb18030.h +264 -0
  234. package/cpp/zxing-core/core/src/libzueci/zueci_gb2312.h +2381 -0
  235. package/cpp/zxing-core/core/src/libzueci/zueci_gbk.h +4047 -0
  236. package/cpp/zxing-core/core/src/libzueci/zueci_ksx1001.h +2932 -0
  237. package/cpp/zxing-core/core/src/libzueci/zueci_sb.h +1112 -0
  238. package/cpp/zxing-core/core/src/libzueci/zueci_sjis.h +2286 -0
  239. package/cpp/zxing-core/core/src/maxicode/MCBitMatrixParser.cpp +68 -0
  240. package/cpp/zxing-core/core/src/maxicode/MCBitMatrixParser.h +30 -0
  241. package/cpp/zxing-core/core/src/maxicode/MCDecoder.cpp +329 -0
  242. package/cpp/zxing-core/core/src/maxicode/MCDecoder.h +19 -0
  243. package/cpp/zxing-core/core/src/maxicode/MCReader.cpp +65 -0
  244. package/cpp/zxing-core/core/src/maxicode/MCReader.h +21 -0
  245. package/cpp/zxing-core/core/src/oned/ODCodabarReader.cpp +102 -0
  246. package/cpp/zxing-core/core/src/oned/ODCodabarReader.h +21 -0
  247. package/cpp/zxing-core/core/src/oned/ODCodabarWriter.cpp +136 -0
  248. package/cpp/zxing-core/core/src/oned/ODCodabarWriter.h +34 -0
  249. package/cpp/zxing-core/core/src/oned/ODCode128Patterns.h +130 -0
  250. package/cpp/zxing-core/core/src/oned/ODCode128Reader.cpp +236 -0
  251. package/cpp/zxing-core/core/src/oned/ODCode128Reader.h +21 -0
  252. package/cpp/zxing-core/core/src/oned/ODCode128Writer.cpp +261 -0
  253. package/cpp/zxing-core/core/src/oned/ODCode128Writer.h +34 -0
  254. package/cpp/zxing-core/core/src/oned/ODCode39Reader.cpp +213 -0
  255. package/cpp/zxing-core/core/src/oned/ODCode39Reader.h +26 -0
  256. package/cpp/zxing-core/core/src/oned/ODCode39Writer.cpp +176 -0
  257. package/cpp/zxing-core/core/src/oned/ODCode39Writer.h +34 -0
  258. package/cpp/zxing-core/core/src/oned/ODCode93Patterns.h +80 -0
  259. package/cpp/zxing-core/core/src/oned/ODCode93Reader.cpp +112 -0
  260. package/cpp/zxing-core/core/src/oned/ODCode93Reader.h +21 -0
  261. package/cpp/zxing-core/core/src/oned/ODCode93Writer.cpp +192 -0
  262. package/cpp/zxing-core/core/src/oned/ODCode93Writer.h +32 -0
  263. package/cpp/zxing-core/core/src/oned/ODDXFilmEdgeReader.cpp +246 -0
  264. package/cpp/zxing-core/core/src/oned/ODDXFilmEdgeReader.h +26 -0
  265. package/cpp/zxing-core/core/src/oned/ODDataBarCommon.cpp +172 -0
  266. package/cpp/zxing-core/core/src/oned/ODDataBarCommon.h +204 -0
  267. package/cpp/zxing-core/core/src/oned/ODDataBarExpandedBitDecoder.cpp +253 -0
  268. package/cpp/zxing-core/core/src/oned/ODDataBarExpandedBitDecoder.h +19 -0
  269. package/cpp/zxing-core/core/src/oned/ODDataBarExpandedReader.cpp +383 -0
  270. package/cpp/zxing-core/core/src/oned/ODDataBarExpandedReader.h +25 -0
  271. package/cpp/zxing-core/core/src/oned/ODDataBarLimitedReader.cpp +163 -0
  272. package/cpp/zxing-core/core/src/oned/ODDataBarLimitedReader.h +23 -0
  273. package/cpp/zxing-core/core/src/oned/ODDataBarReader.cpp +240 -0
  274. package/cpp/zxing-core/core/src/oned/ODDataBarReader.h +25 -0
  275. package/cpp/zxing-core/core/src/oned/ODEAN13Writer.cpp +62 -0
  276. package/cpp/zxing-core/core/src/oned/ODEAN13Writer.h +34 -0
  277. package/cpp/zxing-core/core/src/oned/ODEAN8Writer.cpp +51 -0
  278. package/cpp/zxing-core/core/src/oned/ODEAN8Writer.h +34 -0
  279. package/cpp/zxing-core/core/src/oned/ODITFReader.cpp +97 -0
  280. package/cpp/zxing-core/core/src/oned/ODITFReader.h +33 -0
  281. package/cpp/zxing-core/core/src/oned/ODITFWriter.cpp +78 -0
  282. package/cpp/zxing-core/core/src/oned/ODITFWriter.h +34 -0
  283. package/cpp/zxing-core/core/src/oned/ODMultiUPCEANReader.cpp +323 -0
  284. package/cpp/zxing-core/core/src/oned/ODMultiUPCEANReader.h +32 -0
  285. package/cpp/zxing-core/core/src/oned/ODReader.cpp +259 -0
  286. package/cpp/zxing-core/core/src/oned/ODReader.h +35 -0
  287. package/cpp/zxing-core/core/src/oned/ODRowReader.h +222 -0
  288. package/cpp/zxing-core/core/src/oned/ODTelepenReader.cpp +199 -0
  289. package/cpp/zxing-core/core/src/oned/ODTelepenReader.h +25 -0
  290. package/cpp/zxing-core/core/src/oned/ODUPCAWriter.cpp +33 -0
  291. package/cpp/zxing-core/core/src/oned/ODUPCAWriter.h +34 -0
  292. package/cpp/zxing-core/core/src/oned/ODUPCEANCommon.cpp +80 -0
  293. package/cpp/zxing-core/core/src/oned/ODUPCEANCommon.h +129 -0
  294. package/cpp/zxing-core/core/src/oned/ODUPCEWriter.cpp +56 -0
  295. package/cpp/zxing-core/core/src/oned/ODUPCEWriter.h +34 -0
  296. package/cpp/zxing-core/core/src/oned/ODWriterHelper.cpp +39 -0
  297. package/cpp/zxing-core/core/src/oned/ODWriterHelper.h +48 -0
  298. package/cpp/zxing-core/core/src/pdf417/MicroPDFReader.cpp +796 -0
  299. package/cpp/zxing-core/core/src/pdf417/MicroPDFReader.h +23 -0
  300. package/cpp/zxing-core/core/src/pdf417/PDF417.cpp +85 -0
  301. package/cpp/zxing-core/core/src/pdf417/PDF417.h +81 -0
  302. package/cpp/zxing-core/core/src/pdf417/PDFBarcodeMetadata.h +53 -0
  303. package/cpp/zxing-core/core/src/pdf417/PDFBarcodeValue.cpp +48 -0
  304. package/cpp/zxing-core/core/src/pdf417/PDFBarcodeValue.h +38 -0
  305. package/cpp/zxing-core/core/src/pdf417/PDFBoundingBox.cpp +116 -0
  306. package/cpp/zxing-core/core/src/pdf417/PDFBoundingBox.h +75 -0
  307. package/cpp/zxing-core/core/src/pdf417/PDFCodeword.h +71 -0
  308. package/cpp/zxing-core/core/src/pdf417/PDFCodewordDecoder.cpp +588 -0
  309. package/cpp/zxing-core/core/src/pdf417/PDFCodewordDecoder.h +41 -0
  310. package/cpp/zxing-core/core/src/pdf417/PDFCompaction.h +20 -0
  311. package/cpp/zxing-core/core/src/pdf417/PDFCustomData.h +32 -0
  312. package/cpp/zxing-core/core/src/pdf417/PDFDecoder.cpp +725 -0
  313. package/cpp/zxing-core/core/src/pdf417/PDFDecoder.h +20 -0
  314. package/cpp/zxing-core/core/src/pdf417/PDFDetectionResult.cpp +247 -0
  315. package/cpp/zxing-core/core/src/pdf417/PDFDetectionResult.h +74 -0
  316. package/cpp/zxing-core/core/src/pdf417/PDFDetectionResultColumn.cpp +321 -0
  317. package/cpp/zxing-core/core/src/pdf417/PDFDetectionResultColumn.h +83 -0
  318. package/cpp/zxing-core/core/src/pdf417/PDFDetector.cpp +371 -0
  319. package/cpp/zxing-core/core/src/pdf417/PDFDetector.h +45 -0
  320. package/cpp/zxing-core/core/src/pdf417/PDFEncoder.cpp +570 -0
  321. package/cpp/zxing-core/core/src/pdf417/PDFEncoder.h +182 -0
  322. package/cpp/zxing-core/core/src/pdf417/PDFHighLevelEncoder.cpp +570 -0
  323. package/cpp/zxing-core/core/src/pdf417/PDFHighLevelEncoder.h +32 -0
  324. package/cpp/zxing-core/core/src/pdf417/PDFReader.cpp +333 -0
  325. package/cpp/zxing-core/core/src/pdf417/PDFReader.h +28 -0
  326. package/cpp/zxing-core/core/src/pdf417/PDFScanningDecoder.cpp +559 -0
  327. package/cpp/zxing-core/core/src/pdf417/PDFScanningDecoder.h +41 -0
  328. package/cpp/zxing-core/core/src/pdf417/PDFWriter.cpp +170 -0
  329. package/cpp/zxing-core/core/src/pdf417/PDFWriter.h +74 -0
  330. package/cpp/zxing-core/core/src/pdf417/ZXBigInteger.cpp +623 -0
  331. package/cpp/zxing-core/core/src/pdf417/ZXBigInteger.h +81 -0
  332. package/cpp/zxing-core/core/src/pdf417/ZXNullable.h +105 -0
  333. package/cpp/zxing-core/core/src/qrcode/QRBitMatrixParser.cpp +294 -0
  334. package/cpp/zxing-core/core/src/qrcode/QRBitMatrixParser.h +41 -0
  335. package/cpp/zxing-core/core/src/qrcode/QRCodecMode.cpp +95 -0
  336. package/cpp/zxing-core/core/src/qrcode/QRCodecMode.h +59 -0
  337. package/cpp/zxing-core/core/src/qrcode/QRDataBlock.cpp +93 -0
  338. package/cpp/zxing-core/core/src/qrcode/QRDataBlock.h +52 -0
  339. package/cpp/zxing-core/core/src/qrcode/QRDataMask.h +50 -0
  340. package/cpp/zxing-core/core/src/qrcode/QRDecoder.cpp +359 -0
  341. package/cpp/zxing-core/core/src/qrcode/QRDecoder.h +19 -0
  342. package/cpp/zxing-core/core/src/qrcode/QRDetector.cpp +920 -0
  343. package/cpp/zxing-core/core/src/qrcode/QRDetector.h +45 -0
  344. package/cpp/zxing-core/core/src/qrcode/QRECB.h +52 -0
  345. package/cpp/zxing-core/core/src/qrcode/QREncodeResult.h +33 -0
  346. package/cpp/zxing-core/core/src/qrcode/QREncoder.cpp +568 -0
  347. package/cpp/zxing-core/core/src/qrcode/QREncoder.h +21 -0
  348. package/cpp/zxing-core/core/src/qrcode/QRErrorCorrectionLevel.cpp +51 -0
  349. package/cpp/zxing-core/core/src/qrcode/QRErrorCorrectionLevel.h +39 -0
  350. package/cpp/zxing-core/core/src/qrcode/QRFormatInformation.cpp +160 -0
  351. package/cpp/zxing-core/core/src/qrcode/QRFormatInformation.h +61 -0
  352. package/cpp/zxing-core/core/src/qrcode/QRMaskUtil.cpp +156 -0
  353. package/cpp/zxing-core/core/src/qrcode/QRMaskUtil.h +15 -0
  354. package/cpp/zxing-core/core/src/qrcode/QRMatrixUtil.cpp +318 -0
  355. package/cpp/zxing-core/core/src/qrcode/QRMatrixUtil.h +25 -0
  356. package/cpp/zxing-core/core/src/qrcode/QRReader.cpp +149 -0
  357. package/cpp/zxing-core/core/src/qrcode/QRReader.h +21 -0
  358. package/cpp/zxing-core/core/src/qrcode/QRVersion.cpp +754 -0
  359. package/cpp/zxing-core/core/src/qrcode/QRVersion.h +127 -0
  360. package/cpp/zxing-core/core/src/qrcode/QRWriter.cpp +51 -0
  361. package/cpp/zxing-core/core/src/qrcode/QRWriter.h +74 -0
  362. package/cpp/zxing-core/core/version.rc.in +34 -0
  363. package/cpp/zxing-core/core/zxing.pc.in +8 -0
  364. package/cpp/zxing-core/wrappers/ios/README.md +25 -0
  365. package/cpp/zxing-core/wrappers/ios/Sources/Wrapper/Version.h +29 -0
  366. package/cpp/zxing-core/zxing-cpp.podspec +45 -0
  367. package/lib/factory.d.ts +10 -0
  368. package/lib/factory.js +12 -0
  369. package/lib/index.d.ts +9 -0
  370. package/lib/index.js +9 -0
  371. package/lib/specs/Barcode.nitro.d.ts +63 -0
  372. package/lib/specs/Barcode.nitro.js +1 -0
  373. package/lib/specs/BarcodeFormat.d.ts +11 -0
  374. package/lib/specs/BarcodeFormat.js +1 -0
  375. package/lib/specs/BarcodeScanner.nitro.d.ts +89 -0
  376. package/lib/specs/BarcodeScanner.nitro.js +1 -0
  377. package/lib/specs/BarcodeScannerFactory.nitro.d.ts +26 -0
  378. package/lib/specs/BarcodeScannerFactory.nitro.js +1 -0
  379. package/lib/specs/BarcodeValueType.d.ts +9 -0
  380. package/lib/specs/BarcodeValueType.js +1 -0
  381. package/lib/specs/Point.d.ts +14 -0
  382. package/lib/specs/Point.js +1 -0
  383. package/lib/specs/Rect.d.ts +22 -0
  384. package/lib/specs/Rect.js +1 -0
  385. package/lib/useBarcodeScanner.d.ts +23 -0
  386. package/lib/useBarcodeScanner.js +25 -0
  387. package/nitro.json +20 -0
  388. package/nitrogen/generated/.gitattributes +1 -0
  389. package/nitrogen/generated/android/VisionCameraZxing+autolinking.cmake +83 -0
  390. package/nitrogen/generated/android/VisionCameraZxing+autolinking.gradle +27 -0
  391. package/nitrogen/generated/android/VisionCameraZxingOnLoad.cpp +49 -0
  392. package/nitrogen/generated/android/VisionCameraZxingOnLoad.hpp +34 -0
  393. package/nitrogen/generated/android/kotlin/com/margelo/nitro/camera/zxing/VisionCameraZxingOnLoad.kt +35 -0
  394. package/nitrogen/generated/ios/VisionCameraZxing+autolinking.rb +62 -0
  395. package/nitrogen/generated/ios/VisionCameraZxing-Swift-Cxx-Bridge.cpp +17 -0
  396. package/nitrogen/generated/ios/VisionCameraZxing-Swift-Cxx-Bridge.hpp +27 -0
  397. package/nitrogen/generated/ios/VisionCameraZxing-Swift-Cxx-Umbrella.hpp +38 -0
  398. package/nitrogen/generated/ios/VisionCameraZxingAutolinking.mm +35 -0
  399. package/nitrogen/generated/ios/VisionCameraZxingAutolinking.swift +16 -0
  400. package/nitrogen/generated/shared/c++/BarcodeFormat.hpp +124 -0
  401. package/nitrogen/generated/shared/c++/BarcodeScannerOptions.hpp +85 -0
  402. package/nitrogen/generated/shared/c++/BarcodeValueType.hpp +120 -0
  403. package/nitrogen/generated/shared/c++/HybridBarcodeScannerSpec.cpp +23 -0
  404. package/nitrogen/generated/shared/c++/HybridBarcodeScannerSpec.hpp +74 -0
  405. package/nitrogen/generated/shared/c++/HybridBarcodeSpec.cpp +27 -0
  406. package/nitrogen/generated/shared/c++/HybridBarcodeSpec.hpp +82 -0
  407. package/nitrogen/generated/shared/c++/HybridZXingBarcodeScannerFactorySpec.cpp +21 -0
  408. package/nitrogen/generated/shared/c++/HybridZXingBarcodeScannerFactorySpec.hpp +67 -0
  409. package/nitrogen/generated/shared/c++/Point.hpp +87 -0
  410. package/nitrogen/generated/shared/c++/Rect.hpp +95 -0
  411. package/nitrogen/generated/shared/c++/TargetBarcodeFormat.hpp +124 -0
  412. package/package.json +108 -0
  413. package/react-native.config.js +16 -0
  414. package/src/factory.ts +26 -0
  415. package/src/index.ts +9 -0
  416. package/src/specs/Barcode.nitro.ts +70 -0
  417. package/src/specs/BarcodeFormat.ts +31 -0
  418. package/src/specs/BarcodeScanner.nitro.ts +91 -0
  419. package/src/specs/BarcodeScannerFactory.nitro.ts +27 -0
  420. package/src/specs/BarcodeValueType.ts +25 -0
  421. package/src/specs/Point.ts +14 -0
  422. package/src/specs/Rect.ts +22 -0
  423. package/src/useBarcodeScanner.ts +36 -0
@@ -0,0 +1,83 @@
1
+ /*
2
+ * Copyright 2016 Nu-book Inc.
3
+ * Copyright 2016 ZXing authors
4
+ */
5
+ // SPDX-License-Identifier: Apache-2.0
6
+
7
+ #pragma once
8
+
9
+ #include "PDFBoundingBox.h"
10
+ #include "PDFCodeword.h"
11
+ #include "ZXNullable.h"
12
+
13
+ #include <vector>
14
+
15
+ namespace ZXing {
16
+ namespace Pdf417 {
17
+
18
+ class BarcodeMetadata;
19
+
20
+ /**
21
+ * @author Guenther Grau
22
+ */
23
+ class DetectionResultColumn
24
+ {
25
+ public:
26
+ enum class RowIndicator {
27
+ None,
28
+ Left,
29
+ Right,
30
+ };
31
+
32
+ DetectionResultColumn() = default;
33
+ explicit DetectionResultColumn(const BoundingBox& boundingBox, RowIndicator rowInd = RowIndicator::None);
34
+
35
+ bool isRowIndicator() const {
36
+ return _rowIndicator != RowIndicator::None;
37
+ }
38
+
39
+ bool isLeftRowIndicator() const {
40
+ return _rowIndicator == RowIndicator::Left;
41
+ }
42
+
43
+ Nullable<Codeword> codewordNearby(int imageRow) const;
44
+
45
+ int imageRowToCodewordIndex(int imageRow) const {
46
+ return imageRow - _boundingBox.minY();
47
+ }
48
+
49
+ void setCodeword(int imageRow, Codeword codeword) {
50
+ _codewords[imageRowToCodewordIndex(imageRow)] = codeword;
51
+ }
52
+
53
+ Nullable<Codeword> codeword(int imageRow) const {
54
+ return _codewords[imageRowToCodewordIndex(imageRow)];
55
+ }
56
+
57
+ const BoundingBox& boundingBox() const {
58
+ return _boundingBox;
59
+ }
60
+
61
+ const std::vector<Nullable<Codeword>>& allCodewords() const {
62
+ return _codewords;
63
+ }
64
+
65
+ std::vector<Nullable<Codeword>>& allCodewords() {
66
+ return _codewords;
67
+ }
68
+
69
+ void adjustCompleteIndicatorColumnRowNumbers(const BarcodeMetadata& barcodeMetadata);
70
+ bool getRowHeights(std::vector<int>& result); // not const, since it modifies object's state
71
+ bool getBarcodeMetadata(BarcodeMetadata& result); // not const, since it modifies object's state
72
+
73
+ private:
74
+ BoundingBox _boundingBox;
75
+ std::vector<Nullable<Codeword>> _codewords;
76
+ RowIndicator _rowIndicator = RowIndicator::None;
77
+
78
+ void setRowNumbers();
79
+ void adjustIncompleteIndicatorColumnRowNumbers(const BarcodeMetadata& barcodeMetadata);
80
+ };
81
+
82
+ } // Pdf417
83
+ } // ZXing
@@ -0,0 +1,371 @@
1
+ /*
2
+ * Copyright 2016 Nu-book Inc.
3
+ * Copyright 2016 ZXing authors
4
+ */
5
+ // SPDX-License-Identifier: Apache-2.0
6
+
7
+ #include "PDFDetector.h"
8
+ #include "BinaryBitmap.h"
9
+ #include "BitMatrix.h"
10
+ #include "ZXNullable.h"
11
+ #include "Pattern.h"
12
+
13
+ #include <algorithm>
14
+ #include <array>
15
+ #include <cstdlib>
16
+ #include <limits>
17
+ #include <list>
18
+ #include <vector>
19
+
20
+ namespace ZXing {
21
+ namespace Pdf417 {
22
+
23
+ static const int INDEXES_START_PATTERN[] = { 0, 4, 1, 5 };
24
+ static const int INDEXES_STOP_PATTERN[] = { 6, 2, 7, 3 };
25
+ static const float MAX_AVG_VARIANCE = 0.42f;
26
+ static const float MAX_INDIVIDUAL_VARIANCE = 0.8f;
27
+
28
+ static const int MAX_PIXEL_DRIFT = 3;
29
+ static const int MAX_PATTERN_DRIFT = 5;
30
+ // if we set the value too low, then we don't detect the correct height of the bar if the start patterns are damaged.
31
+ // if we set the value too high, then we might detect the start pattern from a neighbor barcode.
32
+ static const int SKIPPED_ROW_COUNT_MAX = 25;
33
+ // A PDF471 barcode should have at least 3 rows, with each row being >= 3 times the module width. Therefore it should be at least
34
+ // 9 pixels tall. To be conservative, we use about half the size to ensure we don't miss it.
35
+ static const int ROW_STEP = 8; // used to be 5, but 8 is enough for conforming symbols
36
+ static const int BARCODE_MIN_HEIGHT = 10;
37
+
38
+ /**
39
+ * Determines how closely a set of observed counts of runs of black/white
40
+ * values matches a given target pattern. This is reported as the ratio of
41
+ * the total variance from the expected pattern proportions across all
42
+ * pattern elements, to the length of the pattern.
43
+ *
44
+ * @param counters observed counters
45
+ * @param pattern expected pattern
46
+ * @param maxIndividualVariance The most any counter can differ before we give up
47
+ * @return ratio of total variance between counters and pattern compared to total pattern size
48
+ */
49
+ static float
50
+ PatternMatchVariance(const std::vector<int>& counters, const std::vector<int>& pattern, float maxIndividualVariance)
51
+ {
52
+ int total = 0;
53
+ int patternLength = 0;
54
+ for (size_t i = 0; i < counters.size(); i++) {
55
+ total += counters[i];
56
+ patternLength += pattern[i];
57
+ }
58
+ if (total < patternLength) {
59
+ // If we don't even have one pixel per unit of bar width, assume this
60
+ // is too small to reliably match, so fail:
61
+ return std::numeric_limits<float>::max();
62
+ }
63
+ // We're going to fake floating-point math in integers. We just need to use more bits.
64
+ // Scale up patternLength so that intermediate values below like scaledCounter will have
65
+ // more "significant digits".
66
+ float unitBarWidth = (float)total / patternLength;
67
+ maxIndividualVariance *= unitBarWidth;
68
+
69
+ float totalVariance = 0.0f;
70
+ for (size_t x = 0; x < counters.size(); x++) {
71
+ int counter = counters[x];
72
+ float scaledPattern = pattern[x] * unitBarWidth;
73
+ float variance = counter > scaledPattern ? counter - scaledPattern : scaledPattern - counter;
74
+ if (variance > maxIndividualVariance) {
75
+ return std::numeric_limits<float>::max();
76
+ }
77
+ totalVariance += variance;
78
+ }
79
+ return totalVariance / total;
80
+ }
81
+
82
+
83
+ /**
84
+ * @param matrix row of black/white values to search
85
+ * @param column x position to start search
86
+ * @param row y position to start search
87
+ * @param width the number of pixels to search on this row
88
+ * @param pattern pattern of counts of number of black and white pixels that are
89
+ * being searched for as a pattern
90
+ * @param counters array of counters, as long as pattern, to re-use
91
+ * @return start/end horizontal offset of guard pattern, as an array of two ints.
92
+ */
93
+ static bool
94
+ FindGuardPattern(const BitMatrix& matrix, int column, int row, int width, bool whiteFirst, const std::vector<int>& pattern, std::vector<int>& counters, int& startPos, int& endPos)
95
+ {
96
+ std::fill(counters.begin(), counters.end(), 0);
97
+ int patternLength = Size(pattern);
98
+ bool isWhite = whiteFirst;
99
+ int patternStart = column;
100
+ int pixelDrift = 0;
101
+
102
+ // if there are black pixels left of the current pixel shift to the left, but only for MAX_PIXEL_DRIFT pixels
103
+ while (matrix.get(patternStart, row) && patternStart > 0 && pixelDrift++ < MAX_PIXEL_DRIFT) {
104
+ patternStart--;
105
+ }
106
+ int x = patternStart;
107
+ int counterPosition = 0;
108
+ for (; x < width; x++) {
109
+ bool pixel = matrix.get(x, row);
110
+ if (pixel != isWhite) {
111
+ counters[counterPosition]++;
112
+ }
113
+ else {
114
+ if (counterPosition == patternLength - 1) {
115
+ if (PatternMatchVariance(counters, pattern, MAX_INDIVIDUAL_VARIANCE) < MAX_AVG_VARIANCE) {
116
+ startPos = patternStart;
117
+ endPos = x;
118
+ return true;
119
+ }
120
+ patternStart += counters[0] + counters[1];
121
+ std::copy(counters.begin() + 2, counters.end(), counters.begin());
122
+ counters[patternLength - 2] = 0;
123
+ counters[patternLength - 1] = 0;
124
+ counterPosition--;
125
+ }
126
+ else {
127
+ counterPosition++;
128
+ }
129
+ counters[counterPosition] = 1;
130
+ isWhite = !isWhite;
131
+ }
132
+ }
133
+ if (counterPosition == patternLength - 1) {
134
+ if (PatternMatchVariance(counters, pattern, MAX_INDIVIDUAL_VARIANCE) < MAX_AVG_VARIANCE) {
135
+ startPos = patternStart;
136
+ endPos = x - 1;
137
+ return true;
138
+ }
139
+ }
140
+ return false;
141
+ }
142
+
143
+ static std::array<Nullable<ResultPoint>, 4>&
144
+ FindRowsWithPattern(const BitMatrix& matrix, int height, int width, int startRow, int startColumn, const std::vector<int>& pattern, std::array<Nullable<ResultPoint>, 4>& result)
145
+ {
146
+ bool found = false;
147
+ int startPos, endPos;
148
+ int minStartRow = startRow;
149
+ std::vector<int> counters(pattern.size(), 0);
150
+ for (; startRow < height; startRow += ROW_STEP) {
151
+ if (FindGuardPattern(matrix, startColumn, startRow, width, false, pattern, counters, startPos, endPos)) {
152
+ while (startRow > minStartRow + 1) {
153
+ if (!FindGuardPattern(matrix, startColumn, --startRow, width, false, pattern, counters, startPos, endPos)) {
154
+ startRow++;
155
+ break;
156
+ }
157
+ }
158
+ result[0] = ResultPoint(startPos, startRow);
159
+ result[1] = ResultPoint(endPos, startRow);
160
+ found = true;
161
+ break;
162
+ }
163
+ }
164
+ int stopRow = startRow + 1;
165
+ // Last row of the current symbol that contains pattern
166
+ if (found) {
167
+ int skippedRowCount = 0;
168
+ int previousRowStart = static_cast<int>(result[0].value().x());
169
+ int previousRowEnd = static_cast<int>(result[1].value().x());
170
+ for (; stopRow < height; stopRow++) {
171
+ int startPos, endPos;
172
+ found = FindGuardPattern(matrix, previousRowStart, stopRow, width, false, pattern, counters, startPos, endPos);
173
+ // a found pattern is only considered to belong to the same barcode if the start and end positions
174
+ // don't differ too much. Pattern drift should be not bigger than two for consecutive rows. With
175
+ // a higher number of skipped rows drift could be larger. To keep it simple for now, we allow a slightly
176
+ // larger drift and don't check for skipped rows.
177
+ if (found && std::abs(previousRowStart - startPos) < MAX_PATTERN_DRIFT && std::abs(previousRowEnd - endPos) < MAX_PATTERN_DRIFT) {
178
+ previousRowStart = startPos;
179
+ previousRowEnd = endPos;
180
+ skippedRowCount = 0;
181
+ }
182
+ else if (skippedRowCount > SKIPPED_ROW_COUNT_MAX) {
183
+ break;
184
+ }
185
+ else {
186
+ skippedRowCount++;
187
+ }
188
+ }
189
+ stopRow -= skippedRowCount + 1;
190
+ result[2] = ResultPoint(previousRowStart, stopRow);
191
+ result[3] = ResultPoint(previousRowEnd, stopRow);
192
+ }
193
+ if (stopRow - startRow < BARCODE_MIN_HEIGHT) {
194
+ std::fill(result.begin(), result.end(), nullptr);
195
+ }
196
+ return result;
197
+ }
198
+
199
+ static void
200
+ CopyToResult(std::array<Nullable<ResultPoint>, 8>& result, const std::array<Nullable<ResultPoint>, 4>& tmpResult, const int destinationIndexes[4])
201
+ {
202
+ for (int i = 0; i < 4; i++) {
203
+ result[destinationIndexes[i]] = tmpResult[i];
204
+ }
205
+ }
206
+
207
+ /**
208
+ * Locate the vertices and the codewords area of a black blob using the Start
209
+ * and Stop patterns as locators.
210
+ *
211
+ * @param matrix the scanned barcode image.
212
+ * @return an array containing the vertices:
213
+ * vertices[0] x, y top left barcode
214
+ * vertices[1] x, y bottom left barcode
215
+ * vertices[2] x, y top right barcode
216
+ * vertices[3] x, y bottom right barcode
217
+ * vertices[4] x, y top left codeword area
218
+ * vertices[5] x, y bottom left codeword area
219
+ * vertices[6] x, y top right codeword area
220
+ * vertices[7] x, y bottom right codeword area
221
+ */
222
+ static std::array<Nullable<ResultPoint>, 8> FindVertices(const BitMatrix& matrix, int startRow, int startColumn)
223
+ {
224
+ // B S B S B S B S Bar/Space pattern
225
+ // 11111111 0 1 0 1 0 1 000
226
+ static const std::vector<int> START_PATTERN = { 8, 1, 1, 1, 1, 1, 1, 3 };
227
+ // 1111111 0 1 000 1 0 1 00 1
228
+ static const std::vector<int> STOP_PATTERN = { 7, 1, 1, 3, 1, 1, 1, 2, 1 };
229
+
230
+ int width = matrix.width();
231
+ int height = matrix.height();
232
+
233
+ std::array<Nullable<ResultPoint>, 4> tmp;
234
+ std::array<Nullable<ResultPoint>, 8> result;
235
+ CopyToResult(result, FindRowsWithPattern(matrix, height, width, startRow, startColumn, START_PATTERN, tmp), INDEXES_START_PATTERN);
236
+
237
+ if (result[4] != nullptr) {
238
+ startColumn = static_cast<int>(result[4].value().x());
239
+ startRow = static_cast<int>(result[4].value().y());
240
+ #if 1 // 2x speed improvement for images with no PDF417 symbol by not looking for symbols without start guard (which are not conforming to spec anyway)
241
+ CopyToResult(result, FindRowsWithPattern(matrix, height, width, startRow, startColumn, STOP_PATTERN, tmp), INDEXES_STOP_PATTERN);
242
+ }
243
+ #else
244
+ }
245
+ CopyToResult(result, FindRowsWithPattern(matrix, height, width, startRow, startColumn, STOP_PATTERN, tmp), INDEXES_STOP_PATTERN);
246
+ #endif
247
+ return result;
248
+ }
249
+
250
+ /**
251
+ * Detects PDF417 codes in an image. Only checks 0 degree rotation
252
+ * @param multiple if true, then the image is searched for multiple codes. If false, then at most one code will
253
+ * be found and returned
254
+ * @param bitMatrix bit matrix to detect barcodes in
255
+ * @return List of ResultPoint arrays containing the coordinates of found barcodes
256
+ */
257
+ static std::list<std::array<Nullable<ResultPoint>, 8>> DetectBarcode(const BitMatrix& bitMatrix, bool multiple)
258
+ {
259
+ int row = 0;
260
+ int column = 0;
261
+ bool foundBarcodeInRow = false;
262
+ std::list<std::array<Nullable<ResultPoint>, 8>> barcodeCoordinates;
263
+
264
+ while (row < bitMatrix.height()) {
265
+ auto vertices = FindVertices(bitMatrix, row, column);
266
+
267
+ if (vertices[0] == nullptr && vertices[3] == nullptr) {
268
+ if (!foundBarcodeInRow) {
269
+ // we didn't find any barcode so that's the end of searching
270
+ break;
271
+ }
272
+ // we didn't find a barcode starting at the given column and row. Try again from the first column and slightly
273
+ // below the lowest barcode we found so far.
274
+ foundBarcodeInRow = false;
275
+ column = 0;
276
+ for (auto& barcodeCoordinate : barcodeCoordinates) {
277
+ if (barcodeCoordinate[1] != nullptr) {
278
+ row = std::max(row, static_cast<int>(barcodeCoordinate[1].value().y()));
279
+ }
280
+ if (barcodeCoordinate[3] != nullptr) {
281
+ row = std::max(row, static_cast<int>(barcodeCoordinate[3].value().y()));
282
+ }
283
+ }
284
+ row += ROW_STEP;
285
+ continue;
286
+ }
287
+ foundBarcodeInRow = true;
288
+ barcodeCoordinates.push_back(vertices);
289
+ if (!multiple) {
290
+ break;
291
+ }
292
+ // if we didn't find a right row indicator column, then continue the search for the next barcode after the
293
+ // start pattern of the barcode just found.
294
+ if (vertices[2] != nullptr) {
295
+ column = static_cast<int>(vertices[2].value().x());
296
+ row = static_cast<int>(vertices[2].value().y());
297
+ }
298
+ else {
299
+ column = static_cast<int>(vertices[4].value().x());
300
+ row = static_cast<int>(vertices[4].value().y());
301
+ }
302
+ }
303
+ return barcodeCoordinates;
304
+ }
305
+
306
+ bool HasStartPattern(const BitMatrix& m, bool rotate90)
307
+ {
308
+ constexpr FixedPattern<8, 17> START_PATTERN = { 8, 1, 1, 1, 1, 1, 1, 3 };
309
+ constexpr int minSymbolWidth = 3*8+1; // compact symbol
310
+
311
+ PatternRow row;
312
+ int end = rotate90 ? m.width() : m.height();
313
+
314
+ for (int r = ROW_STEP; r < end; r += ROW_STEP) {
315
+ GetPatternRow(m, r, row, rotate90);
316
+
317
+ if (FindLeftGuard(row, minSymbolWidth, START_PATTERN, 2).isValid())
318
+ return true;
319
+ std::reverse(row.begin(), row.end());
320
+ if (FindLeftGuard(row, minSymbolWidth, START_PATTERN, 2).isValid())
321
+ return true;
322
+ }
323
+
324
+ return false;
325
+ }
326
+
327
+ /**
328
+ * <p>Detects a PDF417 Code in an image. Only checks 0 and 180 degree rotations.</p>
329
+ *
330
+ * @param image barcode image to decode
331
+ * @param multiple if true, then the image is searched for multiple codes. If false, then at most one code will
332
+ * be found and returned
333
+ */
334
+ Detector::Result Detector::Detect(const BinaryBitmap& image, bool multiple, bool tryRotate)
335
+ {
336
+ // construct a 'dummy' shared pointer, just be able to pass it up the call chain in DetectorResult
337
+ // TODO: reimplement PDF Detector
338
+ auto binImg = std::shared_ptr<const BitMatrix>(image.getBitMatrix(), [](const BitMatrix*){});
339
+ if (!binImg)
340
+ return {};
341
+
342
+ Result result;
343
+
344
+ for (int rotate90 = 0; rotate90 <= static_cast<int>(tryRotate); ++rotate90) {
345
+ if (!HasStartPattern(*binImg, rotate90))
346
+ continue;
347
+
348
+ result.rotation = 90 * rotate90;
349
+ if (rotate90) {
350
+ binImg = std::shared_ptr<const BitMatrix>(image.getBitMatrix(true), [](const BitMatrix*){});
351
+ }
352
+
353
+ result.points = DetectBarcode(*binImg, multiple);
354
+ result.bits = binImg;
355
+ if (result.points.empty()) {
356
+ auto newBits = std::make_shared<BitMatrix>(binImg->copy());
357
+ newBits->rotate180();
358
+ result.points = DetectBarcode(*newBits, multiple);
359
+ result.rotation += 180;
360
+ result.bits = newBits;
361
+ }
362
+
363
+ if (!result.points.empty())
364
+ return result;
365
+ }
366
+
367
+ return {};
368
+ }
369
+
370
+ } // Pdf417
371
+ } // ZXing
@@ -0,0 +1,45 @@
1
+ /*
2
+ * Copyright 2016 Nu-book Inc.
3
+ * Copyright 2016 ZXing authors
4
+ */
5
+ // SPDX-License-Identifier: Apache-2.0
6
+
7
+ #pragma once
8
+
9
+ #include "ResultPoint.h"
10
+ #include "ZXNullable.h"
11
+
12
+ #include <list>
13
+ #include <array>
14
+ #include <memory>
15
+
16
+ namespace ZXing {
17
+
18
+ class BitMatrix;
19
+ class BinaryBitmap;
20
+
21
+ namespace Pdf417 {
22
+
23
+ /**
24
+ * <p>Encapsulates logic that can detect a PDF417 Code in an image, even if the
25
+ * PDF417 Code is rotated or skewed, or partially obscured.< / p>
26
+ *
27
+ * @author SITA Lab(kevin.osullivan@sita.aero)
28
+ * @author dswitkin@google.com(Daniel Switkin)
29
+ * @author Guenther Grau
30
+ */
31
+ class Detector
32
+ {
33
+ public:
34
+ struct Result
35
+ {
36
+ std::shared_ptr<const BitMatrix> bits;
37
+ std::list<std::array<Nullable<ResultPoint>, 8>> points;
38
+ int rotation = -1;
39
+ };
40
+
41
+ static Result Detect(const BinaryBitmap& image, bool multiple, bool tryRotate);
42
+ };
43
+
44
+ } // Pdf417
45
+ } // ZXing