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,606 @@
1
+ /*
2
+ * Copyright 2020 Axel Waggershauser
3
+ */
4
+ // SPDX-License-Identifier: Apache-2.0
5
+
6
+ #pragma once
7
+
8
+ #include "ZXingCpp.h"
9
+
10
+ #include <QImage>
11
+ #include <QDebug>
12
+ #include <QMetaType>
13
+ #include <QPoint>
14
+ #include <QList>
15
+ #include <QObject>
16
+ #include <QScopeGuard>
17
+ #include <QThreadPool>
18
+
19
+ #ifdef QT_MULTIMEDIA_LIB
20
+ #include <QVideoFrame>
21
+ #include <QVideoSink>
22
+ #include <QElapsedTimer>
23
+ #endif
24
+
25
+ // This is some sample code to start a discussion about how a minimal and header-only Qt wrapper/helper could look like.
26
+
27
+ namespace ZXingQt {
28
+
29
+ Q_NAMESPACE
30
+
31
+ inline QString Version()
32
+ {
33
+ return QString::fromStdString(ZXing::Version());
34
+ }
35
+
36
+ namespace Detail {
37
+
38
+ template<typename Cout, typename Cin>
39
+ inline Cout transcode(Cin&& in)
40
+ {
41
+ Cout out;
42
+ out.reserve(in.size());
43
+ for (auto&& v : in)
44
+ out.push_back(static_cast<typename Cout::value_type>(std::move(v)));
45
+ return out;
46
+ }
47
+
48
+ inline std::string_view qba2sv(const QByteArray& ba) noexcept
49
+ {
50
+ return std::string_view(ba.constData(), static_cast<size_t>(ba.size()));
51
+ }
52
+
53
+ } // namespace Detail
54
+
55
+ // MARK: - Enums and Types
56
+
57
+ enum class BarcodeFormat : unsigned int
58
+ {
59
+ #define X(NAME, SYM, VAR, FLAGS, ZINT, ENABLED, HRI) NAME = ZX_BCF_ID(SYM, VAR),
60
+ ZX_BCF_LIST(X)
61
+ #undef X
62
+ };
63
+
64
+ enum class ContentType { Text, Binary, Mixed, GS1, ISO15434, UnknownECI };
65
+ enum class TextMode { Plain, ECI, HRI, Escaped, Hex, HexECI };
66
+ enum class Binarizer { LocalAverage, GlobalHistogram, FixedThreshold, BoolCast };
67
+
68
+ Q_ENUM_NS(BarcodeFormat)
69
+ Q_ENUM_NS(ContentType)
70
+ Q_ENUM_NS(TextMode)
71
+ Q_ENUM_NS(Binarizer)
72
+
73
+ using BarcodeFormats = QList<BarcodeFormat>;
74
+
75
+ using ZXing::ReaderOptions;
76
+ using ZXing::WriterOptions;
77
+
78
+ inline BarcodeFormat BarcodeFormatFromString(QStringView str)
79
+ {
80
+ return static_cast<BarcodeFormat>(ZXing::BarcodeFormatFromString(Detail::qba2sv(str.toUtf8())));
81
+ }
82
+
83
+ inline BarcodeFormats BarcodeFormatsFromString(QStringView str)
84
+ {
85
+ return Detail::transcode<BarcodeFormats>(ZXing::BarcodeFormatsFromString(Detail::qba2sv(str.toUtf8())));
86
+ }
87
+
88
+ inline BarcodeFormats ListBarcodeFormats(BarcodeFormat filter = BarcodeFormat::None)
89
+ {
90
+ return Detail::transcode<BarcodeFormats>(ZXing::BarcodeFormats::list(
91
+ filter == BarcodeFormat::None ? ZXing::BarcodeFormats() : static_cast<ZXing::BarcodeFormat>(filter)));
92
+ }
93
+
94
+ #define ZQ_DECL_TO_STRING(TYPE) \
95
+ inline QString ToString(::ZXingQt::TYPE v) \
96
+ { \
97
+ return QString::fromStdString(::ZXing::ToString(static_cast<::ZXing::TYPE>(v))); \
98
+ }
99
+
100
+ ZQ_DECL_TO_STRING(BarcodeFormat)
101
+ ZQ_DECL_TO_STRING(ContentType)
102
+ #undef ZQ_DECL_TO_STRING
103
+
104
+ // template <typename T, typename = decltype(ToString(T()))>
105
+ // QDebug operator<<(QDebug dbg, const T& v)
106
+ // {
107
+ // return dbg.noquote() << ToString(v);
108
+ // }
109
+
110
+ class Error : private ZXing::Error
111
+ {
112
+ Q_GADGET
113
+
114
+ Q_PROPERTY(Type type READ type)
115
+ Q_PROPERTY(QString message READ message)
116
+ Q_PROPERTY(QString location READ location)
117
+
118
+ friend QString ToString(const Error& err);
119
+
120
+ public:
121
+ enum class Type { None, Format, Checksum, Unsupported };
122
+ Q_ENUM(Type)
123
+
124
+ Error() = default;
125
+ explicit Error(const ZXing::Error& e) : ZXing::Error(e) {}
126
+
127
+ Type type() const { return static_cast<Type>(ZXing::Error::type()); }
128
+ QString message() const { return QString::fromStdString(ZXing::Error::msg()); }
129
+ QString location() const { return QString::fromStdString(ZXing::Error::location()); }
130
+
131
+ using ZXing::Error::operator bool;
132
+
133
+ bool operator==(const Error& o) const { return ZXing::Error::operator==(o); }
134
+ };
135
+
136
+ inline QString ToString(const Error& err)
137
+ {
138
+ return QString::fromStdString(ZXing::ToString(static_cast<ZXing::Error>(err)));
139
+ }
140
+
141
+ class Position : public ZXing::Quadrilateral<QPoint>
142
+ {
143
+ Q_GADGET
144
+
145
+ Q_PROPERTY(QPoint topLeft READ topLeft)
146
+ Q_PROPERTY(QPoint topRight READ topRight)
147
+ Q_PROPERTY(QPoint bottomRight READ bottomRight)
148
+ Q_PROPERTY(QPoint bottomLeft READ bottomLeft)
149
+ Q_PROPERTY(QPoint center READ center)
150
+
151
+ using Base = ZXing::Quadrilateral<QPoint>;
152
+
153
+ public:
154
+ using Base::Base;
155
+
156
+ QPoint center() const { return std::accumulate(this->begin(), this->end(), QPoint(0, 0)) / 4; }
157
+ };
158
+
159
+ // MARK: - Barcode
160
+
161
+ class Barcode : private ZXing::Barcode
162
+ {
163
+ Q_GADGET
164
+
165
+ Q_PROPERTY(BarcodeFormat format READ format)
166
+ Q_PROPERTY(BarcodeFormat symbology READ symbology)
167
+ Q_PROPERTY(QString text READ text)
168
+ Q_PROPERTY(QByteArray bytes READ bytes)
169
+ Q_PROPERTY(QByteArray bytesECI READ bytesECI)
170
+ Q_PROPERTY(bool isValid READ isValid)
171
+ Q_PROPERTY(Error error READ error)
172
+ Q_PROPERTY(ContentType contentType READ contentType)
173
+ Q_PROPERTY(bool hasECI READ hasECI)
174
+ Q_PROPERTY(Position position READ position)
175
+ Q_PROPERTY(int orientation READ orientation)
176
+ Q_PROPERTY(bool isMirrored READ isMirrored)
177
+ Q_PROPERTY(bool isInverted READ isInverted)
178
+ Q_PROPERTY(QString symbologyIdentifier READ symbologyIdentifier)
179
+ Q_PROPERTY(int sequenceSize READ sequenceSize)
180
+ Q_PROPERTY(int sequenceIndex READ sequenceIndex)
181
+ Q_PROPERTY(QString sequenceId READ sequenceId)
182
+ Q_PROPERTY(bool isLastInSequence READ isLastInSequence)
183
+ Q_PROPERTY(bool isPartOfSequence READ isPartOfSequence)
184
+ Q_PROPERTY(int lineCount READ lineCount)
185
+
186
+ public:
187
+ Barcode() = default; // required for qmetatype machinery
188
+
189
+ explicit Barcode(ZXing::Barcode&& r) : ZXing::Barcode(std::move(r)) {}
190
+
191
+ using ZXing::Barcode::isValid;
192
+
193
+ BarcodeFormat format() const { return static_cast<BarcodeFormat>(ZXing::Barcode::format()); }
194
+ BarcodeFormat symbology() const { return static_cast<BarcodeFormat>(ZXing::Barcode::symbology()); }
195
+ ContentType contentType() const { return static_cast<ContentType>(ZXing::Barcode::contentType()); }
196
+
197
+ Error error() const { return Error(ZXing::Barcode::error()); }
198
+
199
+ QString text() const { return QString::fromStdString(ZXing::Barcode::text()); }
200
+ QString text(TextMode mode) const { return QString::fromStdString(ZXing::Barcode::text(static_cast<ZXing::TextMode>(mode))); }
201
+
202
+ QByteArray bytes() const
203
+ {
204
+ return QByteArray(reinterpret_cast<const char*>(ZXing::Barcode::bytes().data()), std::size(ZXing::Barcode::bytes()));
205
+ }
206
+
207
+ QByteArray bytesECI() const
208
+ {
209
+ auto b = ZXing::Barcode::bytesECI();
210
+ return QByteArray(reinterpret_cast<const char*>(b.data()), b.size());
211
+ }
212
+
213
+ using ZXing::Barcode::hasECI;
214
+
215
+ Position position() const
216
+ {
217
+ auto& pos = ZXing::Barcode::position();
218
+ auto qp = [&pos](int i) { return QPoint(pos[i].x, pos[i].y); };
219
+ return {qp(0), qp(1), qp(2), qp(3)};
220
+ }
221
+
222
+ using ZXing::Barcode::orientation;
223
+ using ZXing::Barcode::isMirrored;
224
+ using ZXing::Barcode::isInverted;
225
+
226
+ QString symbologyIdentifier() const { return QString::fromStdString(ZXing::Barcode::symbologyIdentifier()); }
227
+
228
+ using ZXing::Barcode::sequenceSize;
229
+ using ZXing::Barcode::sequenceIndex;
230
+ using ZXing::Barcode::isLastInSequence;
231
+ using ZXing::Barcode::isPartOfSequence;
232
+ QString sequenceId() const { return QString::fromStdString(ZXing::Barcode::sequenceId()); }
233
+
234
+ QString extra(QStringView key = {}) const { return QString::fromStdString(ZXing::Barcode::extra(Detail::qba2sv(key.toUtf8()))); }
235
+
236
+ using ZXing::Barcode::lineCount;
237
+
238
+ QString toSVG(const WriterOptions& options = {}) const
239
+ {
240
+ return QString::fromStdString(ZXing::WriteBarcodeToSVG(*this, options));
241
+ }
242
+
243
+ QImage toImage(const WriterOptions& options = {}) const
244
+ {
245
+ auto img = ZXing::WriteBarcodeToImage(*this, options);
246
+ return QImage(img.data(), img.width(), img.height(), img.width(), QImage::Format::Format_Grayscale8).copy();
247
+ }
248
+
249
+ QImage symbol() const
250
+ {
251
+ auto img = ZXing::Barcode::symbol();
252
+ return img.data() ? QImage(img.data(), img.width(), img.height(), img.width(), QImage::Format::Format_Grayscale8).copy() : QImage();
253
+ }
254
+
255
+ bool operator==(const Barcode& o) const { return ZXing::Barcode::operator==(o); }
256
+
257
+ static Barcode fromText(QStringView text, BarcodeFormat format, QStringView options = {})
258
+ {
259
+ auto opts = ZXing::CreatorOptions(static_cast<ZXing::BarcodeFormat>(format), options.toUtf8().toStdString());
260
+ return Barcode(ZXing::CreateBarcodeFromText(Detail::qba2sv(text.toUtf8()), opts));
261
+ }
262
+
263
+ static Barcode fromBytes(const QByteArray& bytes, BarcodeFormat format, QStringView options = {})
264
+ {
265
+ auto opts = ZXing::CreatorOptions(static_cast<ZXing::BarcodeFormat>(format), options.toUtf8().toStdString());
266
+ return Barcode(ZXing::CreateBarcodeFromBytes(bytes, opts));
267
+ }
268
+
269
+ };
270
+
271
+ // MARK: - Read
272
+
273
+ inline QList<Barcode> ReadBarcodes(const QImage& img, const ReaderOptions& opts = {})
274
+ {
275
+ using namespace ZXing;
276
+
277
+ auto ImgFmtFromQImg = [](const QImage& img) {
278
+ switch (img.format()) {
279
+ case QImage::Format_ARGB32:
280
+ case QImage::Format_RGB32:
281
+ #if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
282
+ return ImageFormat::BGRA;
283
+ #else
284
+ return ImageFormat::ARGB;
285
+ #endif
286
+ case QImage::Format_RGB888: return ImageFormat::RGB;
287
+ case QImage::Format_RGBX8888:
288
+ case QImage::Format_RGBA8888: return ImageFormat::RGBA;
289
+ case QImage::Format_Grayscale8: return ImageFormat::Lum;
290
+ default: return ImageFormat::None;
291
+ }
292
+ };
293
+
294
+ auto exec = [&](const QImage& img) {
295
+ return Detail::transcode<QList<Barcode>>(ZXing::ReadBarcodes(
296
+ {img.bits(), img.width(), img.height(), ImgFmtFromQImg(img), static_cast<int>(img.bytesPerLine())}, opts));
297
+ };
298
+
299
+ return ImgFmtFromQImg(img) == ImageFormat::None ? exec(img.convertToFormat(QImage::Format_Grayscale8)) : exec(img);
300
+ }
301
+
302
+ inline Barcode ReadBarcode(const QImage& img, const ReaderOptions& opts = {})
303
+ {
304
+ auto res = ReadBarcodes(img, ReaderOptions(opts).setMaxNumberOfSymbols(1));
305
+ return !res.isEmpty() ? res.takeFirst() : Barcode();
306
+ }
307
+
308
+ #ifdef QT_MULTIMEDIA_LIB
309
+ inline QList<Barcode> ReadBarcodes(const QVideoFrame& frame, const ReaderOptions& opts = {})
310
+ {
311
+ using namespace ZXing;
312
+
313
+ ImageFormat fmt = ImageFormat::None;
314
+ int pixStride = 0;
315
+ int pixOffset = 0;
316
+
317
+ switch (frame.pixelFormat()) {
318
+ case QVideoFrameFormat::Format_ARGB8888:
319
+ case QVideoFrameFormat::Format_ARGB8888_Premultiplied:
320
+ case QVideoFrameFormat::Format_XRGB8888: fmt = ImageFormat::ARGB; break;
321
+
322
+ case QVideoFrameFormat::Format_BGRA8888:
323
+ case QVideoFrameFormat::Format_BGRA8888_Premultiplied:
324
+ case QVideoFrameFormat::Format_BGRX8888: fmt = ImageFormat::BGRA; break;
325
+
326
+ case QVideoFrameFormat::Format_ABGR8888:
327
+ case QVideoFrameFormat::Format_XBGR8888: fmt = ImageFormat::ABGR; break;
328
+
329
+ case QVideoFrameFormat::Format_RGBA8888:
330
+ case QVideoFrameFormat::Format_RGBX8888: fmt = ImageFormat::RGBA; break;
331
+
332
+ case QVideoFrameFormat::Format_P010:
333
+ case QVideoFrameFormat::Format_P016: fmt = ImageFormat::Lum, pixStride = 1; break;
334
+
335
+ case QVideoFrameFormat::Format_YUV420P:
336
+ case QVideoFrameFormat::Format_YUV422P:
337
+ case QVideoFrameFormat::Format_NV12:
338
+ case QVideoFrameFormat::Format_NV21:
339
+ case QVideoFrameFormat::Format_IMC1:
340
+ case QVideoFrameFormat::Format_IMC2:
341
+ case QVideoFrameFormat::Format_IMC3:
342
+ case QVideoFrameFormat::Format_IMC4:
343
+ case QVideoFrameFormat::Format_YV12: fmt = ImageFormat::Lum; break;
344
+
345
+ case QVideoFrameFormat::Format_AYUV_Premultiplied:
346
+ case QVideoFrameFormat::Format_AYUV: fmt = ImageFormat::Lum, pixStride = 4, pixOffset = 1; break;
347
+ case QVideoFrameFormat::Format_UYVY: fmt = ImageFormat::Lum, pixStride = 2, pixOffset = 1; break;
348
+ case QVideoFrameFormat::Format_YUYV: fmt = ImageFormat::Lum, pixStride = 2; break;
349
+
350
+ case QVideoFrameFormat::Format_Y8: fmt = ImageFormat::Lum; break;
351
+ case QVideoFrameFormat::Format_Y16: fmt = ImageFormat::Lum, pixStride = 2, pixOffset = 1; break;
352
+
353
+ default: break;
354
+ }
355
+
356
+ if (fmt != ImageFormat::None) {
357
+ auto img = frame; // shallow copy just get access to non-const map() function
358
+ if (!img.isValid() || !img.map(QVideoFrame::ReadOnly)) {
359
+ qWarning() << "invalid QVideoFrame: could not map memory";
360
+ return {};
361
+ }
362
+ QScopeGuard unmap([&] { img.unmap(); });
363
+
364
+ return Detail::transcode<QList<Barcode>>(ZXing::ReadBarcodes(
365
+ {img.bits(0) + pixOffset, img.width(), img.height(), fmt, img.bytesPerLine(0), pixStride}, opts));
366
+ }
367
+ else {
368
+ auto qimg = frame.toImage();
369
+ if (qimg.format() != QImage::Format_Invalid)
370
+ return ReadBarcodes(qimg, opts);
371
+ qWarning() << "failed to convert QVideoFrame to QImage";
372
+ return {};
373
+ }
374
+ }
375
+
376
+ inline Barcode ReadBarcode(const QVideoFrame& frame, const ReaderOptions& opts = {})
377
+ {
378
+ auto res = ReadBarcodes(frame, ReaderOptions(opts).setMaxNumberOfSymbols(1));
379
+ return !res.isEmpty() ? res.takeFirst() : Barcode();
380
+ }
381
+ #endif // QT_MULTIMEDIA_LIB
382
+
383
+ #define ZQ_PROPERTY(Type, name, setter) \
384
+ public: \
385
+ Q_PROPERTY(Type name READ name WRITE setter NOTIFY name##Changed) \
386
+ Type name() const noexcept { return ReaderOptions::name(); } \
387
+ Q_SLOT void setter(const Type& newVal) \
388
+ { \
389
+ if (name() != newVal) { \
390
+ ReaderOptions::setter(newVal); \
391
+ Q_EMIT name##Changed(); \
392
+ } \
393
+ } \
394
+ Q_SIGNAL void name##Changed();
395
+
396
+
397
+ // MARK: - BarcodeReader
398
+
399
+ class BarcodeReader : public QObject, private ReaderOptions
400
+ {
401
+ Q_OBJECT
402
+
403
+ mutable QThreadPool _pool;
404
+
405
+ Q_PROPERTY(BarcodeFormats formats READ formats WRITE setFormats NOTIFY formatsChanged)
406
+ Q_PROPERTY(TextMode textMode READ textMode WRITE setTextMode NOTIFY textModeChanged)
407
+
408
+ void emitFoundBarcodes(const QList<Barcode>& barcodes) const
409
+ {
410
+ if (!barcodes.isEmpty())
411
+ Q_EMIT foundBarcodes(barcodes);
412
+ else
413
+ Q_EMIT foundNoBarcodes();
414
+ }
415
+
416
+ public:
417
+ BarcodeReader(QObject* parent = nullptr) : QObject(parent)
418
+ {
419
+ _pool.setMaxThreadCount(1);
420
+ }
421
+
422
+ ~BarcodeReader()
423
+ {
424
+ _pool.setMaxThreadCount(0);
425
+ _pool.waitForDone(-1);
426
+ }
427
+
428
+ Q_PROPERTY(int maxThreadCount READ maxThreadCount WRITE setMaxThreadCount)
429
+ int maxThreadCount() const { return _pool.maxThreadCount(); }
430
+ Q_SLOT void setMaxThreadCount(int maxThreadCount)
431
+ {
432
+ if (_pool.maxThreadCount() != maxThreadCount) {
433
+ _pool.setMaxThreadCount(maxThreadCount);
434
+ Q_EMIT maxThreadCountChanged();
435
+ }
436
+ }
437
+ Q_SIGNAL void maxThreadCountChanged();
438
+
439
+ BarcodeFormats formats() const noexcept { return Detail::transcode<BarcodeFormats>(ReaderOptions::formats()); }
440
+ Q_SLOT void setFormats(const BarcodeFormats& newVal)
441
+ {
442
+ if (formats() != newVal) {
443
+ ReaderOptions::setFormats(Detail::transcode<std::vector<ZXing::BarcodeFormat>>(newVal));
444
+ Q_EMIT formatsChanged();
445
+ }
446
+ }
447
+ // Q_SLOT void setFormats(BarcodeFormat newVal) { setFormats(BarcodeFormats({newVal})); }
448
+ Q_SIGNAL void formatsChanged();
449
+
450
+ TextMode textMode() const noexcept { return static_cast<TextMode>(ReaderOptions::textMode()); }
451
+ Q_SLOT void setTextMode(TextMode newVal)
452
+ {
453
+ if (textMode() != newVal) {
454
+ ReaderOptions::setTextMode(static_cast<ZXing::TextMode>(newVal));
455
+ Q_EMIT textModeChanged();
456
+ }
457
+ }
458
+ Q_SIGNAL void textModeChanged();
459
+
460
+ // ZQ_PROPERTY(BarcodeFormats, formats, setFormats)
461
+ // ZQ_PROPERTY(TextMode, textMode, setTextMode)
462
+ ZQ_PROPERTY(bool, tryRotate, setTryRotate)
463
+ ZQ_PROPERTY(bool, tryHarder, setTryHarder)
464
+ ZQ_PROPERTY(bool, tryInvert, setTryInvert)
465
+ ZQ_PROPERTY(bool, tryDownscale, setTryDownscale)
466
+ ZQ_PROPERTY(bool, isPure, setIsPure)
467
+ ZQ_PROPERTY(bool, returnErrors, setReturnErrors)
468
+
469
+ // For debugging/development
470
+ mutable QAtomicInt runTime = 0;
471
+ Q_PROPERTY(int runTime MEMBER runTime)
472
+
473
+ Q_SLOT QList<Barcode> read(const QImage& image) const
474
+ {
475
+ auto barcodes = ReadBarcodes(image, *this);
476
+ emitFoundBarcodes(barcodes);
477
+ return barcodes;
478
+ }
479
+
480
+ /// @brief Read barcodes from the given image asynchronously.
481
+ /// @note The foundBarcodes() and foundNoBarcodes() signals are emitted from a worker thread.
482
+ Q_SLOT void readAsync(const QImage& image) const
483
+ {
484
+ _pool.start([this, image]() { read(image); });
485
+ }
486
+
487
+ Q_SIGNALS:
488
+ /// @note If an async read is called, the foundBarcodes() and foundNoBarcodes() signals are emitted from a worker thread.
489
+ void foundNoBarcodes() const;
490
+ void foundBarcodes(const QList<Barcode>& barcodes) const;
491
+
492
+ public:
493
+ #ifdef QT_MULTIMEDIA_LIB
494
+ Q_SLOT QList<Barcode> read(const QVideoFrame& image) const
495
+ {
496
+ QElapsedTimer t;
497
+ t.start();
498
+ auto barcodes = ReadBarcodes(image, *this);
499
+ runTime = t.elapsed();
500
+ emitFoundBarcodes(barcodes);
501
+ return barcodes;
502
+ }
503
+
504
+ /// @brief Try to read barcodes from the given video frame asynchronously.
505
+ /// @return true iff a read task was started, false if all worker threads are busy.
506
+ Q_SLOT bool tryReadAsync(const QVideoFrame& frame) const
507
+ {
508
+ return _pool.tryStart([this, frame]() { read(frame); });
509
+ }
510
+
511
+ private:
512
+ QVideoSink *_sink = nullptr;
513
+
514
+ public:
515
+ void setVideoSink(QVideoSink* sink)
516
+ {
517
+ if (_sink == sink)
518
+ return;
519
+
520
+ if (_sink)
521
+ disconnect(_sink, nullptr, this, nullptr);
522
+
523
+ _sink = sink;
524
+ if (_sink)
525
+ connect(_sink, &QVideoSink::videoFrameChanged, this, &BarcodeReader::tryReadAsync, Qt::DirectConnection);
526
+ }
527
+ Q_PROPERTY(QVideoSink* videoSink MEMBER _sink WRITE setVideoSink)
528
+
529
+ #endif // QT_MULTIMEDIA_LIB
530
+
531
+ };
532
+
533
+ #undef ZQ_PROPERTY
534
+
535
+ } // namespace ZXingQt
536
+
537
+
538
+ // Q_DECLARE_METATYPE: compile-time declaration required for QVariant storage and template instantiation
539
+ Q_DECLARE_METATYPE(ZXingQt::Error)
540
+ Q_DECLARE_METATYPE(ZXingQt::Position)
541
+ Q_DECLARE_METATYPE(ZXingQt::Barcode)
542
+
543
+ #ifdef QT_QML_LIB
544
+
545
+ // MARK: - QML Integration
546
+
547
+ #include <QtQmlIntegration/qqmlintegration.h>
548
+ #include <QQmlEngine>
549
+
550
+ namespace ZXingQt {
551
+
552
+ class ZXingQml : public QObject
553
+ {
554
+ Q_OBJECT
555
+ public:
556
+ Q_INVOKABLE static QString FormatToString(BarcodeFormat format) { return ZXingQt::ToString(format); }
557
+ Q_INVOKABLE static QString ContentTypeToString(ContentType type) { return ZXingQt::ToString(type); }
558
+ Q_INVOKABLE static QList<BarcodeFormat> ListBarcodeFormats(BarcodeFormat filter = BarcodeFormat::None)
559
+ {
560
+ return ZXingQt::ListBarcodeFormats(filter);
561
+ }
562
+ };
563
+
564
+ namespace Detail {
565
+
566
+ inline void registerQmlAndMetaTypes()
567
+ {
568
+ // qRegisterMetaType: runtime registration required for queued signal/slot connections across threads
569
+ qRegisterMetaType<ZXingQt::BarcodeFormat>("BarcodeFormat");
570
+ qRegisterMetaType<ZXingQt::ContentType>("ContentType");
571
+ qRegisterMetaType<ZXingQt::TextMode>("TextMode");
572
+ qRegisterMetaType<ZXingQt::Error>("Error");
573
+ qRegisterMetaType<ZXingQt::Error::Type>("Error::Type");
574
+ qRegisterMetaType<ZXingQt::Position>("Position");
575
+ qRegisterMetaType<ZXingQt::Barcode>("Barcode");
576
+ qRegisterMetaType<QList<ZXingQt::BarcodeFormat>>("QList<BarcodeFormat>");
577
+ qRegisterMetaType<QList<ZXingQt::Barcode>>("QList<Barcode>");
578
+
579
+ // Custom enum to string converters
580
+ QMetaType::registerConverter<BarcodeFormat, QString>(
581
+ [](BarcodeFormat format) { return QString::fromStdString(ZXing::ToString(static_cast<ZXing::BarcodeFormat>(format))); });
582
+
583
+ QMetaType::registerConverter<ContentType, QString>(
584
+ [](ContentType type) { return QString::fromStdString(ZXing::ToString(static_cast<ZXing::ContentType>(type))); });
585
+
586
+ // qmlRegisterType allows us to store the position / barcode in a QML property, i.e. property barcode myBarcode: ...
587
+ qmlRegisterType<ZXingQt::Error>("ZXing", 1, 0, "error");
588
+ qmlRegisterType<ZXingQt::Position>("ZXing", 1, 0, "position");
589
+ qmlRegisterType<ZXingQt::Barcode>("ZXing", 1, 0, "barcode");
590
+
591
+ qmlRegisterUncreatableMetaObject(ZXingQt::staticMetaObject, "ZXing", 1, 0, "ZXing", QStringLiteral("Access to enums only"));
592
+ qmlRegisterType<ZXingQt::BarcodeReader>("ZXing", 1, 0, "BarcodeReader");
593
+
594
+ qmlRegisterSingletonType<ZXingQml>("ZXing", 1, 0, "ZXingQml", [](QQmlEngine*, QJSEngine*) -> QObject* { return new ZXingQml(); });
595
+ }
596
+
597
+ struct ZXingQtInitializer
598
+ {
599
+ ZXingQtInitializer() { registerQmlAndMetaTypes(); }
600
+ } inline zxingQtInitializer;
601
+
602
+ } // namespace Detail
603
+
604
+ } // namespace ZXingQt
605
+
606
+ #endif // QT_QML_LIB