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,335 @@
1
+ /*
2
+ * Copyright 2019 Axel Waggershauser
3
+ */
4
+ // SPDX-License-Identifier: Apache-2.0
5
+
6
+ #include "ReadBarcode.h"
7
+ #include "ReaderOptions.h"
8
+ #include "BarcodeData.h"
9
+ #include "Version.h"
10
+
11
+ #include <utility>
12
+
13
+
14
+ #ifdef ZXING_READERS
15
+ #include "GlobalHistogramBinarizer.h"
16
+ #include "HybridBinarizer.h"
17
+ #include "MultiFormatReader.h"
18
+ #include "Pattern.h"
19
+ #include "ThresholdBinarizer.h"
20
+ #endif
21
+
22
+ #include <climits>
23
+ #include <memory>
24
+ #include <stdexcept>
25
+
26
+ namespace ZXing {
27
+
28
+ // ==============================================================================
29
+ // ReaderOptions implementation
30
+ // ==============================================================================
31
+
32
+ struct ReaderOptions::Data
33
+ {
34
+ bool tryHarder : 1 = true;
35
+ bool tryRotate : 1 = true;
36
+ bool tryInvert : 1 = true;
37
+ bool tryDownscale : 1 = true;
38
+ #ifdef ZXING_EXPERIMENTAL_API
39
+ bool tryDenoise : 1 = false;
40
+ #endif
41
+ bool isPure : 1 = false;
42
+ bool validateOptionalChecksum : 1 = false;
43
+ bool returnErrors : 1 = false;
44
+ uint8_t downscaleFactor : 3 = 3; // values 2, 3, 4
45
+ EanAddOnSymbol eanAddOnSymbol : 2 = EanAddOnSymbol::Ignore;
46
+ Binarizer binarizer : 2 = Binarizer::LocalAverage;
47
+ TextMode textMode : 3 = TextMode::HRI;
48
+ CharacterSet characterSet : 6 = CharacterSet::Unknown;
49
+
50
+ uint8_t minLineCount = 2;
51
+ uint8_t maxNumberOfSymbols = 0xff;
52
+ uint16_t downscaleThreshold = 500;
53
+ BarcodeFormats formats = {};
54
+ };
55
+
56
+ ReaderOptions::ReaderOptions() : d(std::make_unique<Data>()) {}
57
+ ReaderOptions::~ReaderOptions() = default;
58
+
59
+ // copy
60
+ ReaderOptions::ReaderOptions(const ReaderOptions& other) : d(std::make_unique<Data>(*other.d)) {}
61
+ ReaderOptions& ReaderOptions::operator=(const ReaderOptions& other)
62
+ {
63
+ if (this != &other)
64
+ d = std::make_unique<Data>(*other.d);
65
+ return *this;
66
+ }
67
+
68
+ // move
69
+ ReaderOptions::ReaderOptions(ReaderOptions&&) noexcept = default;
70
+ ReaderOptions& ReaderOptions::operator=(ReaderOptions&&) noexcept = default;
71
+
72
+ const BarcodeFormats& ReaderOptions::formats() const noexcept { return d->formats; }
73
+ ReaderOptions& ReaderOptions::formats(BarcodeFormats&& v) & { return (void)(d->formats = std::move(v)), *this; }
74
+ ReaderOptions&& ReaderOptions::formats(BarcodeFormats&& v) && { return (void)(d->formats = std::move(v)), std::move(*this); }
75
+
76
+ #define ZX_PROPERTY(TYPE, NAME, SETTER) \
77
+ TYPE ReaderOptions::NAME() const noexcept { return d->NAME; } \
78
+ ReaderOptions& ReaderOptions::NAME(TYPE v) & { return (void)(d->NAME = std::move(v)), *this; } \
79
+ ReaderOptions&& ReaderOptions::NAME(TYPE v) && { return (void)(d->NAME = std::move(v)), std::move(*this); }
80
+
81
+ ZX_PROPERTY(bool, tryHarder, setTryHarder)
82
+ ZX_PROPERTY(bool, tryRotate, setTryRotate)
83
+ ZX_PROPERTY(bool, tryInvert, setTryInvert)
84
+ ZX_PROPERTY(bool, tryDownscale, setTryDownscale)
85
+ #ifdef ZXING_EXPERIMENTAL_API
86
+ ZX_PROPERTY(bool, tryDenoise, setTryDenoise)
87
+ #endif
88
+ ZX_PROPERTY(Binarizer, binarizer, setBinarizer)
89
+ ZX_PROPERTY(bool, isPure, setIsPure)
90
+ ZX_PROPERTY(uint16_t, downscaleThreshold, setDownscaleThreshold)
91
+ ZX_PROPERTY(uint8_t, downscaleFactor, setDownscaleFactor)
92
+ ZX_PROPERTY(uint8_t, minLineCount, setMinLineCount)
93
+ ZX_PROPERTY(uint8_t, maxNumberOfSymbols, setMaxNumberOfSymbols)
94
+ ZX_PROPERTY(bool, validateOptionalChecksum, setValidateOptionalChecksum)
95
+ ZX_PROPERTY(bool, returnErrors, setReturnErrors)
96
+ ZX_PROPERTY(EanAddOnSymbol, eanAddOnSymbol, setEanAddOnSymbol)
97
+ ZX_PROPERTY(TextMode, textMode, setTextMode)
98
+ ZX_PROPERTY(CharacterSet, characterSet, setCharacterSet)
99
+
100
+ #undef ZX_PROPERTY
101
+
102
+ ReaderOptions& ReaderOptions::characterSet(std::string_view v) &
103
+ {
104
+ d->characterSet = CharacterSetFromString(v);
105
+ return *this;
106
+ }
107
+ ReaderOptions&& ReaderOptions::characterSet(std::string_view v) &&
108
+ {
109
+ d->characterSet = CharacterSetFromString(v);
110
+ return std::move(*this);
111
+ }
112
+
113
+ bool ReaderOptions::hasFormat(const BarcodeFormats& formats) const noexcept
114
+ {
115
+ return d->formats.empty() || std::any_of(formats.begin(), formats.end(), [this](BarcodeFormat bt) { return bt <= d->formats; });
116
+ }
117
+
118
+ bool ReaderOptions::hasAnyFormat(const BarcodeFormats& formats) const noexcept
119
+ {
120
+ return d->formats.empty() || std::any_of(formats.begin(), formats.end(), [this](BarcodeFormat bt) { return bt & d->formats; });
121
+ }
122
+
123
+ // ==============================================================================
124
+ // ReadBarcode implementation
125
+ // ==============================================================================
126
+
127
+ #ifdef ZXING_READERS
128
+
129
+ class LumImage : public Image
130
+ {
131
+ public:
132
+ using Image::Image;
133
+
134
+ uint8_t* data() { return const_cast<uint8_t*>(Image::data()); }
135
+ };
136
+
137
+ template<typename P>
138
+ static LumImage ExtractLum(const ImageView& iv, P projection)
139
+ {
140
+ LumImage res(iv.width(), iv.height());
141
+
142
+ auto* dst = res.data();
143
+ for(int y = 0; y < iv.height(); ++y)
144
+ for(int x = 0, w = iv.width(); x < w; ++x)
145
+ *dst++ = projection(iv.data(x, y));
146
+
147
+ return res;
148
+ }
149
+
150
+ class LumImagePyramid
151
+ {
152
+ std::vector<LumImage> buffers;
153
+
154
+ template<int N>
155
+ void addLayer()
156
+ {
157
+ auto siv = layers.back();
158
+ buffers.emplace_back(siv.width() / N, siv.height() / N);
159
+ layers.push_back(buffers.back());
160
+ auto& div = buffers.back();
161
+ auto* d = div.data();
162
+
163
+ for (int dy = 0; dy < div.height(); ++dy)
164
+ for (int dx = 0; dx < div.width(); ++dx) {
165
+ int sum = (N * N) / 2;
166
+ for (int ty = 0; ty < N; ++ty)
167
+ for (int tx = 0; tx < N; ++tx)
168
+ sum += *siv.data(dx * N + tx, dy * N + ty);
169
+ *d++ = sum / (N * N);
170
+ }
171
+ }
172
+
173
+ void addLayer(int factor)
174
+ {
175
+ // help the compiler's auto-vectorizer by hard-coding the scale factor
176
+ switch (factor) {
177
+ case 2: addLayer<2>(); break;
178
+ case 3: addLayer<3>(); break;
179
+ case 4: addLayer<4>(); break;
180
+ default: throw std::invalid_argument("Invalid ReaderOptions::downscaleFactor"); break;
181
+ }
182
+ }
183
+
184
+ public:
185
+ std::vector<ImageView> layers;
186
+
187
+ LumImagePyramid(const ImageView& iv, int threshold, int factor)
188
+ {
189
+ if (factor < 2)
190
+ throw std::invalid_argument("Invalid ReaderOptions::downscaleFactor");
191
+
192
+ layers.push_back(iv);
193
+ // TODO: if only matrix codes were considered, then using std::min would be sufficient (see #425)
194
+ while (threshold > 0 && std::max(layers.back().width(), layers.back().height()) > threshold &&
195
+ std::min(layers.back().width(), layers.back().height()) >= factor)
196
+ addLayer(factor);
197
+ #if 0
198
+ // Reversing the layers means we'd start with the smallest. that can make sense if we are only looking for a
199
+ // single symbol. If we start with the higher resolution, we get better (high res) position information.
200
+ // TODO: see if masking out higher res layers based on found symbols in lower res helps overall performance.
201
+ std::reverse(layers.begin(), layers.end());
202
+ #endif
203
+ }
204
+ };
205
+
206
+ ImageView SetupLumImageView(ImageView iv, LumImage& lum, const ReaderOptions& opts)
207
+ {
208
+ if (iv.format() == ImageFormat::None)
209
+ throw std::invalid_argument("Invalid image format");
210
+
211
+ if (opts.binarizer() == Binarizer::GlobalHistogram || opts.binarizer() == Binarizer::LocalAverage) {
212
+ // manually spell out the 3 most common pixel formats to get at least gcc to vectorize the code
213
+ if (iv.format() == ImageFormat::RGB && iv.pixStride() == 3) {
214
+ lum = ExtractLum(iv, [](const uint8_t* src) { return RGBToLum(src[0], src[1], src[2]); });
215
+ } else if (iv.format() == ImageFormat::RGBA && iv.pixStride() == 4) {
216
+ lum = ExtractLum(iv, [](const uint8_t* src) { return RGBToLum(src[0], src[1], src[2]); });
217
+ } else if (iv.format() == ImageFormat::BGR && iv.pixStride() == 3) {
218
+ lum = ExtractLum(iv, [](const uint8_t* src) { return RGBToLum(src[2], src[1], src[0]); });
219
+ } else if (iv.format() != ImageFormat::Lum) {
220
+ lum = ExtractLum(iv, [r = RedIndex(iv.format()), g = GreenIndex(iv.format()), b = BlueIndex(iv.format())](
221
+ const uint8_t* src) { return RGBToLum(src[r], src[g], src[b]); });
222
+ } else if (iv.pixStride() != 1) {
223
+ // GlobalHistogram and LocalAverage need dense line memory layout
224
+ lum = ExtractLum(iv, [](const uint8_t* src) { return *src; });
225
+ }
226
+ if (lum.data())
227
+ return lum;
228
+ }
229
+ return iv;
230
+ }
231
+
232
+ std::unique_ptr<BinaryBitmap> CreateBitmap(ZXing::Binarizer binarizer, const ImageView& iv)
233
+ {
234
+ switch (binarizer) {
235
+ case Binarizer::BoolCast: return std::make_unique<ThresholdBinarizer>(iv, 0);
236
+ case Binarizer::FixedThreshold: return std::make_unique<ThresholdBinarizer>(iv, 127);
237
+ case Binarizer::GlobalHistogram: return std::make_unique<GlobalHistogramBinarizer>(iv);
238
+ case Binarizer::LocalAverage: return std::make_unique<HybridBinarizer>(iv);
239
+ }
240
+ return {}; // silence gcc warning
241
+ }
242
+
243
+ Barcode ReadBarcode(const ImageView& _iv, const ReaderOptions& opts)
244
+ {
245
+ return FirstOrDefault(ReadBarcodes(_iv, ReaderOptions(opts).maxNumberOfSymbols(1)));
246
+ }
247
+
248
+ Barcodes ReadBarcodes(const ImageView& _iv, const ReaderOptions& opts)
249
+ {
250
+ if (sizeof(PatternType) < 4 && (_iv.width() > 0xffff || _iv.height() > 0xffff))
251
+ throw std::invalid_argument("Maximum image width/height is 65535");
252
+
253
+ if (!_iv.data() || _iv.width() * _iv.height() == 0)
254
+ throw std::invalid_argument("ImageView is null/empty");
255
+
256
+ LumImage lum;
257
+ ImageView iv = SetupLumImageView(_iv, lum, opts);
258
+ MultiFormatReader reader(opts);
259
+
260
+ if (opts.isPure())
261
+ return {FirstOrDefault(reader.read(*CreateBitmap(opts.binarizer(), iv), 1)).setReaderOptions(opts)};
262
+
263
+ std::unique_ptr<MultiFormatReader> closedReader;
264
+ #ifdef ZXING_EXPERIMENTAL_API
265
+ using enum BarcodeFormat;
266
+ BarcodeFormats formatsBenefittingFromClosing = Aztec | DataMatrix | QRCode;
267
+ ReaderOptions closedOptions = opts;
268
+ if (opts.tryDenoise() && opts.hasAnyFormat(formatsBenefittingFromClosing) && _iv.height() >= 3) {
269
+ closedOptions.formats(opts.formats().empty() ? formatsBenefittingFromClosing : formatsBenefittingFromClosing & opts.formats());
270
+ closedReader = std::make_unique<MultiFormatReader>(closedOptions);
271
+ }
272
+ #endif
273
+ LumImagePyramid pyramid(iv, opts.downscaleThreshold() * opts.tryDownscale(), opts.downscaleFactor());
274
+
275
+ Barcodes res;
276
+ int maxSymbols = opts.maxNumberOfSymbols() ? opts.maxNumberOfSymbols() : INT_MAX;
277
+ for (auto&& iv : pyramid.layers) {
278
+ auto bitmap = CreateBitmap(opts.binarizer(), iv);
279
+ for (int close = 0; close <= (closedReader ? 1 : 0); ++close) {
280
+ if (close) {
281
+ // if we already inverted the image in the first round, we need to undo that first
282
+ if (bitmap->inverted())
283
+ bitmap->invert();
284
+ bitmap->close();
285
+ }
286
+
287
+ // TODO: check if closing after invert would be beneficial
288
+ for (int invert = 0; invert <= static_cast<int>(opts.tryInvert() && !close); ++invert) {
289
+ if (invert)
290
+ bitmap->invert();
291
+ auto rs = (close ? *closedReader : reader).read(*bitmap, maxSymbols);
292
+ for (auto& r : rs) {
293
+ if (iv.width() != _iv.width())
294
+ r.d->position = Scale(r.position(), _iv.width() / iv.width());
295
+ if (!Contains(res, r)) {
296
+ r.setReaderOptions(opts);
297
+ r.d->isInverted = bitmap->inverted();
298
+ res.push_back(std::move(r));
299
+ --maxSymbols;
300
+ }
301
+ }
302
+ if (maxSymbols <= 0)
303
+ return res;
304
+ }
305
+ }
306
+ }
307
+
308
+ if (opts.returnErrors()) {
309
+ // if symbols overlap and one is in error remove it
310
+ for (auto a = res.begin(); a != res.end(); ++a)
311
+ for (auto b = std::next(a); b != res.end(); ++b)
312
+ if (HaveIntersectingBoundingBoxes(a->position(), b->position()) && (a->error() != b->error()))
313
+ *(a->error() ? a : b) = BarcodeData();
314
+
315
+ std::erase_if(res, [](auto&& r) { return r.format() == BarcodeFormat::None; });
316
+ }
317
+
318
+ return res;
319
+ }
320
+
321
+ #else // ZXING_READERS
322
+
323
+ Barcode ReadBarcode(const ImageView&, const ReaderOptions&)
324
+ {
325
+ throw std::runtime_error("This build of zxing-cpp does not support reading barcodes.");
326
+ }
327
+
328
+ Barcodes ReadBarcodes(const ImageView&, const ReaderOptions&)
329
+ {
330
+ throw std::runtime_error("This build of zxing-cpp does not support reading barcodes.");
331
+ }
332
+
333
+ #endif // ZXING_READERS
334
+
335
+ } // ZXing
@@ -0,0 +1,33 @@
1
+ /*
2
+ * Copyright 2019 Axel Waggershauser
3
+ */
4
+ // SPDX-License-Identifier: Apache-2.0
5
+
6
+ #pragma once
7
+
8
+ #include "ReaderOptions.h"
9
+ #include "ImageView.h"
10
+ #include "Barcode.h"
11
+
12
+ namespace ZXing {
13
+
14
+ /**
15
+ * Read barcode from an ImageView
16
+ *
17
+ * @param image view of the image data including layout and format
18
+ * @param options optional ReaderOptions to parameterize / speed up detection
19
+ * @return Barcode found, if any, otherwise a Barcode with empty content and format ZXing::BarcodeFormat::None
20
+ */
21
+ Barcode ReadBarcode(const ImageView& image, const ReaderOptions& options = {});
22
+
23
+ /**
24
+ * Read barcodes from an ImageView
25
+ *
26
+ * @param image view of the image data including layout and format
27
+ * @param options optional ReaderOptions to parameterize / speed up detection
28
+ * @return List of Barcode found, may be empty
29
+ */
30
+ Barcodes ReadBarcodes(const ImageView& image, const ReaderOptions& options = {});
31
+
32
+ } // ZXing
33
+
@@ -0,0 +1,32 @@
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 "ReaderOptions.h"
10
+ #include "BarcodeData.h"
11
+
12
+ namespace ZXing {
13
+
14
+ class BinaryBitmap;
15
+ class ReaderOptions;
16
+
17
+ class Reader
18
+ {
19
+ protected:
20
+ const ReaderOptions& _opts;
21
+
22
+ public:
23
+ const bool supportsInversion;
24
+
25
+ explicit Reader(const ReaderOptions& opts, bool supportsInversion = false) : _opts(opts), supportsInversion(supportsInversion) {}
26
+ explicit Reader(ReaderOptions&& opts) = delete;
27
+ virtual ~Reader() = default;
28
+
29
+ virtual BarcodesData read(const BinaryBitmap& image, int maxSymbols) const = 0;
30
+ };
31
+
32
+ } // ZXing
@@ -0,0 +1,210 @@
1
+ /*
2
+ * Copyright 2016 Nu-book Inc.
3
+ * Copyright 2016 ZXing authors
4
+ * Copyright 2020 Axel Waggershauser
5
+ */
6
+ // SPDX-License-Identifier: Apache-2.0
7
+
8
+ #pragma once
9
+
10
+ #include "BarcodeFormat.h"
11
+ #include "CharacterSet.h"
12
+ #include "Version.h"
13
+
14
+ #include <string_view>
15
+ #include <utility>
16
+ #include <memory>
17
+
18
+ namespace ZXing {
19
+
20
+ /**
21
+ * @brief Specify which algorithm to use for the grayscale to binary transformation.
22
+ *
23
+ * The difference is how to get to a threshold value T which results in a bit value R(esult) = L(uminance) <= T(hreshold).
24
+ */
25
+ enum class Binarizer : unsigned char // needs to be unsigned for the bitfield below to work, uint8_t fails as well
26
+ {
27
+ LocalAverage, ///< T = average of neighboring pixels for matrix and GlobalHistogram for linear (HybridBinarizer)
28
+ GlobalHistogram, ///< T = valley between the 2 largest peaks in the histogram (per line in linear case)
29
+ FixedThreshold, ///< T = 127
30
+ BoolCast, ///< T = 0, fastest possible
31
+ };
32
+
33
+ /**
34
+ * @brief Specify whether to ignore, read or require EAN-2/5 add-on symbols while scanning EAN/UPC codes.
35
+ */
36
+ enum class EanAddOnSymbol : unsigned char // see above
37
+ {
38
+ Ignore, ///< Ignore any Add-On symbol during read/scan
39
+ Read, ///< Read EAN-2/EAN-5 Add-On symbol if found
40
+ Require, ///< Require EAN-2/EAN-5 Add-On symbol to be present
41
+ };
42
+
43
+ /**
44
+ * @brief Specify how the decoded byte content of a barcode should be transcoded to text.
45
+ *
46
+ * @see Barcode::text(), ReaderOptions::textMode().
47
+ */
48
+ enum class TextMode : unsigned char // see above
49
+ {
50
+ Plain, ///< bytes() transcoded to unicode based on ECI info or guessed charset (the default mode prior to 2.0)
51
+ ECI, ///< standard content following the ECI protocol with every character set ECI segment transcoded to unicode
52
+ HRI, ///< Human Readable Interpretation (dependent on the ContentType)
53
+ Escaped, ///< Use the EscapeNonGraphical() function (e.g. ASCII 29 will be transcoded to "<GS>")
54
+ Hex, ///< bytes() transcoded to ASCII string of HEX values
55
+ HexECI, ///< bytesECI() transcoded to ASCII string of HEX values
56
+ };
57
+
58
+ /**
59
+ * @brief Configuration options for barcode reading and decoding behavior.
60
+ *
61
+ * ReaderOptions encapsulates a set of flags and parameters that control
62
+ * how barcode detection and decoding is performed. It provides
63
+ * fluent setters that support chaining. Both `name(val)` and `setName(val)`
64
+ * forms are available for convenience and compatibility.
65
+ *
66
+ * The class is intended to be passed to the ReadBarcodes function to
67
+ * influence scanning heuristics, performance vs. accuracy trade-offs, output
68
+ * formatting, and symbol filtering. Instances can be reused across multiple
69
+ * read operations.
70
+ *
71
+ * The default settings are optimized for detection rate and can be tuned
72
+ * for speed or specific use-cases.
73
+ *
74
+ * @see BarcodeFormats, Binarizer, TextMode, CharacterSet, ReadBarcodes
75
+ */
76
+ class ReaderOptions
77
+ {
78
+ struct Data;
79
+ std::unique_ptr<Data> d;
80
+
81
+ public:
82
+ ReaderOptions();
83
+ ~ReaderOptions();
84
+ ReaderOptions(const ReaderOptions&);
85
+ ReaderOptions& operator=(const ReaderOptions&);
86
+ ReaderOptions(ReaderOptions&&) noexcept;
87
+ ReaderOptions& operator=(ReaderOptions&&) noexcept;
88
+
89
+ #define ZX_PROPERTY(TYPE, NAME, SETTER, ...) \
90
+ TYPE NAME() const noexcept; \
91
+ __VA_ARGS__ ReaderOptions& NAME(TYPE v) &; \
92
+ __VA_ARGS__ ReaderOptions&& NAME(TYPE v) &&; \
93
+ __VA_ARGS__ inline ReaderOptions& SETTER(TYPE v) & { return NAME(v); } \
94
+ __VA_ARGS__ inline ReaderOptions&& SETTER(TYPE v) && { return std::move(*this).NAME(v); }
95
+
96
+ /// Specify a set of BarcodeFormats that should be searched for, the default is all supported formats.
97
+ const BarcodeFormats& formats() const noexcept;
98
+ ReaderOptions& formats(BarcodeFormats&& v) &;
99
+ ReaderOptions&& formats(BarcodeFormats&& v) &&;
100
+ ReaderOptions& formats(const BarcodeFormats& v) & { return formats(BarcodeFormats(v)); }
101
+ ReaderOptions&& formats(const BarcodeFormats& v) && { return std::move(*this).formats(BarcodeFormats(v)); }
102
+ inline ReaderOptions& setFormats(BarcodeFormats&& v) & { return formats(std::move(v)); }
103
+ inline ReaderOptions&& setFormats(BarcodeFormats&& v) && { return std::move(*this).formats(std::move(v)); }
104
+ inline ReaderOptions& setFormats(const BarcodeFormats& v) & { return formats(BarcodeFormats(v)); }
105
+ inline ReaderOptions&& setFormats(const BarcodeFormats& v) && { return std::move(*this).formats(BarcodeFormats(v)); }
106
+
107
+ /// Spend more time to try to find a barcode; optimize for accuracy instead of not speed (default: true).
108
+ ZX_PROPERTY(bool, tryHarder, setTryHarder)
109
+
110
+ /// Try detecting codes in 90, 180 and 270 degree rotated images (default: true).
111
+ ZX_PROPERTY(bool, tryRotate, setTryRotate)
112
+
113
+ /// Try detecting inverted ("reversed reflectance") codes if the format allows for those (default: true).
114
+ ZX_PROPERTY(bool, tryInvert, setTryInvert)
115
+
116
+ /// Try detecting code in downscaled images (depending on image size) (default: true).
117
+ ZX_PROPERTY(bool, tryDownscale, setTryDownscale)
118
+
119
+ #ifdef ZXING_EXPERIMENTAL_API
120
+ /// Also try detecting code after denoising (currently morphological closing filter for 2D formats only).
121
+ ZX_PROPERTY(bool, tryDenoise, setTryDenoise)
122
+ #endif
123
+
124
+ /// Binarizer to use for grayscale to binary transformation (default: Binarizer::LocalAverage).
125
+ ZX_PROPERTY(Binarizer, binarizer, setBinarizer)
126
+
127
+ /// Set to true if the input contains nothing but a single perfectly aligned barcode (generated image).
128
+ ZX_PROPERTY(bool, isPure, setIsPure)
129
+
130
+ /// Image size ( min(width, height) ) threshold at which to start downscaled scanning.
131
+ ZX_PROPERTY(uint16_t, downscaleThreshold, setDownscaleThreshold)
132
+
133
+ /// Scale factor used during downscaling, meaningful values are 2, 3 and 4.
134
+ ZX_PROPERTY(uint8_t, downscaleFactor, setDownscaleFactor)
135
+
136
+ /// The number of scan lines in a linear barcode that have to be equal to accept the result (default: 2).
137
+ ZX_PROPERTY(uint8_t, minLineCount, setMinLineCount)
138
+
139
+ /// The maximum number of symbols (barcodes) to detect / look for with ReadBarcodes().
140
+ ZX_PROPERTY(uint8_t, maxNumberOfSymbols, setMaxNumberOfSymbols)
141
+
142
+ /// Validate optional checksums where applicable (e.g. Code39, ITF) (default: false).
143
+ ZX_PROPERTY(bool, validateOptionalChecksum, setValidateOptionalChecksum)
144
+
145
+ /// If true, return the barcodes with errors as well (e.g. checksum errors, see Barcode::error()) (default: false).
146
+ ZX_PROPERTY(bool, returnErrors, setReturnErrors)
147
+
148
+ /// Specify whether to ignore, read or require EAN-2/5 add-on symbols while scanning EAN/UPC codes.
149
+ ZX_PROPERTY(EanAddOnSymbol, eanAddOnSymbol, setEanAddOnSymbol)
150
+
151
+ /// Specifies the TextMode that controls the return of the Barcode::text() function (default: TextMode::HRI).
152
+ ZX_PROPERTY(TextMode, textMode, setTextMode)
153
+
154
+ /// Specifies fallback character set to use instead of auto-detecting it (when applicable).
155
+ ZX_PROPERTY(CharacterSet, characterSet, setCharacterSet)
156
+ ReaderOptions& characterSet(std::string_view v) &;
157
+ ReaderOptions&& characterSet(std::string_view v) &&;
158
+ inline ReaderOptions& setCharacterSet(std::string_view v) & { return characterSet(v); }
159
+ inline ReaderOptions&& setCharacterSet(std::string_view v) && { return std::move(*this).characterSet(v); }
160
+
161
+ #undef ZX_PROPERTY
162
+
163
+ /// @cond DEPRECATED
164
+
165
+ // Silence deprecated-declarations warnings, only happening here for deprecated inline functions
166
+ #ifdef __GNUC__
167
+ #pragma GCC diagnostic push
168
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
169
+ #elif defined(_MSC_VER)
170
+ #pragma warning(push)
171
+ #pragma warning(disable : 4996)
172
+ #endif
173
+
174
+ #define ZX_DEPRECATED_PROPERTY(TYPE, NAME, SETTER, GET_IMPL, SET_IMPL) \
175
+ [[deprecated]] inline TYPE NAME() const noexcept { return GET_IMPL; } \
176
+ [[deprecated]] ReaderOptions& NAME(TYPE v) & { SET_IMPL; return *this; } \
177
+ [[deprecated]] ReaderOptions&& NAME(TYPE v) && { SET_IMPL; return std::move(*this); } \
178
+ [[deprecated]] inline ReaderOptions& SETTER(TYPE v) & { return NAME(v); } \
179
+ [[deprecated]] inline ReaderOptions&& SETTER(TYPE v) && { return std::move(*this).NAME(v); }
180
+
181
+ /// @deprecated (does nothing). See BarcodeFormat::Code39Ext and ::Code39Std to select full ASCII or standard Code39 mode.
182
+ ZX_DEPRECATED_PROPERTY(bool, tryCode39ExtendedMode, setTryCode39ExtendedMode, true, (void)v)
183
+
184
+ /// @deprecated (use validateOptionalChecksum). The Code39 symbol has a valid checksum iff symbologyIdentifier()[2] is an odd digit
185
+ ZX_DEPRECATED_PROPERTY(bool, validateCode39CheckSum, setValidateCode39CheckSum, validateOptionalChecksum(),
186
+ validateOptionalChecksum(v))
187
+
188
+ /// @deprecated (use validateOptionalChecksum). The ITF symbol has a valid checksum iff symbologyIdentifier()[2] == '1'.
189
+ ZX_DEPRECATED_PROPERTY(bool, validateITFCheckSum, setValidateITFCheckSum, validateOptionalChecksum(), validateOptionalChecksum(v))
190
+
191
+ #undef ZX_DEPRECATED_PROPERTY
192
+
193
+ #ifdef __GNUC__
194
+ #pragma GCC diagnostic pop
195
+ #elif defined(_MSC_VER)
196
+ #pragma warning(pop)
197
+ #endif
198
+
199
+ /// @endcond
200
+
201
+ #ifdef ZXING_INTERNAL
202
+ /// Check if a specific format is explicitly enabled in the formats set
203
+ bool hasFormat(const BarcodeFormats& formats) const noexcept;
204
+
205
+ /// Check if any format is explicitly or implicitly enabled in the formats set
206
+ bool hasAnyFormat(const BarcodeFormats& formats) const noexcept;
207
+ #endif
208
+ };
209
+
210
+ } // ZXing