dynamsoft-capture-vision-react-native 3.4.1300 → 3.4.3000
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/LICENSE +4 -4
- package/README.md +62 -62
- package/android/README.md +14 -14
- package/android/build.gradle +167 -163
- package/android/gradle.properties +20 -20
- package/android/settings.gradle +5 -5
- package/android/src/main/AndroidManifest.xml +6 -6
- package/android/src/main/AndroidManifest_noPackage.xml +5 -5
- package/android/src/main/cpp/CMakeLists.txt +21 -21
- package/android/src/main/cpp/ImgHO.cpp +94 -94
- package/android/src/main/cpp/ImgHO.h +34 -34
- package/android/src/main/cpp/JsiCore.cpp +296 -296
- package/android/src/main/cpp/JsiCore.h +51 -51
- package/android/src/main/cpp/JsiCvr.cpp +332 -332
- package/android/src/main/cpp/JsiCvr.h +54 -54
- package/android/src/main/cpp/JsiDbr.cpp +283 -283
- package/android/src/main/cpp/JsiDbr.h +26 -26
- package/android/src/main/cpp/JsiDce.cpp +59 -59
- package/android/src/main/cpp/JsiDce.h +17 -17
- package/android/src/main/cpp/JsiDcp.cpp +51 -51
- package/android/src/main/cpp/JsiDcp.h +31 -31
- package/android/src/main/cpp/JsiDdn.cpp +50 -50
- package/android/src/main/cpp/JsiDdn.h +28 -28
- package/android/src/main/cpp/JsiDlr.cpp +60 -60
- package/android/src/main/cpp/JsiDlr.h +26 -26
- package/android/src/main/cpp/JsiUtility.cpp +604 -604
- package/android/src/main/cpp/JsiUtility.h +26 -26
- package/android/src/main/cpp/RawBuffer.cpp +23 -23
- package/android/src/main/cpp/RawBuffer.h +24 -24
- package/android/src/main/cpp/android_log.h +14 -14
- package/android/src/main/dysJniLibs/debug/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/debug/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/debug/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/debug/x86_64/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/release/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/release/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/release/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/release/x86_64/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/debug/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/debug/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/debug/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/debug/x86_64/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/release/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/release/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/release/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/release/x86_64/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/debug/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/debug/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/debug/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/debug/x86_64/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/release/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/release/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/release/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/release/x86_64/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor86/debug/arm64-v8a/librn_dys.so +3 -0
- package/android/src/main/dysJniLibsFor86/debug/armeabi-v7a/librn_dys.so +3 -0
- package/android/src/main/dysJniLibsFor86/debug/x86/librn_dys.so +3 -0
- package/android/src/main/dysJniLibsFor86/debug/x86_64/librn_dys.so +3 -0
- package/android/src/main/dysJniLibsFor86/release/arm64-v8a/librn_dys.so +3 -0
- package/android/src/main/dysJniLibsFor86/release/armeabi-v7a/librn_dys.so +3 -0
- package/android/src/main/dysJniLibsFor86/release/x86/librn_dys.so +3 -0
- package/android/src/main/dysJniLibsFor86/release/x86_64/librn_dys.so +3 -0
- package/android/src/main/java/com/dynamsoft/reactnativelib/CVRModule.kt +137 -137
- package/android/src/main/java/com/dynamsoft/reactnativelib/CameraViewManager.kt +62 -62
- package/android/src/main/java/com/dynamsoft/reactnativelib/DCEModule.kt +125 -125
- package/android/src/main/java/com/dynamsoft/reactnativelib/DynamsoftBaseModule.kt +8 -8
- package/android/src/main/java/com/dynamsoft/reactnativelib/ISAModule.kt +73 -73
- package/android/src/main/java/com/dynamsoft/reactnativelib/ImageEditorViewManager.kt +14 -14
- package/android/src/main/java/com/dynamsoft/reactnativelib/ImageEditorViewModule.kt +35 -35
- package/android/src/main/java/com/dynamsoft/reactnativelib/ImageManagerModule.kt +15 -15
- package/android/src/main/java/com/dynamsoft/reactnativelib/LicenseModule.kt +29 -29
- package/android/src/main/java/com/dynamsoft/reactnativelib/MultiCrossFilterModule.kt +83 -83
- package/android/src/main/java/com/dynamsoft/reactnativelib/ReactNativeDcvPackage.kt +32 -32
- package/android/src/main/java/com/dynamsoft/reactnativelib/VersionsModule.kt +41 -41
- package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/Basic.kt +44 -44
- package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForCore.kt +50 -50
- package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForCvr.kt +129 -129
- package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDBR.kt +157 -157
- package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDCE.kt +110 -110
- package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDCP.kt +49 -49
- package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDDN.kt +85 -85
- package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDLR.kt +72 -72
- package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ImageUtil.kt +58 -58
- package/android/src/main/java/com/dynamsoft/reactnativelib/core/ImageSourceAdapterModuleImpl.kt +120 -120
- package/android/src/main/java/com/dynamsoft/reactnativelib/cvr/CaptureVisionRouterModuleImpl.kt +306 -306
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraEnhancerModuleImpl.kt +247 -247
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraLifeCycleOwner.java +14 -14
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraViewManagerImpl.kt +77 -77
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/ImageEditorViewManagerImpl.kt +15 -15
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/ImageEditorViewModuleImpl.kt +110 -110
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/RNCameraView.kt +20 -20
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/RNImageEditorView.kt +19 -19
- package/android/src/main/java/com/dynamsoft/reactnativelib/license/LicenseModuleImpl.kt +39 -39
- package/android/src/main/java/com/dynamsoft/reactnativelib/utility/ImageManagerModuleImpl.kt +120 -120
- package/android/src/main/java/com/dynamsoft/reactnativelib/utility/MultiCrossFilterModuleImpl.kt +111 -111
- package/app.plugin.js +21 -21
- package/dynamsoft-capture-vision-react-native.podspec +24 -24
- package/ios/CPP/DSImageData+HostObject.h +18 -18
- package/ios/CPP/DSImageData+HostObject.mm +38 -38
- package/ios/CPP/ImageDataHostObject.cpp +87 -87
- package/ios/CPP/ImageDataHostObject.hpp +35 -35
- package/ios/CPP/MutableRawBuffer.cpp +23 -23
- package/ios/CPP/MutableRawBuffer.hpp +23 -23
- package/ios/CPP/RNDynamsoft+JSI.h +22 -22
- package/ios/CPP/RNDynamsoft+JSI.mm +303 -303
- package/ios/CPP/RNDynamsoft+Json.h +93 -93
- package/ios/CPP/RNDynamsoft+Json.m +733 -733
- package/ios/CPP/YeetJSIUtils.h +56 -56
- package/ios/CPP/YeetJSIUtils.mm +208 -208
- package/ios/RNDynamsoftCameraView.h +31 -31
- package/ios/RNDynamsoftCameraView.m +108 -108
- package/ios/RNDynamsoftCameraViewManager.h +14 -14
- package/ios/RNDynamsoftCameraViewManager.m +195 -195
- package/ios/RNDynamsoftCaptureVisionRouter.h +18 -18
- package/ios/RNDynamsoftCaptureVisionRouter.mm +532 -532
- package/ios/RNDynamsoftImageEditorView.h +17 -17
- package/ios/RNDynamsoftImageEditorView.m +25 -25
- package/ios/RNDynamsoftImageEditorViewManager.h +14 -14
- package/ios/RNDynamsoftImageEditorViewManager.mm +183 -183
- package/ios/RNDynamsoftImageManager.h +14 -14
- package/ios/RNDynamsoftImageManager.mm +369 -369
- package/ios/RNDynamsoftImageSourceAdapter.h +19 -19
- package/ios/RNDynamsoftImageSourceAdapter.mm +255 -255
- package/ios/RNDynamsoftLicense.h +14 -14
- package/ios/RNDynamsoftLicense.m +62 -62
- package/ios/RNDynamsoftMultiCrossFilter.h +14 -14
- package/ios/RNDynamsoftMultiCrossFilter.m +145 -145
- package/ios/RNDynamsoftVersions.h +13 -13
- package/ios/RNDynamsoftVersions.m +27 -27
- package/package.json +48 -48
- package/src/NativeDynamsoftVersionsModule.tsx +20 -20
- package/src/VersionsModule.tsx +7 -7
- package/src/core/CapturedResultBase.tsx +18 -18
- package/src/core/CapturedResultItem.tsx +23 -23
- package/src/core/CoreModule.tsx +9 -9
- package/src/core/DSRect.tsx +29 -29
- package/src/core/EnumCaptureResultItemType.tsx +52 -52
- package/src/core/EnumColourChannelUsageType.tsx +26 -26
- package/src/core/EnumCrossVerificationStatus.tsx +46 -46
- package/src/core/EnumGrayscaleEnhancementMode.tsx +46 -46
- package/src/core/EnumGrayscaleTransformationMode.tsx +35 -35
- package/src/core/EnumImageFileFormat.tsx +6 -6
- package/src/core/EnumPixelFormat.tsx +53 -53
- package/src/core/ImageData.tsx +87 -87
- package/src/core/ImageSourceAdapter.tsx +160 -160
- package/src/core/NativeDynamsoftImageSourceAdapterModule.tsx +29 -29
- package/src/core/Point.tsx +13 -13
- package/src/core/Quadrilateral.tsx +12 -12
- package/src/core/index.tsx +18 -18
- package/src/cvr/CaptureVisionRouter.tsx +683 -683
- package/src/cvr/CaptureVisionRouterModule.tsx +9 -9
- package/src/cvr/CapturedResult.tsx +123 -123
- package/src/cvr/CapturedResultFilter.tsx +13 -13
- package/src/cvr/CapturedResultReceiver.tsx +71 -71
- package/src/cvr/EnumPresetTemplate.tsx +81 -81
- package/src/cvr/NativeDynamsoftCaptureVisionRouterModule.tsx +25 -25
- package/src/cvr/SimplifiedCaptureVisionSettings.tsx +61 -61
- package/src/cvr/index.tsx +11 -11
- package/src/dbr/BarcodeDetails.tsx +51 -51
- package/src/dbr/BarcodeReaderModule.tsx +9 -9
- package/src/dbr/BarcodeResultItem.tsx +65 -65
- package/src/dbr/DecodedBarcodesResult.tsx +14 -14
- package/src/dbr/ECISegment.tsx +23 -23
- package/src/dbr/EnumBarcodeFormat.tsx +112 -112
- package/src/dbr/EnumDeblurMode.tsx +29 -29
- package/src/dbr/EnumLocalizationMode.tsx +27 -27
- package/src/dbr/EnumQRCodeErrorCorrectionLevel.tsx +6 -6
- package/src/dbr/SimplifiedBarcodeReaderSettings.tsx +80 -80
- package/src/dbr/index.tsx +9 -9
- package/src/dce/CameraEnhancer.tsx +254 -254
- package/src/dce/CameraEnhancerModule.tsx +9 -9
- package/src/dce/CameraView.tsx +100 -100
- package/src/dce/DynamsoftCameraViewNativeComponent.ts +96 -96
- package/src/dce/DynamsoftImageEditorViewNativeComponent.ts +9 -9
- package/src/dce/EnumCameraPosition.tsx +25 -25
- package/src/dce/EnumDrawingLayerId.tsx +17 -17
- package/src/dce/EnumEnhancedFeatures.tsx +24 -24
- package/src/dce/EnumFocusMode.tsx +6 -6
- package/src/dce/EnumResolution.tsx +8 -8
- package/src/dce/EnumTorchState.tsx +10 -10
- package/src/dce/FeedBack.tsx +28 -28
- package/src/dce/ImageEditorView.tsx +131 -131
- package/src/dce/NativeDynamsoftCameraViewModule.tsx +47 -47
- package/src/dce/NativeDynamsoftImageEditorViewModule.ts +9 -9
- package/src/dce/index.tsx +13 -13
- package/src/dcp/CodeParserDedicatorModule.tsx +9 -9
- package/src/dcp/CodeParserModule.tsx +9 -9
- package/src/dcp/EnumMappingStatus.tsx +14 -14
- package/src/dcp/EnumValidationStatus.tsx +14 -14
- package/src/dcp/ParsedResult.tsx +14 -14
- package/src/dcp/ParsedResultItem.tsx +50 -50
- package/src/dcp/index.tsx +8 -8
- package/src/ddn/DeskewedImageResultItem.tsx +40 -40
- package/src/ddn/DetectedQuadResultItem.tsx +31 -31
- package/src/ddn/DocumentNormalizerModule.tsx +9 -9
- package/src/ddn/EnhancedImageResultItem.tsx +20 -20
- package/src/ddn/EnumImageColourMode.tsx +14 -14
- package/src/ddn/ProcessedDocumentResult.tsx +27 -27
- package/src/ddn/SimplifiedDocumentNormalizerSettings.tsx +65 -65
- package/src/ddn/index.tsx +11 -11
- package/src/dip/ImageProcessingModule.tsx +9 -9
- package/src/dip/index.tsx +1 -1
- package/src/dlr/CharacterResult.tsx +28 -28
- package/src/dlr/LabelRecognizerModule.tsx +9 -9
- package/src/dlr/RecognizedTextLinesResult.tsx +19 -19
- package/src/dlr/SimplifiedLabelRecognizerSettings.tsx +33 -33
- package/src/dlr/TextLineResultItem.tsx +41 -41
- package/src/dlr/index.tsx +8 -8
- package/src/index.tsx +13 -13
- package/src/license/LicenseManager.tsx +49 -49
- package/src/license/LicenseModule.tsx +9 -9
- package/src/license/NativeDynamsoftLicenseModule.tsx +7 -7
- package/src/license/index.tsx +7 -7
- package/src/utility/CrossVerificationCriteria.tsx +11 -11
- package/src/utility/EnumFilterType.tsx +5 -5
- package/src/utility/ImageManager.tsx +348 -348
- package/src/utility/MultiFrameResultCrossFilter.tsx +183 -183
- package/src/utility/NativeDynamsoftImageManagerModule.tsx +7 -7
- package/src/utility/NativeDynamsoftMultiCrossFilterModule.tsx +18 -18
- package/src/utility/UtilityModule.tsx +9 -9
- package/src/utility/index.tsx +4 -4
- package/android/.gitignore +0 -4
|
@@ -1,332 +1,332 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Created by Allen on 24/08/28.
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
#include "JsiCvr.h"
|
|
6
|
-
#include "ImgHO.h"
|
|
7
|
-
#include "JsiCore.h"
|
|
8
|
-
#include <jni.h>
|
|
9
|
-
#define JSI_FUNC [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value
|
|
10
|
-
|
|
11
|
-
jobject jCvrModule;
|
|
12
|
-
|
|
13
|
-
void install_cvrMethods(Runtime &runtime) {
|
|
14
|
-
jsi_install::cvr::install_captureImageData(runtime);
|
|
15
|
-
jsi_install::cvr::install_cvr_getOriginalImage(runtime);
|
|
16
|
-
jsi_install::cvr::install_getCurrentDeskewedImages(runtime);
|
|
17
|
-
jsi_install::cvr::install_getCurrentEnhancedImages(runtime);
|
|
18
|
-
jsi_install::cvr::install_captureFile(runtime);
|
|
19
|
-
jsi_install::cvr::install_captureFileBytes(runtime);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
extern "C"
|
|
23
|
-
JNIEXPORT void JNICALL
|
|
24
|
-
Java_com_dynamsoft_reactnativelib_cvr_CaptureVisionRouterModuleImpl_nativeInstall(JNIEnv *env, jobject thiz, jlong jsiPtr) {
|
|
25
|
-
if (!env->IsSameObject(jCvrModule, thiz)) {
|
|
26
|
-
if (jCvrModule) {
|
|
27
|
-
env->DeleteWeakGlobalRef(jCvrModule);
|
|
28
|
-
}
|
|
29
|
-
jCvrModule = env->NewWeakGlobalRef(thiz);
|
|
30
|
-
}
|
|
31
|
-
auto runtime = reinterpret_cast<Runtime *>(jsiPtr);
|
|
32
|
-
if (runtime) {
|
|
33
|
-
install_cvrMethods(*runtime);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
namespace jsiConversion::cvr {
|
|
38
|
-
void jCapturedResultToJsiObject(Runtime &rt, JNIEnv *env, jobject jCapturedResult, Object &jsCapturedResult) {
|
|
39
|
-
env->PushLocalFrame(16);
|
|
40
|
-
jclass jclsCapturedResult = env->FindClass("com/dynamsoft/cvr/CapturedResult");
|
|
41
|
-
SET_STRING_PROPERTY_BY_FIELD(jclsCapturedResult, jCapturedResult, jsCapturedResult, originalImageHashId)
|
|
42
|
-
SET_STRING_PROPERTY_BY_FIELD(jclsCapturedResult, jCapturedResult, jsCapturedResult, errorMessage)
|
|
43
|
-
|
|
44
|
-
jfieldID errorCode = env->GetFieldID(jclsCapturedResult, "errorCode", "I");
|
|
45
|
-
jsCapturedResult.setProperty(rt, "errorCode", env->GetIntField(jCapturedResult, errorCode));
|
|
46
|
-
|
|
47
|
-
jfieldID fiMatrix = env->GetFieldID(jclsCapturedResult, "rotationTransformMatrix", "Landroid/graphics/Matrix;");
|
|
48
|
-
jobject jMatrix = env->GetObjectField(jCapturedResult, fiMatrix);
|
|
49
|
-
if(jMatrix) {
|
|
50
|
-
jclass clsMatrix = env->GetObjectClass(jMatrix);
|
|
51
|
-
jmethodID getValues = env->GetMethodID(clsMatrix, "getValues", "([F)V");
|
|
52
|
-
jfloatArray jValues = env->NewFloatArray(9);
|
|
53
|
-
env->CallVoidMethod(jMatrix, getValues, jValues);
|
|
54
|
-
float cValues[9];
|
|
55
|
-
env->GetFloatArrayRegion(jValues, 0, 9, cValues);
|
|
56
|
-
Array jsMatrix(rt, 9);
|
|
57
|
-
for (int i = 0; i < 9; ++i) {
|
|
58
|
-
jsMatrix.setValueAtIndex(rt, i, cValues[i]);
|
|
59
|
-
}
|
|
60
|
-
env->DeleteLocalRef(clsMatrix);
|
|
61
|
-
env->DeleteLocalRef(jValues);
|
|
62
|
-
env->DeleteLocalRef(jMatrix);
|
|
63
|
-
jsCapturedResult.setProperty(rt, "rotationTransformMatrix", jsMatrix);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
jfieldID items = env->GetFieldID(jclsCapturedResult, "items", "[Lcom/dynamsoft/core/basic_structures/CapturedResultItem;");
|
|
67
|
-
jobjectArray jItems = (jobjectArray) env->GetObjectField(jCapturedResult, items);
|
|
68
|
-
Array jsItemArray(rt, 0);
|
|
69
|
-
int *types = nullptr;
|
|
70
|
-
|
|
71
|
-
jsiConversion::core::jCapturedItemArrayToJsArray(rt, env, jItems, types, jsItemArray);
|
|
72
|
-
for (int i = 0; i < jsItemArray.size(rt); ++i) {
|
|
73
|
-
Object jsItem = jsItemArray.getValueAtIndex(rt, i).asObject(rt);
|
|
74
|
-
jobject jItem = env->GetObjectArrayElement(jItems, i);
|
|
75
|
-
int type = types[i];
|
|
76
|
-
if (type == CRIT_BARCODE) {
|
|
77
|
-
jsiConversion::dbr::jBarcodeResultItemToJsObject(rt, env, jItem, jsItem);
|
|
78
|
-
} else if (type == CRIT_TEXT_LINE) {
|
|
79
|
-
jsiConversion::dlr::jTextLineResultItemToJsObject(rt, env, jItem, jsItem);
|
|
80
|
-
} else if (type == CRIT_DETECTED_QUAD) {
|
|
81
|
-
jsiConversion::ddn::jDetectedQuadResultItemToJsObject(rt, env, jItem, jsItem);
|
|
82
|
-
} else if (type == CRIT_DESKEWED_IMAGE) {
|
|
83
|
-
jsiConversion::ddn::jDeskewedImageResultItemToJsObject(rt, env, jItem, jsItem);
|
|
84
|
-
} else if (type == CRIT_PARSED_RESULT) {
|
|
85
|
-
jsiConversion::dcp::jParsedResultItemToJsObject(rt, env, jItem, jsItem);
|
|
86
|
-
} else if(type == CRIT_ENHANCED_IMAGE) {
|
|
87
|
-
jsiConversion::ddn::jEnhancedImageResultItemToJsObject(rt, env, jItem, jsItem);
|
|
88
|
-
}
|
|
89
|
-
env->DeleteLocalRef(jItem);
|
|
90
|
-
}
|
|
91
|
-
if(types) {
|
|
92
|
-
delete[] types;
|
|
93
|
-
}
|
|
94
|
-
jsCapturedResult.setProperty(rt, "items", jsItemArray);
|
|
95
|
-
env->PopLocalFrame(nullptr);
|
|
96
|
-
}
|
|
97
|
-
}//namespace jsiConversion::cvr
|
|
98
|
-
|
|
99
|
-
namespace jsi_install::cvr {
|
|
100
|
-
void install_captureImageData(Runtime &jsiRuntime) {
|
|
101
|
-
auto nameId = PropNameID::forAscii(jsiRuntime, "captureImageData");
|
|
102
|
-
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
103
|
-
auto captureImageDataFunc = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
|
|
104
|
-
auto obj = arguments[0].asObject(runtime);
|
|
105
|
-
auto imgHO = ImageDataHostObject::getHOFromObject(runtime, std::move(obj));
|
|
106
|
-
Object jsCapturedResult = captureImageDataHO(imgHO, runtime, arguments[1].asString(runtime).utf8(runtime));
|
|
107
|
-
return jsCapturedResult;
|
|
108
|
-
});
|
|
109
|
-
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(captureImageDataFunc));
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
void install_captureFile(Runtime &jsiRuntime) {
|
|
113
|
-
auto nameId = PropNameID::forAscii(jsiRuntime, "captureFile");
|
|
114
|
-
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
115
|
-
auto captureFileFunc = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
|
|
116
|
-
auto filePath = arguments[0].asString(runtime);
|
|
117
|
-
Object jsCapturedResult = captureFile(filePath.utf8(runtime), runtime, arguments[1].asString(runtime).utf8(runtime));
|
|
118
|
-
return jsCapturedResult;
|
|
119
|
-
});
|
|
120
|
-
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(captureFileFunc));
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
void install_captureFileBytes(Runtime &jsiRuntime) {
|
|
124
|
-
auto nameId = PropNameID::forAscii(jsiRuntime, "captureFileBytes");
|
|
125
|
-
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
126
|
-
auto captureFileBytesFunc = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
|
|
127
|
-
ArrayBuffer fileBytes = arguments[0].asObject(runtime).getArrayBuffer(runtime);
|
|
128
|
-
Object jsCapturedResult = captureFileBytes(fileBytes, runtime, arguments[1].asString(runtime).utf8(runtime));
|
|
129
|
-
return jsCapturedResult;
|
|
130
|
-
});
|
|
131
|
-
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(captureFileBytesFunc));
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
void install_getCurrentDeskewedImages(Runtime &jsiRuntime) {
|
|
135
|
-
auto nameId = PropNameID::forAscii(jsiRuntime, "getCurrentDeskewedImages");
|
|
136
|
-
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
137
|
-
auto getCurrentDeskewedImagesFunc = Function::createFromHostFunction(jsiRuntime, nameId, 0, JSI_FUNC {
|
|
138
|
-
Array images = getCurrentDeskewedImages(runtime);
|
|
139
|
-
return images;
|
|
140
|
-
});
|
|
141
|
-
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(getCurrentDeskewedImagesFunc));
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
void install_getCurrentEnhancedImages(Runtime &jsiRuntime) {
|
|
145
|
-
auto nameId = PropNameID::forAscii(jsiRuntime, "getCurrentEnhancedImages");
|
|
146
|
-
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
147
|
-
auto getCurrentEnhancedImagesFunc = Function::createFromHostFunction(jsiRuntime, nameId, 0, JSI_FUNC {
|
|
148
|
-
Array images = getCurrentEnhancedImages(runtime);
|
|
149
|
-
return images;
|
|
150
|
-
});
|
|
151
|
-
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(getCurrentEnhancedImagesFunc));
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
void install_cvr_getOriginalImage(Runtime &jsiRuntime) {
|
|
155
|
-
auto nameId = PropNameID::forAscii(jsiRuntime, "cvr_getOriginalImage");
|
|
156
|
-
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
157
|
-
auto cvr_getOriginalImageFunc = Function::createFromHostFunction(jsiRuntime, nameId, 1, JSI_FUNC {
|
|
158
|
-
string hashId = arguments[0].asString(runtime).utf8(runtime);
|
|
159
|
-
if (hashId.empty()) {
|
|
160
|
-
return {};
|
|
161
|
-
}
|
|
162
|
-
ImageDataHostObject imgHO = getOriginalImage(runtime, hashId);
|
|
163
|
-
if(imgHO.width == 0 && imgHO.height == 0) {
|
|
164
|
-
return {};
|
|
165
|
-
} else {
|
|
166
|
-
return Object::createFromHostObject(runtime, make_shared<ImageDataHostObject>(imgHO));
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(cvr_getOriginalImageFunc));
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}//namespace jsi_install::cvr
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
Object captureImageDataHO(ImageDataHostObject &imageDataHO, Runtime &rt, string templateName) {
|
|
176
|
-
JNIEnv *env;
|
|
177
|
-
bool needDetach = false;
|
|
178
|
-
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
179
|
-
if (state == JNI_EDETACHED || env == nullptr) {
|
|
180
|
-
gJvm->AttachCurrentThread(&env, nullptr);
|
|
181
|
-
needDetach = true;
|
|
182
|
-
}
|
|
183
|
-
env->PushLocalFrame(16);
|
|
184
|
-
auto clzCvrModule = env->GetObjectClass(jCvrModule);
|
|
185
|
-
auto captureMeth = env->GetMethodID(clzCvrModule, "captureImageDataCalledInJSI",
|
|
186
|
-
"(Lcom/dynamsoft/core/basic_structures/ImageData;Ljava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
|
|
187
|
-
auto imageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
|
|
188
|
-
auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, imageData, env->NewStringUTF(templateName.c_str()));
|
|
189
|
-
Object jsResult(rt);
|
|
190
|
-
jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
|
|
191
|
-
env->PopLocalFrame(nullptr);
|
|
192
|
-
if (needDetach) {
|
|
193
|
-
gJvm->DetachCurrentThread();
|
|
194
|
-
}
|
|
195
|
-
return jsResult;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
Object captureFile(string filePath, Runtime &rt, string templateName) {
|
|
199
|
-
JNIEnv *env;
|
|
200
|
-
bool needDetach = false;
|
|
201
|
-
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
202
|
-
if (state == JNI_EDETACHED || env == nullptr) {
|
|
203
|
-
gJvm->AttachCurrentThread(&env, nullptr);
|
|
204
|
-
needDetach = true;
|
|
205
|
-
}
|
|
206
|
-
env->PushLocalFrame(8);
|
|
207
|
-
auto clzCvrModule = env->GetObjectClass(jCvrModule);
|
|
208
|
-
auto captureMeth = env->GetMethodID(clzCvrModule, "captureFileCalledInJSI",
|
|
209
|
-
"(Ljava/lang/String;Ljava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
|
|
210
|
-
auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, env->NewStringUTF(filePath.c_str()), env->NewStringUTF(templateName.c_str()));
|
|
211
|
-
Object jsResult(rt);
|
|
212
|
-
jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
|
|
213
|
-
env->PopLocalFrame(nullptr);
|
|
214
|
-
if (needDetach) {
|
|
215
|
-
gJvm->DetachCurrentThread();
|
|
216
|
-
}
|
|
217
|
-
return jsResult;
|
|
218
|
-
}
|
|
219
|
-
Object captureFileBytes(ArrayBuffer &fileBytes, Runtime &rt, string templateName) {
|
|
220
|
-
JNIEnv *env;
|
|
221
|
-
bool needDetach = false;
|
|
222
|
-
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
223
|
-
if (state == JNI_EDETACHED || env == nullptr) {
|
|
224
|
-
gJvm->AttachCurrentThread(&env, nullptr);
|
|
225
|
-
needDetach = true;
|
|
226
|
-
}
|
|
227
|
-
env->PushLocalFrame(8);
|
|
228
|
-
auto clzCvrModule = env->GetObjectClass(jCvrModule);
|
|
229
|
-
auto captureMeth = env->GetMethodID(clzCvrModule, "captureFileBytesCalledInJSI",
|
|
230
|
-
"([BLjava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
|
|
231
|
-
auto pBytes = (jbyte *) fileBytes.data(rt);
|
|
232
|
-
int len = fileBytes.length(rt);
|
|
233
|
-
jbyteArray jBytes = env->NewByteArray(len);
|
|
234
|
-
env->SetByteArrayRegion(jBytes, 0, len, (jbyte *) pBytes);
|
|
235
|
-
auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, jBytes, env->NewStringUTF(templateName.c_str()));
|
|
236
|
-
Object jsResult(rt);
|
|
237
|
-
jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
|
|
238
|
-
env->PopLocalFrame(nullptr);
|
|
239
|
-
if (needDetach) {
|
|
240
|
-
gJvm->DetachCurrentThread();
|
|
241
|
-
}
|
|
242
|
-
return jsResult;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
Array getCurrentDeskewedImages(Runtime &runtime) {
|
|
246
|
-
JNIEnv *env;
|
|
247
|
-
bool needDetach = false;
|
|
248
|
-
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
249
|
-
if (state == JNI_EDETACHED || env == nullptr) {
|
|
250
|
-
gJvm->AttachCurrentThread(&env, nullptr);
|
|
251
|
-
needDetach = true;
|
|
252
|
-
}
|
|
253
|
-
auto clzCvrModule = env->GetObjectClass(jCvrModule);
|
|
254
|
-
auto fiCurrentImages = env->GetFieldID(clzCvrModule, "currentDeskewedImages", "[Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
255
|
-
auto jCurrentImages = (jobjectArray) env->GetObjectField(jCvrModule, fiCurrentImages);
|
|
256
|
-
int count = jCurrentImages ? env->GetArrayLength(jCurrentImages) : 0;
|
|
257
|
-
Array array(runtime, count);
|
|
258
|
-
for (int i = 0; i < count; ++i) {
|
|
259
|
-
auto imageData = env->GetObjectArrayElement(jCurrentImages, i);
|
|
260
|
-
ImageDataHostObject imgHO;
|
|
261
|
-
jsiConversion::core::getHOFromJImageData(env, imageData, imgHO);
|
|
262
|
-
auto obj = Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imgHO));
|
|
263
|
-
array.setValueAtIndex(runtime, i, obj);
|
|
264
|
-
env->DeleteLocalRef(imageData);
|
|
265
|
-
}
|
|
266
|
-
env->DeleteLocalRef(clzCvrModule);
|
|
267
|
-
if (jCurrentImages) {
|
|
268
|
-
env->DeleteLocalRef(jCurrentImages);
|
|
269
|
-
}
|
|
270
|
-
env->SetObjectField(jCvrModule, fiCurrentImages, nullptr);
|
|
271
|
-
if (needDetach) {
|
|
272
|
-
gJvm->DetachCurrentThread();
|
|
273
|
-
}
|
|
274
|
-
return array;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
Array getCurrentEnhancedImages(Runtime &runtime) {
|
|
278
|
-
JNIEnv *env;
|
|
279
|
-
bool needDetach = false;
|
|
280
|
-
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
281
|
-
if (state == JNI_EDETACHED || env == nullptr) {
|
|
282
|
-
gJvm->AttachCurrentThread(&env, nullptr);
|
|
283
|
-
needDetach = true;
|
|
284
|
-
}
|
|
285
|
-
auto clzCvrModule = env->GetObjectClass(jCvrModule);
|
|
286
|
-
auto fiCurrentImages = env->GetFieldID(clzCvrModule, "currentEnhancedImages", "[Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
287
|
-
auto jCurrentImages = (jobjectArray) env->GetObjectField(jCvrModule, fiCurrentImages);
|
|
288
|
-
int count = jCurrentImages ? env->GetArrayLength(jCurrentImages) : 0;
|
|
289
|
-
Array array(runtime, count);
|
|
290
|
-
for (int i = 0; i < count; ++i) {
|
|
291
|
-
auto imageData = env->GetObjectArrayElement(jCurrentImages, i);
|
|
292
|
-
ImageDataHostObject imgHO;
|
|
293
|
-
jsiConversion::core::getHOFromJImageData(env, imageData, imgHO);
|
|
294
|
-
auto obj = Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imgHO));
|
|
295
|
-
array.setValueAtIndex(runtime, i, obj);
|
|
296
|
-
env->DeleteLocalRef(imageData);
|
|
297
|
-
}
|
|
298
|
-
env->DeleteLocalRef(clzCvrModule);
|
|
299
|
-
if (jCurrentImages) {
|
|
300
|
-
env->DeleteLocalRef(jCurrentImages);
|
|
301
|
-
}
|
|
302
|
-
env->SetObjectField(jCvrModule, fiCurrentImages, nullptr);
|
|
303
|
-
if (needDetach) {
|
|
304
|
-
gJvm->DetachCurrentThread();
|
|
305
|
-
}
|
|
306
|
-
return array;
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
ImageDataHostObject getOriginalImage(Runtime &runtime, string imageHashId) {
|
|
310
|
-
JNIEnv *env;
|
|
311
|
-
bool needDetach = false;
|
|
312
|
-
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
313
|
-
if (state == JNI_EDETACHED || env == nullptr) {
|
|
314
|
-
gJvm->AttachCurrentThread(&env, nullptr);
|
|
315
|
-
needDetach = true;
|
|
316
|
-
}
|
|
317
|
-
env->PushLocalFrame(8);
|
|
318
|
-
auto clzCvrModule = env->GetObjectClass(jCvrModule);
|
|
319
|
-
auto getOriginalImageCalledInJSI =
|
|
320
|
-
env->GetMethodID(clzCvrModule, "getOriginalImageCalledInJSI", "(Ljava/lang/String;)Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
321
|
-
auto jImageData = env->CallObjectMethod(jCvrModule, getOriginalImageCalledInJSI, env->NewStringUTF(imageHashId.c_str()));
|
|
322
|
-
ImageDataHostObject imgHO;
|
|
323
|
-
if (jImageData != nullptr) {
|
|
324
|
-
jsiConversion::core::getHOFromJImageData(env, jImageData, imgHO);
|
|
325
|
-
}
|
|
326
|
-
env->PopLocalFrame(nullptr);
|
|
327
|
-
if (needDetach) {
|
|
328
|
-
gJvm->DetachCurrentThread();
|
|
329
|
-
}
|
|
330
|
-
return imgHO;
|
|
331
|
-
}
|
|
332
|
-
|
|
1
|
+
//
|
|
2
|
+
// Created by Allen on 24/08/28.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
#include "JsiCvr.h"
|
|
6
|
+
#include "ImgHO.h"
|
|
7
|
+
#include "JsiCore.h"
|
|
8
|
+
#include <jni.h>
|
|
9
|
+
#define JSI_FUNC [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value
|
|
10
|
+
|
|
11
|
+
jobject jCvrModule;
|
|
12
|
+
|
|
13
|
+
void install_cvrMethods(Runtime &runtime) {
|
|
14
|
+
jsi_install::cvr::install_captureImageData(runtime);
|
|
15
|
+
jsi_install::cvr::install_cvr_getOriginalImage(runtime);
|
|
16
|
+
jsi_install::cvr::install_getCurrentDeskewedImages(runtime);
|
|
17
|
+
jsi_install::cvr::install_getCurrentEnhancedImages(runtime);
|
|
18
|
+
jsi_install::cvr::install_captureFile(runtime);
|
|
19
|
+
jsi_install::cvr::install_captureFileBytes(runtime);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
extern "C"
|
|
23
|
+
JNIEXPORT void JNICALL
|
|
24
|
+
Java_com_dynamsoft_reactnativelib_cvr_CaptureVisionRouterModuleImpl_nativeInstall(JNIEnv *env, jobject thiz, jlong jsiPtr) {
|
|
25
|
+
if (!env->IsSameObject(jCvrModule, thiz)) {
|
|
26
|
+
if (jCvrModule) {
|
|
27
|
+
env->DeleteWeakGlobalRef(jCvrModule);
|
|
28
|
+
}
|
|
29
|
+
jCvrModule = env->NewWeakGlobalRef(thiz);
|
|
30
|
+
}
|
|
31
|
+
auto runtime = reinterpret_cast<Runtime *>(jsiPtr);
|
|
32
|
+
if (runtime) {
|
|
33
|
+
install_cvrMethods(*runtime);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
namespace jsiConversion::cvr {
|
|
38
|
+
void jCapturedResultToJsiObject(Runtime &rt, JNIEnv *env, jobject jCapturedResult, Object &jsCapturedResult) {
|
|
39
|
+
env->PushLocalFrame(16);
|
|
40
|
+
jclass jclsCapturedResult = env->FindClass("com/dynamsoft/cvr/CapturedResult");
|
|
41
|
+
SET_STRING_PROPERTY_BY_FIELD(jclsCapturedResult, jCapturedResult, jsCapturedResult, originalImageHashId)
|
|
42
|
+
SET_STRING_PROPERTY_BY_FIELD(jclsCapturedResult, jCapturedResult, jsCapturedResult, errorMessage)
|
|
43
|
+
|
|
44
|
+
jfieldID errorCode = env->GetFieldID(jclsCapturedResult, "errorCode", "I");
|
|
45
|
+
jsCapturedResult.setProperty(rt, "errorCode", env->GetIntField(jCapturedResult, errorCode));
|
|
46
|
+
|
|
47
|
+
jfieldID fiMatrix = env->GetFieldID(jclsCapturedResult, "rotationTransformMatrix", "Landroid/graphics/Matrix;");
|
|
48
|
+
jobject jMatrix = env->GetObjectField(jCapturedResult, fiMatrix);
|
|
49
|
+
if(jMatrix) {
|
|
50
|
+
jclass clsMatrix = env->GetObjectClass(jMatrix);
|
|
51
|
+
jmethodID getValues = env->GetMethodID(clsMatrix, "getValues", "([F)V");
|
|
52
|
+
jfloatArray jValues = env->NewFloatArray(9);
|
|
53
|
+
env->CallVoidMethod(jMatrix, getValues, jValues);
|
|
54
|
+
float cValues[9];
|
|
55
|
+
env->GetFloatArrayRegion(jValues, 0, 9, cValues);
|
|
56
|
+
Array jsMatrix(rt, 9);
|
|
57
|
+
for (int i = 0; i < 9; ++i) {
|
|
58
|
+
jsMatrix.setValueAtIndex(rt, i, cValues[i]);
|
|
59
|
+
}
|
|
60
|
+
env->DeleteLocalRef(clsMatrix);
|
|
61
|
+
env->DeleteLocalRef(jValues);
|
|
62
|
+
env->DeleteLocalRef(jMatrix);
|
|
63
|
+
jsCapturedResult.setProperty(rt, "rotationTransformMatrix", jsMatrix);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
jfieldID items = env->GetFieldID(jclsCapturedResult, "items", "[Lcom/dynamsoft/core/basic_structures/CapturedResultItem;");
|
|
67
|
+
jobjectArray jItems = (jobjectArray) env->GetObjectField(jCapturedResult, items);
|
|
68
|
+
Array jsItemArray(rt, 0);
|
|
69
|
+
int *types = nullptr;
|
|
70
|
+
|
|
71
|
+
jsiConversion::core::jCapturedItemArrayToJsArray(rt, env, jItems, types, jsItemArray);
|
|
72
|
+
for (int i = 0; i < jsItemArray.size(rt); ++i) {
|
|
73
|
+
Object jsItem = jsItemArray.getValueAtIndex(rt, i).asObject(rt);
|
|
74
|
+
jobject jItem = env->GetObjectArrayElement(jItems, i);
|
|
75
|
+
int type = types[i];
|
|
76
|
+
if (type == CRIT_BARCODE) {
|
|
77
|
+
jsiConversion::dbr::jBarcodeResultItemToJsObject(rt, env, jItem, jsItem);
|
|
78
|
+
} else if (type == CRIT_TEXT_LINE) {
|
|
79
|
+
jsiConversion::dlr::jTextLineResultItemToJsObject(rt, env, jItem, jsItem);
|
|
80
|
+
} else if (type == CRIT_DETECTED_QUAD) {
|
|
81
|
+
jsiConversion::ddn::jDetectedQuadResultItemToJsObject(rt, env, jItem, jsItem);
|
|
82
|
+
} else if (type == CRIT_DESKEWED_IMAGE) {
|
|
83
|
+
jsiConversion::ddn::jDeskewedImageResultItemToJsObject(rt, env, jItem, jsItem);
|
|
84
|
+
} else if (type == CRIT_PARSED_RESULT) {
|
|
85
|
+
jsiConversion::dcp::jParsedResultItemToJsObject(rt, env, jItem, jsItem);
|
|
86
|
+
} else if(type == CRIT_ENHANCED_IMAGE) {
|
|
87
|
+
jsiConversion::ddn::jEnhancedImageResultItemToJsObject(rt, env, jItem, jsItem);
|
|
88
|
+
}
|
|
89
|
+
env->DeleteLocalRef(jItem);
|
|
90
|
+
}
|
|
91
|
+
if(types) {
|
|
92
|
+
delete[] types;
|
|
93
|
+
}
|
|
94
|
+
jsCapturedResult.setProperty(rt, "items", jsItemArray);
|
|
95
|
+
env->PopLocalFrame(nullptr);
|
|
96
|
+
}
|
|
97
|
+
}//namespace jsiConversion::cvr
|
|
98
|
+
|
|
99
|
+
namespace jsi_install::cvr {
|
|
100
|
+
void install_captureImageData(Runtime &jsiRuntime) {
|
|
101
|
+
auto nameId = PropNameID::forAscii(jsiRuntime, "captureImageData");
|
|
102
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
103
|
+
auto captureImageDataFunc = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
|
|
104
|
+
auto obj = arguments[0].asObject(runtime);
|
|
105
|
+
auto imgHO = ImageDataHostObject::getHOFromObject(runtime, std::move(obj));
|
|
106
|
+
Object jsCapturedResult = captureImageDataHO(imgHO, runtime, arguments[1].asString(runtime).utf8(runtime));
|
|
107
|
+
return jsCapturedResult;
|
|
108
|
+
});
|
|
109
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(captureImageDataFunc));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
void install_captureFile(Runtime &jsiRuntime) {
|
|
113
|
+
auto nameId = PropNameID::forAscii(jsiRuntime, "captureFile");
|
|
114
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
115
|
+
auto captureFileFunc = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
|
|
116
|
+
auto filePath = arguments[0].asString(runtime);
|
|
117
|
+
Object jsCapturedResult = captureFile(filePath.utf8(runtime), runtime, arguments[1].asString(runtime).utf8(runtime));
|
|
118
|
+
return jsCapturedResult;
|
|
119
|
+
});
|
|
120
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(captureFileFunc));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
void install_captureFileBytes(Runtime &jsiRuntime) {
|
|
124
|
+
auto nameId = PropNameID::forAscii(jsiRuntime, "captureFileBytes");
|
|
125
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
126
|
+
auto captureFileBytesFunc = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
|
|
127
|
+
ArrayBuffer fileBytes = arguments[0].asObject(runtime).getArrayBuffer(runtime);
|
|
128
|
+
Object jsCapturedResult = captureFileBytes(fileBytes, runtime, arguments[1].asString(runtime).utf8(runtime));
|
|
129
|
+
return jsCapturedResult;
|
|
130
|
+
});
|
|
131
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(captureFileBytesFunc));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
void install_getCurrentDeskewedImages(Runtime &jsiRuntime) {
|
|
135
|
+
auto nameId = PropNameID::forAscii(jsiRuntime, "getCurrentDeskewedImages");
|
|
136
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
137
|
+
auto getCurrentDeskewedImagesFunc = Function::createFromHostFunction(jsiRuntime, nameId, 0, JSI_FUNC {
|
|
138
|
+
Array images = getCurrentDeskewedImages(runtime);
|
|
139
|
+
return images;
|
|
140
|
+
});
|
|
141
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(getCurrentDeskewedImagesFunc));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
void install_getCurrentEnhancedImages(Runtime &jsiRuntime) {
|
|
145
|
+
auto nameId = PropNameID::forAscii(jsiRuntime, "getCurrentEnhancedImages");
|
|
146
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
147
|
+
auto getCurrentEnhancedImagesFunc = Function::createFromHostFunction(jsiRuntime, nameId, 0, JSI_FUNC {
|
|
148
|
+
Array images = getCurrentEnhancedImages(runtime);
|
|
149
|
+
return images;
|
|
150
|
+
});
|
|
151
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(getCurrentEnhancedImagesFunc));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
void install_cvr_getOriginalImage(Runtime &jsiRuntime) {
|
|
155
|
+
auto nameId = PropNameID::forAscii(jsiRuntime, "cvr_getOriginalImage");
|
|
156
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
157
|
+
auto cvr_getOriginalImageFunc = Function::createFromHostFunction(jsiRuntime, nameId, 1, JSI_FUNC {
|
|
158
|
+
string hashId = arguments[0].asString(runtime).utf8(runtime);
|
|
159
|
+
if (hashId.empty()) {
|
|
160
|
+
return {};
|
|
161
|
+
}
|
|
162
|
+
ImageDataHostObject imgHO = getOriginalImage(runtime, hashId);
|
|
163
|
+
if(imgHO.width == 0 && imgHO.height == 0) {
|
|
164
|
+
return {};
|
|
165
|
+
} else {
|
|
166
|
+
return Object::createFromHostObject(runtime, make_shared<ImageDataHostObject>(imgHO));
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(cvr_getOriginalImageFunc));
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}//namespace jsi_install::cvr
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
Object captureImageDataHO(ImageDataHostObject &imageDataHO, Runtime &rt, string templateName) {
|
|
176
|
+
JNIEnv *env;
|
|
177
|
+
bool needDetach = false;
|
|
178
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
179
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
180
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
181
|
+
needDetach = true;
|
|
182
|
+
}
|
|
183
|
+
env->PushLocalFrame(16);
|
|
184
|
+
auto clzCvrModule = env->GetObjectClass(jCvrModule);
|
|
185
|
+
auto captureMeth = env->GetMethodID(clzCvrModule, "captureImageDataCalledInJSI",
|
|
186
|
+
"(Lcom/dynamsoft/core/basic_structures/ImageData;Ljava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
|
|
187
|
+
auto imageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
|
|
188
|
+
auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, imageData, env->NewStringUTF(templateName.c_str()));
|
|
189
|
+
Object jsResult(rt);
|
|
190
|
+
jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
|
|
191
|
+
env->PopLocalFrame(nullptr);
|
|
192
|
+
if (needDetach) {
|
|
193
|
+
gJvm->DetachCurrentThread();
|
|
194
|
+
}
|
|
195
|
+
return jsResult;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
Object captureFile(string filePath, Runtime &rt, string templateName) {
|
|
199
|
+
JNIEnv *env;
|
|
200
|
+
bool needDetach = false;
|
|
201
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
202
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
203
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
204
|
+
needDetach = true;
|
|
205
|
+
}
|
|
206
|
+
env->PushLocalFrame(8);
|
|
207
|
+
auto clzCvrModule = env->GetObjectClass(jCvrModule);
|
|
208
|
+
auto captureMeth = env->GetMethodID(clzCvrModule, "captureFileCalledInJSI",
|
|
209
|
+
"(Ljava/lang/String;Ljava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
|
|
210
|
+
auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, env->NewStringUTF(filePath.c_str()), env->NewStringUTF(templateName.c_str()));
|
|
211
|
+
Object jsResult(rt);
|
|
212
|
+
jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
|
|
213
|
+
env->PopLocalFrame(nullptr);
|
|
214
|
+
if (needDetach) {
|
|
215
|
+
gJvm->DetachCurrentThread();
|
|
216
|
+
}
|
|
217
|
+
return jsResult;
|
|
218
|
+
}
|
|
219
|
+
Object captureFileBytes(ArrayBuffer &fileBytes, Runtime &rt, string templateName) {
|
|
220
|
+
JNIEnv *env;
|
|
221
|
+
bool needDetach = false;
|
|
222
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
223
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
224
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
225
|
+
needDetach = true;
|
|
226
|
+
}
|
|
227
|
+
env->PushLocalFrame(8);
|
|
228
|
+
auto clzCvrModule = env->GetObjectClass(jCvrModule);
|
|
229
|
+
auto captureMeth = env->GetMethodID(clzCvrModule, "captureFileBytesCalledInJSI",
|
|
230
|
+
"([BLjava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
|
|
231
|
+
auto pBytes = (jbyte *) fileBytes.data(rt);
|
|
232
|
+
int len = fileBytes.length(rt);
|
|
233
|
+
jbyteArray jBytes = env->NewByteArray(len);
|
|
234
|
+
env->SetByteArrayRegion(jBytes, 0, len, (jbyte *) pBytes);
|
|
235
|
+
auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, jBytes, env->NewStringUTF(templateName.c_str()));
|
|
236
|
+
Object jsResult(rt);
|
|
237
|
+
jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
|
|
238
|
+
env->PopLocalFrame(nullptr);
|
|
239
|
+
if (needDetach) {
|
|
240
|
+
gJvm->DetachCurrentThread();
|
|
241
|
+
}
|
|
242
|
+
return jsResult;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
Array getCurrentDeskewedImages(Runtime &runtime) {
|
|
246
|
+
JNIEnv *env;
|
|
247
|
+
bool needDetach = false;
|
|
248
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
249
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
250
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
251
|
+
needDetach = true;
|
|
252
|
+
}
|
|
253
|
+
auto clzCvrModule = env->GetObjectClass(jCvrModule);
|
|
254
|
+
auto fiCurrentImages = env->GetFieldID(clzCvrModule, "currentDeskewedImages", "[Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
255
|
+
auto jCurrentImages = (jobjectArray) env->GetObjectField(jCvrModule, fiCurrentImages);
|
|
256
|
+
int count = jCurrentImages ? env->GetArrayLength(jCurrentImages) : 0;
|
|
257
|
+
Array array(runtime, count);
|
|
258
|
+
for (int i = 0; i < count; ++i) {
|
|
259
|
+
auto imageData = env->GetObjectArrayElement(jCurrentImages, i);
|
|
260
|
+
ImageDataHostObject imgHO;
|
|
261
|
+
jsiConversion::core::getHOFromJImageData(env, imageData, imgHO);
|
|
262
|
+
auto obj = Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imgHO));
|
|
263
|
+
array.setValueAtIndex(runtime, i, obj);
|
|
264
|
+
env->DeleteLocalRef(imageData);
|
|
265
|
+
}
|
|
266
|
+
env->DeleteLocalRef(clzCvrModule);
|
|
267
|
+
if (jCurrentImages) {
|
|
268
|
+
env->DeleteLocalRef(jCurrentImages);
|
|
269
|
+
}
|
|
270
|
+
env->SetObjectField(jCvrModule, fiCurrentImages, nullptr);
|
|
271
|
+
if (needDetach) {
|
|
272
|
+
gJvm->DetachCurrentThread();
|
|
273
|
+
}
|
|
274
|
+
return array;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
Array getCurrentEnhancedImages(Runtime &runtime) {
|
|
278
|
+
JNIEnv *env;
|
|
279
|
+
bool needDetach = false;
|
|
280
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
281
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
282
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
283
|
+
needDetach = true;
|
|
284
|
+
}
|
|
285
|
+
auto clzCvrModule = env->GetObjectClass(jCvrModule);
|
|
286
|
+
auto fiCurrentImages = env->GetFieldID(clzCvrModule, "currentEnhancedImages", "[Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
287
|
+
auto jCurrentImages = (jobjectArray) env->GetObjectField(jCvrModule, fiCurrentImages);
|
|
288
|
+
int count = jCurrentImages ? env->GetArrayLength(jCurrentImages) : 0;
|
|
289
|
+
Array array(runtime, count);
|
|
290
|
+
for (int i = 0; i < count; ++i) {
|
|
291
|
+
auto imageData = env->GetObjectArrayElement(jCurrentImages, i);
|
|
292
|
+
ImageDataHostObject imgHO;
|
|
293
|
+
jsiConversion::core::getHOFromJImageData(env, imageData, imgHO);
|
|
294
|
+
auto obj = Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imgHO));
|
|
295
|
+
array.setValueAtIndex(runtime, i, obj);
|
|
296
|
+
env->DeleteLocalRef(imageData);
|
|
297
|
+
}
|
|
298
|
+
env->DeleteLocalRef(clzCvrModule);
|
|
299
|
+
if (jCurrentImages) {
|
|
300
|
+
env->DeleteLocalRef(jCurrentImages);
|
|
301
|
+
}
|
|
302
|
+
env->SetObjectField(jCvrModule, fiCurrentImages, nullptr);
|
|
303
|
+
if (needDetach) {
|
|
304
|
+
gJvm->DetachCurrentThread();
|
|
305
|
+
}
|
|
306
|
+
return array;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
ImageDataHostObject getOriginalImage(Runtime &runtime, string imageHashId) {
|
|
310
|
+
JNIEnv *env;
|
|
311
|
+
bool needDetach = false;
|
|
312
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
313
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
314
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
315
|
+
needDetach = true;
|
|
316
|
+
}
|
|
317
|
+
env->PushLocalFrame(8);
|
|
318
|
+
auto clzCvrModule = env->GetObjectClass(jCvrModule);
|
|
319
|
+
auto getOriginalImageCalledInJSI =
|
|
320
|
+
env->GetMethodID(clzCvrModule, "getOriginalImageCalledInJSI", "(Ljava/lang/String;)Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
321
|
+
auto jImageData = env->CallObjectMethod(jCvrModule, getOriginalImageCalledInJSI, env->NewStringUTF(imageHashId.c_str()));
|
|
322
|
+
ImageDataHostObject imgHO;
|
|
323
|
+
if (jImageData != nullptr) {
|
|
324
|
+
jsiConversion::core::getHOFromJImageData(env, jImageData, imgHO);
|
|
325
|
+
}
|
|
326
|
+
env->PopLocalFrame(nullptr);
|
|
327
|
+
if (needDetach) {
|
|
328
|
+
gJvm->DetachCurrentThread();
|
|
329
|
+
}
|
|
330
|
+
return imgHO;
|
|
331
|
+
}
|
|
332
|
+
|