dynamsoft-capture-vision-react-native 1.1.16 → 2.4.2000-alpha.1

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 (246) hide show
  1. package/README.md +17 -22
  2. package/android/.gitignore +4 -0
  3. package/android/CMakeLists.txt +14 -0
  4. package/android/README.md +14 -0
  5. package/android/build.gradle +95 -15
  6. package/android/gradle.properties +21 -0
  7. package/android/settings.gradle +6 -0
  8. package/android/src/main/cpp/MutableRawBuffer.cpp +24 -0
  9. package/android/src/main/cpp/MutableRawBuffer.h +24 -0
  10. package/android/src/main/cpp/android_log.h +14 -0
  11. package/android/src/main/cpp/core/ImageDataHostObject.cpp +95 -0
  12. package/android/src/main/cpp/core/ImageDataHostObject.h +34 -0
  13. package/android/src/main/cpp/core/JsiCore.cpp +284 -0
  14. package/android/src/main/cpp/core/JsiCore.h +51 -0
  15. package/android/src/main/cpp/cvr/JsiCvr.cpp +263 -0
  16. package/android/src/main/cpp/cvr/JsiCvr.h +51 -0
  17. package/android/src/main/cpp/dbr/JsiDbr.cpp +38 -0
  18. package/android/src/main/cpp/dbr/JsiDbr.h +26 -0
  19. package/android/src/main/cpp/dce/JsiDce.cpp +59 -0
  20. package/android/src/main/cpp/dce/JsiDce.h +17 -0
  21. package/android/src/main/cpp/dcp/JsiDcp.cpp +51 -0
  22. package/android/src/main/cpp/dcp/JsiDcp.h +31 -0
  23. package/android/src/main/cpp/ddn/JsiDdn.cpp +34 -0
  24. package/android/src/main/cpp/ddn/JsiDdn.h +27 -0
  25. package/android/src/main/cpp/dlr/JsiDlr.cpp +51 -0
  26. package/android/src/main/cpp/dlr/JsiDlr.h +26 -0
  27. package/android/src/main/cpp/utility/JsiUtility.cpp +151 -0
  28. package/android/src/main/cpp/utility/JsiUtility.h +15 -0
  29. package/android/src/main/java/com/dynamsoft/reactnativelib/DynamsoftBaseModule.kt +9 -0
  30. package/android/src/main/java/com/dynamsoft/reactnativelib/ReactNativeDcvPackage.kt +90 -0
  31. package/android/src/main/java/com/dynamsoft/reactnativelib/core/ImageSourceAdapterModuleImpl.kt +120 -0
  32. package/android/src/main/java/com/dynamsoft/reactnativelib/cvr/CaptureVisionRouterModuleImpl.kt +269 -0
  33. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraEnhancerModuleImpl.kt +196 -0
  34. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraLifeCycleOwner.kt +9 -0
  35. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraViewManagerImpl.kt +65 -0
  36. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/ImageEditorViewManagerImpl.kt +35 -0
  37. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/ImageEditorViewModuleImpl.kt +113 -0
  38. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/RNCameraView.kt +21 -0
  39. package/android/src/main/java/com/dynamsoft/reactnativelib/license/LicenseModuleImpl.kt +29 -0
  40. package/android/src/main/java/com/dynamsoft/reactnativelib/utility/ImageManagerModuleImpl.kt +33 -0
  41. package/android/src/main/java/com/dynamsoft/reactnativelib/utility/MultiCrossFilterModuleImpl.kt +85 -0
  42. package/android/src/main/java/com/dynamsoft/reactnativelib/utils/Basic.kt +45 -0
  43. package/android/src/main/java/com/dynamsoft/reactnativelib/utils/ForCore.kt +38 -0
  44. package/android/src/main/java/com/dynamsoft/reactnativelib/utils/ForCvr.kt +128 -0
  45. package/android/src/main/java/com/dynamsoft/reactnativelib/utils/ForDBR.kt +77 -0
  46. package/android/src/main/java/com/dynamsoft/reactnativelib/utils/ForDCE.kt +90 -0
  47. package/android/src/main/java/com/dynamsoft/reactnativelib/utils/ForDCP.kt +50 -0
  48. package/android/src/main/java/com/dynamsoft/reactnativelib/utils/ForDDN.kt +78 -0
  49. package/android/src/main/java/com/dynamsoft/reactnativelib/utils/ForDLR.kt +69 -0
  50. package/android/src/main/java/com/dynamsoft/reactnativelib/utils/ImageUtil.kt +58 -0
  51. package/android/src/main/withNamespace/AndroidManifest.xml +6 -0
  52. package/android/src/main/{AndroidManifest.xml → withoutNamespace/AndroidManifest.xml} +2 -3
  53. package/android/src/newarch/com/dynamsoft/reactnativelib/CVRModule.kt +91 -0
  54. package/android/src/newarch/com/dynamsoft/reactnativelib/CameraViewManager.kt +46 -0
  55. package/android/src/newarch/com/dynamsoft/reactnativelib/DCEModule.kt +91 -0
  56. package/android/src/newarch/com/dynamsoft/reactnativelib/ISAModule.kt +60 -0
  57. package/android/src/newarch/com/dynamsoft/reactnativelib/ImageEditorViewManager.kt +16 -0
  58. package/android/src/newarch/com/dynamsoft/reactnativelib/ImageEditorViewModule.kt +24 -0
  59. package/android/src/newarch/com/dynamsoft/reactnativelib/ImageManagerModule.kt +12 -0
  60. package/android/src/newarch/com/dynamsoft/reactnativelib/LicenseModule.kt +14 -0
  61. package/android/src/newarch/com/dynamsoft/reactnativelib/MultiCrossFilterModule.kt +58 -0
  62. package/android/src/newarch/com/dynamsoft/reactnativelib/VersionsModule.kt +41 -0
  63. package/android/src/oldarch/com/dynamsoft/reactnativelib/CVRModule.kt +114 -0
  64. package/android/src/oldarch/com/dynamsoft/reactnativelib/CameraViewManager.kt +50 -0
  65. package/android/src/oldarch/com/dynamsoft/reactnativelib/DCEModule.kt +112 -0
  66. package/android/src/oldarch/com/dynamsoft/reactnativelib/ISAModule.kt +73 -0
  67. package/android/src/oldarch/com/dynamsoft/reactnativelib/ImageEditorViewManager.kt +14 -0
  68. package/android/src/oldarch/com/dynamsoft/reactnativelib/ImageEditorViewModule.kt +36 -0
  69. package/android/src/oldarch/com/dynamsoft/reactnativelib/ImageManagerModule.kt +16 -0
  70. package/android/src/oldarch/com/dynamsoft/reactnativelib/LicenseModule.kt +18 -0
  71. package/android/src/oldarch/com/dynamsoft/reactnativelib/MultiCrossFilterModule.kt +72 -0
  72. package/android/src/oldarch/com/dynamsoft/reactnativelib/VersionsModule.kt +41 -0
  73. package/ios/RNDynamsoftCaptureVision/CPP/DSImageData+HostObject.h +18 -0
  74. package/ios/RNDynamsoftCaptureVision/CPP/DSImageData+HostObject.mm +33 -0
  75. package/ios/RNDynamsoftCaptureVision/CPP/ImageDataHostObject.cpp +75 -0
  76. package/ios/RNDynamsoftCaptureVision/CPP/ImageDataHostObject.hpp +35 -0
  77. package/ios/RNDynamsoftCaptureVision/CPP/MutableRawBuffer.cpp +23 -0
  78. package/ios/RNDynamsoftCaptureVision/CPP/MutableRawBuffer.hpp +23 -0
  79. package/ios/RNDynamsoftCaptureVision/CPP/RNDynamsoft+Json.h +95 -0
  80. package/ios/RNDynamsoftCaptureVision/CPP/RNDynamsoft+Json.mm +708 -0
  81. package/ios/RNDynamsoftCaptureVision/CPP/YeetJSIUtils.h +52 -0
  82. package/ios/RNDynamsoftCaptureVision/CPP/YeetJSIUtils.mm +188 -0
  83. package/ios/RNDynamsoftCaptureVision/RNDynamsoftCameraView.h +27 -0
  84. package/ios/RNDynamsoftCaptureVision/RNDynamsoftCameraView.m +83 -0
  85. package/ios/RNDynamsoftCaptureVision/RNDynamsoftCameraViewManager.h +14 -0
  86. package/ios/RNDynamsoftCaptureVision/RNDynamsoftCameraViewManager.m +167 -0
  87. package/ios/RNDynamsoftCaptureVision/RNDynamsoftCaptureVisionRouter.h +18 -0
  88. package/ios/RNDynamsoftCaptureVision/RNDynamsoftCaptureVisionRouter.mm +420 -0
  89. package/ios/RNDynamsoftCaptureVision/RNDynamsoftImageEditorView.h +17 -0
  90. package/ios/RNDynamsoftCaptureVision/RNDynamsoftImageEditorView.m +25 -0
  91. package/ios/RNDynamsoftCaptureVision/RNDynamsoftImageEditorViewManager.h +14 -0
  92. package/ios/RNDynamsoftCaptureVision/RNDynamsoftImageEditorViewManager.mm +119 -0
  93. package/ios/RNDynamsoftCaptureVision/RNDynamsoftImageManager.h +13 -0
  94. package/ios/RNDynamsoftCaptureVision/RNDynamsoftImageManager.mm +116 -0
  95. package/ios/RNDynamsoftCaptureVision/RNDynamsoftImageSourceAdapter.h +18 -0
  96. package/ios/RNDynamsoftCaptureVision/RNDynamsoftImageSourceAdapter.mm +214 -0
  97. package/ios/RNDynamsoftCaptureVision/RNDynamsoftLicense.h +14 -0
  98. package/ios/RNDynamsoftCaptureVision/RNDynamsoftLicense.m +50 -0
  99. package/ios/RNDynamsoftCaptureVision/RNDynamsoftMultiCrossFilter.h +14 -0
  100. package/ios/RNDynamsoftCaptureVision/RNDynamsoftMultiCrossFilter.m +106 -0
  101. package/ios/RNDynamsoftCaptureVision/RNDynamsoftVersions.h +13 -0
  102. package/ios/RNDynamsoftCaptureVision/RNDynamsoftVersions.m +39 -0
  103. package/ios/ReactNativeDcv.xcodeproj/project.pbxproj +390 -0
  104. package/package.json +48 -20
  105. package/react-native-dcv.podspec +22 -0
  106. package/src/NativeDynamsoftVersionsModule.tsx +20 -0
  107. package/src/VersionsModule.tsx +7 -0
  108. package/src/core/CapturedResultItem.tsx +7 -0
  109. package/src/core/CompletionListener.tsx +4 -0
  110. package/src/core/CoreModule.tsx +8 -0
  111. package/src/core/DSRect.tsx +23 -0
  112. package/src/core/EnumCaptureResultItemType.tsx +8 -0
  113. package/src/core/EnumColourChannelUsageType.tsx +8 -0
  114. package/src/core/EnumGrayscaleEnhancementMode.tsx +8 -0
  115. package/src/core/EnumGrayscaleTransformationMode.tsx +6 -0
  116. package/src/core/EnumPixelFormat.tsx +48 -0
  117. package/src/core/ImageData.tsx +36 -0
  118. package/src/core/ImageSourceAdapter.tsx +91 -0
  119. package/src/core/NativeDynamsoftImageSourceAdapterModule.tsx +18 -0
  120. package/src/core/Point.tsx +10 -0
  121. package/src/core/Quadrilateral.tsx +8 -0
  122. package/src/core/Rect.tsx +18 -0
  123. package/src/core/index.tsx +17 -0
  124. package/src/cvr/CaptureVisionRouter.tsx +338 -0
  125. package/src/cvr/CaptureVisionRouterModule.tsx +8 -0
  126. package/src/cvr/CapturedResult.tsx +104 -0
  127. package/src/cvr/CapturedResultFilter.tsx +4 -0
  128. package/src/cvr/CapturedResultReceiver.tsx +22 -0
  129. package/src/cvr/EnumPresetTemplate.tsx +16 -0
  130. package/src/cvr/NativeDynamsoftCaptureVisionRouterModule.tsx +25 -0
  131. package/src/cvr/SimplifiedCaptureVisionSettings.tsx +16 -0
  132. package/src/cvr/index.tsx +11 -0
  133. package/src/dbr/BarcodeReaderModule.tsx +8 -0
  134. package/src/dbr/BarcodeResultItem.tsx +16 -0
  135. package/src/dbr/DecodedBarcodesResult.tsx +9 -0
  136. package/src/dbr/EnumBarcodeFormat.tsx +98 -0
  137. package/src/dbr/EnumDeblurMode.tsx +12 -0
  138. package/src/dbr/EnumLocalizationMode.tsx +12 -0
  139. package/src/dbr/SimplifiedBarcodeReaderSettings.tsx +20 -0
  140. package/src/dbr/index.tsx +7 -0
  141. package/src/dce/CameraEnhancer.tsx +104 -0
  142. package/src/dce/CameraEnhancerModule.tsx +8 -0
  143. package/src/dce/CameraView.tsx +75 -0
  144. package/src/dce/DynamsoftCameraViewNativeComponent.ts +25 -0
  145. package/src/dce/DynamsoftImageEditorViewNativeComponent.ts +9 -0
  146. package/src/dce/EnumCameraPosition.tsx +10 -0
  147. package/src/dce/EnumDrawingLayerId.tsx +6 -0
  148. package/src/dce/EnumEnhancedFeatures.tsx +9 -0
  149. package/src/dce/EnumFocusMode.tsx +4 -0
  150. package/src/dce/EnumTorchState.tsx +10 -0
  151. package/src/dce/FeedBack.tsx +18 -0
  152. package/src/dce/ImageEditorView.tsx +94 -0
  153. package/src/dce/NativeDynamsoftCameraViewModule.tsx +43 -0
  154. package/src/dce/NativeDynamsoftImageEditorViewModule.ts +9 -0
  155. package/src/dce/TorchButton.tsx +23 -0
  156. package/src/dce/index.tsx +11 -0
  157. package/src/dcp/CodeParserDedicatorModule.tsx +8 -0
  158. package/src/dcp/CodeParserModule.tsx +8 -0
  159. package/src/dcp/EnumMappingStatus.tsx +5 -0
  160. package/src/dcp/EnumValidationStatus.tsx +5 -0
  161. package/src/dcp/ParsedResult.tsx +8 -0
  162. package/src/dcp/ParsedResultItem.tsx +15 -0
  163. package/src/dcp/index.tsx +8 -0
  164. package/src/ddn/DetectedQuadResultItem.tsx +7 -0
  165. package/src/ddn/DetectedQuadsResult.tsx +9 -0
  166. package/src/ddn/DocumentNormalizerModule.tsx +8 -0
  167. package/src/ddn/EnumImageColourMode.tsx +5 -0
  168. package/src/ddn/NormalizedImageResultItem.tsx +8 -0
  169. package/src/ddn/NormalizedImagesResult.tsx +8 -0
  170. package/src/ddn/SimplifiedDocumentNormalizerSettings.tsx +14 -0
  171. package/src/ddn/index.tsx +11 -0
  172. package/src/dip/ImageProcessingModule.tsx +8 -0
  173. package/src/dip/index.tsx +1 -0
  174. package/src/dlr/CharacterResult.tsx +8 -0
  175. package/src/dlr/LabelRecognizerModule.tsx +8 -0
  176. package/src/dlr/RecognizedTextLinesResult.tsx +9 -0
  177. package/src/dlr/SimplifiedLabelRecognizerSettings.tsx +11 -0
  178. package/src/dlr/TextLineResultItem.tsx +11 -0
  179. package/src/dlr/index.tsx +8 -0
  180. package/src/index.tsx +13 -0
  181. package/src/license/LicenseManager.tsx +13 -0
  182. package/src/license/LicenseModule.tsx +8 -0
  183. package/src/license/NativeDynamsoftLicenseModule.tsx +7 -0
  184. package/src/license/index.tsx +7 -0
  185. package/src/utility/ImageManager.tsx +47 -0
  186. package/src/utility/MultiFrameResultCrossFilter.tsx +67 -0
  187. package/src/utility/NativeDynamsoftImageManagerModule.tsx +7 -0
  188. package/src/utility/NativeDynamsoftMultiCrossFilterModule.tsx +18 -0
  189. package/src/utility/UtilityModule.tsx +8 -0
  190. package/src/utility/index.tsx +3 -0
  191. package/.gitattributes +0 -1
  192. package/LICENSE +0 -5
  193. package/Legal.txt +0 -551
  194. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  195. package/android/gradle/wrapper/gradle-wrapper.properties +0 -6
  196. package/android/src/main/java/com/dynamsoft/reactlibrary/Constants.java +0 -23
  197. package/android/src/main/java/com/dynamsoft/reactlibrary/DCVFeedbackModule.java +0 -30
  198. package/android/src/main/java/com/dynamsoft/reactlibrary/RNDCECameraView.java +0 -131
  199. package/android/src/main/java/com/dynamsoft/reactlibrary/RNDCECameraViewManager.java +0 -246
  200. package/android/src/main/java/com/dynamsoft/reactlibrary/RNDynamsoftBarcodeReaderModule.java +0 -299
  201. package/android/src/main/java/com/dynamsoft/reactlibrary/RNDynamsoftCaptrueVisionPackage.java +0 -33
  202. package/dynamsoft-capture-vision-react-native.podspec +0 -22
  203. package/ios/RNDynamsoftCaptureVision/DYSCameraView.h +0 -34
  204. package/ios/RNDynamsoftCaptureVision/DYSCameraView.m +0 -148
  205. package/ios/RNDynamsoftCaptureVision/DYSCameraViewManager.h +0 -17
  206. package/ios/RNDynamsoftCaptureVision/DYSCameraViewManager.m +0 -78
  207. package/ios/RNDynamsoftCaptureVision/RCTDynamsoftBarcodeReader.h +0 -14
  208. package/ios/RNDynamsoftCaptureVision/RCTDynamsoftBarcodeReader.m +0 -303
  209. package/ios/RNDynamsoftCaptureVision/RCTDynamsoftFeedback.h +0 -16
  210. package/ios/RNDynamsoftCaptureVision/RCTDynamsoftFeedback.m +0 -23
  211. package/ios/RNDynamsoftCaptureVision/StaticClass.h +0 -26
  212. package/ios/RNDynamsoftCaptureVision/StaticClass.m +0 -21
  213. package/ios/RNDynamsoftCaptureVision.xcodeproj/project.pbxproj +0 -343
  214. package/js/BarcodeResult.d.ts +0 -29
  215. package/js/BarcodeResult.js +0 -3
  216. package/js/BarcodeResult.js.map +0 -1
  217. package/js/BarcodeResult.tsx +0 -36
  218. package/js/BarcodeSettings.d.ts +0 -103
  219. package/js/BarcodeSettings.js +0 -92
  220. package/js/BarcodeSettings.js.map +0 -1
  221. package/js/BarcodeSettings.tsx +0 -106
  222. package/js/BasicStructures.d.ts +0 -57
  223. package/js/BasicStructures.js +0 -3
  224. package/js/BasicStructures.js.map +0 -1
  225. package/js/BasicStructures.tsx +0 -60
  226. package/js/CameraSettings.d.ts +0 -53
  227. package/js/CameraSettings.js +0 -38
  228. package/js/CameraSettings.js.map +0 -1
  229. package/js/CameraSettings.tsx +0 -58
  230. package/js/DCVFeedback.d.ts +0 -4
  231. package/js/DCVFeedback.js +0 -15
  232. package/js/DCVFeedback.js.map +0 -1
  233. package/js/DCVFeedback.tsx +0 -14
  234. package/js/DynamsoftBarcodeReader.d.ts +0 -61
  235. package/js/DynamsoftBarcodeReader.js +0 -126
  236. package/js/DynamsoftBarcodeReader.js.map +0 -1
  237. package/js/DynamsoftBarcodeReader.tsx +0 -130
  238. package/js/DynamsoftCameraView.d.ts +0 -64
  239. package/js/DynamsoftCameraView.js +0 -124
  240. package/js/DynamsoftCameraView.js.map +0 -1
  241. package/js/DynamsoftCameraView.tsx +0 -163
  242. package/js/index.d.ts +0 -7
  243. package/js/index.js +0 -24
  244. package/js/index.js.map +0 -1
  245. package/js/index.tsx +0 -7
  246. package/tsconfig.json +0 -112
