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.
- package/README.md +34 -0
- package/VisionCameraZxing.podspec +48 -0
- package/android/CMakeLists.txt +43 -0
- package/android/build.gradle +150 -0
- package/android/fix-prefab.gradle +51 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +3 -0
- package/android/src/main/cpp/cpp-adapter.cpp +7 -0
- package/android/src/main/java/com/margelo/nitro/camera/zxing/VisionCameraZxingPackage.kt +21 -0
- package/cpp/BarcodeValueTypeClassifier.cpp +70 -0
- package/cpp/BarcodeValueTypeClassifier.hpp +14 -0
- package/cpp/FrameImageView.cpp +75 -0
- package/cpp/FrameImageView.hpp +34 -0
- package/cpp/HybridBarcode.cpp +59 -0
- package/cpp/HybridBarcode.hpp +26 -0
- package/cpp/HybridBarcodeScanner.cpp +121 -0
- package/cpp/HybridBarcodeScanner.hpp +26 -0
- package/cpp/HybridBarcodeScannerFactory.cpp +11 -0
- package/cpp/HybridBarcodeScannerFactory.hpp +14 -0
- package/cpp/ImageDownscaler.cpp +34 -0
- package/cpp/ImageDownscaler.hpp +21 -0
- package/cpp/ZXingDecoder.cpp +189 -0
- package/cpp/ZXingDecoder.hpp +72 -0
- package/cpp/zxing-core/LICENSE +202 -0
- package/cpp/zxing-core/README.md +156 -0
- package/cpp/zxing-core/core/CMakeLists.txt +784 -0
- package/cpp/zxing-core/core/Version.h.in +28 -0
- package/cpp/zxing-core/core/ZXingConfig.cmake.in +9 -0
- package/cpp/zxing-core/core/src/Barcode.cpp +255 -0
- package/cpp/zxing-core/core/src/Barcode.h +191 -0
- package/cpp/zxing-core/core/src/BarcodeData.h +100 -0
- package/cpp/zxing-core/core/src/BarcodeFormat.cpp +286 -0
- package/cpp/zxing-core/core/src/BarcodeFormat.h +272 -0
- package/cpp/zxing-core/core/src/BinaryBitmap.cpp +111 -0
- package/cpp/zxing-core/core/src/BinaryBitmap.h +66 -0
- package/cpp/zxing-core/core/src/BitArray.cpp +38 -0
- package/cpp/zxing-core/core/src/BitArray.h +181 -0
- package/cpp/zxing-core/core/src/BitMatrix.cpp +175 -0
- package/cpp/zxing-core/core/src/BitMatrix.h +199 -0
- package/cpp/zxing-core/core/src/BitMatrixCursor.h +253 -0
- package/cpp/zxing-core/core/src/BitMatrixIO.cpp +101 -0
- package/cpp/zxing-core/core/src/BitMatrixIO.h +21 -0
- package/cpp/zxing-core/core/src/BitSource.cpp +77 -0
- package/cpp/zxing-core/core/src/BitSource.h +72 -0
- package/cpp/zxing-core/core/src/ByteArray.h +42 -0
- package/cpp/zxing-core/core/src/CharacterSet.cpp +78 -0
- package/cpp/zxing-core/core/src/CharacterSet.h +58 -0
- package/cpp/zxing-core/core/src/ConcentricFinder.cpp +312 -0
- package/cpp/zxing-core/core/src/ConcentricFinder.h +156 -0
- package/cpp/zxing-core/core/src/Content.cpp +471 -0
- package/cpp/zxing-core/core/src/Content.h +82 -0
- package/cpp/zxing-core/core/src/ContentType.h +19 -0
- package/cpp/zxing-core/core/src/CreateBarcode.cpp +490 -0
- package/cpp/zxing-core/core/src/CreateBarcode.h +132 -0
- package/cpp/zxing-core/core/src/DecoderResult.h +92 -0
- package/cpp/zxing-core/core/src/DetectorResult.h +44 -0
- package/cpp/zxing-core/core/src/ECI.cpp +81 -0
- package/cpp/zxing-core/core/src/ECI.h +78 -0
- package/cpp/zxing-core/core/src/Error.cpp +29 -0
- package/cpp/zxing-core/core/src/Error.h +79 -0
- package/cpp/zxing-core/core/src/Flags.h +165 -0
- package/cpp/zxing-core/core/src/GTIN.cpp +253 -0
- package/cpp/zxing-core/core/src/GTIN.h +58 -0
- package/cpp/zxing-core/core/src/GlobalHistogramBinarizer.cpp +197 -0
- package/cpp/zxing-core/core/src/GlobalHistogramBinarizer.h +34 -0
- package/cpp/zxing-core/core/src/GridSampler.cpp +124 -0
- package/cpp/zxing-core/core/src/GridSampler.h +59 -0
- package/cpp/zxing-core/core/src/HRI.cpp +343 -0
- package/cpp/zxing-core/core/src/HRI.h +16 -0
- package/cpp/zxing-core/core/src/HybridBinarizer.cpp +315 -0
- package/cpp/zxing-core/core/src/HybridBinarizer.h +40 -0
- package/cpp/zxing-core/core/src/ImageView.h +168 -0
- package/cpp/zxing-core/core/src/JSON.cpp +154 -0
- package/cpp/zxing-core/core/src/JSON.h +66 -0
- package/cpp/zxing-core/core/src/LocalGrid.cpp +242 -0
- package/cpp/zxing-core/core/src/LocalGrid.h +91 -0
- package/cpp/zxing-core/core/src/LogMatrix.h +105 -0
- package/cpp/zxing-core/core/src/Matrix.h +125 -0
- package/cpp/zxing-core/core/src/MultiFormatReader.cpp +107 -0
- package/cpp/zxing-core/core/src/MultiFormatReader.h +34 -0
- package/cpp/zxing-core/core/src/MultiFormatWriter.cpp +111 -0
- package/cpp/zxing-core/core/src/MultiFormatWriter.h +62 -0
- package/cpp/zxing-core/core/src/Pattern.h +472 -0
- package/cpp/zxing-core/core/src/PerspectiveTransform.cpp +81 -0
- package/cpp/zxing-core/core/src/PerspectiveTransform.h +47 -0
- package/cpp/zxing-core/core/src/Point.h +185 -0
- package/cpp/zxing-core/core/src/Quadrilateral.h +215 -0
- package/cpp/zxing-core/core/src/Range.h +112 -0
- package/cpp/zxing-core/core/src/ReadBarcode.cpp +335 -0
- package/cpp/zxing-core/core/src/ReadBarcode.h +33 -0
- package/cpp/zxing-core/core/src/Reader.h +32 -0
- package/cpp/zxing-core/core/src/ReaderOptions.h +210 -0
- package/cpp/zxing-core/core/src/ReedSolomon.cpp +100 -0
- package/cpp/zxing-core/core/src/ReedSolomon.h +66 -0
- package/cpp/zxing-core/core/src/RegressionLine.h +161 -0
- package/cpp/zxing-core/core/src/ResultPoint.cpp +20 -0
- package/cpp/zxing-core/core/src/ResultPoint.h +35 -0
- package/cpp/zxing-core/core/src/StdGenerator.h +121 -0
- package/cpp/zxing-core/core/src/StdPrint.h +38 -0
- package/cpp/zxing-core/core/src/StdScope.h +55 -0
- package/cpp/zxing-core/core/src/StructuredAppend.h +19 -0
- package/cpp/zxing-core/core/src/SymbologyIdentifier.h +29 -0
- package/cpp/zxing-core/core/src/TextDecoder.cpp +59 -0
- package/cpp/zxing-core/core/src/TextDecoder.h +23 -0
- package/cpp/zxing-core/core/src/TextEncoder.cpp +75 -0
- package/cpp/zxing-core/core/src/TextEncoder.h +31 -0
- package/cpp/zxing-core/core/src/ThresholdBinarizer.h +58 -0
- package/cpp/zxing-core/core/src/TritMatrix.h +29 -0
- package/cpp/zxing-core/core/src/Utf.cpp +276 -0
- package/cpp/zxing-core/core/src/Utf.h +26 -0
- package/cpp/zxing-core/core/src/WhiteRectDetector.cpp +276 -0
- package/cpp/zxing-core/core/src/WhiteRectDetector.h +36 -0
- package/cpp/zxing-core/core/src/WriteBarcode.cpp +213 -0
- package/cpp/zxing-core/core/src/WriteBarcode.h +72 -0
- package/cpp/zxing-core/core/src/ZXAlgorithms.h +353 -0
- package/cpp/zxing-core/core/src/ZXConfig.h +17 -0
- package/cpp/zxing-core/core/src/ZXTestSupport.h +9 -0
- package/cpp/zxing-core/core/src/ZXVersion.h +14 -0
- package/cpp/zxing-core/core/src/ZXingC.cpp +460 -0
- package/cpp/zxing-core/core/src/ZXingC.h +296 -0
- package/cpp/zxing-core/core/src/ZXingCpp.cpp +18 -0
- package/cpp/zxing-core/core/src/ZXingCpp.h +76 -0
- package/cpp/zxing-core/core/src/ZXingQt.h +606 -0
- package/cpp/zxing-core/core/src/aztec/AZDecoder.cpp +376 -0
- package/cpp/zxing-core/core/src/aztec/AZDecoder.h +20 -0
- package/cpp/zxing-core/core/src/aztec/AZDetector.cpp +508 -0
- package/cpp/zxing-core/core/src/aztec/AZDetector.h +25 -0
- package/cpp/zxing-core/core/src/aztec/AZDetectorResult.h +51 -0
- package/cpp/zxing-core/core/src/aztec/AZEncoder.cpp +318 -0
- package/cpp/zxing-core/core/src/aztec/AZEncoder.h +44 -0
- package/cpp/zxing-core/core/src/aztec/AZEncodingState.h +40 -0
- package/cpp/zxing-core/core/src/aztec/AZHighLevelEncoder.cpp +377 -0
- package/cpp/zxing-core/core/src/aztec/AZHighLevelEncoder.h +36 -0
- package/cpp/zxing-core/core/src/aztec/AZReader.cpp +45 -0
- package/cpp/zxing-core/core/src/aztec/AZReader.h +21 -0
- package/cpp/zxing-core/core/src/aztec/AZToken.cpp +44 -0
- package/cpp/zxing-core/core/src/aztec/AZToken.h +39 -0
- package/cpp/zxing-core/core/src/aztec/AZWriter.cpp +38 -0
- package/cpp/zxing-core/core/src/aztec/AZWriter.h +55 -0
- package/cpp/zxing-core/core/src/datamatrix/DMBitLayout.cpp +194 -0
- package/cpp/zxing-core/core/src/datamatrix/DMBitLayout.h +21 -0
- package/cpp/zxing-core/core/src/datamatrix/DMDataBlock.cpp +63 -0
- package/cpp/zxing-core/core/src/datamatrix/DMDataBlock.h +41 -0
- package/cpp/zxing-core/core/src/datamatrix/DMDecoder.cpp +457 -0
- package/cpp/zxing-core/core/src/datamatrix/DMDecoder.h +19 -0
- package/cpp/zxing-core/core/src/datamatrix/DMDetector.cpp +1230 -0
- package/cpp/zxing-core/core/src/datamatrix/DMDetector.h +23 -0
- package/cpp/zxing-core/core/src/datamatrix/DMECEncoder.cpp +137 -0
- package/cpp/zxing-core/core/src/datamatrix/DMECEncoder.h +26 -0
- package/cpp/zxing-core/core/src/datamatrix/DMEncoderContext.h +128 -0
- package/cpp/zxing-core/core/src/datamatrix/DMHighLevelEncoder.cpp +919 -0
- package/cpp/zxing-core/core/src/datamatrix/DMHighLevelEncoder.h +29 -0
- package/cpp/zxing-core/core/src/datamatrix/DMReader.cpp +40 -0
- package/cpp/zxing-core/core/src/datamatrix/DMReader.h +21 -0
- package/cpp/zxing-core/core/src/datamatrix/DMSymbolInfo.cpp +141 -0
- package/cpp/zxing-core/core/src/datamatrix/DMSymbolInfo.h +78 -0
- package/cpp/zxing-core/core/src/datamatrix/DMSymbolShape.h +17 -0
- package/cpp/zxing-core/core/src/datamatrix/DMVersion.cpp +82 -0
- package/cpp/zxing-core/core/src/datamatrix/DMVersion.h +76 -0
- package/cpp/zxing-core/core/src/datamatrix/DMWriter.cpp +114 -0
- package/cpp/zxing-core/core/src/datamatrix/DMWriter.h +62 -0
- package/cpp/zxing-core/core/src/librscpp/README.md +65 -0
- package/cpp/zxing-core/core/src/librscpp/decode.h +258 -0
- package/cpp/zxing-core/core/src/librscpp/encode.h +124 -0
- package/cpp/zxing-core/core/src/librscpp/field.h +158 -0
- package/cpp/zxing-core/core/src/librscpp/poly.h +194 -0
- package/cpp/zxing-core/core/src/libzint/2of5inter.c +1 -0
- package/cpp/zxing-core/core/src/libzint/2of5inter_based.c +1 -0
- package/cpp/zxing-core/core/src/libzint/aztec.c +1 -0
- package/cpp/zxing-core/core/src/libzint/aztec.h +1 -0
- package/cpp/zxing-core/core/src/libzint/big5.h +1 -0
- package/cpp/zxing-core/core/src/libzint/codabar.c +1 -0
- package/cpp/zxing-core/core/src/libzint/code.c +1 -0
- package/cpp/zxing-core/core/src/libzint/code128.c +1 -0
- package/cpp/zxing-core/core/src/libzint/code128.h +1 -0
- package/cpp/zxing-core/core/src/libzint/common.c +1 -0
- package/cpp/zxing-core/core/src/libzint/common.h +1 -0
- package/cpp/zxing-core/core/src/libzint/dmatrix.c +1 -0
- package/cpp/zxing-core/core/src/libzint/dmatrix.h +1 -0
- package/cpp/zxing-core/core/src/libzint/dxfilmedge.c +1 -0
- package/cpp/zxing-core/core/src/libzint/eci.c +1 -0
- package/cpp/zxing-core/core/src/libzint/eci.h +1 -0
- package/cpp/zxing-core/core/src/libzint/eci_sb.h +1 -0
- package/cpp/zxing-core/core/src/libzint/filemem.c +1 -0
- package/cpp/zxing-core/core/src/libzint/filemem.h +1 -0
- package/cpp/zxing-core/core/src/libzint/fonts/normal_woff2.h +1 -0
- package/cpp/zxing-core/core/src/libzint/fonts/upcean_woff2.h +1 -0
- package/cpp/zxing-core/core/src/libzint/gb18030.h +1 -0
- package/cpp/zxing-core/core/src/libzint/gb2312.h +1 -0
- package/cpp/zxing-core/core/src/libzint/gbk.h +1 -0
- package/cpp/zxing-core/core/src/libzint/general_field.c +1 -0
- package/cpp/zxing-core/core/src/libzint/general_field.h +1 -0
- package/cpp/zxing-core/core/src/libzint/gs1.c +1 -0
- package/cpp/zxing-core/core/src/libzint/gs1.h +1 -0
- package/cpp/zxing-core/core/src/libzint/gs1_lint.h +1 -0
- package/cpp/zxing-core/core/src/libzint/iso3166.h +1 -0
- package/cpp/zxing-core/core/src/libzint/iso4217.h +1 -0
- package/cpp/zxing-core/core/src/libzint/ksx1001.h +1 -0
- package/cpp/zxing-core/core/src/libzint/large.c +1 -0
- package/cpp/zxing-core/core/src/libzint/large.h +1 -0
- package/cpp/zxing-core/core/src/libzint/library.c +1 -0
- package/cpp/zxing-core/core/src/libzint/maxicode.c +1 -0
- package/cpp/zxing-core/core/src/libzint/maxicode.h +1 -0
- package/cpp/zxing-core/core/src/libzint/medical.c +1 -0
- package/cpp/zxing-core/core/src/libzint/output.c +1 -0
- package/cpp/zxing-core/core/src/libzint/output.h +1 -0
- package/cpp/zxing-core/core/src/libzint/pdf417.c +1 -0
- package/cpp/zxing-core/core/src/libzint/pdf417.h +1 -0
- package/cpp/zxing-core/core/src/libzint/pdf417_tabs.h +1 -0
- package/cpp/zxing-core/core/src/libzint/qr.c +1 -0
- package/cpp/zxing-core/core/src/libzint/qr.h +1 -0
- package/cpp/zxing-core/core/src/libzint/raster.c +1 -0
- package/cpp/zxing-core/core/src/libzint/raster_font.h +1 -0
- package/cpp/zxing-core/core/src/libzint/reedsol.c +1 -0
- package/cpp/zxing-core/core/src/libzint/reedsol.h +1 -0
- package/cpp/zxing-core/core/src/libzint/reedsol_logs.h +1 -0
- package/cpp/zxing-core/core/src/libzint/rss.c +1 -0
- package/cpp/zxing-core/core/src/libzint/rss.h +1 -0
- package/cpp/zxing-core/core/src/libzint/sjis.h +1 -0
- package/cpp/zxing-core/core/src/libzint/stubs.c +137 -0
- package/cpp/zxing-core/core/src/libzint/svg.c +1 -0
- package/cpp/zxing-core/core/src/libzint/telepen.c +1 -0
- package/cpp/zxing-core/core/src/libzint/upcean.c +1 -0
- package/cpp/zxing-core/core/src/libzint/vector.c +1 -0
- package/cpp/zxing-core/core/src/libzint/zfiletypes.h +1 -0
- package/cpp/zxing-core/core/src/libzint/zint.h +1 -0
- package/cpp/zxing-core/core/src/libzint/zintconfig.h +1 -0
- package/cpp/zxing-core/core/src/libzueci/README.md +11 -0
- package/cpp/zxing-core/core/src/libzueci/zueci.c +1718 -0
- package/cpp/zxing-core/core/src/libzueci/zueci.h +179 -0
- package/cpp/zxing-core/core/src/libzueci/zueci_big5.h +3884 -0
- package/cpp/zxing-core/core/src/libzueci/zueci_common.h +31 -0
- package/cpp/zxing-core/core/src/libzueci/zueci_gb18030.h +264 -0
- package/cpp/zxing-core/core/src/libzueci/zueci_gb2312.h +2381 -0
- package/cpp/zxing-core/core/src/libzueci/zueci_gbk.h +4047 -0
- package/cpp/zxing-core/core/src/libzueci/zueci_ksx1001.h +2932 -0
- package/cpp/zxing-core/core/src/libzueci/zueci_sb.h +1112 -0
- package/cpp/zxing-core/core/src/libzueci/zueci_sjis.h +2286 -0
- package/cpp/zxing-core/core/src/maxicode/MCBitMatrixParser.cpp +68 -0
- package/cpp/zxing-core/core/src/maxicode/MCBitMatrixParser.h +30 -0
- package/cpp/zxing-core/core/src/maxicode/MCDecoder.cpp +329 -0
- package/cpp/zxing-core/core/src/maxicode/MCDecoder.h +19 -0
- package/cpp/zxing-core/core/src/maxicode/MCReader.cpp +65 -0
- package/cpp/zxing-core/core/src/maxicode/MCReader.h +21 -0
- package/cpp/zxing-core/core/src/oned/ODCodabarReader.cpp +102 -0
- package/cpp/zxing-core/core/src/oned/ODCodabarReader.h +21 -0
- package/cpp/zxing-core/core/src/oned/ODCodabarWriter.cpp +136 -0
- package/cpp/zxing-core/core/src/oned/ODCodabarWriter.h +34 -0
- package/cpp/zxing-core/core/src/oned/ODCode128Patterns.h +130 -0
- package/cpp/zxing-core/core/src/oned/ODCode128Reader.cpp +236 -0
- package/cpp/zxing-core/core/src/oned/ODCode128Reader.h +21 -0
- package/cpp/zxing-core/core/src/oned/ODCode128Writer.cpp +261 -0
- package/cpp/zxing-core/core/src/oned/ODCode128Writer.h +34 -0
- package/cpp/zxing-core/core/src/oned/ODCode39Reader.cpp +213 -0
- package/cpp/zxing-core/core/src/oned/ODCode39Reader.h +26 -0
- package/cpp/zxing-core/core/src/oned/ODCode39Writer.cpp +176 -0
- package/cpp/zxing-core/core/src/oned/ODCode39Writer.h +34 -0
- package/cpp/zxing-core/core/src/oned/ODCode93Patterns.h +80 -0
- package/cpp/zxing-core/core/src/oned/ODCode93Reader.cpp +112 -0
- package/cpp/zxing-core/core/src/oned/ODCode93Reader.h +21 -0
- package/cpp/zxing-core/core/src/oned/ODCode93Writer.cpp +192 -0
- package/cpp/zxing-core/core/src/oned/ODCode93Writer.h +32 -0
- package/cpp/zxing-core/core/src/oned/ODDXFilmEdgeReader.cpp +246 -0
- package/cpp/zxing-core/core/src/oned/ODDXFilmEdgeReader.h +26 -0
- package/cpp/zxing-core/core/src/oned/ODDataBarCommon.cpp +172 -0
- package/cpp/zxing-core/core/src/oned/ODDataBarCommon.h +204 -0
- package/cpp/zxing-core/core/src/oned/ODDataBarExpandedBitDecoder.cpp +253 -0
- package/cpp/zxing-core/core/src/oned/ODDataBarExpandedBitDecoder.h +19 -0
- package/cpp/zxing-core/core/src/oned/ODDataBarExpandedReader.cpp +383 -0
- package/cpp/zxing-core/core/src/oned/ODDataBarExpandedReader.h +25 -0
- package/cpp/zxing-core/core/src/oned/ODDataBarLimitedReader.cpp +163 -0
- package/cpp/zxing-core/core/src/oned/ODDataBarLimitedReader.h +23 -0
- package/cpp/zxing-core/core/src/oned/ODDataBarReader.cpp +240 -0
- package/cpp/zxing-core/core/src/oned/ODDataBarReader.h +25 -0
- package/cpp/zxing-core/core/src/oned/ODEAN13Writer.cpp +62 -0
- package/cpp/zxing-core/core/src/oned/ODEAN13Writer.h +34 -0
- package/cpp/zxing-core/core/src/oned/ODEAN8Writer.cpp +51 -0
- package/cpp/zxing-core/core/src/oned/ODEAN8Writer.h +34 -0
- package/cpp/zxing-core/core/src/oned/ODITFReader.cpp +97 -0
- package/cpp/zxing-core/core/src/oned/ODITFReader.h +33 -0
- package/cpp/zxing-core/core/src/oned/ODITFWriter.cpp +78 -0
- package/cpp/zxing-core/core/src/oned/ODITFWriter.h +34 -0
- package/cpp/zxing-core/core/src/oned/ODMultiUPCEANReader.cpp +323 -0
- package/cpp/zxing-core/core/src/oned/ODMultiUPCEANReader.h +32 -0
- package/cpp/zxing-core/core/src/oned/ODReader.cpp +259 -0
- package/cpp/zxing-core/core/src/oned/ODReader.h +35 -0
- package/cpp/zxing-core/core/src/oned/ODRowReader.h +222 -0
- package/cpp/zxing-core/core/src/oned/ODTelepenReader.cpp +199 -0
- package/cpp/zxing-core/core/src/oned/ODTelepenReader.h +25 -0
- package/cpp/zxing-core/core/src/oned/ODUPCAWriter.cpp +33 -0
- package/cpp/zxing-core/core/src/oned/ODUPCAWriter.h +34 -0
- package/cpp/zxing-core/core/src/oned/ODUPCEANCommon.cpp +80 -0
- package/cpp/zxing-core/core/src/oned/ODUPCEANCommon.h +129 -0
- package/cpp/zxing-core/core/src/oned/ODUPCEWriter.cpp +56 -0
- package/cpp/zxing-core/core/src/oned/ODUPCEWriter.h +34 -0
- package/cpp/zxing-core/core/src/oned/ODWriterHelper.cpp +39 -0
- package/cpp/zxing-core/core/src/oned/ODWriterHelper.h +48 -0
- package/cpp/zxing-core/core/src/pdf417/MicroPDFReader.cpp +796 -0
- package/cpp/zxing-core/core/src/pdf417/MicroPDFReader.h +23 -0
- package/cpp/zxing-core/core/src/pdf417/PDF417.cpp +85 -0
- package/cpp/zxing-core/core/src/pdf417/PDF417.h +81 -0
- package/cpp/zxing-core/core/src/pdf417/PDFBarcodeMetadata.h +53 -0
- package/cpp/zxing-core/core/src/pdf417/PDFBarcodeValue.cpp +48 -0
- package/cpp/zxing-core/core/src/pdf417/PDFBarcodeValue.h +38 -0
- package/cpp/zxing-core/core/src/pdf417/PDFBoundingBox.cpp +116 -0
- package/cpp/zxing-core/core/src/pdf417/PDFBoundingBox.h +75 -0
- package/cpp/zxing-core/core/src/pdf417/PDFCodeword.h +71 -0
- package/cpp/zxing-core/core/src/pdf417/PDFCodewordDecoder.cpp +588 -0
- package/cpp/zxing-core/core/src/pdf417/PDFCodewordDecoder.h +41 -0
- package/cpp/zxing-core/core/src/pdf417/PDFCompaction.h +20 -0
- package/cpp/zxing-core/core/src/pdf417/PDFCustomData.h +32 -0
- package/cpp/zxing-core/core/src/pdf417/PDFDecoder.cpp +725 -0
- package/cpp/zxing-core/core/src/pdf417/PDFDecoder.h +20 -0
- package/cpp/zxing-core/core/src/pdf417/PDFDetectionResult.cpp +247 -0
- package/cpp/zxing-core/core/src/pdf417/PDFDetectionResult.h +74 -0
- package/cpp/zxing-core/core/src/pdf417/PDFDetectionResultColumn.cpp +321 -0
- package/cpp/zxing-core/core/src/pdf417/PDFDetectionResultColumn.h +83 -0
- package/cpp/zxing-core/core/src/pdf417/PDFDetector.cpp +371 -0
- package/cpp/zxing-core/core/src/pdf417/PDFDetector.h +45 -0
- package/cpp/zxing-core/core/src/pdf417/PDFEncoder.cpp +570 -0
- package/cpp/zxing-core/core/src/pdf417/PDFEncoder.h +182 -0
- package/cpp/zxing-core/core/src/pdf417/PDFHighLevelEncoder.cpp +570 -0
- package/cpp/zxing-core/core/src/pdf417/PDFHighLevelEncoder.h +32 -0
- package/cpp/zxing-core/core/src/pdf417/PDFReader.cpp +333 -0
- package/cpp/zxing-core/core/src/pdf417/PDFReader.h +28 -0
- package/cpp/zxing-core/core/src/pdf417/PDFScanningDecoder.cpp +559 -0
- package/cpp/zxing-core/core/src/pdf417/PDFScanningDecoder.h +41 -0
- package/cpp/zxing-core/core/src/pdf417/PDFWriter.cpp +170 -0
- package/cpp/zxing-core/core/src/pdf417/PDFWriter.h +74 -0
- package/cpp/zxing-core/core/src/pdf417/ZXBigInteger.cpp +623 -0
- package/cpp/zxing-core/core/src/pdf417/ZXBigInteger.h +81 -0
- package/cpp/zxing-core/core/src/pdf417/ZXNullable.h +105 -0
- package/cpp/zxing-core/core/src/qrcode/QRBitMatrixParser.cpp +294 -0
- package/cpp/zxing-core/core/src/qrcode/QRBitMatrixParser.h +41 -0
- package/cpp/zxing-core/core/src/qrcode/QRCodecMode.cpp +95 -0
- package/cpp/zxing-core/core/src/qrcode/QRCodecMode.h +59 -0
- package/cpp/zxing-core/core/src/qrcode/QRDataBlock.cpp +93 -0
- package/cpp/zxing-core/core/src/qrcode/QRDataBlock.h +52 -0
- package/cpp/zxing-core/core/src/qrcode/QRDataMask.h +50 -0
- package/cpp/zxing-core/core/src/qrcode/QRDecoder.cpp +359 -0
- package/cpp/zxing-core/core/src/qrcode/QRDecoder.h +19 -0
- package/cpp/zxing-core/core/src/qrcode/QRDetector.cpp +920 -0
- package/cpp/zxing-core/core/src/qrcode/QRDetector.h +45 -0
- package/cpp/zxing-core/core/src/qrcode/QRECB.h +52 -0
- package/cpp/zxing-core/core/src/qrcode/QREncodeResult.h +33 -0
- package/cpp/zxing-core/core/src/qrcode/QREncoder.cpp +568 -0
- package/cpp/zxing-core/core/src/qrcode/QREncoder.h +21 -0
- package/cpp/zxing-core/core/src/qrcode/QRErrorCorrectionLevel.cpp +51 -0
- package/cpp/zxing-core/core/src/qrcode/QRErrorCorrectionLevel.h +39 -0
- package/cpp/zxing-core/core/src/qrcode/QRFormatInformation.cpp +160 -0
- package/cpp/zxing-core/core/src/qrcode/QRFormatInformation.h +61 -0
- package/cpp/zxing-core/core/src/qrcode/QRMaskUtil.cpp +156 -0
- package/cpp/zxing-core/core/src/qrcode/QRMaskUtil.h +15 -0
- package/cpp/zxing-core/core/src/qrcode/QRMatrixUtil.cpp +318 -0
- package/cpp/zxing-core/core/src/qrcode/QRMatrixUtil.h +25 -0
- package/cpp/zxing-core/core/src/qrcode/QRReader.cpp +149 -0
- package/cpp/zxing-core/core/src/qrcode/QRReader.h +21 -0
- package/cpp/zxing-core/core/src/qrcode/QRVersion.cpp +754 -0
- package/cpp/zxing-core/core/src/qrcode/QRVersion.h +127 -0
- package/cpp/zxing-core/core/src/qrcode/QRWriter.cpp +51 -0
- package/cpp/zxing-core/core/src/qrcode/QRWriter.h +74 -0
- package/cpp/zxing-core/core/version.rc.in +34 -0
- package/cpp/zxing-core/core/zxing.pc.in +8 -0
- package/cpp/zxing-core/wrappers/ios/README.md +25 -0
- package/cpp/zxing-core/wrappers/ios/Sources/Wrapper/Version.h +29 -0
- package/cpp/zxing-core/zxing-cpp.podspec +45 -0
- package/lib/factory.d.ts +10 -0
- package/lib/factory.js +12 -0
- package/lib/index.d.ts +9 -0
- package/lib/index.js +9 -0
- package/lib/specs/Barcode.nitro.d.ts +63 -0
- package/lib/specs/Barcode.nitro.js +1 -0
- package/lib/specs/BarcodeFormat.d.ts +11 -0
- package/lib/specs/BarcodeFormat.js +1 -0
- package/lib/specs/BarcodeScanner.nitro.d.ts +89 -0
- package/lib/specs/BarcodeScanner.nitro.js +1 -0
- package/lib/specs/BarcodeScannerFactory.nitro.d.ts +26 -0
- package/lib/specs/BarcodeScannerFactory.nitro.js +1 -0
- package/lib/specs/BarcodeValueType.d.ts +9 -0
- package/lib/specs/BarcodeValueType.js +1 -0
- package/lib/specs/Point.d.ts +14 -0
- package/lib/specs/Point.js +1 -0
- package/lib/specs/Rect.d.ts +22 -0
- package/lib/specs/Rect.js +1 -0
- package/lib/useBarcodeScanner.d.ts +23 -0
- package/lib/useBarcodeScanner.js +25 -0
- package/nitro.json +20 -0
- package/nitrogen/generated/.gitattributes +1 -0
- package/nitrogen/generated/android/VisionCameraZxing+autolinking.cmake +83 -0
- package/nitrogen/generated/android/VisionCameraZxing+autolinking.gradle +27 -0
- package/nitrogen/generated/android/VisionCameraZxingOnLoad.cpp +49 -0
- package/nitrogen/generated/android/VisionCameraZxingOnLoad.hpp +34 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/camera/zxing/VisionCameraZxingOnLoad.kt +35 -0
- package/nitrogen/generated/ios/VisionCameraZxing+autolinking.rb +62 -0
- package/nitrogen/generated/ios/VisionCameraZxing-Swift-Cxx-Bridge.cpp +17 -0
- package/nitrogen/generated/ios/VisionCameraZxing-Swift-Cxx-Bridge.hpp +27 -0
- package/nitrogen/generated/ios/VisionCameraZxing-Swift-Cxx-Umbrella.hpp +38 -0
- package/nitrogen/generated/ios/VisionCameraZxingAutolinking.mm +35 -0
- package/nitrogen/generated/ios/VisionCameraZxingAutolinking.swift +16 -0
- package/nitrogen/generated/shared/c++/BarcodeFormat.hpp +124 -0
- package/nitrogen/generated/shared/c++/BarcodeScannerOptions.hpp +85 -0
- package/nitrogen/generated/shared/c++/BarcodeValueType.hpp +120 -0
- package/nitrogen/generated/shared/c++/HybridBarcodeScannerSpec.cpp +23 -0
- package/nitrogen/generated/shared/c++/HybridBarcodeScannerSpec.hpp +74 -0
- package/nitrogen/generated/shared/c++/HybridBarcodeSpec.cpp +27 -0
- package/nitrogen/generated/shared/c++/HybridBarcodeSpec.hpp +82 -0
- package/nitrogen/generated/shared/c++/HybridZXingBarcodeScannerFactorySpec.cpp +21 -0
- package/nitrogen/generated/shared/c++/HybridZXingBarcodeScannerFactorySpec.hpp +67 -0
- package/nitrogen/generated/shared/c++/Point.hpp +87 -0
- package/nitrogen/generated/shared/c++/Rect.hpp +95 -0
- package/nitrogen/generated/shared/c++/TargetBarcodeFormat.hpp +124 -0
- package/package.json +108 -0
- package/react-native.config.js +16 -0
- package/src/factory.ts +26 -0
- package/src/index.ts +9 -0
- package/src/specs/Barcode.nitro.ts +70 -0
- package/src/specs/BarcodeFormat.ts +31 -0
- package/src/specs/BarcodeScanner.nitro.ts +91 -0
- package/src/specs/BarcodeScannerFactory.nitro.ts +27 -0
- package/src/specs/BarcodeValueType.ts +25 -0
- package/src/specs/Point.ts +14 -0
- package/src/specs/Rect.ts +22 -0
- package/src/useBarcodeScanner.ts +36 -0
package/README.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# react-native-nitro-zxing
|
|
2
|
+
|
|
3
|
+
A [VisionCamera](https://github.com/mrousavy/react-native-vision-camera) v5 barcode scanner powered by [zxing-cpp](https://github.com/zxing-cpp/zxing-cpp), implemented as pure C++ Nitro HybridObjects. Frames are decoded straight from the camera's pixel buffer (Y plane, zero-copy) - no ML Kit, no base64, no temporary files.
|
|
4
|
+
|
|
5
|
+
```sh
|
|
6
|
+
npm install react-native-nitro-zxing react-native-nitro-image
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Requires VisionCamera Core, Nitro Modules and Nitro Image. For frame processors also install `react-native-vision-camera-worklets` and `react-native-worklets`.
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import { useBarcodeScanner } from 'react-native-nitro-zxing'
|
|
13
|
+
|
|
14
|
+
const scanner = useBarcodeScanner({ barcodeFormats: ['all-formats'] })
|
|
15
|
+
const frameOutput = useFrameOutput({
|
|
16
|
+
pixelFormat: 'yuv',
|
|
17
|
+
onFrame(frame) {
|
|
18
|
+
'worklet'
|
|
19
|
+
const barcodes = scanner.scanCodes(frame)
|
|
20
|
+
frame.dispose()
|
|
21
|
+
console.log(barcodes.map((b) => `${b.format}: ${b.displayValue}`))
|
|
22
|
+
},
|
|
23
|
+
})
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Still images: `await scanner.scanCodesInImageAsync(image)` with a Nitro `Image`.
|
|
27
|
+
|
|
28
|
+
## Building from source
|
|
29
|
+
|
|
30
|
+
zxing-cpp is vendored as a git submodule at `cpp/zxing-core`. When cloning the repository run `git submodule update --init`; the npm package already contains the sources.
|
|
31
|
+
|
|
32
|
+
## Coordinates
|
|
33
|
+
|
|
34
|
+
`Barcode.cornerPoints` / `boundingBox` are in the upright (rotated by `Frame.orientation`) frame coordinate system, matching `react-native-vision-camera-barcode-scanner`.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require "json"
|
|
2
|
+
|
|
3
|
+
package = JSON.parse(File.read(File.join(__dir__, "package.json")))
|
|
4
|
+
|
|
5
|
+
Pod::Spec.new do |s|
|
|
6
|
+
s.name = "VisionCameraZxing"
|
|
7
|
+
s.version = package["version"]
|
|
8
|
+
s.summary = package["description"]
|
|
9
|
+
s.homepage = package["homepage"]
|
|
10
|
+
s.license = package["license"]
|
|
11
|
+
s.authors = package["author"]
|
|
12
|
+
|
|
13
|
+
s.platforms = { :ios => min_ios_version_supported, :visionos => 1.0 }
|
|
14
|
+
s.source = { :git => "https://github.com/margelo/react-native-vision-camera-zxing.git", :tag => "v#{s.version}" }
|
|
15
|
+
|
|
16
|
+
s.source_files = [
|
|
17
|
+
# Autolinking/Registration (Objective-C++)
|
|
18
|
+
"ios/**/*.{m,mm}",
|
|
19
|
+
# Implementation (C++ objects)
|
|
20
|
+
"cpp/*.{hpp,cpp}",
|
|
21
|
+
# zxing-cpp readers (git submodule)
|
|
22
|
+
"cpp/zxing-core/core/src/**/*.{h,c,cpp}",
|
|
23
|
+
]
|
|
24
|
+
s.exclude_files = [
|
|
25
|
+
"cpp/zxing-core/core/src/libzint/**",
|
|
26
|
+
"cpp/zxing-core/core/src/ZXingC.cpp",
|
|
27
|
+
]
|
|
28
|
+
s.private_header_files = [
|
|
29
|
+
"cpp/*.hpp",
|
|
30
|
+
"cpp/zxing-core/core/src/**/*.h",
|
|
31
|
+
]
|
|
32
|
+
s.compiler_flags = "-DZXING_INTERNAL -Wno-comma"
|
|
33
|
+
s.pod_target_xcconfig = {
|
|
34
|
+
"HEADER_SEARCH_PATHS" => '"$(PODS_TARGET_SRCROOT)/cpp/zxing-core/core/src" "$(PODS_TARGET_SRCROOT)/cpp/zxing-core/wrappers/ios/Sources/Wrapper"',
|
|
35
|
+
# Header maps resolve by basename across all pods (e.g. React's Point.h or another
|
|
36
|
+
# barcode pod's BarcodeFormat.hpp would shadow ours); use the search paths above instead.
|
|
37
|
+
"USE_HEADERMAP" => "NO",
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
load 'nitrogen/generated/ios/VisionCameraZxing+autolinking.rb'
|
|
41
|
+
add_nitrogen_files(s)
|
|
42
|
+
|
|
43
|
+
s.dependency 'VisionCamera'
|
|
44
|
+
s.dependency 'NitroImage'
|
|
45
|
+
s.dependency 'React-jsi'
|
|
46
|
+
s.dependency 'React-callinvoker'
|
|
47
|
+
install_modules_dependencies(s)
|
|
48
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
project(VisionCameraZxing)
|
|
2
|
+
cmake_minimum_required(VERSION 3.16.0)
|
|
3
|
+
|
|
4
|
+
set (PACKAGE_NAME VisionCameraZxing)
|
|
5
|
+
set (CMAKE_VERBOSE_MAKEFILE ON)
|
|
6
|
+
set (CMAKE_CXX_STANDARD 20)
|
|
7
|
+
|
|
8
|
+
# zxing-cpp readers only, as a static archive linked into our shared library
|
|
9
|
+
set (ZXING_READERS ON)
|
|
10
|
+
set (ZXING_WRITERS OFF)
|
|
11
|
+
set (BUILD_SHARED_LIBS OFF)
|
|
12
|
+
add_subdirectory(${CMAKE_SOURCE_DIR}/../cpp/zxing-core/core ${CMAKE_BINARY_DIR}/zxing-core EXCLUDE_FROM_ALL)
|
|
13
|
+
|
|
14
|
+
file(GLOB SHARED_CPP_SOURCES CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/../cpp/*.cpp")
|
|
15
|
+
|
|
16
|
+
# Define C++ library and add all sources
|
|
17
|
+
add_library(${PACKAGE_NAME} SHARED
|
|
18
|
+
src/main/cpp/cpp-adapter.cpp
|
|
19
|
+
${SHARED_CPP_SOURCES}
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
# Add Nitrogen specs :)
|
|
23
|
+
include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/VisionCameraZxing+autolinking.cmake)
|
|
24
|
+
|
|
25
|
+
# Set up local includes
|
|
26
|
+
include_directories(
|
|
27
|
+
"src/main/cpp"
|
|
28
|
+
"../cpp"
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
find_library(LOG_LIB log)
|
|
32
|
+
find_package(react-native-vision-camera REQUIRED) # <-- for the HybridFrameSpec
|
|
33
|
+
find_package(react-native-nitro-image REQUIRED) # <-- for the HybridImageSpec
|
|
34
|
+
|
|
35
|
+
# Link all libraries together
|
|
36
|
+
target_link_libraries(
|
|
37
|
+
${PACKAGE_NAME}
|
|
38
|
+
${LOG_LIB}
|
|
39
|
+
android # <-- Android core
|
|
40
|
+
ZXing::ZXing
|
|
41
|
+
react-native-vision-camera::VisionCamera
|
|
42
|
+
react-native-nitro-image::NitroImage
|
|
43
|
+
)
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
buildscript {
|
|
2
|
+
repositories {
|
|
3
|
+
google()
|
|
4
|
+
mavenCentral()
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
dependencies {
|
|
8
|
+
classpath "com.android.tools.build:gradle:9.2.1"
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def reactNativeArchitectures() {
|
|
14
|
+
def value = rootProject.getProperties().get("reactNativeArchitectures")
|
|
15
|
+
return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
def isNewArchitectureEnabled() {
|
|
19
|
+
return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true"
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
apply plugin: "com.android.library"
|
|
23
|
+
apply plugin: 'org.jetbrains.kotlin.android'
|
|
24
|
+
apply from: '../nitrogen/generated/android/VisionCameraZxing+autolinking.gradle'
|
|
25
|
+
apply from: "./fix-prefab.gradle"
|
|
26
|
+
|
|
27
|
+
if (isNewArchitectureEnabled()) {
|
|
28
|
+
apply plugin: "com.facebook.react"
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
def getExtOrDefault(name) {
|
|
32
|
+
return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties["VisionCameraZxing_" + name]
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
def getExtOrIntegerDefault(name) {
|
|
36
|
+
return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["VisionCameraZxing_" + name]).toInteger()
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
android {
|
|
40
|
+
namespace "com.margelo.nitro.camera.zxing"
|
|
41
|
+
|
|
42
|
+
ndkVersion getExtOrDefault("ndkVersion")
|
|
43
|
+
compileSdkVersion getExtOrIntegerDefault("compileSdkVersion")
|
|
44
|
+
|
|
45
|
+
defaultConfig {
|
|
46
|
+
minSdkVersion getExtOrIntegerDefault("minSdkVersion")
|
|
47
|
+
targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
|
|
48
|
+
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
|
|
49
|
+
|
|
50
|
+
externalNativeBuild {
|
|
51
|
+
cmake {
|
|
52
|
+
cppFlags "-frtti -fexceptions -Wall -Wextra -fstack-protector-all"
|
|
53
|
+
arguments "-DANDROID_STL=c++_shared", "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
|
|
54
|
+
abiFilters (*reactNativeArchitectures())
|
|
55
|
+
|
|
56
|
+
buildTypes {
|
|
57
|
+
debug {
|
|
58
|
+
cppFlags "-O1 -g"
|
|
59
|
+
}
|
|
60
|
+
release {
|
|
61
|
+
cppFlags "-O2"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
externalNativeBuild {
|
|
69
|
+
cmake {
|
|
70
|
+
path "CMakeLists.txt"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
packagingOptions {
|
|
75
|
+
excludes = [
|
|
76
|
+
"META-INF",
|
|
77
|
+
"META-INF/**",
|
|
78
|
+
"**/libc++_shared.so",
|
|
79
|
+
"**/libNitroModules.so",
|
|
80
|
+
"**/libfbjni.so",
|
|
81
|
+
"**/libjsi.so",
|
|
82
|
+
"**/libfolly_json.so",
|
|
83
|
+
"**/libfolly_runtime.so",
|
|
84
|
+
"**/libglog.so",
|
|
85
|
+
"**/libhermes.so",
|
|
86
|
+
"**/libhermes-executor-debug.so",
|
|
87
|
+
"**/libhermes_executor.so",
|
|
88
|
+
"**/libreactnative.so",
|
|
89
|
+
"**/libreactnativejni.so",
|
|
90
|
+
"**/libturbomodulejsijni.so",
|
|
91
|
+
"**/libreact_nativemodule_core.so",
|
|
92
|
+
"**/libjscexecutor.so"
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
buildFeatures {
|
|
97
|
+
buildConfig true
|
|
98
|
+
prefab true
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
buildTypes {
|
|
102
|
+
release {
|
|
103
|
+
minifyEnabled false
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
lintOptions {
|
|
108
|
+
disable "GradleCompatible"
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
compileOptions {
|
|
112
|
+
sourceCompatibility JavaVersion.VERSION_1_8
|
|
113
|
+
targetCompatibility JavaVersion.VERSION_1_8
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
sourceSets {
|
|
117
|
+
main {
|
|
118
|
+
if (isNewArchitectureEnabled()) {
|
|
119
|
+
java.srcDirs += [
|
|
120
|
+
// React Codegen files
|
|
121
|
+
"${project.buildDir}/generated/source/codegen/java"
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
repositories {
|
|
129
|
+
mavenCentral()
|
|
130
|
+
google()
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
dependencies {
|
|
135
|
+
// For < 0.71, this will be from the local maven repo
|
|
136
|
+
// For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin
|
|
137
|
+
//noinspection GradleDynamicVersion
|
|
138
|
+
implementation "com.facebook.react:react-native:+"
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
// Add a dependency on NitroModules
|
|
143
|
+
implementation project(":react-native-nitro-modules")
|
|
144
|
+
|
|
145
|
+
// Add a dependency on VisionCamera (for HybridFrameSpec and HybridCameraOutputSpec)
|
|
146
|
+
implementation project(":react-native-vision-camera")
|
|
147
|
+
|
|
148
|
+
// Add a dependency on NitroImage (for HybridImageSpec)
|
|
149
|
+
implementation project(":react-native-nitro-image")
|
|
150
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
tasks.configureEach { task ->
|
|
2
|
+
// Make sure that we generate our prefab publication file only after having built the native library
|
|
3
|
+
// so that not a header publication file, but a full configuration publication will be generated, which
|
|
4
|
+
// will include the .so file
|
|
5
|
+
|
|
6
|
+
def prefabConfigurePattern = ~/^prefab(.+)ConfigurePackage$/
|
|
7
|
+
def matcher = task.name =~ prefabConfigurePattern
|
|
8
|
+
if (matcher.matches()) {
|
|
9
|
+
def variantName = matcher[0][1]
|
|
10
|
+
task.outputs.upToDateWhen { false }
|
|
11
|
+
task.dependsOn("externalNativeBuild${variantName}")
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
afterEvaluate {
|
|
16
|
+
def abis = reactNativeArchitectures()
|
|
17
|
+
rootProject.allprojects.each { proj ->
|
|
18
|
+
if (proj === rootProject) return
|
|
19
|
+
|
|
20
|
+
def dependsOnThisLib = proj.configurations.findAll { it.canBeResolved }.any { config ->
|
|
21
|
+
config.dependencies.any { dep ->
|
|
22
|
+
dep.group == project.group && dep.name == project.name
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (!dependsOnThisLib && proj != project) return
|
|
26
|
+
|
|
27
|
+
if (!proj.plugins.hasPlugin('com.android.application') && !proj.plugins.hasPlugin('com.android.library')) {
|
|
28
|
+
return
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
def variants = proj.android.hasProperty('applicationVariants') ? proj.android.applicationVariants : proj.android.libraryVariants
|
|
32
|
+
// Touch the prefab_config.json files to ensure that in ExternalNativeJsonGenerator.kt we will re-trigger the prefab CLI to
|
|
33
|
+
// generate a libnameConfig.cmake file that will contain our native library (.so).
|
|
34
|
+
// See this condition: https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:build-system/gradle-core/src/main/java/com/android/build/gradle/tasks/ExternalNativeJsonGenerator.kt;l=207-219?q=createPrefabBuildSystemGlue
|
|
35
|
+
variants.all { variant ->
|
|
36
|
+
def variantName = variant.name
|
|
37
|
+
abis.each { abi ->
|
|
38
|
+
def searchDir = new File(proj.projectDir, ".cxx/${variantName}")
|
|
39
|
+
if (!searchDir.exists()) return
|
|
40
|
+
def matches = []
|
|
41
|
+
searchDir.eachDir { randomDir ->
|
|
42
|
+
def prefabFile = new File(randomDir, "${abi}/prefab_config.json")
|
|
43
|
+
if (prefabFile.exists()) matches << prefabFile
|
|
44
|
+
}
|
|
45
|
+
matches.each { prefabConfig ->
|
|
46
|
+
prefabConfig.setLastModified(System.currentTimeMillis())
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
package com.margelo.nitro.camera.zxing
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.BaseReactPackage
|
|
4
|
+
import com.facebook.react.bridge.NativeModule
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider
|
|
7
|
+
|
|
8
|
+
class VisionCameraZxingPackage : BaseReactPackage() {
|
|
9
|
+
override fun getModule(
|
|
10
|
+
name: String,
|
|
11
|
+
reactContext: ReactApplicationContext,
|
|
12
|
+
): NativeModule? = null
|
|
13
|
+
|
|
14
|
+
override fun getReactModuleInfoProvider(): ReactModuleInfoProvider = ReactModuleInfoProvider { HashMap() }
|
|
15
|
+
|
|
16
|
+
companion object {
|
|
17
|
+
init {
|
|
18
|
+
VisionCameraZxingOnLoad.initializeNative()
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#include "BarcodeValueTypeClassifier.hpp"
|
|
2
|
+
|
|
3
|
+
#include <cctype>
|
|
4
|
+
|
|
5
|
+
namespace margelo::nitro::camera::zxing {
|
|
6
|
+
|
|
7
|
+
namespace {
|
|
8
|
+
|
|
9
|
+
bool startsWithIgnoreCase(std::string_view text, std::string_view prefix) {
|
|
10
|
+
if (text.size() < prefix.size()) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
for (size_t i = 0; i < prefix.size(); i++) {
|
|
14
|
+
const int textChar = std::tolower(static_cast<unsigned char>(text[i]));
|
|
15
|
+
const int prefixChar = std::tolower(static_cast<unsigned char>(prefix[i]));
|
|
16
|
+
if (textChar != prefixChar) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
bool isRetailFormat(BarcodeFormat format) {
|
|
24
|
+
return format == BarcodeFormat::EAN_13 || format == BarcodeFormat::EAN_8 || format == BarcodeFormat::UPC_A || format == BarcodeFormat::UPC_E;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
} // namespace
|
|
28
|
+
|
|
29
|
+
// ponytail: prefix heuristic mirroring ML Kit's value types, no vCard/WiFi/vEvent parsing.
|
|
30
|
+
BarcodeValueType classifyValueType(std::string_view text, BarcodeFormat format, ZXing::ContentType contentType) {
|
|
31
|
+
if (contentType == ZXing::ContentType::Binary) {
|
|
32
|
+
return BarcodeValueType::UNKNOWN;
|
|
33
|
+
}
|
|
34
|
+
if (startsWithIgnoreCase(text, "http://") || startsWithIgnoreCase(text, "https://")) {
|
|
35
|
+
return BarcodeValueType::URL;
|
|
36
|
+
}
|
|
37
|
+
if (startsWithIgnoreCase(text, "mailto:") || startsWithIgnoreCase(text, "MATMSG:")) {
|
|
38
|
+
return BarcodeValueType::EMAIL;
|
|
39
|
+
}
|
|
40
|
+
if (startsWithIgnoreCase(text, "tel:")) {
|
|
41
|
+
return BarcodeValueType::PHONE;
|
|
42
|
+
}
|
|
43
|
+
if (startsWithIgnoreCase(text, "smsto:") || startsWithIgnoreCase(text, "sms:")) {
|
|
44
|
+
return BarcodeValueType::SMS;
|
|
45
|
+
}
|
|
46
|
+
if (startsWithIgnoreCase(text, "geo:")) {
|
|
47
|
+
return BarcodeValueType::GEO;
|
|
48
|
+
}
|
|
49
|
+
if (startsWithIgnoreCase(text, "WIFI:")) {
|
|
50
|
+
return BarcodeValueType::WIFI;
|
|
51
|
+
}
|
|
52
|
+
if (startsWithIgnoreCase(text, "BEGIN:VCARD") || startsWithIgnoreCase(text, "MECARD:")) {
|
|
53
|
+
return BarcodeValueType::CONTACT_INFO;
|
|
54
|
+
}
|
|
55
|
+
if (startsWithIgnoreCase(text, "BEGIN:VEVENT") || startsWithIgnoreCase(text, "BEGIN:VCALENDAR")) {
|
|
56
|
+
return BarcodeValueType::CALENDAR_EVENT;
|
|
57
|
+
}
|
|
58
|
+
if (format == BarcodeFormat::PDF_417 && text.starts_with("@\n")) {
|
|
59
|
+
return BarcodeValueType::DRIVER_LICENSE;
|
|
60
|
+
}
|
|
61
|
+
if (format == BarcodeFormat::EAN_13 && (text.starts_with("978") || text.starts_with("979"))) {
|
|
62
|
+
return BarcodeValueType::ISBN;
|
|
63
|
+
}
|
|
64
|
+
if (isRetailFormat(format)) {
|
|
65
|
+
return BarcodeValueType::PRODUCT;
|
|
66
|
+
}
|
|
67
|
+
return BarcodeValueType::TEXT;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
} // namespace margelo::nitro::camera::zxing
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "BarcodeFormat.hpp"
|
|
4
|
+
#include "BarcodeValueType.hpp"
|
|
5
|
+
|
|
6
|
+
#include "ContentType.h"
|
|
7
|
+
|
|
8
|
+
#include <string_view>
|
|
9
|
+
|
|
10
|
+
namespace margelo::nitro::camera::zxing {
|
|
11
|
+
|
|
12
|
+
BarcodeValueType classifyValueType(std::string_view plainText, BarcodeFormat format, ZXing::ContentType contentType);
|
|
13
|
+
|
|
14
|
+
} // namespace margelo::nitro::camera::zxing
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#include "FrameImageView.hpp"
|
|
2
|
+
|
|
3
|
+
#include <stdexcept>
|
|
4
|
+
#include <string>
|
|
5
|
+
|
|
6
|
+
namespace margelo::nitro::camera::zxing {
|
|
7
|
+
|
|
8
|
+
namespace {
|
|
9
|
+
|
|
10
|
+
// Clockwise rotation that makes the buffer upright: `orientation` describes how the content is
|
|
11
|
+
// currently rotated (VisionCamera maps CameraX's rotationDegrees=90 to LEFT), so we rotate back.
|
|
12
|
+
int rotationDegrees(camera::CameraOrientation orientation) {
|
|
13
|
+
switch (orientation) {
|
|
14
|
+
case camera::CameraOrientation::UP:
|
|
15
|
+
return 0;
|
|
16
|
+
case camera::CameraOrientation::LEFT:
|
|
17
|
+
return 90;
|
|
18
|
+
case camera::CameraOrientation::DOWN:
|
|
19
|
+
return 180;
|
|
20
|
+
case camera::CameraOrientation::RIGHT:
|
|
21
|
+
return 270;
|
|
22
|
+
}
|
|
23
|
+
return 0;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
} // namespace
|
|
27
|
+
|
|
28
|
+
FrameImageView::FrameImageView(const std::shared_ptr<camera::HybridFrameSpec>& frame) : _frame(frame) {
|
|
29
|
+
if (frame == nullptr || !frame->getIsValid()) {
|
|
30
|
+
throw std::runtime_error("The given Frame is invalid or has already been disposed!");
|
|
31
|
+
}
|
|
32
|
+
const int width = static_cast<int>(frame->getWidth());
|
|
33
|
+
const int height = static_cast<int>(frame->getHeight());
|
|
34
|
+
const camera::PixelFormat pixelFormat = frame->getPixelFormat();
|
|
35
|
+
|
|
36
|
+
switch (pixelFormat) {
|
|
37
|
+
case camera::PixelFormat::YUV_420_8_BIT_VIDEO:
|
|
38
|
+
case camera::PixelFormat::YUV_420_8_BIT_FULL: {
|
|
39
|
+
// Luminance is plane 0 - read it in place, no conversion needed.
|
|
40
|
+
_planes = frame->getPlanes();
|
|
41
|
+
if (_planes.empty()) {
|
|
42
|
+
throw std::runtime_error("The given YUV Frame has no planes!");
|
|
43
|
+
}
|
|
44
|
+
_buffer = _planes[0]->getPixelBuffer();
|
|
45
|
+
const int rowStride = static_cast<int>(_planes[0]->getBytesPerRow());
|
|
46
|
+
const uint8_t* data = _buffer->data();
|
|
47
|
+
_view = ZXing::ImageView(data, width, height, ZXing::ImageFormat::Lum, rowStride);
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
case camera::PixelFormat::RGB_BGRA_8_BIT:
|
|
51
|
+
case camera::PixelFormat::RGB_RGBA_8_BIT:
|
|
52
|
+
case camera::PixelFormat::RGB_RGB_8_BIT: {
|
|
53
|
+
_buffer = frame->getPixelBuffer();
|
|
54
|
+
const int rowStride = static_cast<int>(frame->getBytesPerRow());
|
|
55
|
+
ZXing::ImageFormat format = ZXing::ImageFormat::RGB;
|
|
56
|
+
if (pixelFormat == camera::PixelFormat::RGB_BGRA_8_BIT) {
|
|
57
|
+
format = ZXing::ImageFormat::BGRA;
|
|
58
|
+
} else if (pixelFormat == camera::PixelFormat::RGB_RGBA_8_BIT) {
|
|
59
|
+
format = ZXing::ImageFormat::RGBA;
|
|
60
|
+
}
|
|
61
|
+
const uint8_t* data = _buffer->data();
|
|
62
|
+
_view = ZXing::ImageView(data, width, height, format, rowStride);
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
default:
|
|
66
|
+
throw std::runtime_error("Unsupported Frame pixelFormat (" + std::to_string(static_cast<int>(pixelFormat)) +
|
|
67
|
+
")! Use a Frame Output with pixelFormat 'yuv' or 'rgb'.");
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// ponytail: isMirrored is ignored - zxing decodes mirrored symbols and the ML Kit reference ignores it on Android too.
|
|
71
|
+
const int rotation = rotationDegrees(frame->getOrientation());
|
|
72
|
+
_view = _view.rotated(rotation);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
} // namespace margelo::nitro::camera::zxing
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "ImageView.h"
|
|
4
|
+
|
|
5
|
+
#include <NitroModules/ArrayBuffer.hpp>
|
|
6
|
+
#include <VisionCamera/HybridFramePlaneSpec.hpp>
|
|
7
|
+
#include <VisionCamera/HybridFrameSpec.hpp>
|
|
8
|
+
|
|
9
|
+
#include <memory>
|
|
10
|
+
#include <vector>
|
|
11
|
+
|
|
12
|
+
namespace margelo::nitro::camera::zxing {
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Wraps a VisionCamera `Frame` as a zero-copy `ZXing::ImageView`, rotated upright by the Frame's orientation.
|
|
16
|
+
* Keeps the Frame, its planes and the pixel `ArrayBuffer` alive for as long as this object lives.
|
|
17
|
+
* All calls into the Frame happen in the constructor, so the Frame must still be valid when it runs.
|
|
18
|
+
*/
|
|
19
|
+
class FrameImageView final {
|
|
20
|
+
public:
|
|
21
|
+
explicit FrameImageView(const std::shared_ptr<camera::HybridFrameSpec>& frame);
|
|
22
|
+
|
|
23
|
+
const ZXing::ImageView& imageView() const noexcept {
|
|
24
|
+
return _view;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
private:
|
|
28
|
+
std::shared_ptr<camera::HybridFrameSpec> _frame;
|
|
29
|
+
std::vector<std::shared_ptr<camera::HybridFramePlaneSpec>> _planes;
|
|
30
|
+
std::shared_ptr<ArrayBuffer> _buffer;
|
|
31
|
+
ZXing::ImageView _view;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
} // namespace margelo::nitro::camera::zxing
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#include "HybridBarcode.hpp"
|
|
2
|
+
|
|
3
|
+
#include <algorithm>
|
|
4
|
+
|
|
5
|
+
namespace margelo::nitro::camera::zxing {
|
|
6
|
+
|
|
7
|
+
BarcodeFormat HybridBarcode::getFormat() {
|
|
8
|
+
return _barcode.format;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
Rect HybridBarcode::getBoundingBox() {
|
|
12
|
+
const auto& corners = _barcode.corners;
|
|
13
|
+
auto [minX, maxX] = std::minmax({corners[0].x, corners[1].x, corners[2].x, corners[3].x});
|
|
14
|
+
auto [minY, maxY] = std::minmax({corners[0].y, corners[1].y, corners[2].y, corners[3].y});
|
|
15
|
+
return Rect(minX, maxX, minY, maxY);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
std::vector<Point> HybridBarcode::getCornerPoints() {
|
|
19
|
+
std::vector<Point> points;
|
|
20
|
+
points.reserve(_barcode.corners.size());
|
|
21
|
+
for (const ZXing::PointI& corner : _barcode.corners) {
|
|
22
|
+
points.emplace_back(corner.x, corner.y);
|
|
23
|
+
}
|
|
24
|
+
return points;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
std::optional<std::string> HybridBarcode::getDisplayValue() {
|
|
28
|
+
if (_barcode.displayValue.empty()) {
|
|
29
|
+
return std::nullopt;
|
|
30
|
+
}
|
|
31
|
+
return _barcode.displayValue;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
std::optional<std::shared_ptr<ArrayBuffer>> HybridBarcode::getRawBytes() {
|
|
35
|
+
if (_barcode.rawBytes.empty()) {
|
|
36
|
+
return std::nullopt;
|
|
37
|
+
}
|
|
38
|
+
if (_rawBytes == nullptr) {
|
|
39
|
+
_rawBytes = ArrayBuffer::copy(_barcode.rawBytes);
|
|
40
|
+
}
|
|
41
|
+
return _rawBytes;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
std::optional<std::string> HybridBarcode::getRawValue() {
|
|
45
|
+
if (_barcode.rawValue.empty()) {
|
|
46
|
+
return std::nullopt;
|
|
47
|
+
}
|
|
48
|
+
return _barcode.rawValue;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
BarcodeValueType HybridBarcode::getValueType() {
|
|
52
|
+
return _barcode.valueType;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
size_t HybridBarcode::getExternalMemorySize() noexcept {
|
|
56
|
+
return _barcode.rawBytes.size() + _barcode.rawValue.size() + _barcode.displayValue.size();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
} // namespace margelo::nitro::camera::zxing
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "HybridBarcodeSpec.hpp"
|
|
4
|
+
#include "ZXingDecoder.hpp"
|
|
5
|
+
|
|
6
|
+
namespace margelo::nitro::camera::zxing {
|
|
7
|
+
|
|
8
|
+
class HybridBarcode final : public HybridBarcodeSpec {
|
|
9
|
+
public:
|
|
10
|
+
explicit HybridBarcode(DecodedBarcode barcode) : HybridObject(TAG), _barcode(std::move(barcode)) {}
|
|
11
|
+
|
|
12
|
+
BarcodeFormat getFormat() override;
|
|
13
|
+
Rect getBoundingBox() override;
|
|
14
|
+
std::vector<Point> getCornerPoints() override;
|
|
15
|
+
std::optional<std::string> getDisplayValue() override;
|
|
16
|
+
std::optional<std::shared_ptr<ArrayBuffer>> getRawBytes() override;
|
|
17
|
+
std::optional<std::string> getRawValue() override;
|
|
18
|
+
BarcodeValueType getValueType() override;
|
|
19
|
+
size_t getExternalMemorySize() noexcept override;
|
|
20
|
+
|
|
21
|
+
private:
|
|
22
|
+
DecodedBarcode _barcode;
|
|
23
|
+
std::shared_ptr<ArrayBuffer> _rawBytes;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
} // namespace margelo::nitro::camera::zxing
|