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.
Files changed (222) hide show
  1. package/LICENSE +4 -4
  2. package/README.md +62 -62
  3. package/android/README.md +14 -14
  4. package/android/build.gradle +167 -163
  5. package/android/gradle.properties +20 -20
  6. package/android/settings.gradle +5 -5
  7. package/android/src/main/AndroidManifest.xml +6 -6
  8. package/android/src/main/AndroidManifest_noPackage.xml +5 -5
  9. package/android/src/main/cpp/CMakeLists.txt +21 -21
  10. package/android/src/main/cpp/ImgHO.cpp +94 -94
  11. package/android/src/main/cpp/ImgHO.h +34 -34
  12. package/android/src/main/cpp/JsiCore.cpp +296 -296
  13. package/android/src/main/cpp/JsiCore.h +51 -51
  14. package/android/src/main/cpp/JsiCvr.cpp +332 -332
  15. package/android/src/main/cpp/JsiCvr.h +54 -54
  16. package/android/src/main/cpp/JsiDbr.cpp +283 -283
  17. package/android/src/main/cpp/JsiDbr.h +26 -26
  18. package/android/src/main/cpp/JsiDce.cpp +59 -59
  19. package/android/src/main/cpp/JsiDce.h +17 -17
  20. package/android/src/main/cpp/JsiDcp.cpp +51 -51
  21. package/android/src/main/cpp/JsiDcp.h +31 -31
  22. package/android/src/main/cpp/JsiDdn.cpp +50 -50
  23. package/android/src/main/cpp/JsiDdn.h +28 -28
  24. package/android/src/main/cpp/JsiDlr.cpp +60 -60
  25. package/android/src/main/cpp/JsiDlr.h +26 -26
  26. package/android/src/main/cpp/JsiUtility.cpp +604 -604
  27. package/android/src/main/cpp/JsiUtility.h +26 -26
  28. package/android/src/main/cpp/RawBuffer.cpp +23 -23
  29. package/android/src/main/cpp/RawBuffer.h +24 -24
  30. package/android/src/main/cpp/android_log.h +14 -14
  31. package/android/src/main/dysJniLibs/debug/arm64-v8a/librn_dys.so +0 -0
  32. package/android/src/main/dysJniLibs/debug/armeabi-v7a/librn_dys.so +0 -0
  33. package/android/src/main/dysJniLibs/debug/x86/librn_dys.so +0 -0
  34. package/android/src/main/dysJniLibs/debug/x86_64/librn_dys.so +0 -0
  35. package/android/src/main/dysJniLibs/release/arm64-v8a/librn_dys.so +0 -0
  36. package/android/src/main/dysJniLibs/release/armeabi-v7a/librn_dys.so +0 -0
  37. package/android/src/main/dysJniLibs/release/x86/librn_dys.so +0 -0
  38. package/android/src/main/dysJniLibs/release/x86_64/librn_dys.so +0 -0
  39. package/android/src/main/dysJniLibsFor81/debug/arm64-v8a/librn_dys.so +0 -0
  40. package/android/src/main/dysJniLibsFor81/debug/armeabi-v7a/librn_dys.so +0 -0
  41. package/android/src/main/dysJniLibsFor81/debug/x86/librn_dys.so +0 -0
  42. package/android/src/main/dysJniLibsFor81/debug/x86_64/librn_dys.so +0 -0
  43. package/android/src/main/dysJniLibsFor81/release/arm64-v8a/librn_dys.so +0 -0
  44. package/android/src/main/dysJniLibsFor81/release/armeabi-v7a/librn_dys.so +0 -0
  45. package/android/src/main/dysJniLibsFor81/release/x86/librn_dys.so +0 -0
  46. package/android/src/main/dysJniLibsFor81/release/x86_64/librn_dys.so +0 -0
  47. package/android/src/main/dysJniLibsFor82/debug/arm64-v8a/librn_dys.so +0 -0
  48. package/android/src/main/dysJniLibsFor82/debug/armeabi-v7a/librn_dys.so +0 -0
  49. package/android/src/main/dysJniLibsFor82/debug/x86/librn_dys.so +0 -0
  50. package/android/src/main/dysJniLibsFor82/debug/x86_64/librn_dys.so +0 -0
  51. package/android/src/main/dysJniLibsFor82/release/arm64-v8a/librn_dys.so +0 -0
  52. package/android/src/main/dysJniLibsFor82/release/armeabi-v7a/librn_dys.so +0 -0
  53. package/android/src/main/dysJniLibsFor82/release/x86/librn_dys.so +0 -0
  54. package/android/src/main/dysJniLibsFor82/release/x86_64/librn_dys.so +0 -0
  55. package/android/src/main/dysJniLibsFor86/debug/arm64-v8a/librn_dys.so +3 -0
  56. package/android/src/main/dysJniLibsFor86/debug/armeabi-v7a/librn_dys.so +3 -0
  57. package/android/src/main/dysJniLibsFor86/debug/x86/librn_dys.so +3 -0
  58. package/android/src/main/dysJniLibsFor86/debug/x86_64/librn_dys.so +3 -0
  59. package/android/src/main/dysJniLibsFor86/release/arm64-v8a/librn_dys.so +3 -0
  60. package/android/src/main/dysJniLibsFor86/release/armeabi-v7a/librn_dys.so +3 -0
  61. package/android/src/main/dysJniLibsFor86/release/x86/librn_dys.so +3 -0
  62. package/android/src/main/dysJniLibsFor86/release/x86_64/librn_dys.so +3 -0
  63. package/android/src/main/java/com/dynamsoft/reactnativelib/CVRModule.kt +137 -137
  64. package/android/src/main/java/com/dynamsoft/reactnativelib/CameraViewManager.kt +62 -62
  65. package/android/src/main/java/com/dynamsoft/reactnativelib/DCEModule.kt +125 -125
  66. package/android/src/main/java/com/dynamsoft/reactnativelib/DynamsoftBaseModule.kt +8 -8
  67. package/android/src/main/java/com/dynamsoft/reactnativelib/ISAModule.kt +73 -73
  68. package/android/src/main/java/com/dynamsoft/reactnativelib/ImageEditorViewManager.kt +14 -14
  69. package/android/src/main/java/com/dynamsoft/reactnativelib/ImageEditorViewModule.kt +35 -35
  70. package/android/src/main/java/com/dynamsoft/reactnativelib/ImageManagerModule.kt +15 -15
  71. package/android/src/main/java/com/dynamsoft/reactnativelib/LicenseModule.kt +29 -29
  72. package/android/src/main/java/com/dynamsoft/reactnativelib/MultiCrossFilterModule.kt +83 -83
  73. package/android/src/main/java/com/dynamsoft/reactnativelib/ReactNativeDcvPackage.kt +32 -32
  74. package/android/src/main/java/com/dynamsoft/reactnativelib/VersionsModule.kt +41 -41
  75. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/Basic.kt +44 -44
  76. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForCore.kt +50 -50
  77. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForCvr.kt +129 -129
  78. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDBR.kt +157 -157
  79. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDCE.kt +110 -110
  80. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDCP.kt +49 -49
  81. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDDN.kt +85 -85
  82. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDLR.kt +72 -72
  83. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ImageUtil.kt +58 -58
  84. package/android/src/main/java/com/dynamsoft/reactnativelib/core/ImageSourceAdapterModuleImpl.kt +120 -120
  85. package/android/src/main/java/com/dynamsoft/reactnativelib/cvr/CaptureVisionRouterModuleImpl.kt +306 -306
  86. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraEnhancerModuleImpl.kt +247 -247
  87. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraLifeCycleOwner.java +14 -14
  88. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraViewManagerImpl.kt +77 -77
  89. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/ImageEditorViewManagerImpl.kt +15 -15
  90. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/ImageEditorViewModuleImpl.kt +110 -110
  91. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/RNCameraView.kt +20 -20
  92. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/RNImageEditorView.kt +19 -19
  93. package/android/src/main/java/com/dynamsoft/reactnativelib/license/LicenseModuleImpl.kt +39 -39
  94. package/android/src/main/java/com/dynamsoft/reactnativelib/utility/ImageManagerModuleImpl.kt +120 -120
  95. package/android/src/main/java/com/dynamsoft/reactnativelib/utility/MultiCrossFilterModuleImpl.kt +111 -111
  96. package/app.plugin.js +21 -21
  97. package/dynamsoft-capture-vision-react-native.podspec +24 -24
  98. package/ios/CPP/DSImageData+HostObject.h +18 -18
  99. package/ios/CPP/DSImageData+HostObject.mm +38 -38
  100. package/ios/CPP/ImageDataHostObject.cpp +87 -87
  101. package/ios/CPP/ImageDataHostObject.hpp +35 -35
  102. package/ios/CPP/MutableRawBuffer.cpp +23 -23
  103. package/ios/CPP/MutableRawBuffer.hpp +23 -23
  104. package/ios/CPP/RNDynamsoft+JSI.h +22 -22
  105. package/ios/CPP/RNDynamsoft+JSI.mm +303 -303
  106. package/ios/CPP/RNDynamsoft+Json.h +93 -93
  107. package/ios/CPP/RNDynamsoft+Json.m +733 -733
  108. package/ios/CPP/YeetJSIUtils.h +56 -56
  109. package/ios/CPP/YeetJSIUtils.mm +208 -208
  110. package/ios/RNDynamsoftCameraView.h +31 -31
  111. package/ios/RNDynamsoftCameraView.m +108 -108
  112. package/ios/RNDynamsoftCameraViewManager.h +14 -14
  113. package/ios/RNDynamsoftCameraViewManager.m +195 -195
  114. package/ios/RNDynamsoftCaptureVisionRouter.h +18 -18
  115. package/ios/RNDynamsoftCaptureVisionRouter.mm +532 -532
  116. package/ios/RNDynamsoftImageEditorView.h +17 -17
  117. package/ios/RNDynamsoftImageEditorView.m +25 -25
  118. package/ios/RNDynamsoftImageEditorViewManager.h +14 -14
  119. package/ios/RNDynamsoftImageEditorViewManager.mm +183 -183
  120. package/ios/RNDynamsoftImageManager.h +14 -14
  121. package/ios/RNDynamsoftImageManager.mm +369 -369
  122. package/ios/RNDynamsoftImageSourceAdapter.h +19 -19
  123. package/ios/RNDynamsoftImageSourceAdapter.mm +255 -255
  124. package/ios/RNDynamsoftLicense.h +14 -14
  125. package/ios/RNDynamsoftLicense.m +62 -62
  126. package/ios/RNDynamsoftMultiCrossFilter.h +14 -14
  127. package/ios/RNDynamsoftMultiCrossFilter.m +145 -145
  128. package/ios/RNDynamsoftVersions.h +13 -13
  129. package/ios/RNDynamsoftVersions.m +27 -27
  130. package/package.json +48 -48
  131. package/src/NativeDynamsoftVersionsModule.tsx +20 -20
  132. package/src/VersionsModule.tsx +7 -7
  133. package/src/core/CapturedResultBase.tsx +18 -18
  134. package/src/core/CapturedResultItem.tsx +23 -23
  135. package/src/core/CoreModule.tsx +9 -9
  136. package/src/core/DSRect.tsx +29 -29
  137. package/src/core/EnumCaptureResultItemType.tsx +52 -52
  138. package/src/core/EnumColourChannelUsageType.tsx +26 -26
  139. package/src/core/EnumCrossVerificationStatus.tsx +46 -46
  140. package/src/core/EnumGrayscaleEnhancementMode.tsx +46 -46
  141. package/src/core/EnumGrayscaleTransformationMode.tsx +35 -35
  142. package/src/core/EnumImageFileFormat.tsx +6 -6
  143. package/src/core/EnumPixelFormat.tsx +53 -53
  144. package/src/core/ImageData.tsx +87 -87
  145. package/src/core/ImageSourceAdapter.tsx +160 -160
  146. package/src/core/NativeDynamsoftImageSourceAdapterModule.tsx +29 -29
  147. package/src/core/Point.tsx +13 -13
  148. package/src/core/Quadrilateral.tsx +12 -12
  149. package/src/core/index.tsx +18 -18
  150. package/src/cvr/CaptureVisionRouter.tsx +683 -683
  151. package/src/cvr/CaptureVisionRouterModule.tsx +9 -9
  152. package/src/cvr/CapturedResult.tsx +123 -123
  153. package/src/cvr/CapturedResultFilter.tsx +13 -13
  154. package/src/cvr/CapturedResultReceiver.tsx +71 -71
  155. package/src/cvr/EnumPresetTemplate.tsx +81 -81
  156. package/src/cvr/NativeDynamsoftCaptureVisionRouterModule.tsx +25 -25
  157. package/src/cvr/SimplifiedCaptureVisionSettings.tsx +61 -61
  158. package/src/cvr/index.tsx +11 -11
  159. package/src/dbr/BarcodeDetails.tsx +51 -51
  160. package/src/dbr/BarcodeReaderModule.tsx +9 -9
  161. package/src/dbr/BarcodeResultItem.tsx +65 -65
  162. package/src/dbr/DecodedBarcodesResult.tsx +14 -14
  163. package/src/dbr/ECISegment.tsx +23 -23
  164. package/src/dbr/EnumBarcodeFormat.tsx +112 -112
  165. package/src/dbr/EnumDeblurMode.tsx +29 -29
  166. package/src/dbr/EnumLocalizationMode.tsx +27 -27
  167. package/src/dbr/EnumQRCodeErrorCorrectionLevel.tsx +6 -6
  168. package/src/dbr/SimplifiedBarcodeReaderSettings.tsx +80 -80
  169. package/src/dbr/index.tsx +9 -9
  170. package/src/dce/CameraEnhancer.tsx +254 -254
  171. package/src/dce/CameraEnhancerModule.tsx +9 -9
  172. package/src/dce/CameraView.tsx +100 -100
  173. package/src/dce/DynamsoftCameraViewNativeComponent.ts +96 -96
  174. package/src/dce/DynamsoftImageEditorViewNativeComponent.ts +9 -9
  175. package/src/dce/EnumCameraPosition.tsx +25 -25
  176. package/src/dce/EnumDrawingLayerId.tsx +17 -17
  177. package/src/dce/EnumEnhancedFeatures.tsx +24 -24
  178. package/src/dce/EnumFocusMode.tsx +6 -6
  179. package/src/dce/EnumResolution.tsx +8 -8
  180. package/src/dce/EnumTorchState.tsx +10 -10
  181. package/src/dce/FeedBack.tsx +28 -28
  182. package/src/dce/ImageEditorView.tsx +131 -131
  183. package/src/dce/NativeDynamsoftCameraViewModule.tsx +47 -47
  184. package/src/dce/NativeDynamsoftImageEditorViewModule.ts +9 -9
  185. package/src/dce/index.tsx +13 -13
  186. package/src/dcp/CodeParserDedicatorModule.tsx +9 -9
  187. package/src/dcp/CodeParserModule.tsx +9 -9
  188. package/src/dcp/EnumMappingStatus.tsx +14 -14
  189. package/src/dcp/EnumValidationStatus.tsx +14 -14
  190. package/src/dcp/ParsedResult.tsx +14 -14
  191. package/src/dcp/ParsedResultItem.tsx +50 -50
  192. package/src/dcp/index.tsx +8 -8
  193. package/src/ddn/DeskewedImageResultItem.tsx +40 -40
  194. package/src/ddn/DetectedQuadResultItem.tsx +31 -31
  195. package/src/ddn/DocumentNormalizerModule.tsx +9 -9
  196. package/src/ddn/EnhancedImageResultItem.tsx +20 -20
  197. package/src/ddn/EnumImageColourMode.tsx +14 -14
  198. package/src/ddn/ProcessedDocumentResult.tsx +27 -27
  199. package/src/ddn/SimplifiedDocumentNormalizerSettings.tsx +65 -65
  200. package/src/ddn/index.tsx +11 -11
  201. package/src/dip/ImageProcessingModule.tsx +9 -9
  202. package/src/dip/index.tsx +1 -1
  203. package/src/dlr/CharacterResult.tsx +28 -28
  204. package/src/dlr/LabelRecognizerModule.tsx +9 -9
  205. package/src/dlr/RecognizedTextLinesResult.tsx +19 -19
  206. package/src/dlr/SimplifiedLabelRecognizerSettings.tsx +33 -33
  207. package/src/dlr/TextLineResultItem.tsx +41 -41
  208. package/src/dlr/index.tsx +8 -8
  209. package/src/index.tsx +13 -13
  210. package/src/license/LicenseManager.tsx +49 -49
  211. package/src/license/LicenseModule.tsx +9 -9
  212. package/src/license/NativeDynamsoftLicenseModule.tsx +7 -7
  213. package/src/license/index.tsx +7 -7
  214. package/src/utility/CrossVerificationCriteria.tsx +11 -11
  215. package/src/utility/EnumFilterType.tsx +5 -5
  216. package/src/utility/ImageManager.tsx +348 -348
  217. package/src/utility/MultiFrameResultCrossFilter.tsx +183 -183
  218. package/src/utility/NativeDynamsoftImageManagerModule.tsx +7 -7
  219. package/src/utility/NativeDynamsoftMultiCrossFilterModule.tsx +18 -18
  220. package/src/utility/UtilityModule.tsx +9 -9
  221. package/src/utility/index.tsx +4 -4
  222. 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
+