@@ -0,0 +1,284 @@
1
+ //
2
+ // Created by Allen on 24/08/26.
3
+ //
4
+
5
+ #include "JsiCore.h"
6
+
7
+ JavaVM *gJvm = nullptr;
8
+
9
+ jint JNI_OnLoad(JavaVM *vm, void *reserved) {
10
+ gJvm = vm;
11
+ JNIEnv *env = nullptr;
12
+ if (vm->GetEnv((void **) &env, JNI_VERSION_1_6) != JNI_OK) {
13
+ return -1;
14
+ }
15
+ return JNI_VERSION_1_6;
16
+ }
17
+
18
+ namespace jsiConversion::core {
19
+
20
+ void jPointToJsObject(Runtime &rt, JNIEnv *env, jobject jPoint, Object &jsPoint) {
21
+ if (!jPoint) {
22
+ return;
23
+ }
24
+ jclass jclsPoint = env->FindClass("android/graphics/Point");
25
+ jfieldID x = env->GetFieldID(jclsPoint, "x", "I");
26
+ jfieldID y = env->GetFieldID(jclsPoint, "y", "I");
27
+ jsPoint.setProperty(rt, "x", env->GetIntField(jPoint, x));
28
+ jsPoint.setProperty(rt, "y", env->GetIntField(jPoint, y));
29
+ env->DeleteLocalRef(jclsPoint);
30
+ }
31
+
32
+ void jQuadToJsObject(Runtime &rt, JNIEnv *env, jobject jQuad, Object &jsQuad) {
33
+ if (!jQuad) {
34
+ return;
35
+ }
36
+ jclass jclsQuad = env->FindClass("com/dynamsoft/core/basic_structures/Quadrilateral");
37
+ jfieldID points = env->GetFieldID(jclsQuad, "points", "[Landroid/graphics/Point;");
38
+ auto jPoints = (jobjectArray) env->GetObjectField(jQuad, points);
39
+ if (!jPoints) {
40
+ jsQuad.setProperty(rt, "points", Value::undefined());
41
+ }
42
+ int count = env->GetArrayLength(jPoints);
43
+ Array pointArr(rt, count);
44
+ for (int i = 0; i < count; ++i) {
45
+ Object jsPoint(rt);
46
+ jobject jPoint = env->GetObjectArrayElement(jPoints, i);
47
+ jPointToJsObject(rt, env, jPoint, jsPoint);
48
+ pointArr.setValueAtIndex(rt, i, std::move(jsPoint));
49
+ env->DeleteLocalRef(jPoint);
50
+ }
51
+ jsQuad.setProperty(rt, "points", std::move(pointArr));
52
+ env->DeleteLocalRef(jclsQuad);
53
+ }
54
+
55
+ void jCapturedItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, int &outType, Object &jsItem) {
56
+ if (jItem == nullptr) {
57
+ return;
58
+ }
59
+ jclass clsCapturedResultItem = env->FindClass("com/dynamsoft/core/basic_structures/CapturedResultItem");
60
+ jmethodID getType = env->GetMethodID(clsCapturedResultItem, "getType", "()I");
61
+ jmethodID getTaskName = env->GetMethodID(clsCapturedResultItem, "getTaskName", "()Ljava/lang/String;");
62
+ jmethodID getTargetROIDefName = env->GetMethodID(clsCapturedResultItem, "getTargetROIDefName", "()Ljava/lang/String;");
63
+
64
+ outType = env->CallIntMethod(jItem, getType);
65
+ jsItem.setProperty(rt, "type", outType);
66
+ auto jTaskName = (jstring) env->CallObjectMethod(jItem, getTaskName);
67
+ auto jTargetROIDefName = (jstring) env->CallObjectMethod(jItem, getTargetROIDefName);
68
+ auto pTaskName = jTaskName ? env->GetStringUTFChars(jTaskName, nullptr) : "";
69
+ auto pTargetROIDefName = jTargetROIDefName ? env->GetStringUTFChars(jTargetROIDefName, nullptr) : "";
70
+ jsItem.setProperty(rt, "taskName", pTaskName);
71
+ jsItem.setProperty(rt, "targetROIDefName", pTargetROIDefName);
72
+ if (jTaskName) {
73
+ env->ReleaseStringUTFChars(jTaskName, pTaskName);
74
+ env->ReleaseStringUTFChars(jTargetROIDefName, pTargetROIDefName);
75
+ }
76
+ env->DeleteLocalRef(clsCapturedResultItem);
77
+
78
+ }
79
+
80
+ void jCapturedItemArrayToJsArray(Runtime &rt, JNIEnv *env, jobjectArray jItemArray, int *&outTypes, Array &jsItemArray) {
81
+ if (jItemArray == nullptr) {
82
+ return;
83
+ }
84
+ int count = env->GetArrayLength(jItemArray);
85
+ if (jsItemArray.size(rt) != count) {
86
+ jsItemArray = Array(rt, count);
87
+ }
88
+ outTypes = new int[count];
89
+ int outType = 0;
90
+ for (int i = 0; i < count; ++i) {
91
+ Object jsItem = Object(rt);
92
+ jobject jItem = env->GetObjectArrayElement(jItemArray, i);
93
+ jCapturedItemToJsObject(rt, env, jItem, outType, jsItem);
94
+ outTypes[i] = outType;
95
+ jsItemArray.setValueAtIndex(rt, i, std::move(jsItem));
96
+ env->DeleteLocalRef(jItem);
97
+ }
98
+ }
99
+
100
+ jobject getJImageDataFromHO(JNIEnv *env, const ImageDataHostObject &imageDataHO) {
101
+ jbyteArray jByteArr = nullptr;
102
+ if (imageDataHO.buffer != nullptr) {
103
+ jByteArr = env->NewByteArray((int) imageDataHO.bufferSize);
104
+ env->SetByteArrayRegion(jByteArr, 0, (int) imageDataHO.bufferSize, (jbyte *) imageDataHO.buffer);
105
+ }
106
+ env->PushLocalFrame(4);
107
+ jclass jclsImageData = env->FindClass("com/dynamsoft/core/basic_structures/ImageData");
108
+ jmethodID initImageData = env->GetMethodID(jclsImageData, "<init>", "([BIIIIILcom/dynamsoft/core/basic_structures/ImageTag;)V");
109
+ return env->PopLocalFrame(
110
+ env->NewObject(jclsImageData, initImageData,
111
+ jByteArr, imageDataHO.width, imageDataHO.height, imageDataHO.stride,
112
+ imageDataHO.format, imageDataHO.orientation, (jobject)nullptr)
113
+ );
114
+ }
115
+
116
+ void getHOFromJImageData(JNIEnv *env, jobject jImageData, ImageDataHostObject &imageHO) {
117
+ if (jImageData == nullptr) {
118
+ return;
119
+ }
120
+ env->PushLocalFrame(8);
121
+ jclass jclsImageData = env->FindClass("com/dynamsoft/core/basic_structures/ImageData");
122
+ jfieldID bytes = env->GetFieldID(jclsImageData, "bytes", "[B");
123
+ jfieldID width = env->GetFieldID(jclsImageData, "width", "I");
124
+ jfieldID height = env->GetFieldID(jclsImageData, "height", "I");
125
+ jfieldID stride = env->GetFieldID(jclsImageData, "stride", "I");
126
+ jfieldID orientation = env->GetFieldID(jclsImageData, "orientation", "I");
127
+ jfieldID format = env->GetFieldID(jclsImageData, "format", "I");
128
+
129
+ auto jbytes = (jbyteArray) env->GetObjectField(jImageData, bytes);
130
+ int bytesLength = 0;
131
+ if (jbytes != nullptr) {
132
+ bytesLength = env->GetArrayLength(jbytes);
133
+
134
+ //Don't delete this buffer.
135
+ //Put the responsibility of release to the user(Js-End).
136
+ imageHO.buffer = (uint8_t *)malloc(bytesLength * sizeof(uint8_t));
137
+ env->GetByteArrayRegion(jbytes, 0, bytesLength, (jbyte*)imageHO.buffer);
138
+ }
139
+ imageHO.bufferSize = bytesLength;
140
+ imageHO.width = (int) env->GetIntField(jImageData, width);
141
+ imageHO.height = (int) env->GetIntField(jImageData, height);
142
+ imageHO.stride = (int) env->GetIntField(jImageData, stride);
143
+ imageHO.format = (int) env->GetIntField(jImageData, format);
144
+ imageHO.orientation = (int) env->GetIntField(jImageData, orientation);
145
+ env->PopLocalFrame(nullptr);
146
+ }
147
+
148
+ } // namespace jsiConversion::core
149
+
150
+
151
+ Value imageDataHOToBase64(ImageDataHostObject &imageDataHO, Runtime &rt) {
152
+ JNIEnv *env;
153
+ bool needDetach = false;
154
+ int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
155
+ if (state == JNI_EDETACHED || env == nullptr) {
156
+ gJvm->AttachCurrentThread(&env, nullptr);
157
+ needDetach = true;
158
+ }
159
+
160
+ auto cls = env->FindClass("com/dynamsoft/reactnative/basicutils/ImageUtilKt");
161
+ auto imageData2base64 = env->GetStaticMethodID(cls, "imageData2base64", "(Lcom/dynamsoft/core/basic_structures/ImageData;)Ljava/lang/String;");
162
+
163
+ auto jImageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
164
+ auto jBase64 = (jstring) env->CallStaticObjectMethod(cls, imageData2base64, jImageData);
165
+ auto pBase64 = jBase64 ? env->GetStringUTFChars(jBase64, nullptr) : "";
166
+ env->DeleteLocalRef(cls);
167
+ env->DeleteLocalRef(jImageData);
168
+ if (jBase64 != nullptr)
169
+ env->ReleaseStringUTFChars(jBase64, pBase64);
170
+ if (needDetach)
171
+ gJvm->DetachCurrentThread();
172
+ return String::createFromUtf8(rt, string(pBase64));
173
+ }
174
+
175
+ void addImageToBuffer(ImageDataHostObject &imageDataHO, string &nativeIsaId) {
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
+
184
+ env->PushLocalFrame(4);
185
+ jclass clsIsaModuleImpl = env->FindClass("com/dynamsoft/reactnativelib/core/ImageSourceAdapterModuleImpl");
186
+ jmethodID getISA =env->GetStaticMethodID(clsIsaModuleImpl, "getISA", "(Ljava/lang/String;)Lcom/dynamsoft/core/basic_structures/ImageSourceAdapter;");
187
+ jobject jISA = env->CallStaticObjectMethod(clsIsaModuleImpl, getISA, env->NewStringUTF(nativeIsaId.c_str()));
188
+
189
+ if(!env->IsSameObject(jISA, nullptr)) {
190
+ auto clsISA = env->FindClass("com/dynamsoft/core/basic_structures/ImageSourceAdapter");
191
+ auto addImageToBuffer = env->GetMethodID(clsISA, "addImageToBuffer", "(Lcom/dynamsoft/core/basic_structures/ImageData;)V");
192
+ env->CallVoidMethod(jISA, addImageToBuffer, jsiConversion::core::getJImageDataFromHO(env, imageDataHO));
193
+ }
194
+ env->PopLocalFrame(nullptr);
195
+
196
+ if (needDetach) {
197
+ gJvm->DetachCurrentThread();
198
+ }
199
+ }
200
+
201
+ ImageDataHostObject getImage(string &nativeIsaId) {
202
+ JNIEnv *env;
203
+ bool needDetach = false;
204
+ int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
205
+ if (state == JNI_EDETACHED || env == nullptr) {
206
+ gJvm->AttachCurrentThread(&env, nullptr);
207
+ needDetach = true;
208
+ }
209
+
210
+ env->PushLocalFrame(4);
211
+ jclass clsIsaModuleImpl = env->FindClass("com/dynamsoft/reactnativelib/core/ImageSourceAdapterModuleImpl");
212
+ jmethodID getISA =env->GetStaticMethodID(clsIsaModuleImpl, "getISA", "(Ljava/lang/String;)Lcom/dynamsoft/core/basic_structures/ImageSourceAdapter;");
213
+ jobject jISA = env->CallStaticObjectMethod(clsIsaModuleImpl, getISA, env->NewStringUTF(nativeIsaId.c_str()));
214
+
215
+ ImageDataHostObject imageHO;
216
+ if(!env->IsSameObject(jISA, nullptr)) {
217
+ auto clsISA = env->FindClass("com/dynamsoft/core/basic_structures/ImageSourceAdapter");
218
+ auto getImage = env->GetMethodID(clsISA, "getImage", "()Lcom/dynamsoft/core/basic_structures/ImageData;");
219
+ auto jImageData = env->CallObjectMethod(jISA, getImage);
220
+ jsiConversion::core::getHOFromJImageData(env, jImageData, imageHO);
221
+ }
222
+ env->PopLocalFrame(nullptr);
223
+
224
+ if (needDetach) {
225
+ gJvm->DetachCurrentThread();
226
+ }
227
+ return imageHO;
228
+ }
229
+
230
+ #include "../android_log.h"
231
+ #define JSI_FUNC [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value
232
+
233
+ namespace jsi_install {
234
+ void install_imageDataToBase64(Runtime &jsiRuntime) {
235
+ if (!jsiRuntime.global().hasProperty(jsiRuntime, "imageDataToBase64")) {
236
+ auto nameId = PropNameID::forAscii(jsiRuntime, "imageDataToBase64");
237
+ auto imageDataToBase64Func = Function::createFromHostFunction(jsiRuntime, nameId, 1, JSI_FUNC {
238
+ auto obj = arguments[0].asObject(runtime);
239
+ auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(obj));
240
+ return imageDataHOToBase64(imageDataHostObject, runtime);
241
+ });
242
+ jsiRuntime.global().setProperty(jsiRuntime, nameId, imageDataToBase64Func);
243
+ }
244
+ }
245
+ namespace isa {
246
+ void install_addImageToBuffer(Runtime &jsiRuntime) {
247
+ if(!jsiRuntime.global().hasProperty(jsiRuntime, "isaAddImageToBuffer")) {
248
+ auto nameID = PropNameID::forAscii(jsiRuntime, "isaAddImageToBuffer");
249
+ auto func = Function::createFromHostFunction(jsiRuntime, nameID, 2, JSI_FUNC {
250
+ string nativeId = arguments[0].asString(runtime).utf8(runtime);
251
+ ImageDataHostObject imageDataHO = ImageDataHostObject::getHOFromObject(runtime, arguments[1].asObject(runtime));
252
+ addImageToBuffer(imageDataHO, nativeId);
253
+ return Value::undefined();
254
+ });
255
+ jsiRuntime.global().setProperty(jsiRuntime, nameID, func);
256
+ }
257
+ }
258
+ void install_getImageData(Runtime &jsiRuntime) {
259
+ if(!jsiRuntime.global().hasProperty(jsiRuntime, "isaGetImageData")) {
260
+ auto nameID = PropNameID::forAscii(jsiRuntime, "isaGetImageData");
261
+ auto func = Function::createFromHostFunction(jsiRuntime, nameID, 1, JSI_FUNC {
262
+ string nativeId = arguments[0].asString(runtime).utf8(runtime);
263
+ return Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(getImage(nativeId)));
264
+ });
265
+ jsiRuntime.global().setProperty(jsiRuntime, nameID, func);
266
+ }
267
+ }
268
+ } // namespace isa
269
+ } // namespace jsi_install
270
+
271
+ void install_coreMethods(Runtime &jsiRuntime) {
272
+ jsi_install::install_imageDataToBase64(jsiRuntime);
273
+ jsi_install::isa::install_addImageToBuffer(jsiRuntime);
274
+ jsi_install::isa::install_getImageData(jsiRuntime);
275
+ }
276
+
277
+ extern "C"
278
+ JNIEXPORT void JNICALL
279
+ Java_com_dynamsoft_reactnativelib_core_ImageSourceAdapterModuleImpl_nativeInstall(JNIEnv *env, jclass clz, jlong jsiPtr) {
280
+ auto runtime = reinterpret_cast<Runtime *>(jsiPtr);
281
+ if (runtime) {
282
+ install_coreMethods(*runtime);
283
+ }
284
+ }
@@ -0,0 +1,51 @@
1
+ //
2
+ // Created by Allen on 24/08/26.
3
+ //
4
+
5
+ #ifndef REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_CORE_JSICORE_H_
6
+ #define REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_CORE_JSICORE_H_
7
+
8
+ #include "jsi/jsi.h"
9
+ #include "ImageDataHostObject.h"
10
+ #include <jni.h>
11
+ #include <string>
12
+ using namespace facebook::jsi;
13
+ using namespace std;
14
+
15
+ using namespace facebook::jsi;
16
+
17
+
18
+ extern JavaVM *gJvm;
19
+
20
+
21
+
22
+
23
+
24
+ namespace jsiConversion::core {
25
+
26
+ void jPointToJsObject(Runtime &rt, JNIEnv *env, jobject jPoint, Object &jsPoint);
27
+ void jQuadToJsObject(Runtime &rt, JNIEnv *env, jobject jQuad, Object &jsQuad);
28
+ void jCapturedItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, int &outType, Object &jsItem);
29
+ void jCapturedItemArrayToJsArray(Runtime &rt, JNIEnv *env, jobjectArray jItemArray, int *&outTypes, Array &jsItemArray);
30
+
31
+ // ImageData: java object <--> jsi HostObject
32
+ jobject getJImageDataFromHO(JNIEnv *env, const ImageDataHostObject &imageDataHO);
33
+ void getHOFromJImageData(JNIEnv *env, jobject jImageData, ImageDataHostObject &imageHO);
34
+ } // namespace jsiConversion::core
35
+
36
+
37
+
38
+ Value imageDataHOToBase64(ImageDataHostObject &imageDataHO, Runtime &rt);
39
+
40
+ void addImageToBuffer(ImageDataHostObject &imageDataHO, string &nativeIsaId);
41
+ ImageDataHostObject getImage(string &nativeIsaId);
42
+
43
+ namespace jsi_install {
44
+ void install_imageDataToBase64(Runtime &jsiRuntime);
45
+ namespace isa {
46
+ void install_addImageToBuffer(Runtime &jsiRuntime);
47
+ void install_getImageData(Runtime &jsiRuntime);
48
+ } // namespace isa
49
+ } // namespace jsi_install
50
+
51
+ #endif // REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_CORE_JSICORE_H_
@@ -0,0 +1,263 @@
1
+ //
2
+ // Created by Allen on 24/08/28.
3
+ //
4
+
5
+ #include "JsiCvr.h"
6
+ #include "../core/ImageDataHostObject.h"
7
+ #include "../core/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_getCurrentNormalizedImages(runtime);
17
+ jsi_install::cvr::install_captureFile(runtime);
18
+ jsi_install::cvr::install_captureFileBytes(runtime);
19
+ }
20
+
21
+ extern "C"
22
+ JNIEXPORT void JNICALL
23
+ Java_com_dynamsoft_reactnativelib_cvr_CaptureVisionRouterModuleImpl_nativeInstall(JNIEnv *env, jobject thiz, jlong jsiPtr) {
24
+ if (!env->IsSameObject(jCvrModule, thiz)) {
25
+ jCvrModule = env->NewWeakGlobalRef(thiz);
26
+ }
27
+ auto runtime = reinterpret_cast<Runtime *>(jsiPtr);
28
+ if (runtime) {
29
+ install_cvrMethods(*runtime);
30
+ }
31
+ }
32
+
33
+ namespace jsiConversion::cvr {
34
+ void jCapturedResultToJsiObject(Runtime &rt, JNIEnv *env, jobject jCapturedResult, Object &jsCapturedResult) {
35
+ env->PushLocalFrame(8);
36
+ jclass jclsCapturedResult = env->FindClass("com/dynamsoft/cvr/CapturedResult");
37
+ SET_STRING_PROPERTY_BY_FIELD(jclsCapturedResult, jCapturedResult, jsCapturedResult, originalImageHashId)
38
+ SET_STRING_PROPERTY_BY_FIELD(jclsCapturedResult, jCapturedResult, jsCapturedResult, errorMessage)
39
+
40
+ jfieldID errorCode = env->GetFieldID(jclsCapturedResult, "errorCode", "I");
41
+ jsCapturedResult.setProperty(rt, "errorCode", env->GetIntField(jCapturedResult, errorCode));
42
+
43
+ jfieldID items = env->GetFieldID(jclsCapturedResult, "items", "[Lcom/dynamsoft/core/basic_structures/CapturedResultItem;");
44
+ jobjectArray jItems = (jobjectArray) env->GetObjectField(jCapturedResult, items);
45
+ Array jsItemArray(rt, 0);
46
+ int *types;
47
+
48
+ jsiConversion::core::jCapturedItemArrayToJsArray(rt, env, jItems, types, jsItemArray);
49
+ for (int i = 0; i < jsItemArray.size(rt); ++i) {
50
+ Object jsItem = jsItemArray.getValueAtIndex(rt, i).asObject(rt);
51
+ jobject jItem = env->GetObjectArrayElement(jItems, i);
52
+ int type = types[i];
53
+ if (type == CRIT_BARCODE) {
54
+ jsiConversion::dbr::jBarcodeResultItemToJsObject(rt, env, jItem, jsItem);
55
+ } else if (type == CRIT_TEXT_LINE) {
56
+ jsiConversion::dlr::jTextLineResultItemToJsObject(rt, env, jItem, jsItem);
57
+ } else if (type == CRIT_DETECTED_QUAD) {
58
+ jsiConversion::ddn::jDetectedQuadResultItemToJsObject(rt, env, jItem, jsItem);
59
+ } else if (type == CRIT_NORMALIZED_IMAGE) {
60
+ jsiConversion::ddn::jNormalizedImageResultItemToJsObject(rt, env, jItem, jsItem);
61
+ } else if (type == CRIT_PARSED_RESULT) {
62
+ jsiConversion::dcp::jParsedResultItemToJsObject(rt, env, jItem, jsItem);
63
+ }
64
+ env->DeleteLocalRef(jItem);
65
+ }
66
+ delete types;
67
+ jsCapturedResult.setProperty(rt, "items", jsItemArray);
68
+ env->PopLocalFrame(nullptr);
69
+ }
70
+ }//namespace jsiConversion::cvr
71
+
72
+ namespace jsi_install::cvr {
73
+ void install_captureImageData(Runtime &jsiRuntime) {
74
+ auto nameId = PropNameID::forAscii(jsiRuntime, "captureImageData");
75
+ if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
76
+ auto captureImageDataFunc = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
77
+ auto obj = arguments[0].asObject(runtime);
78
+ auto imgHO = ImageDataHostObject::getHOFromObject(runtime, std::move(obj));
79
+ Object jsCapturedResult = captureImageDataHO(imgHO, runtime, arguments[1].asString(runtime).utf8(runtime));
80
+ return jsCapturedResult;
81
+ });
82
+ jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(captureImageDataFunc));
83
+ }
84
+ }
85
+ void install_captureFile(Runtime &jsiRuntime) {
86
+ auto nameId = PropNameID::forAscii(jsiRuntime, "captureFile");
87
+ if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
88
+ auto captureFileFunc = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
89
+ auto filePath = arguments[0].asString(runtime);
90
+ Object jsCapturedResult = captureFile(filePath.utf8(runtime), runtime, arguments[1].asString(runtime).utf8(runtime));
91
+ return jsCapturedResult;
92
+ });
93
+ jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(captureFileFunc));
94
+ }
95
+ }
96
+ void install_captureFileBytes(Runtime &jsiRuntime) {
97
+ auto nameId = PropNameID::forAscii(jsiRuntime, "captureFileBytes");
98
+ if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
99
+ auto captureFileBytesFunc = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
100
+ ArrayBuffer fileBytes = arguments[0].asObject(runtime).getArrayBuffer(runtime);
101
+ Object jsCapturedResult = captureFileBytes(fileBytes, runtime, arguments[1].asString(runtime).utf8(runtime));
102
+ return jsCapturedResult;
103
+ });
104
+ jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(captureFileBytesFunc));
105
+ }
106
+ }
107
+ void install_getCurrentNormalizedImages(Runtime &jsiRuntime) {
108
+ auto nameId = PropNameID::forAscii(jsiRuntime, "getCurrentNormalizedImages");
109
+ if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
110
+ auto getCurrentNormalizedImagesFunc = Function::createFromHostFunction(jsiRuntime, nameId, 0, JSI_FUNC {
111
+ Array images = getCurrentNormalizedImages(runtime);
112
+ return images;
113
+ });
114
+ jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(getCurrentNormalizedImagesFunc));
115
+ }
116
+ }
117
+ void install_cvr_getOriginalImage(Runtime &jsiRuntime) {
118
+ auto nameId = PropNameID::forAscii(jsiRuntime, "cvr_getOriginalImage");
119
+ if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
120
+ auto cvr_getOriginalImageFunc = Function::createFromHostFunction(jsiRuntime, nameId, 1, JSI_FUNC {
121
+ string hashId = arguments[0].asString(runtime).utf8(runtime);
122
+ if (hashId.empty()) {
123
+ return {};
124
+ }
125
+ ImageDataHostObject imgHO = getOriginalImage(runtime, hashId);
126
+ if(imgHO.width == 0 && imgHO.height == 0) {
127
+ return {};
128
+ } else {
129
+ return Object::createFromHostObject(runtime, make_shared<ImageDataHostObject>(imgHO));
130
+ }
131
+ });
132
+ jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(cvr_getOriginalImageFunc));
133
+ }
134
+ }
135
+ }//namespace jsi_install::cvr
136
+
137
+
138
+ Object captureImageDataHO(ImageDataHostObject &imageDataHO, Runtime &rt, string templateName) {
139
+ JNIEnv *env;
140
+ bool needDetach = false;
141
+ int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
142
+ if (state == JNI_EDETACHED || env == nullptr) {
143
+ gJvm->AttachCurrentThread(&env, nullptr);
144
+ needDetach = true;
145
+ }
146
+ auto clzCvrModule = env->GetObjectClass(jCvrModule);
147
+ auto captureMeth = env->GetMethodID(clzCvrModule, "captureImageDataCalledInJSI",
148
+ "(Lcom/dynamsoft/core/basic_structures/ImageData;Ljava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
149
+ auto imageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
150
+ auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, imageData, env->NewStringUTF(templateName.c_str()));
151
+ Object jsResult(rt);
152
+ jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
153
+ env->DeleteLocalRef(clzCvrModule);
154
+ env->DeleteLocalRef(imageData);
155
+ if (needDetach) {
156
+ gJvm->DetachCurrentThread();
157
+ }
158
+ return jsResult;
159
+ }
160
+
161
+ Object captureFile(string filePath, Runtime &rt, string templateName) {
162
+ JNIEnv *env;
163
+ bool needDetach = false;
164
+ int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
165
+ if (state == JNI_EDETACHED || env == nullptr) {
166
+ gJvm->AttachCurrentThread(&env, nullptr);
167
+ needDetach = true;
168
+ }
169
+ auto clzCvrModule = env->GetObjectClass(jCvrModule);
170
+ auto captureMeth = env->GetMethodID(clzCvrModule, "captureFileCalledInJSI",
171
+ "(Ljava/lang/String;Ljava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
172
+ auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, env->NewStringUTF(filePath.c_str()), env->NewStringUTF(templateName.c_str()));
173
+ Object jsResult(rt);
174
+ jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
175
+ env->DeleteLocalRef(clzCvrModule);
176
+ if (needDetach) {
177
+ gJvm->DetachCurrentThread();
178
+ }
179
+ return jsResult;
180
+ }
181
+ Object captureFileBytes(ArrayBuffer &fileBytes, Runtime &rt, string templateName) {
182
+ JNIEnv *env;
183
+ bool needDetach = false;
184
+ int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
185
+ if (state == JNI_EDETACHED || env == nullptr) {
186
+ gJvm->AttachCurrentThread(&env, nullptr);
187
+ needDetach = true;
188
+ }
189
+ auto clzCvrModule = env->GetObjectClass(jCvrModule);
190
+ auto captureMeth = env->GetMethodID(clzCvrModule, "captureFileBytesCalledInJSI",
191
+ "([BLjava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
192
+ auto pBytes = (jbyte *) fileBytes.data(rt);
193
+ int len = fileBytes.length(rt);
194
+ jbyteArray jBytes = env->NewByteArray(len);
195
+ env->SetByteArrayRegion(jBytes, 0, len, (jbyte *) pBytes);
196
+ auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, jBytes, env->NewStringUTF(templateName.c_str()));
197
+ Object jsResult(rt);
198
+ jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
199
+ env->DeleteLocalRef(clzCvrModule);
200
+ env->DeleteLocalRef(jBytes);
201
+ if (needDetach) {
202
+ gJvm->DetachCurrentThread();
203
+ }
204
+ return jsResult;
205
+ }
206
+
207
+ Array getCurrentNormalizedImages(Runtime &runtime) {
208
+ JNIEnv *env;
209
+ bool needDetach = false;
210
+ int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
211
+ if (state == JNI_EDETACHED || env == nullptr) {
212
+ gJvm->AttachCurrentThread(&env, nullptr);
213
+ needDetach = true;
214
+ }
215
+ auto clzCvrModule = env->GetObjectClass(jCvrModule);
216
+ auto fiCurrentImages = env->GetFieldID(clzCvrModule, "currentNormalizedImages", "[Lcom/dynamsoft/core/basic_structures/ImageData;");
217
+ auto jCurrentImages = (jobjectArray) env->GetObjectField(jCvrModule, fiCurrentImages);
218
+ int count = jCurrentImages ? env->GetArrayLength(jCurrentImages) : 0;
219
+ Array array(runtime, count);
220
+ for (int i = 0; i < count; ++i) {
221
+ auto imageData = env->GetObjectArrayElement(jCurrentImages, i);
222
+ ImageDataHostObject imgHO;
223
+ jsiConversion::core::getHOFromJImageData(env, imageData, imgHO);
224
+ auto obj = Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imgHO));
225
+ array.setValueAtIndex(runtime, i, obj);
226
+ env->DeleteLocalRef(imageData);
227
+ }
228
+ env->DeleteLocalRef(clzCvrModule);
229
+ if (jCurrentImages) {
230
+ env->DeleteLocalRef(jCurrentImages);
231
+ }
232
+ jCurrentImages = nullptr;
233
+ env->SetObjectField(jCvrModule, fiCurrentImages, jCurrentImages);
234
+ if (needDetach) {
235
+ gJvm->DetachCurrentThread();
236
+ }
237
+ return array;
238
+ }
239
+
240
+ ImageDataHostObject getOriginalImage(Runtime &runtime, string imageHashId) {
241
+ JNIEnv *env;
242
+ bool needDetach = false;
243
+ int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
244
+ if (state == JNI_EDETACHED || env == nullptr) {
245
+ gJvm->AttachCurrentThread(&env, nullptr);
246
+ needDetach = true;
247
+ }
248
+ auto clzCvrModule = env->GetObjectClass(jCvrModule);
249
+ auto getOriginalImageCalledInJSI =
250
+ env->GetMethodID(clzCvrModule, "getOriginalImageCalledInJSI", "(Ljava/lang/String;)Lcom/dynamsoft/core/basic_structures/ImageData;");
251
+ auto jImageData = env->CallObjectMethod(jCvrModule, getOriginalImageCalledInJSI, env->NewStringUTF(imageHashId.c_str()));
252
+ ImageDataHostObject imgHO;
253
+ if (jImageData != nullptr) {
254
+ jsiConversion::core::getHOFromJImageData(env, jImageData, imgHO);
255
+ env->DeleteLocalRef(jImageData);
256
+ }
257
+ env->DeleteLocalRef(clzCvrModule);
258
+ if (needDetach) {
259
+ gJvm->DetachCurrentThread();
260
+ }
261
+ return imgHO;
262
+ }
263
+
@@ -0,0 +1,51 @@
1
+ //
2
+ // Created by Allen on 24/08/28.
3
+ //
4
+
5
+ #ifndef REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_CVR_JSICVR_H_
6
+ #define REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_CVR_JSICVR_H_
7
+
8
+ #include "jsi/jsi.h"
9
+ #include "string"
10
+ #include "../core/ImageDataHostObject.h"
11
+ #include "../dbr/JsiDbr.h"
12
+ #include "../dlr/JsiDlr.h"
13
+ #include "../ddn/JsiDdn.h"
14
+ #include "../dcp/JsiDcp.h"
15
+ #include "jni.h"
16
+
17
+ using namespace facebook::jsi;
18
+ using namespace std;
19
+
20
+ int CRIT_BARCODE = 1 << 1;
21
+ int CRIT_TEXT_LINE = 1 << 2;
22
+ int CRIT_DETECTED_QUAD = 1 << 3;
23
+ int CRIT_NORMALIZED_IMAGE = 1 << 4;
24
+ int CRIT_PARSED_RESULT = 1 << 5;
25
+
26
+ #define SET_STRING_PROPERTY_BY_FIELD(jClass, jObj, jsObj, propertyName) \
27
+ jfieldID propertyName =env->GetFieldID(jClass, #propertyName, "Ljava/lang/String;"); \
28
+ jstring j##propertyName = (jstring) env->GetObjectField(jObj, propertyName); \
29
+ const char* p##propertyName = j##propertyName?env->GetStringUTFChars(j##propertyName, nullptr):""; \
30
+ jsObj.setProperty(rt, #propertyName, std::move(p##propertyName)); \
31
+ if(j##propertyName) env->ReleaseStringUTFChars(j##propertyName, p##propertyName); \
32
+
33
+ namespace jsiConversion::cvr {
34
+ void jCapturedResultToJsiObject(Runtime &rt, JNIEnv *env, jobject jCapturedResult, Object &jsCapturedResult);
35
+ }//namespace jsiConversion::cvr
36
+
37
+ namespace jsi_install::cvr {
38
+ void install_captureImageData(Runtime &jsiRuntime);
39
+ void install_getCurrentNormalizedImages(Runtime &jsiRuntime);
40
+ void install_captureFile(Runtime &jsiRuntime);
41
+ void install_captureFileBytes(Runtime &jsiRuntime);
42
+ void install_cvr_getOriginalImage(Runtime &jsiRuntime);
43
+ }//namespace jsi_install::cvr
44
+
45
+ Object captureImageDataHO(ImageDataHostObject &imageDataHO, Runtime &rt, string templateName);
46
+ Object captureFile(string filePath, Runtime &rt, string templateName);
47
+ Object captureFileBytes(ArrayBuffer &fileBytes, Runtime &rt, string templateName);
48
+ Array getCurrentNormalizedImages(Runtime &runtime);
49
+ ImageDataHostObject getOriginalImage(Runtime &runtime, string imageHashId);
50
+
51
+ #endif //REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_CVR_JSICVR_H_