dynamsoft-capture-vision-react-native 3.4.1200 → 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 +5 -5
  2. package/README.md +62 -66
  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,296 +1,296 @@
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
- env->DeleteLocalRef(jclsQuad);
42
- return;
43
- }
44
- int count = env->GetArrayLength(jPoints);
45
- Array pointArr(rt, count);
46
- for (int i = 0; i < count; ++i) {
47
- Object jsPoint(rt);
48
- jobject jPoint = env->GetObjectArrayElement(jPoints, i);
49
- jPointToJsObject(rt, env, jPoint, jsPoint);
50
- pointArr.setValueAtIndex(rt, i, std::move(jsPoint));
51
- env->DeleteLocalRef(jPoint);
52
- }
53
- jsQuad.setProperty(rt, "points", std::move(pointArr));
54
- env->DeleteLocalRef(jclsQuad);
55
- env->DeleteLocalRef(jPoints);
56
- }
57
-
58
- void jCapturedItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, int &outType, Object &jsItem) {
59
- if (jItem == nullptr) {
60
- return;
61
- }
62
- jclass clsCapturedResultItem = env->FindClass("com/dynamsoft/core/basic_structures/CapturedResultItem");
63
- jmethodID getType = env->GetMethodID(clsCapturedResultItem, "getType", "()I");
64
- jmethodID getTaskName = env->GetMethodID(clsCapturedResultItem, "getTaskName", "()Ljava/lang/String;");
65
- jmethodID getTargetROIDefName = env->GetMethodID(clsCapturedResultItem, "getTargetROIDefName", "()Ljava/lang/String;");
66
-
67
- outType = env->CallIntMethod(jItem, getType);
68
- jsItem.setProperty(rt, "type", outType);
69
- auto jTaskName = (jstring) env->CallObjectMethod(jItem, getTaskName);
70
- auto jTargetROIDefName = (jstring) env->CallObjectMethod(jItem, getTargetROIDefName);
71
- auto pTaskName = jTaskName ? env->GetStringUTFChars(jTaskName, nullptr) : "";
72
- auto pTargetROIDefName = jTargetROIDefName ? env->GetStringUTFChars(jTargetROIDefName, nullptr) : "";
73
- jsItem.setProperty(rt, "taskName", pTaskName);
74
- jsItem.setProperty(rt, "targetROIDefName", pTargetROIDefName);
75
- if (jTaskName) {
76
- env->ReleaseStringUTFChars(jTaskName, pTaskName);
77
- env->DeleteLocalRef(jTaskName);
78
- }
79
- if (jTargetROIDefName) {
80
- env->ReleaseStringUTFChars(jTargetROIDefName, pTargetROIDefName);
81
- env->DeleteLocalRef(jTargetROIDefName);
82
- }
83
- env->DeleteLocalRef(clsCapturedResultItem);
84
-
85
- }
86
-
87
- void jCapturedItemArrayToJsArray(Runtime &rt, JNIEnv *env, jobjectArray jItemArray, int *&outTypes, Array &jsItemArray) {
88
- if (jItemArray == nullptr) {
89
- return;
90
- }
91
- int count = env->GetArrayLength(jItemArray);
92
- if (jsItemArray.size(rt) != count) {
93
- jsItemArray = Array(rt, count);
94
- }
95
- outTypes = new int[count];
96
- int outType = 0;
97
- for (int i = 0; i < count; ++i) {
98
- Object jsItem = Object(rt);
99
- jobject jItem = env->GetObjectArrayElement(jItemArray, i);
100
- jCapturedItemToJsObject(rt, env, jItem, outType, jsItem);
101
- outTypes[i] = outType;
102
- jsItemArray.setValueAtIndex(rt, i, std::move(jsItem));
103
- env->DeleteLocalRef(jItem);
104
- }
105
- }
106
-
107
- jobject getJImageDataFromHO(JNIEnv *env, const ImageDataHostObject &imageDataHO) {
108
- env->PushLocalFrame(8);
109
- jbyteArray jByteArr = nullptr;
110
- if (imageDataHO.buffer != nullptr) {
111
- jByteArr = env->NewByteArray((int) imageDataHO.bufferSize);
112
- env->SetByteArrayRegion(jByteArr, 0, (int) imageDataHO.bufferSize, (jbyte *) imageDataHO.buffer);
113
- }
114
- jclass jclsImageData = env->FindClass("com/dynamsoft/core/basic_structures/ImageData");
115
- jmethodID initImageData = env->GetMethodID(jclsImageData, "<init>", "([BIIIIILcom/dynamsoft/core/basic_structures/ImageTag;)V");
116
- return env->PopLocalFrame(
117
- env->NewObject(jclsImageData, initImageData,
118
- jByteArr, imageDataHO.width, imageDataHO.height, imageDataHO.stride,
119
- imageDataHO.format, imageDataHO.orientation, (jobject)nullptr)
120
- );
121
- }
122
-
123
- void getHOFromJImageData(JNIEnv *env, jobject jImageData, ImageDataHostObject &imageHO) {
124
- if (jImageData == nullptr) {
125
- return;
126
- }
127
- env->PushLocalFrame(8);
128
- jclass jclsImageData = env->FindClass("com/dynamsoft/core/basic_structures/ImageData");
129
- jfieldID bytes = env->GetFieldID(jclsImageData, "bytes", "[B");
130
- jfieldID width = env->GetFieldID(jclsImageData, "width", "I");
131
- jfieldID height = env->GetFieldID(jclsImageData, "height", "I");
132
- jfieldID stride = env->GetFieldID(jclsImageData, "stride", "I");
133
- jfieldID orientation = env->GetFieldID(jclsImageData, "orientation", "I");
134
- jfieldID format = env->GetFieldID(jclsImageData, "format", "I");
135
-
136
- auto jbytes = (jbyteArray) env->GetObjectField(jImageData, bytes);
137
- int bytesLength = 0;
138
- if (jbytes != nullptr) {
139
- bytesLength = env->GetArrayLength(jbytes);
140
-
141
- //Don't delete this buffer.
142
- //Put the responsibility of release to the user(Js-End).
143
- imageHO.buffer = (uint8_t *)malloc(bytesLength * sizeof(uint8_t));
144
- env->GetByteArrayRegion(jbytes, 0, bytesLength, (jbyte*)imageHO.buffer);
145
- }
146
- imageHO.bufferSize = bytesLength;
147
- imageHO.width = (int) env->GetIntField(jImageData, width);
148
- imageHO.height = (int) env->GetIntField(jImageData, height);
149
- imageHO.stride = (int) env->GetIntField(jImageData, stride);
150
- imageHO.format = (int) env->GetIntField(jImageData, format);
151
- imageHO.orientation = (int) env->GetIntField(jImageData, orientation);
152
- env->PopLocalFrame(nullptr);
153
- }
154
-
155
- } // namespace jsiConversion::core
156
-
157
-
158
- Value imageDataHOToBase64(ImageDataHostObject &imageDataHO, Runtime &rt) {
159
- JNIEnv *env;
160
- bool needDetach = false;
161
- int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
162
- if (state == JNI_EDETACHED || env == nullptr) {
163
- gJvm->AttachCurrentThread(&env, nullptr);
164
- needDetach = true;
165
- }
166
-
167
- auto cls = env->FindClass("com/dynamsoft/reactnativelib/basicutils/ImageUtilKt");
168
- auto imageData2base64 = env->GetStaticMethodID(cls, "imageData2base64", "(Lcom/dynamsoft/core/basic_structures/ImageData;)Ljava/lang/String;");
169
-
170
- auto jImageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
171
- auto jBase64 = (jstring) env->CallStaticObjectMethod(cls, imageData2base64, jImageData);
172
- std::string base64Str = "";
173
- if (jBase64 != nullptr) {
174
- auto pBase64 = env->GetStringUTFChars(jBase64, nullptr);
175
- base64Str = std::string(pBase64);
176
- env->ReleaseStringUTFChars(jBase64, pBase64);
177
- env->DeleteLocalRef(jBase64);
178
- }
179
-
180
- env->DeleteLocalRef(cls);
181
- env->DeleteLocalRef(jImageData);
182
- if (needDetach)
183
- gJvm->DetachCurrentThread();
184
- return String::createFromUtf8(rt, base64Str);
185
- }
186
-
187
- void addImageToBuffer(ImageDataHostObject &imageDataHO, string &nativeIsaId) {
188
- JNIEnv *env;
189
- bool needDetach = false;
190
- int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
191
- if (state == JNI_EDETACHED || env == nullptr) {
192
- gJvm->AttachCurrentThread(&env, nullptr);
193
- needDetach = true;
194
- }
195
-
196
- env->PushLocalFrame(8);
197
- jclass clsIsaModuleImpl = env->FindClass("com/dynamsoft/reactnativelib/core/ImageSourceAdapterModuleImpl");
198
- jmethodID getISA =env->GetStaticMethodID(clsIsaModuleImpl, "getISA", "(Ljava/lang/String;)Lcom/dynamsoft/core/basic_structures/ImageSourceAdapter;");
199
- jobject jISA = env->CallStaticObjectMethod(clsIsaModuleImpl, getISA, env->NewStringUTF(nativeIsaId.c_str()));
200
-
201
- if(!env->IsSameObject(jISA, nullptr)) {
202
- auto clsISA = env->FindClass("com/dynamsoft/core/basic_structures/ImageSourceAdapter");
203
- auto addImageToBuffer = env->GetMethodID(clsISA, "addImageToBuffer", "(Lcom/dynamsoft/core/basic_structures/ImageData;)V");
204
- env->CallVoidMethod(jISA, addImageToBuffer, jsiConversion::core::getJImageDataFromHO(env, imageDataHO));
205
- }
206
- env->PopLocalFrame(nullptr);
207
-
208
- if (needDetach) {
209
- gJvm->DetachCurrentThread();
210
- }
211
- }
212
-
213
- ImageDataHostObject getImage(string &nativeIsaId) {
214
- JNIEnv *env;
215
- bool needDetach = false;
216
- int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
217
- if (state == JNI_EDETACHED || env == nullptr) {
218
- gJvm->AttachCurrentThread(&env, nullptr);
219
- needDetach = true;
220
- }
221
-
222
- env->PushLocalFrame(8);
223
- jclass clsIsaModuleImpl = env->FindClass("com/dynamsoft/reactnativelib/core/ImageSourceAdapterModuleImpl");
224
- jmethodID getISA =env->GetStaticMethodID(clsIsaModuleImpl, "getISA", "(Ljava/lang/String;)Lcom/dynamsoft/core/basic_structures/ImageSourceAdapter;");
225
- jobject jISA = env->CallStaticObjectMethod(clsIsaModuleImpl, getISA, env->NewStringUTF(nativeIsaId.c_str()));
226
-
227
- ImageDataHostObject imageHO;
228
- if(!env->IsSameObject(jISA, nullptr)) {
229
- auto clsISA = env->FindClass("com/dynamsoft/core/basic_structures/ImageSourceAdapter");
230
- auto getImage = env->GetMethodID(clsISA, "getImage", "()Lcom/dynamsoft/core/basic_structures/ImageData;");
231
- auto jImageData = env->CallObjectMethod(jISA, getImage);
232
- jsiConversion::core::getHOFromJImageData(env, jImageData, imageHO);
233
- }
234
- env->PopLocalFrame(nullptr);
235
-
236
- if (needDetach) {
237
- gJvm->DetachCurrentThread();
238
- }
239
- return imageHO;
240
- }
241
-
242
- #include "android_log.h"
243
- #define JSI_FUNC [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value
244
-
245
- namespace jsi_install {
246
- void install_imageDataToBase64(Runtime &jsiRuntime) {
247
- if (!jsiRuntime.global().hasProperty(jsiRuntime, "imageDataToBase64")) {
248
- auto nameId = PropNameID::forAscii(jsiRuntime, "imageDataToBase64");
249
- auto imageDataToBase64Func = Function::createFromHostFunction(jsiRuntime, nameId, 1, JSI_FUNC {
250
- auto obj = arguments[0].asObject(runtime);
251
- auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(obj));
252
- return imageDataHOToBase64(imageDataHostObject, runtime);
253
- });
254
- jsiRuntime.global().setProperty(jsiRuntime, nameId, imageDataToBase64Func);
255
- }
256
- }
257
- namespace isa {
258
- void install_addImageToBuffer(Runtime &jsiRuntime) {
259
- if(!jsiRuntime.global().hasProperty(jsiRuntime, "isaAddImageToBuffer")) {
260
- auto nameID = PropNameID::forAscii(jsiRuntime, "isaAddImageToBuffer");
261
- auto func = Function::createFromHostFunction(jsiRuntime, nameID, 2, JSI_FUNC {
262
- string nativeId = arguments[0].asString(runtime).utf8(runtime);
263
- ImageDataHostObject imageDataHO = ImageDataHostObject::getHOFromObject(runtime, arguments[1].asObject(runtime));
264
- addImageToBuffer(imageDataHO, nativeId);
265
- return Value::undefined();
266
- });
267
- jsiRuntime.global().setProperty(jsiRuntime, nameID, func);
268
- }
269
- }
270
- void install_getImageData(Runtime &jsiRuntime) {
271
- if(!jsiRuntime.global().hasProperty(jsiRuntime, "isaGetImageData")) {
272
- auto nameID = PropNameID::forAscii(jsiRuntime, "isaGetImageData");
273
- auto func = Function::createFromHostFunction(jsiRuntime, nameID, 1, JSI_FUNC {
274
- string nativeId = arguments[0].asString(runtime).utf8(runtime);
275
- return Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(getImage(nativeId)));
276
- });
277
- jsiRuntime.global().setProperty(jsiRuntime, nameID, func);
278
- }
279
- }
280
- } // namespace isa
281
- } // namespace jsi_install
282
-
283
- void install_coreMethods(Runtime &jsiRuntime) {
284
- jsi_install::install_imageDataToBase64(jsiRuntime);
285
- jsi_install::isa::install_addImageToBuffer(jsiRuntime);
286
- jsi_install::isa::install_getImageData(jsiRuntime);
287
- }
288
-
289
- extern "C"
290
- JNIEXPORT void JNICALL
291
- Java_com_dynamsoft_reactnativelib_core_ImageSourceAdapterModuleImpl_nativeInstall(JNIEnv *env, jclass clz, jlong jsiPtr) {
292
- auto runtime = reinterpret_cast<Runtime *>(jsiPtr);
293
- if (runtime) {
294
- install_coreMethods(*runtime);
295
- }
296
- }
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
+ env->DeleteLocalRef(jclsQuad);
42
+ return;
43
+ }
44
+ int count = env->GetArrayLength(jPoints);
45
+ Array pointArr(rt, count);
46
+ for (int i = 0; i < count; ++i) {
47
+ Object jsPoint(rt);
48
+ jobject jPoint = env->GetObjectArrayElement(jPoints, i);
49
+ jPointToJsObject(rt, env, jPoint, jsPoint);
50
+ pointArr.setValueAtIndex(rt, i, std::move(jsPoint));
51
+ env->DeleteLocalRef(jPoint);
52
+ }
53
+ jsQuad.setProperty(rt, "points", std::move(pointArr));
54
+ env->DeleteLocalRef(jclsQuad);
55
+ env->DeleteLocalRef(jPoints);
56
+ }
57
+
58
+ void jCapturedItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, int &outType, Object &jsItem) {
59
+ if (jItem == nullptr) {
60
+ return;
61
+ }
62
+ jclass clsCapturedResultItem = env->FindClass("com/dynamsoft/core/basic_structures/CapturedResultItem");
63
+ jmethodID getType = env->GetMethodID(clsCapturedResultItem, "getType", "()I");
64
+ jmethodID getTaskName = env->GetMethodID(clsCapturedResultItem, "getTaskName", "()Ljava/lang/String;");
65
+ jmethodID getTargetROIDefName = env->GetMethodID(clsCapturedResultItem, "getTargetROIDefName", "()Ljava/lang/String;");
66
+
67
+ outType = env->CallIntMethod(jItem, getType);
68
+ jsItem.setProperty(rt, "type", outType);
69
+ auto jTaskName = (jstring) env->CallObjectMethod(jItem, getTaskName);
70
+ auto jTargetROIDefName = (jstring) env->CallObjectMethod(jItem, getTargetROIDefName);
71
+ auto pTaskName = jTaskName ? env->GetStringUTFChars(jTaskName, nullptr) : "";
72
+ auto pTargetROIDefName = jTargetROIDefName ? env->GetStringUTFChars(jTargetROIDefName, nullptr) : "";
73
+ jsItem.setProperty(rt, "taskName", pTaskName);
74
+ jsItem.setProperty(rt, "targetROIDefName", pTargetROIDefName);
75
+ if (jTaskName) {
76
+ env->ReleaseStringUTFChars(jTaskName, pTaskName);
77
+ env->DeleteLocalRef(jTaskName);
78
+ }
79
+ if (jTargetROIDefName) {
80
+ env->ReleaseStringUTFChars(jTargetROIDefName, pTargetROIDefName);
81
+ env->DeleteLocalRef(jTargetROIDefName);
82
+ }
83
+ env->DeleteLocalRef(clsCapturedResultItem);
84
+
85
+ }
86
+
87
+ void jCapturedItemArrayToJsArray(Runtime &rt, JNIEnv *env, jobjectArray jItemArray, int *&outTypes, Array &jsItemArray) {
88
+ if (jItemArray == nullptr) {
89
+ return;
90
+ }
91
+ int count = env->GetArrayLength(jItemArray);
92
+ if (jsItemArray.size(rt) != count) {
93
+ jsItemArray = Array(rt, count);
94
+ }
95
+ outTypes = new int[count];
96
+ int outType = 0;
97
+ for (int i = 0; i < count; ++i) {
98
+ Object jsItem = Object(rt);
99
+ jobject jItem = env->GetObjectArrayElement(jItemArray, i);
100
+ jCapturedItemToJsObject(rt, env, jItem, outType, jsItem);
101
+ outTypes[i] = outType;
102
+ jsItemArray.setValueAtIndex(rt, i, std::move(jsItem));
103
+ env->DeleteLocalRef(jItem);
104
+ }
105
+ }
106
+
107
+ jobject getJImageDataFromHO(JNIEnv *env, const ImageDataHostObject &imageDataHO) {
108
+ env->PushLocalFrame(8);
109
+ jbyteArray jByteArr = nullptr;
110
+ if (imageDataHO.buffer != nullptr) {
111
+ jByteArr = env->NewByteArray((int) imageDataHO.bufferSize);
112
+ env->SetByteArrayRegion(jByteArr, 0, (int) imageDataHO.bufferSize, (jbyte *) imageDataHO.buffer);
113
+ }
114
+ jclass jclsImageData = env->FindClass("com/dynamsoft/core/basic_structures/ImageData");
115
+ jmethodID initImageData = env->GetMethodID(jclsImageData, "<init>", "([BIIIIILcom/dynamsoft/core/basic_structures/ImageTag;)V");
116
+ return env->PopLocalFrame(
117
+ env->NewObject(jclsImageData, initImageData,
118
+ jByteArr, imageDataHO.width, imageDataHO.height, imageDataHO.stride,
119
+ imageDataHO.format, imageDataHO.orientation, (jobject)nullptr)
120
+ );
121
+ }
122
+
123
+ void getHOFromJImageData(JNIEnv *env, jobject jImageData, ImageDataHostObject &imageHO) {
124
+ if (jImageData == nullptr) {
125
+ return;
126
+ }
127
+ env->PushLocalFrame(8);
128
+ jclass jclsImageData = env->FindClass("com/dynamsoft/core/basic_structures/ImageData");
129
+ jfieldID bytes = env->GetFieldID(jclsImageData, "bytes", "[B");
130
+ jfieldID width = env->GetFieldID(jclsImageData, "width", "I");
131
+ jfieldID height = env->GetFieldID(jclsImageData, "height", "I");
132
+ jfieldID stride = env->GetFieldID(jclsImageData, "stride", "I");
133
+ jfieldID orientation = env->GetFieldID(jclsImageData, "orientation", "I");
134
+ jfieldID format = env->GetFieldID(jclsImageData, "format", "I");
135
+
136
+ auto jbytes = (jbyteArray) env->GetObjectField(jImageData, bytes);
137
+ int bytesLength = 0;
138
+ if (jbytes != nullptr) {
139
+ bytesLength = env->GetArrayLength(jbytes);
140
+
141
+ //Don't delete this buffer.
142
+ //Put the responsibility of release to the user(Js-End).
143
+ imageHO.buffer = (uint8_t *)malloc(bytesLength * sizeof(uint8_t));
144
+ env->GetByteArrayRegion(jbytes, 0, bytesLength, (jbyte*)imageHO.buffer);
145
+ }
146
+ imageHO.bufferSize = bytesLength;
147
+ imageHO.width = (int) env->GetIntField(jImageData, width);
148
+ imageHO.height = (int) env->GetIntField(jImageData, height);
149
+ imageHO.stride = (int) env->GetIntField(jImageData, stride);
150
+ imageHO.format = (int) env->GetIntField(jImageData, format);
151
+ imageHO.orientation = (int) env->GetIntField(jImageData, orientation);
152
+ env->PopLocalFrame(nullptr);
153
+ }
154
+
155
+ } // namespace jsiConversion::core
156
+
157
+
158
+ Value imageDataHOToBase64(ImageDataHostObject &imageDataHO, Runtime &rt) {
159
+ JNIEnv *env;
160
+ bool needDetach = false;
161
+ int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
162
+ if (state == JNI_EDETACHED || env == nullptr) {
163
+ gJvm->AttachCurrentThread(&env, nullptr);
164
+ needDetach = true;
165
+ }
166
+
167
+ auto cls = env->FindClass("com/dynamsoft/reactnativelib/basicutils/ImageUtilKt");
168
+ auto imageData2base64 = env->GetStaticMethodID(cls, "imageData2base64", "(Lcom/dynamsoft/core/basic_structures/ImageData;)Ljava/lang/String;");
169
+
170
+ auto jImageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
171
+ auto jBase64 = (jstring) env->CallStaticObjectMethod(cls, imageData2base64, jImageData);
172
+ std::string base64Str = "";
173
+ if (jBase64 != nullptr) {
174
+ auto pBase64 = env->GetStringUTFChars(jBase64, nullptr);
175
+ base64Str = std::string(pBase64);
176
+ env->ReleaseStringUTFChars(jBase64, pBase64);
177
+ env->DeleteLocalRef(jBase64);
178
+ }
179
+
180
+ env->DeleteLocalRef(cls);
181
+ env->DeleteLocalRef(jImageData);
182
+ if (needDetach)
183
+ gJvm->DetachCurrentThread();
184
+ return String::createFromUtf8(rt, base64Str);
185
+ }
186
+
187
+ void addImageToBuffer(ImageDataHostObject &imageDataHO, string &nativeIsaId) {
188
+ JNIEnv *env;
189
+ bool needDetach = false;
190
+ int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
191
+ if (state == JNI_EDETACHED || env == nullptr) {
192
+ gJvm->AttachCurrentThread(&env, nullptr);
193
+ needDetach = true;
194
+ }
195
+
196
+ env->PushLocalFrame(8);
197
+ jclass clsIsaModuleImpl = env->FindClass("com/dynamsoft/reactnativelib/core/ImageSourceAdapterModuleImpl");
198
+ jmethodID getISA =env->GetStaticMethodID(clsIsaModuleImpl, "getISA", "(Ljava/lang/String;)Lcom/dynamsoft/core/basic_structures/ImageSourceAdapter;");
199
+ jobject jISA = env->CallStaticObjectMethod(clsIsaModuleImpl, getISA, env->NewStringUTF(nativeIsaId.c_str()));
200
+
201
+ if(!env->IsSameObject(jISA, nullptr)) {
202
+ auto clsISA = env->FindClass("com/dynamsoft/core/basic_structures/ImageSourceAdapter");
203
+ auto addImageToBuffer = env->GetMethodID(clsISA, "addImageToBuffer", "(Lcom/dynamsoft/core/basic_structures/ImageData;)V");
204
+ env->CallVoidMethod(jISA, addImageToBuffer, jsiConversion::core::getJImageDataFromHO(env, imageDataHO));
205
+ }
206
+ env->PopLocalFrame(nullptr);
207
+
208
+ if (needDetach) {
209
+ gJvm->DetachCurrentThread();
210
+ }
211
+ }
212
+
213
+ ImageDataHostObject getImage(string &nativeIsaId) {
214
+ JNIEnv *env;
215
+ bool needDetach = false;
216
+ int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
217
+ if (state == JNI_EDETACHED || env == nullptr) {
218
+ gJvm->AttachCurrentThread(&env, nullptr);
219
+ needDetach = true;
220
+ }
221
+
222
+ env->PushLocalFrame(8);
223
+ jclass clsIsaModuleImpl = env->FindClass("com/dynamsoft/reactnativelib/core/ImageSourceAdapterModuleImpl");
224
+ jmethodID getISA =env->GetStaticMethodID(clsIsaModuleImpl, "getISA", "(Ljava/lang/String;)Lcom/dynamsoft/core/basic_structures/ImageSourceAdapter;");
225
+ jobject jISA = env->CallStaticObjectMethod(clsIsaModuleImpl, getISA, env->NewStringUTF(nativeIsaId.c_str()));
226
+
227
+ ImageDataHostObject imageHO;
228
+ if(!env->IsSameObject(jISA, nullptr)) {
229
+ auto clsISA = env->FindClass("com/dynamsoft/core/basic_structures/ImageSourceAdapter");
230
+ auto getImage = env->GetMethodID(clsISA, "getImage", "()Lcom/dynamsoft/core/basic_structures/ImageData;");
231
+ auto jImageData = env->CallObjectMethod(jISA, getImage);
232
+ jsiConversion::core::getHOFromJImageData(env, jImageData, imageHO);
233
+ }
234
+ env->PopLocalFrame(nullptr);
235
+
236
+ if (needDetach) {
237
+ gJvm->DetachCurrentThread();
238
+ }
239
+ return imageHO;
240
+ }
241
+
242
+ #include "android_log.h"
243
+ #define JSI_FUNC [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value
244
+
245
+ namespace jsi_install {
246
+ void install_imageDataToBase64(Runtime &jsiRuntime) {
247
+ if (!jsiRuntime.global().hasProperty(jsiRuntime, "imageDataToBase64")) {
248
+ auto nameId = PropNameID::forAscii(jsiRuntime, "imageDataToBase64");
249
+ auto imageDataToBase64Func = Function::createFromHostFunction(jsiRuntime, nameId, 1, JSI_FUNC {
250
+ auto obj = arguments[0].asObject(runtime);
251
+ auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(obj));
252
+ return imageDataHOToBase64(imageDataHostObject, runtime);
253
+ });
254
+ jsiRuntime.global().setProperty(jsiRuntime, nameId, imageDataToBase64Func);
255
+ }
256
+ }
257
+ namespace isa {
258
+ void install_addImageToBuffer(Runtime &jsiRuntime) {
259
+ if(!jsiRuntime.global().hasProperty(jsiRuntime, "isaAddImageToBuffer")) {
260
+ auto nameID = PropNameID::forAscii(jsiRuntime, "isaAddImageToBuffer");
261
+ auto func = Function::createFromHostFunction(jsiRuntime, nameID, 2, JSI_FUNC {
262
+ string nativeId = arguments[0].asString(runtime).utf8(runtime);
263
+ ImageDataHostObject imageDataHO = ImageDataHostObject::getHOFromObject(runtime, arguments[1].asObject(runtime));
264
+ addImageToBuffer(imageDataHO, nativeId);
265
+ return Value::undefined();
266
+ });
267
+ jsiRuntime.global().setProperty(jsiRuntime, nameID, func);
268
+ }
269
+ }
270
+ void install_getImageData(Runtime &jsiRuntime) {
271
+ if(!jsiRuntime.global().hasProperty(jsiRuntime, "isaGetImageData")) {
272
+ auto nameID = PropNameID::forAscii(jsiRuntime, "isaGetImageData");
273
+ auto func = Function::createFromHostFunction(jsiRuntime, nameID, 1, JSI_FUNC {
274
+ string nativeId = arguments[0].asString(runtime).utf8(runtime);
275
+ return Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(getImage(nativeId)));
276
+ });
277
+ jsiRuntime.global().setProperty(jsiRuntime, nameID, func);
278
+ }
279
+ }
280
+ } // namespace isa
281
+ } // namespace jsi_install
282
+
283
+ void install_coreMethods(Runtime &jsiRuntime) {
284
+ jsi_install::install_imageDataToBase64(jsiRuntime);
285
+ jsi_install::isa::install_addImageToBuffer(jsiRuntime);
286
+ jsi_install::isa::install_getImageData(jsiRuntime);
287
+ }
288
+
289
+ extern "C"
290
+ JNIEXPORT void JNICALL
291
+ Java_com_dynamsoft_reactnativelib_core_ImageSourceAdapterModuleImpl_nativeInstall(JNIEnv *env, jclass clz, jlong jsiPtr) {
292
+ auto runtime = reinterpret_cast<Runtime *>(jsiPtr);
293
+ if (runtime) {
294
+ install_coreMethods(*runtime);
295
+ }
296
+ }